South Africa were 215 for two in reply to England's 180 all out at the close of the second day of the fourth and final Test at the Wanderers on Friday.
Graeme Smith survived a controversial umpire decision review to score a century and lead the hosts' charge.
South Africa, 0-1 down in the series, took a 28-run lead before rain stopped play an hour before tea.
England were dismissed for 180 on the opening day.
Captain Smith dominated all the England bowlers and smashed 16 fours while notching up 105 off 187 balls.
Ryan Sidebottom ended his run when he had him caught at slip by Andrew Strauss off a delivery that seamed away from the bat, 10 minutes before the rain interruption.
The wicket was especially satisfying for Sidebottom as Smith had survived a strong appeal for caught behind off the seamer when he had made just 15.
The South African cut at a short, wide delivery from Sidebottom and all the England fielders were convinced he had edged the ball to wicketkeeper Matt Prior, calling for a review after umpire Tony Hill gave Smith not out. Television umpire Daryl Harper then upheld Hill's decision.
Smith and Hashim Amla added 165 in three hours for the second wicket, with Amla stroking a composed 71 not out at the break.
Amla's sweet timing helped him to collect eight fours in his 119-ball innings.
Jacques Kallis was on two not out when play was terminated by a severe thunderstorm.
South Africa resumed on the second morning on 29 without loss and the visitors got an early breakthrough when Ashwell Prince was caught at second slip for 19 off Stuart Broad, the bowler extracting extra bounce from the pitch to force the edge.
But Amla then cruised to a 75-ball half-century to help Smith put South Africa in firm control as they bid to level the series.
Scorecard
England (1st innings): 180
South Africa (1st innings): (overnight 29-0)
G. Smith c Strauss b Sidebottom 105
A. Prince c Swann b Broad 19
H. Amla not out 73
J Kallis not out 7
Extras (b-1, lb-4, nb-1, wd 5) 11
Total (two wickets, 63.2 overs) 215
Fall of wickets: 1-36, 2-201
Bowling (to date): Anderson 17-3-65-0, Sidebottom 17.2-4-49-1, Broad 16-3-52-1, Swann 9-0-35-0, Collingwood 4-1-9-0.