England recorded their second-highest one-day international tally to take a 1-0 lead in their series against South Africa.
Jos Buttler (105) hit a century off just 73 balls while Ben Stokes, Alex Hales, Joe Root all recorded half centuries as England fell just short of their record one-day score with a huge 399-9, just nine runs shy of their haul against New Zealand in June 2015.
Quinton de Kock led the South Africa fightback however and ended the afternoon with an unbeaten 138 before rain brought the game to an early lead with the hosts 250-5, with England clinching the win on the Duckworth/Lewis method.
Jason Roy (48 off 30) and Alex Hales (57 off 47) set the tone for the tourists as they continued their remarkable improvement in limited overs cricket. Buttler stood for 17 overs and struck 11 fours and five sixes during his entertaining innings before he was eventually caught at cover by AB De Villiers off Imran Tahir.
Stokes (57) however maintained the momentum while Chris Jordan (14) and Moeen Ali (19) added before England fell short of their record haul.
South Africa got off to a rotten start with the bat when David Willey bowled Hashim Amla for just six but de Kock and Faf du Plessis (55) led the comeback before the latter was dismissed by Moeen.
But with dark clouds looming overhead, the loss of wickets at key times ensured the hosts were always facing the prospect of defeat.
Since their embarrassing World Cup elimination at the first round stage last summer, England's progress in limited overs has been marked by victories over New Zealand and Pakistan. The second ODI in the five-match series is in Port Elizabeth on Saturday 6 February.