Alastair Cook scored his 54th half-century as England extended their lead over South Africa to 216 on day three of the first Test, at Lord's.
Cook (59 not out) survived two lbw reviews early in his innings - one off seamer Morne Morkel and another off spinner Keshav Maharaj - and a fumbled stumping chance by Quinton de Kock as he passed 1,000 Test runs against South Africa in his 30th innings.
The former England skipper, plus innings of 33 from Keaton Jennings and an unbeaten 22 from Gary Ballance, steered the hosts to 119-1 by stumps against a Proteas attack shorn of Vernon Philander due to a right hand injury.
Philander suffered bruising after being hit by James Anderson while scoring 52 in his side's total of 361 all out, which left the visitors trailing by 97 on first innings, and did not bowl on day three.
Quinton de Kock (51) - who dominated a 66-run stand with Philander for the eighth South African wicket - blasted a 36-ball half-ton, the second fastest in a Lord's Test after Kapil Dev's 35-ball effort for India in 1982, while Temba Bavuma (59) also passed fifty.
Moeen Ali ended with figures of 4-59 for England, though it was fellow spinner Liam Dawson who claimed the opening wicket of the morning, having nightwatchman Kagiso Rabada (27) caught behind by Jonny Bairstow to claim his first Test scalp in England.
Ali's twirl then undid Bavuma - who had brought up his seventh Test fifty from 114 balls with a square drive off Stokes - in the following over, Stokes pouching the ball at slip after it had deflected off Bairstow's thigh.
Root called for the new ball soon after but De Kock took a liking to it, and Stuart Broad, in particular, creaming six of his 10 boundaries off the Nottinghamshire pacer, including three in three balls to end the 84th over, during his 10th Test fifty.
Stokes' ended De Kock's blitz by taking an excellent low catch off Anderson at square cover, though Philander took up the mantle after lunch, biffing his way to a sixth Test half-century, from 80 balls, while braving the knock he had sustained on nought.
Philander was the last man out, clipping Ali onto his stumps after Keshav Maharaj (9) had been dismissed lbw on review by Dawson, but the seamer headed off for an X-ray as England strode out for their second innings.
Cook, having nicked off to Philander for three first time around, encountered scares on one and 12 in his second dig when South Africa reviewed not-out lbw decisions - Morkel's ball showing to have pitched outside leg and Maharaj's to have hit him outside the line of off stump.
The 32-year-old could have been stumped on 31 early in the evening session, too, but De Kock could not gather the ball cleanly when part-time spinner JP Duminy pushed the ball down the leg side.
Cook's opening partner, Jennings, was dismissed, feathering Morne Morkel lazily into De Kock's gloves with the score on 80, but Ballance stuck around to the close with his fellow left-hander, who also clipped about a foot short of Hashim Amla in the cordon.
Live coverage of the first Test between England and South Africa continues on Sky Sports 2 at 10am on Sunday and in Ultra HD on Sky Q. Watch in-play clips and follow over-by-over commentary on our live blog, available on skysports.com and Sky Sports apps.