Having bowled South Africa out for 286 Sri Lanka struggled to 181 for 7 when bad light stopped play on day two of the first Test at St George's Park.
South Africa were only able to add 19 runs to their overnight tally of 267/6 as the Protea tail failed to wag.
Suranga Lakmal picked up his first career five for ending with figures of 5 for 63.
Quinton de Kock made 37 before he was the last man out when he was yorked by Nuwan Pradeep.
The South African pace attack made the pitch look more lethal than Sri Lanka had and after threatening early they broke through as Kyle Abbott got Dimuth Karunaratne (5) to chop on.
Kusal Perera (7) played poorly and flashed at a wide one from Vernon Philander getting an edge that De Kock grasped and Sri Lanka were 19 for 2.
Kusal Mendis made an eight ball duck and he was caught behind as he went on the drive but could only tickle it through to De Kock.
Sri Lanka showed some fight as Angelo Matthews and opener Kaushal Silva stuck around until after lunch moving the tourists to 61 before the latter was trapped leg before by Philander for a patient 16 off 59 balls.
Mathews (39) and Dinesh Chandimal came together and added 33 before the Sri Lanka skipper poked at one from Kagiso Rabada and was caught by Dean Elgar in the slips.
The Proteas squandered their reviews by the 17th over a choice they would come to regret as they might have got Chandimal sooner.
When Chandimal (28) was trapped leg before by Philander Sri Lanka were 121 for 6 and South Africa would have fancied rolling them over but resistance would come from the tail.
Dhananjaya de Silva proved to be a thorn in the Proteas' sides as he looked more comfortable than the top order batsman against both pace and spin.
Rangana Herath played a cheeky innings of 24 before Keshav Maharaj trapped him leg before, he might have reviewed but even if Sri Lanka hadn't used up their reviews replays suggested the decision would have been upheld.
Maharaj could have had two but dropped a sharp chance for a caught and bowled as Dhananjaya lashed one back at the bowler.
Dhananjaya and Dushmantha Chameera crafted a frustrating unbroken partnership of 24 before they were offered the light as the sky clouded over.
South Africa will be disappointed they didn't skewer the tail more efficiently and will be hoping the weather doesn't play too much of a role in this Test.