England, replying to the hosts' 291, reached 241 for seven at the close thanks to battling innings by Alastair Cook, Ian Bell and Matt Prior.
Cook fell just after tea for 65, paddling Morkel to midwicket, and Prior and Bell added 41 for the sixth wicket before Bell cut the nagging seam bowling of Jacques Kallis straight to backward point.
Bell made 48 in nearly three hours at the crease and Prior, who survived several anxious moments, completed his 12th Test half-century two balls before the close. He finished unbeaten on 52 with Graeme Swann on five.
South Africa, resuming on 279 for six, lost four wickets for 12 runs in a dramatic collapse in the morning. Centurion Jacques Kallis fell to the first ball he faced, the second of the morning, when he edged a superb away-swinger from Graham Onions to wicketkeeper Prior for 108.
Steyn also failed to add to his score of 26 when he edged James Anderson's first ball of the day into the slips, Jonathan Trott taking a sharp catch.
Anderson gained reward for his top-class swing bowling when he dismissed Morkel, Swann taking a superb diving catch at second slip, and Friedel de Wet for ducks to complete fine figures of five for 63.
England were quickly in trouble when captain Andrew Strauss edged a flat-footed drive at an away-swinger from Morkel to be caught behind for two. Cook and Jonathan Trott took the score confidently to 36 before Steyn struck twice in his third over.
Score Board
SOUTH AFRICA (I Innings, O/n: 279/6):
Smith c Prior b Anderson 30
Prince c Prior b Anderson 0
Amla lbw Onions1 4
Kallis c Prior b Onions 108
De Villiers c Strauss b Swann 36
Duminy c Prior b Swann 0
Boucher lbw Broad 51
Steyn c Trott b Anderson 26
Morkel c Swann b Anderson 0
Harris (not out) 10
De Wet lbw Anderson 0
Extras (B-1, LB-13, W-1, NB-1) 16
Total (all out, 86.1 overs) 291
Fall of wickets: 1-1, 2-46, 3-51, 4-127, 5-127, 6-216, 7-280, 8-280, 9-281.
Bowling: Anderson 21.1-1-63-5, Onions 20-4-69-2, Broad 19-6-54-1, Swann 22-1-74-2, Pietersen 4-0-17-0.
ENGLAND (I innings)
Strauss c Boucher b Morkel 2
Cook c Prince b Morkel 65
Trott b Steyn 20
Pietersen c & b Steyn 0
Collingwood lbw b Morkel 19
Bell c Duminy b Kallis 48
Prior (batting) 52
Broad b Steyn 25
Swann (batting) 5
Extras (LB-2, W-2, NB-1) 5
Total (for 7 wkts, 82 overs) 241
Fall of wickets: 1-2, 2-36, 3-36, 4-73, 5-133, 6-174.
Bowling: M Morkel 19-3-57-3, F de Wet 16-3-36-0, Steyn 19-5-64-3, Kallis 14-2-27-1, Harris 9-0-39-0, Duminy 5-0-16-0.
Deccan Herald is on WhatsApp Channels| Join now for Breaking News & Editor's Picks