is now second in the title race,
24 points behind Alonso. Red Bull team-mate Mark Webber is third, 12 points behind Vettel. Raikkonen is one point behind the Australian, 14 points ahead of Hamilton.
Button's victory leaves him sixth, but his title hopes are still a long shot, given he stands 63 points behind Alonso with 200 still available.
Button, world champion in 2009, led at the first corner and was never troubled as he won at Spa for the first time.
"This circuit is so special to most drivers," he said. "The way it flows, the history here. To get a victory here, lights to flag, is very special for me."
There was drama behind him at the start.
The right rear wheel of Grosjean's Lotus hit Hamilton's left front, knocking the McLaren into a spin and triggering chaos.
As the other drivers braked, Hamilton and Grosjean, out of control, took out Alonso and Sauber's Sergio Perez.
Button seeks title after win
Alonso was especially lucky to avoid injury, with Grosjean's car flying over the front of his Ferrari and missing his head by about a metre.
The safety car was sent out onto the circuit to allow debris to be cleared.
Once the race had restarted on lap five, Vettel, on a one-stop strategy like Button, impressed as he made up ground.
The world champion made a series of impressive overtaking manoeuvres around the outside of the Bus Stop chicane at the end of the lap, including one that took him past Webber.
Vettel's pace ensured he took second as Raikkonen and the other drivers on two-stop strategies made their final stops.
Belgian GP facts
Ave wind speed:
2.3 metres per second
B Senna (lap 43): 1 min 52.822 secs
K Kobayashi 327kph (203.19mph)
: N Hulkenberg 194kph (120.55mph)
: N Hulkenberg 219kph (136.08mph)
F Massa 310kph (192.63mph)
"It was a crazy race from where I started," Vettel said. "The start was not so good and after the first corner when a lot of cars went off it was pretty crazy. Fortunately, we came back with a fantastic strategy.
"It was the right call. The car was quite good in the race and we were able to pick up some places.
"I had a lot of fun racing a lot of people. I'm looking forward already to coming back here next year. This circuit is unbelievable."
Raikkonen was caught up behind the Mercedes of Michael Schumacher, who was slow around the lap but very fast in a straight line.
Once Raikkonen had passed the seven-time champion - in a brave move into the 180mph swerves of Eau Rouge - he briefly closed on Vettel but, realising he did not have enough laps to make up a 13-second deficit, was forced to settle for third. He was also hampered by not being able to use all his Kers power-boost system.
"It's nice to be back here," Raikkonen said. "There are always a lot of fans and good racing. It's not the easiest day for me and the team. The car was not exactly as we liked. But we had a lot of fighting and we managed to get a lot of points for me and the team."
Button's Belgian pole lap
Schumacher's hopes of a strong finish to a poor weekend for Mercedes were dashed when high tyre wear forced him to abandon his attempt to do only one stop.
That dropped him to seventh at the finish, behind the impressive Force India of Nico Hulkenberg and Australian Webber.
Toro Rosso's Jean-Eric Vergne, who had a strong weekend after struggling in the first half of his debut season, was eighth, ahead of team-mate Daniel Ricciardo and the second Force India of Paul Di Resta.
Williams driver Bruno Senna was eighth heading into the last six laps but had to make a late stop because his tyres were worn out. He dropped to 12th behind the second Mercedes of Nico Rosberg.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.