After electing to bat, Sri Lanka were bowled out for 225, three balls short of their 50 overs, for another below-par score in a series where they have found no answer to South Africa's rampant pace and spin attack.
The home side then reached 135 for two after 28 overs and were well on course for victory when one of the five floodlight pylons at the ground failed to fire in the growing gloom.
Despite the other four providing illumination, the umpires deemed the conditions unsafe for the players and, after a two-hour delay, called off the contest.
Kusal Mendis (56) top-scored in the Sri Lanka innings before he was run out, a wasteful end to an impressive half-century.
Priyamal Perera (33), Isuru Udana (32) and Angelo Perera (31) all got starts but could not go on as Sri Lanka lost wickets at regular intervals, with seamer Kagiso Rabada (3-50) the pick of the home bowlers.
Opener Quinton de Kock's run of five straight half-centuries came to an end when he was dismissed for six in South Africa's reply, but Aiden Markram gave his World Cup chances a boost with an unbeaten 67 from 75 balls before the players left the field.
The teams will now contest a three-match T20 international series that starts in Cape Town on Tuesday.
Football Extras: Beckham backs Solskjaer extension at United
'Like we never left': Smith, Warner join Australian cricket team
FA Cup: Man City fight back but Man United crash out
PHOTOS: Dhoni joins CSK's preparations for IPL-12