Milan created a raft of chances but were unable to profit and they were made to pay by Fernando Llorente's goal just before half-time and Carlos Tevez's superb second-half strike.
Jose Reina's bizarre own goal cost Napoli an important win as they were held to a 1-1 draw at Livorno.
Napoli were seeking a victory that would have seen them close to within four points of Roma but Reina was at fault as he fumbled the ball into his own net from Ibrahima Mbaye's tame effort.
The goalkeeper's horror moment arrived just seven minutes after Dries Mertens had fired the visitors into a 32nd-minute lead from the penalty spot.
Lazio were 1-0 winners over Fiorentina at Stadio Artemio Franchi, Lorik Cana's early strike enough to claim all three points for the visitors, while goals from Stefano Okaka and Manolo Gabbiadini helped Sampdoria put back-to-back losses behind them as they cruised to a 2-0 victory at Torino.
Parma moved back into the top six with a 1-0 win away to bottom club Sassuolo, Marco Parolo's early goal the difference.
Cagliari picked up a crucial three points to move level with Udinese after a 3-0 win.
Victor Ibarbo gave Cagliari the lead against a wasteful Udinese, whose hopes of snatching a point were dashed by further goals from Matias Vecino and Agim Ibraimi in the final 10 minutes.
Genoa left Catania in serious relegation danger after winning 2-0 at the Stadio Luigi Ferraris.
Luca Antonelli gave the Genovese side the lead in the 14th minute, and after Giuseppe Bellusci was sent off shortly before the break, there was only going to be one winner and Stefano Sturaro's first strike in Serie A duly settled matters late on.
Atalanta got back to winning ways at home with a 2-1 success over relegation-threatened Chievo.
Substitute Luca Cigarini struck the winning goal five minutes from the end after Bostjan Cesar's 65th-minute red card had reduced Chievo to 10 men.
Cesar was given a second caution after a soft, but ill-advised, slap to the face of German Denis with his side trailing to Carlos Carmona's first-half goal.
Chievo did equalise moments later when Dario Dainelli headed in from a free-kick but the Flying Donkeys failed to hold on as Denis supplied the assist for Cigarini.
Bologna missed a penalty and had a man sent off as they were held to a goalless draw at Hellas Verona.
Rolando Bianchi squandered the game's best chance when he won the spot-kick two minutes after half-time but saw it saved by home goalkeeper Rafael.
And relegation-threatened Bologna's frustration at letting the chance of maximum points elude them spilled over late on when Jonathan Cristaldo was dismissed for an elbow on Vangelis Moras.