Nottingham - England captain Joe Root led from the front with an unbeaten fifty after wickets tumbled on Saturday's second morning of the second Test at Trent Bridge.
England were 85 for two at lunch in reply to South Africa's first innings 335, a deficit of 250 runs.
They had collapsed to three for two on an overcast morning ideal for swing bowling before Gary Ballance (26 not out) and Yorkshire team-mate Root counter-attacked in a stand so far worth 82 at better than a run-a-ball.
South Africa lost their last four wickets for just 26 runs after resuming on 309 for six.
James Anderson did all the damage in a burst of four wickets for four runs in 16 balls.
Trent Bridge is renowned for aiding swing bowlers such as the 34-year-old Anderson, England's all-time leading Test wicket-taker.
It was a point underlined by his overall return of five for 72 in 23.2 overs - the 22nd time Anderson had taken five or more wickets in a Test innings and his seventh such haul at the Nottingham ground.
Conditions, however, were still overcast, and in favour of the quicker bowlers, when England launched their reply.
Former skipper Alastair Cook was caught behind for three when he got an inside edge to Vernon Philander's in-swinger, although South Africa had to review Australian umpire Simon Fry's not out decision.
Next ball, Cook's fellow left-handed opener Keaton Jennings fell for a duck.
The South Africa-born batsman was undone by a brilliant Morne Morkel delivery from around the wicket that cut away off the pitch and took an edge safely held by wicket-keeper Quinton de Kock - who played in the same Johannesburg school side as Jennings.
Root, who made 190 in his first innings as England captain during a 211-run victory at Lord's last week as the hosts went 1-0 up in the four-match series, counter-attacked by hitting Philander for three fours in an over.
A cover-drive was followed by a flashy shot just wide of gully before the fifth ball yielded a stylish back-foot boundary through the covers.
Number three Ballance, under pressure for his place in his third stint of Test cricket and something of a 'captain's pick', got off the mark with a streaky boundary against Morkel. But he was more convincing when cover-driving the tall fast bowler for four.
South Africa, however, were without Kagiso Rabada after the fast bowler was suspended from this match as a result of swearing at England all-rounder Ben Stokes at Lord's.
And his absence was felt as the recalled Chris Morris and Duanne Olivier struggled to back up the efforts of Morkel and Philander.
Root went to his fifty with a ninth four in 40 balls faced when he turned left-arm spinner Keshav Maharaj in front of square leg in the last over before lunch.
Before play started on Saturday, England persuaded the umpires to change what they believed to be an out of shape ball, with the floodlights already switched on.
It was a move that paid dividends just five balls into the day's play when, without another run added, Philander fell for his overnight 54, caught in the covers from a leading edge off Anderson.
It was the end of a valuable stand of 74 with Morris.
Maharaj fell for a duck, well caught by Root as he moved smartly to his left at second slip.
Anderson then needed no assistance when he caught and bowled Morris (36).