Alviro Petersen scored 182, his highest in a test match, as he steered South African to a commanding 419 all out on day two of the second test at Headingley.
Petersen's career highlight was tempered by a hamstring injury late in his innings that prevented him from fielding and led to him having scans in hospital.
The early signs are that he will be out for ten days with a minor hamstring tear, his team said.
England safely reached 48 without loss when bad light and rain ended play with 22 overs still to be bowled.
Alastair Cook was on 20 and Andrew Strauss 19 after surviving some erratic bowling which mixed accurate and moving deliveries that narrowly missed the outside edge with more wayward balls that were suitably dispatched for boundaries.
South Africa are the team in control and England will need to bat until Monday (NZ time) if they are to at least pull level with the tourists' total.
England, 1-0 down in the three-match series, must avoid defeat in the series if they are to prevent South Africa from leapfrogging them to the top of the world test rankings.
""The game's pretty even I think," England's Stuart Broad told reporters. ""It was important that we finished the day no wickets down. We need to be patient with the bat and go big like we did at Edgbaston (in 2011 against India), when we scored over 600."
South Africa's assistant coach Russel Domingo was content with his team's position in the match.
""The stats show that this is a 350-330 wicket, so if we can get a 100 lead we should be in a good position," Domingo said. ""At the start of play yesterday, if someone had offered us 400 we would have taken it."
Petersen's innings, which lasted 530 minutes, surpassed his previous best of 156 against New Zealand as he punished England for dropping him on 29 on the first morning when Cook spilled a straightforward chance at second slip.
Petersen was finally caught behind off Stuart Broad, but only departed after an England review when umpire Rod Tucker initially gave him not out.
It was the third time an original decision was overturned on review, the previous two involving 'out' lbw decisions against Petersen when on 119 and 124.
""I have known Alviro for a long time," Domingo said. "He has had tough times in his career when he was less patient than he is now. He has really tightened up his game. That was his fourth hundred in seven tests."
South Africa had to survive a testing morning, as England began the day with six maidens and they took 25 minutes to score their first run against very accurate and threatening bowling from Broad and James Anderson. But the Proteas came through to maintain their advantage.
JP Duminy scored 48 not out at number eight, shepherding the tail to see the Proteas past the morale-boosting mark of 400.
The first wicket of the day was left-hander Jacques Rudolph, who was stumped from a ripping turner by part-time spinner Kevin Pietersen after the decision was sent to third umpire Asad Rauf.
Petersen was hardly troubled though in his 365-ball innings and he was especially profitable through the square leg and midwicket regions any time England's bowlers' strayed with their line.
Steven Finn had Vernon Philander (13) caught on the square leg boundary, Morne Morkel (19) added 39 precious runs with Duminy for the ninth wicket before he was caught at mid-on off Broad, and Anderson had last man Imran Tahir caught at slip for a duck.
Strauss was almost caught at first slip by Graeme Smith off Philander on six but the ball bounced inches short of the fielder. He responded by playing two elegant straight driven fours to Philander and then Dale Steyn in the next over.
Is cricket still NZ's top summer sport?Related story: Rain can't save Black Caps from big defeat