Off the line, Leclerc got a poor launch and was jumped by Vettel heading into turn 1. Valtteri Bottas also got ahead of his team-mate at the start and then brilliantly overtook Leclerc for P2 around the outside in T4.
There was contact in the midfield at turn 2 as Stroll hit Grosjean. Both cars were forced to pit with damage and dropped to the rear of the field.
After an error from Bottas at the start of lap 2, Leclerc and Hamilton both gained a place as the Finn dropped to P4.
In the battle for 5th, there was contact between Verstappen and Sainz heading into T4. The Spaniard picked up damage and rejoined in P20.
Leclerc quickly caught his team-mate and passed him with DRS for the lead into the first corner on lap 6. He then eased away from the German.
As usual, the midfield battle was intense. After Sainz’s issue, Magnussen took the P6 spot. However, he got swallowed up by Ricciardo, Raikkonen, Hulkenberg and Perez. The Renault drivers both showed great pace in the early stages.
A bit further down, Daniil Kvyat had a number of problems. He received a 5-second penalty for speeding in the pits – and then he got hit by Giovinazzi at T11. It sent the Russian into a spin.
Mercedes triggered the undercut on Vettel as Hamilton boxed for the softs at the end of lap 13. The Brit easily jumped his German rival who came in a lap later. Leclerc maintained P1 after pitting on the same lap as Hamilton.
It turned around again, however. Vettel – on mediums – breezed back into P2 with DRS on lap 22.
Unlike the rest of the field, Ricciardo went long in the opening stint to do a one-stop race. He came in just before the halfway stage and dropped to P13 after running P6.
Hamilton came on in lap 34 and almost undercut Vettel again. Yet, the real drama between the pair came a few laps later.
Following a series of close fights before it, Hamilton swept around the outside at T4 on the 38th lap. Vettel spun on the exit of the corner – without contact. Hamilton took P2 as Vettel was forced to pit after his front wing broke off after his tyres were destroyed following the spin. He rejoined in P9.
Cruelly for race leader Leclerc, he lost power and Hamilton eased through on lap 48 to take the lead of the Grand Prix.
Hamilton went on to take a comfortable win. Bottas took P2 from the Monaco driver a few laps later. A late race safety car meant Leclerc kept P3. Verstappen and a charging Vettel recovered to complete the top 5.
There would be more drama in the closing stages as the two Renaults stopped at turn 1 with the same problem, both cars suddenly shut down. It caused a safety car, which stayed out until the end.
Norris led the midfield runners, just in front of Kimi Raikkonen following a titanic tussle. Gasly, Albon and Perez completed the points scorers after an eventful race.