Inter loanee Matteo Politano scored the only goal as Milan's Serie A title hopes were dealt another huge blow with a 1-0 defeat at home to Napoli.
Antonio Conte's Inter moved nine points clear at the summit thanks to a late 2-1 win at Torino earlier on Sunday and that gap remains the same following stuttering Milan's fifth league loss of the campaign.
Both sides lacked quality in a low-key first half but it took just four minutes of the second for Napoli winger Politano to make the breakthrough at San Siro.
Milan had a late penalty appeal rejected for Tiemoue Bakayoko's challenge on Theo Hernandez, shortly before substitute Ante Rebic was sent off for dissent, as Napoli stretched their unbeaten league run away in this fixture to a sixth game.
David Ospina was quickly off his line to deny Rafael Leao with a good save inside the opening four minutes and Gianluigi Donnarumma kept out Piotr Zielinski's volley at the other end in a lively start.
Clear-cut chances were hard to come by in the first half, however, with Leao's shot from range the only other attempt of note as Milan went into half-time with their clean sheet intact for the fourth league game running.
But Napoli found a way through early in the second period through Politano's scuffed shot across Donnarumma into the bottom-left corner after being played in by Zielinski.
Fabian Ruiz tested Donnarumma with a powerful strike but Milan started to ask more questions of their opponents as the game went on.
However, Leao's weak effort was dealt with by Ospina and Rebic headed straight at the Napoli keeper as the visitors kept their opponents at arm's length.
There was some late drama as Bakayoko caught Hernandez in the box - referee Fabrizio Pasqua deciding, after re-watching the incident on the pitchside monitor, there was not enough contact - before Rebic saw red for something he said to the official after another decision went against Milan.
What does it mean? Winning San Siro return for Gattuso
Milan's recent form has been patchy and this latest defeat surely puts an end to their hopes of winning a first Scudetto since 2010-11.
Stefano Pioli's men saw more of the ball (56-per-cent possession) and had more shots on target (five to Napoli's four), but their opponents showed a little more cutting edge in the final third.
This victory for Napoli, coming on Milan great Gennaro Gattuso's first managerial return to San Siro to face his former club, moves them within two points of the top four with a game in hand on Atalanta.
Politano the difference
If losing further ground on Inter was not hard enough to take, the fact it was technically one of their bitter rivals' own players who inflicted the damage here would have made the loss all the more chastening.
Politano, who joined Napoli on a two-year loan from Inter in January 2020 with an obligation to buy, proved the difference with his eighth league goal of the campaign, which came from his only attempt of the contest.
Zielinski punishes Milan pair
Napoli's goal arrived as a result of a double error in midfield from Milan, with Samu Castillejo and then Franck Kessie failing to cut out the danger inside their own half.
That allowed Zielinski to slide in Politano for the all-important goal, making the Poland international one of only three midfielders in the division to have both scored and assisted six or more goals this term, along with Henrikh Mkhitaryan and Sergej Milinkovic-Savic.
Milan host Manchester United in the second leg of their Europa League last-16 tie on Thursday, which is poised at 1-1 at the midway point.
Napoli are away to Roma, the side directly below them in the table, on their return to Serie A action next Sunday.