England survived some late pressure to reach 111-3, 40 behind, on a day when 13 wickets fell.
South Africa, who chose two spinners, bet on advancing through a foggy morning but were ushered out instead.
James Anderson, the team’s skipper, claimed two wickets in two deliveries, while Stuart Broad and James Anderson each grabbed three wickets. Ben Stokes also contributed with a few wickets.
Despite being in good light, England’s batting collapse that cost them the first Test at Lord’s left them at 43-3 and in danger of repeating it.
However, Jonny Bairstow and under-pressure opener Zak Crawley contributed an uninterrupted 68. Crawley is 17 not out after taking 77 balls, while Bairstow is still going strong at 38.
With a win, South Africa will have a commanding advantage in the three-match Test series, which ends at The Oval in September.