That left England 215 runs adrift of the tourists first innings 309.
England, however, like South Africa, were staging something of a recovery from 54 for four — remarkably both sides lost their fourth wicket on the same score.
Ian Bell was 20 not out and Jonathan Bairstow 19 not out, with their stand now worth 40.
South Africa, 1-0 up in the three-match series, only have to avoid defeat at Lord’s to replace England as the world’s top-ranked Test side. England saw Steyn take two wickets for one run in four balls and Morkel two for three in 11.
Earlier, Vernon Philander’s maiden Test fifty helped South Africa past the benchmark total of 300 after they started on 262 for seven.