Lewis Hamilton fended off a hard charging Nico Rosberg to record his fourth consecutive victory of the season, while Daniel Ricciardo secured a maiden Formula 1 podium finish in Spain.
The Mercedes duo of Hamilton and Rosberg dominated the race from start to finish with the pair producing a nail biting duel for the victory in the final stages.
Hamilton held on to take the chequered flag ahead of Rosberg and claim the championship lead.
Australia's Ricciardo produced yet another mature drive to record the first podium of his F1 career in third and maintain the label of best of the rest.
Polesitter Hamilton made no mistakes at the start as he led the field into turn one.
Team-mate Nico Rosberg slotted into second while the Williams of Valtteri Bottas leapfrogged a slow starting Ricciardo to move into third.
It didn't take long for the Mercedes duo to edge away from the field with Hamilton opening up a comfortable gap over Rosberg. The pair were aided by Bottas who appeared to be holding up Ricciardo.
Behind, the Lotus of Romain Grosjean held fifth ahead of the Ferrari pair of Kimi Raikkonen and Fernando Alonso.
While Hamilton and Rosberg extended their advantage out to 15 seconds after just 10 laps, all eyes turned to the battle for third. After several laps behind the Finn, Ricciardo managed to grab third following a slick pit stop.
Hamilton maintained his lead ahead of Rosberg after the first round of the pit stops but the man on the move was Sebastian Vettel, who had scythed his way through the field and into the top 10 after starting from 15th position.
However, the final round of pit stops left Hamilton with just a three second lead over Rosberg. Armed with fresher rubber, the German posed a serious threat to his team-mate in front providing the crowd a fascinating battle for the victory in the closing stages.
Meanwhile, Ricciardo enjoyed a comfortable advantage in third but Vettel continued to stride towards the front after passing both Ferraris of Alonso and Raikkonen.
Not content with fifth, he reeled in Bottas and grabbed fourth place in the final laps.
At the front the battle raged for the victory with Rosberg closing the gap to Hamilton to just a second but he was unable to find a gap to pass.
In the end, Hamilton did just enough to hold off Rosberg at the chequered flag with Ricciardo coming home in third.
Vettel produced an impressive drive to finish fourth ahead of Bottas while local hero Alonso passed team-mate Raikkonen for sixth in the closing stages.
Grosjean gave Lotus their first points of the season with a strong drive to eighth.
The Force Indias of Nico Hulkenberg and Sergio Perez claimed the final points paying positions.
The championship moves to Monaco on May 24-25.
Formula 1 Spanish Grand Prix Results
Pos | Driver | Team | Time/Gap |
1 | Lewis Hamilton | Mercedes | 66 Laps |
2 | Nico Rosberg | Mercedes | +0.636s |
3 | Daniel Ricciardo | Red Bull-Renault | +49.014s |
4 | Sebastian Vettel | Red Bull-Renault | +1m16.702s |
5 | Valtteri Bottas | Williams-Mercedes | +1m19.293s |
6 | Fernando Alonso | Ferrari | +1m27.743s |
7 | Kimi Raikkonen | Ferrari | +1 lap |
8 | Romain Grosjean | Lotus-Renault | +1 lap |
9 | Sergio Perez | Force India-Mercedes | +1 lap |
10 | Nico Hulkenberg | Force India-Mercedes | +1 lap |
11 | Jenson Button | McLaren-Mercedes | +1 lap |
12 | Kevin Magnussen | McLaren-Mercedes | +1 lap |
13 | Felipe Massa | Williams-Mercedes | +1 lap |
14 | Daniil Kvyat | Toro Rosso-Renault | +1 lap |
15 | Pastor Maldonado | Lotus-Renault | +1 lap |
16 | Esteban Gutierrez | Sauber-Ferrari | +1 lap |
17 | Adrian Sutil | Sauber-Ferrari | +1 lap |
18 | Jules Bianchi | Marussia-Ferrari | +2 laps |
19 | Max Chilton | Marussia-Ferrari | +2 laps |
20 | Marcus Ericsson | Caterham-Renault | +2 laps |
RET | Kamui Kobayashi | Caterham-Renault | 34 laps |
RET | Jean-Eric Vergne | Toro Rosso-Renault | 24 Laps |
Drivers' Championship Standings
Pos | Driver | Points |
1 | Lewis Hamilton | 100 |
2 | Nico Rosberg | 97 |
3 | Fernando Alonso | 49 |
4 | Sebastian Vettel | 45 |
5 | Daniel Ricciardo | 39 |
6 | Nico Hulkenberg | 37 |
7 | Valtteri Bottas | 34 |
8 | Jenson Button | 23 |
9 | Kevin Magnussen | 20 |
10 | Sergio Perez | 20 |
11 | Kimi Raikkonen | 17 |
12 | Felipe Massa | 12 |
13 | Romain Grosjean | 4 |
14 | Jean-Eric Vergne | 4 |
15 | Daniil Kvyat | 4 |