Joaquin Correa scored twice as Lazio inflicted a second consecutive defeat on AC Milan, a result that sees the Rossoneri drop out of the top four.
With rivals Napoli beating Torino in the earlier kick-off, Stefano Pioli's charges needed at least a point to climb back into the Champions League spots.
However, Lazio drew first blood just 67 seconds into the contest when Correa kept his cool after being released by Ciro Immobile, rounding Gianluigi Donnarumma before slotting into an empty net.
Giroud scores as Milan go top after win over Torino
In a frenetic opening, Milan could have been ahead even earlier in the contest but Hakan Calhanoglu was denied by a strong Pepe Reina save.
Milan dominated the first half without reward and the visitors were almost punished for committing so many bodies forward as Manuel Lazzari thought he had doubled Lazio's advantage following a rapid counter-attack only for VAR to rule it out with a ridiculously close offside call.
The visitors failed to heed that warning, however, and just six minutes after the restart Correa put daylight between the teams after yet another well-worked break.
After hitting the post with a sublime lob, Immobile then put the game to bed with an emphatic finish with just minutes remaining. In contrast Milan, missing Zlatan Ibrahimovic, were toothless in attack.
The result means Milan are now fifth, level on points with third-placed Napoli and Juventus in fourth, while Lazio move to within five points of the Rossoneri but crucially have a game in hand.
TALKING POINT - Milan's wheels are coming off at just the wrong time
Back in January - midway through the season - Milan had a three-point lead at the summit. Fast forward three months and the Rossoneri have a real fight on their hand just to secure a Champions League spot.
This result - on the back of a home 2-1 loss to Sassuolo last week - sees them fall out of the top-four for the first time this season. With Juventus and Atalanta still to play, Milan also have arguably the toughest run-in amongst the sides gunning for the European spots. Their destiny is still in their hands, but it feels like the wheels are coming off Pioli's team at just the wrong time.
Buoyed by a terrific run of form, Lazio cannot be counted out for a return to Europe's elite competition. Simone Inzaghi's side have now won 10 home games on the bounce and if they win their game in hand - against relegation threatened Torino - they will be just two points shy of the top-four.
The Serie A title may be all but sealed but the race for the European spots is now really heating up.
MAN OF THE MATCH - Joaquin Correa (Lazio)
Put Milan to the sword with two clinical finishes. His movement, positional awareness and ability to run in behind caused the visitors all kind of problems.
Lazio: Reina 7, Marusic 6, Acerbi 7, Radu 6, Lazzari 7, Milinkovic-Savic 7, Leiva 7, Luis Alberto 6, Lulic 6, Correa 9, Immobile 8.. subs: Akpa Akpro N/A, Cataldi N/A, Fares 5, Pereira N/A, Muriqi N/A
Milan: Donnarumma 6, Calabria 6, Kjaer 5, Tomori 5, Theo Hernandez 4, Bennacer 5, Kessie 6, Saelemaekers 6, Calhanoglu 6, Rebic 5, Mandzukic 5.. subs: Dalot 5, Romagnoli 5, Brahim Diaz 5, Tonali 5, Leao 5.
1' - A chance after just 20 seconds! Lovely build-up play from the visitors, Calhanoglu exchanges a one-two with Mandzukic and the former is denied only by a strong one-handed save by Reina!
2' - GOAL! Lazio 1-0 Milan (Joaquin Correa): And then Lazio go on the attack and break the deadlock! Immobile carves open the visiting defence with a lovely flick, Correa is through on goal, rounds the goalkeeper and slots it into an empty net. What a start!
45' - Goaalllll.. no! It goes from bad to worse for Milan. They commit too many bodies forward, Lazio catch them cold on the counter attack and Lazzari strokes it under the arm of Donnarumma. But VAR is having a look at it... was Lazzari offside? No goal! It's chalked off by VAR and Milan have a reprieve. It looks ridiculously close on the replay and that is so cruel on Lazio.
51' - GOAL! Lazio 2-0 Milan (Joaquin Correa): Milan are caught on the counter-attack and this time they're going to pay the price! Calhanoglu goes down under the challenge of Leiva, but play continues, Lazio break with Correa beating Tomori for pace and strength before slamming it past Donnarumma!
80' - Immobile denied by the woodwork! An outrageous effort from Immobile who lobs Donnarumma only to see his shot crash off the post!
87' - GOAL! Lazio 3-0 Milan (Ciro Immobile): He grabs the goal he fully deserves! Lazzarri rolls the ball into his path and he finishes emphatically past Donnarumma with a shot that arrows into the bottom corner.
- Lazio have won 10 consecutive Serie A matches at home for the third time in their history, achieving the feat in both 1937 and 1974.
- Joaquin Correa scored fastest Lazio's goal in Serie A (after one minute and 17 seconds) since Opta started collecting this kind of data in 2004/05.
Euro round-up: Muniain claims win for Athletic against Villarreal, Leipzig trail Bayern and Dortmund
AC Milan survive fightback from nine-man Bologna to move top of Serie A