Once Kyle Abbott dismissed Sri Lanka captain Angelo Mathews for 59 in the third over of the day in Port Elizabeth, the tone was set.
Abbott (2-38), Kagiso Rabada (3-77) and Keshav Maharaj (3-86) all played their part as they went 1-0 up in the series.
Stephen Cook's second-innings 117 had set the home side up for the win.
South Africa are on track for a third-straight series win after losing their number one ranking at the start of the year.
The second game in the three-match series starts in Cape Town on 2 January.
South Africa beat Sri Lanka by 206 runs thanks to a five-wicket haul in the first 14 overs on the final day of the first Test.