Centurion - Joe Denly hit a half-century for England before three wickets in 17 balls swung the balance towards South Africa on the second day of the first Test at SuperSport Park on Friday.
England were 157/6 six at tea in reply to South Africa's 284 all out.
Denly survived a shaky start during which he was dropped on nought and took 28 balls to score his first run.
But he survived a South African fast bowling storm and gradually asserted himself to make 50 off 111 balls with nine fours.
Denly shared a fourth wicket stand of 72 with Ben Stokes (35) which got England exactly halfway to the South African total before Denly was caught behind off an inside edge to give all-rounder Dwaine Pretorius his first Test wicket.
Fast bowler Anrich Nortje bowled Jonny Bairstow for one in the next over and then claimed the key wicket of Stokes when he switched to bowling around the wicket and induced a loose drive from the left-hander which presented wicketkeeper Quinton de Kock with his fifth catch of the innings.Triple strike hurts England
From 142 for three, England had been reduced to 150 for six.
Stokes had looked in good form in making his runs off 46 balls with four fours as well as two sixes off successive deliveries from left-arm spinner Keshav Maharaj.
Vernon Philander had outstanding figures of two for five in ten overs, which included seven maidens. He took the first wicket when Rory Burns fell for nine and followed up by dismissing England captain Joe Root for 29 soon after lunch.