South Africa crushed Sri Lanka by an innings within three days after the tourists' top order collapsed against the Proteas' pace attack at Centurion.
The hosts began the day on 389-9 but Mark Boucher (65) stretched their lead to 231 before he was last out as South Africa were bowled out for 411. But only Thilan Samaraweera (32) held up the procession of wickets as Sri Lanka were bowled out for 150.
Pace bowler Vernon Philander (5-49) finished with match figures of 10-102. Philander, 26, only made his Test debut last month against Australia but now has 24 wickets from his first three Tests.
Four of his five second-innings wickets were caught by wicketkeeper Boucher, who held six catches in the innings as South Africa's seamers kept finding the outside edge, while another two were taken in the slips.
Sri Lanka's top three all failed to make double figures and the only batsman in the innings not to be caught, Mahela Jayawardene, was brilliantly run out by Jacques Kallis for 15 when he pushed Kallis for a quick single and the all-rounder pounced to throw down the stumps at the bowler's end.
As well as leaving former skipper Jayawardene inches short of the run he needed to reach 10,000 Test runs, his dismissal left the tourists reeling at 37-4 and only some shepherding of the tail-enders by Samaraweera and keeper Kaushal Silva (17 from 71 balls) delayed the inevitable.
Thisara Perera, Rangana Herath and Chanaka Welegedara all hit sixes to entertain the crowd, but Philander ensured the Proteas took a 1-0 lead in the three-Test series with two days to spare.
The second Test begins in Durban on 26 December. Sri Lanka have not won a Test since legendary spinner Muttiah Muralitharan retired from the five-day game in July 2010.