Asked to bat, South Africa rode on de Villiers' unbeaten knock and Hashim Amla's 37-ball 56 to post a commanding 196 for five, before Wayne Parnell (3/31) and Imran Tahir (2/27) restricted England to 193 for seven in a last-over finish at the Zahur Ahmed Chowdhury Stadium.
South Africa's was this edition's highest total. This was their third win in four attempts while England suffered their second defeat in three outings to be eliminated.
Chasing a daunting total, England started as well as they could could, racing away to 46 within no time before Michael Lumb (18) was taken care of by Parnell, playing in his first match of the tournament, in the fifth over.
Last match's centurion hero, Alex Hales looked in the mood as he hit his way to a 22-ball 38 before Parnell struck again. Aiding the left-arm pacer on both occasions was David Miller, who pulled off two fine catches. The first one was a low catch diving to his left at extra cover while the second was also a solid effort as Miller came running in from deep cover.
Moeen Ali, who had earlier dropped de Villiers in the last over of South Africa innings, capped off a rather disappointing outing when Parnell trapped in front of the wicket for 10, giving the bowler his third wicket.
Jos, after his easy stumping miss against Hashim Amla earlier in the day, tried to make up for that lapse by keeping England in the hunt with a few effective blows.
But after he raced to 34 off 24 balls with the help of two fours and a six, leg-spinner Imran Tahir dealt the opposition a big blow by removing Buttler, whose reverse sweep failed to clear backward point. This was Tahir's second wicket, after sending back Eoin Morgan for 14.
After Buttler got out, England needed 66 runs off 32 balls, and it became increasingly difficult as the innings progressed.
Ravi Bopara made 31 runs off 18 balls, but the asking rate proved a bit too much for him in the end. He hit three quick boundaries before launching into Beuran Hendricks for a six over the long-off fence. Needing 22 off the final over, Dale Steyn came back to dismiss Bopara with the second ball and end England's hopes.