Dean Elgar scored 118 not out to help South Africa finish on 214 all out at lunch on day two at Kingsmead.
Collectively, the Proteas will be disappointed. Only one batsman scored more than 49 runs in the first innings. Only one specialist batsman showed the necessary grit and determination to occupy the crease for an extended period.
South Africa passed the 200-mark for only the third time in 11 innings. Worryingly, they have not managed to post 250 during that period. Their most recent failure at Kingsmead will allow England to start their second innings with an 89-run lead.
Elgar, however, can hold his head high. The opener scored what was his fourth Test century off 211 balls. He finished the innings as only the sixth South African opener to carry his bat, and the first to achieve the feat since 1997. Elgar has given the Proteas some hope of saving this match.
England, of course, have the ascendancy. Stuart Broad struck with second ball of the day when Temba Bavuma played a sharp delivery back on to his stumps. JP Duminy and Kyle Abbott were undone by the off-spin of Moeen Ali. The Proteas lost three wickets in the first 40 minutes of play.
Elgar and Dale Steyn then staged an important fightback. The pair put on 54 runs for the eighth wicket. Elgar was the chief contributor, but Steyn also got stuck into the England bowlers.
The visitors remained patient. Steyn perished when he tried to hit Ali over the top. And when England took the new ball, it took 10 deliveries for them to claim the remaining two wickets.
England are now well placed to pile on the runs and take the game away from South Africa. The team that bats last on the surface at Kingsmead will struggle.
England 303 (1st Innings) – Nick Compton 85, James Taylor 70, Dale Steyn 4-70, Morné Morkel 4-76
SA 214 (1st innings) – Dean Elgar 118 not out, AB de Villiers 49, Stuart Broad 4-25, Moeen Ali 4-69
South Africa trail by 89 runs