Steyn dismissed overnight batsmen Asad Shafiq and Misbah-ul-Haq inside his first three overs with the new ball to sweep away the last serious resistance by the tourists.
He also took the last two wickets to finish with five for 52 and match figures of 11 for 60.
Wicketkeeper AB de Villiers held five catches to add to the six he took in the first innings.
He equalled the world record set by Jack Russell for England against South Africa on the same ground in 1995/96.
He also became the first player in Test history to make a century and claim ten or more dismissals in a match after hitting an unbeaten 103 in the second innings.
Shafiq's dismissal ended a stubborn fifth wicket stand of 127 with Misbah. The pair added 20 runs to the overnight total of 183 for four in the five overs that had to be bowled before the new ball could be taken.
Only another four runs were added before Steyn had Shafiq caught at second slip by Jacques Kallis for 56 in the third over with the new ball. Shafiq had faced 168 balls and hit nine fours
In his next over Steyn had Pakistan captain Misbah caught behind for 64, made off 167 balls with 11 boundaries.
Sarfraz Ahmed chopped a ball from Vernon Philander on to his stumps and Saeed Ajmal provided De Villiers with his tenth catch of the match when he gloved a lifting ball from Morne Morkel to the wicketkeeper.
There was some frustration for the bowlers as Umar Gul slogged his way to 23 and Morkel was denied a wicket after bowling Junaid Khan when a replay showed he had sent down a no-ball.
But Steyn had Gul caught behind and then trapped Junaid leg before wicket with the fourth ball of the last over before lunch.
The teams meet in the second game of a three-match series in Cape Town from February 14 to 18.