LIVE: Sri Lanka v SA - Day 1
Steyn, the star of South Africa's big win in the first Test at Galle, sent back opener Upul Tharanga and big-hitter Kumar Sangakkara in his sharp opening spell on a docile track at the SSC ground.
Part-time spinner Jean-Paul Duminy accounted for the third wicket to fall in the morning session, dismissing the other opener Kaushal Silva for a well-made 44.
At lunch, Sri Lanka were 115-3, with Mahela Jayawardene batting on 53 and skipper Angelo Mathews yet to open his account.
Tharanga started off confidently, driving Steyn to the cover boundary in the first over of the day and smashing Vernon Philander straight down the ground for another four.
But Tharanga's flourish was short-lived as he gloved to wicket-keeper Quinton de Kock off the fifth ball of Steyn's third over.
Steyn (2-20) struck again off the very next ball to dismiss Sangakkara, much to the disappointment of home fans.
The prolific left-hander tried to pull a short delivery, but succeeded only in top-edging it tamely to square leg where Imran Tahir took an easy catch.
Sri Lanka would have been in deeper trouble but Alviro Petersen dropped Silva on 10, failing to judge which way the ball was going while fielding in the slips, with Philander being the unlucky bowler.
Jayawardene, playing at his home ground, looked in fine nick, once hitting Steyn for two fours in an over before racing to his 49th Test half-century.
The stylish right-hander, who is due to retire next month, has scored 10 hundreds at this ground - the most by any batsman at a single venue.
Silva too punished the loose deliveries, hitting seven boundaries in his 73-ball knock, including two on the trot off full-tosses from leg-spinner Tahir.
Earlier, Sri Lanka handed Test cap to wicketkeeper-batsman Niroshan Dickwella in one of the three changes to the side that lost at Galle. Unorthodox spinner Ajantha Mendis came in place of injured seamer Shaminda Eranga and Kithuruwan Vithanage replaced Lahiru Thirimanne.
South Africa, eyeing their first Test series win on the island in 21 years, remained unchanged.
Sri Lanka: Angelo Mathews (captain), Upul Tharanga, Kaushal Silva, Kumar Sangakkara, Mahela Jayawardene, Kithuruwan Vithanage, Rangana Herath, Dilruwan Perera, Ajantha Mendis, Suranga Lakmal, Niroshan Dickwella.
South Africa: Hashim Amla (captain), Alviro Petersen, Dean Elgar, Faf du Plessis, Quinton de Kock, AB de Villiers, JP Duminy, Vernon Philander, Morne Morkel, Dale Steyn, Imran Tahir.
Umpires: Richard Kettleborough (ENG) and Nigel Llong (ENG)
TV umpire: Billy Bowden (NZL)
Match referee: Jeff Crowe (NZL)