Steyn, the world's top-ranked bowler, claimed five for 17 off 13 overs as New Zealand were shot out for 121 half-an-hour before lunch, still trailing South Africa by 404 runs on the first innings.
Brendon McCullum and Martin Guptill (both one not out) then negotiated four overs to see their team to lunch.
BJ Watling provided the one shining light for the tourists in their first innings as his battling 63 off 87 balls with 13 fours added some gloss to the innings.
New Zealand began the day on a parlous 47 for six and the pair of Watling and Doug Bracewell (7) added 14 runs to the overnight total before the right-handed Bracewell prodded at a Steyn delivery to send an outside edge through to keeper De Villiers.
Steyn struck again one run later when he trapped the left-handed Neil Wagner (0) leg-before with an in-swinging delivery.
In his next over, the 29-year-old Steyn bowled Jeetan Patel (0) after the batsman backed away from a good-length delivery.
Steyn enjoyed a wonderful morning, taking his 19th five-wicket haul in tests as he sent down a spell that produced figures of 5-3-3-3.
Watling and Trent Boult (17 not out) provided some late resistance with a last-wicket stand that produced 59 runs - a New Zealand record 10th-wicket partnership against South Africa, beating the 57 scored by Simon Doull and Richard de Groen in Johannesburg during the 1994/95 season.
The aggressive Watling was the last man out, caught at first slip off the bowling of paceman Morne Morkel.
South Africa hold a 1-0 series lead.