Stefano Pioli's Milan are just one point behind champions and league leaders Inter after two early goals from Olivier Giroud and Junior Messias and a late strike from Rafael Leao won an entertaining contest at the San Siro.
However, Inter were the first team on Thursday to have their match abandoned at halftime after Bologna were banned from playing to keep a COVID-19 cluster at the club under control.
Regardless it was a big win for Milan, who were missing their two starting centre-backs Simon Kjaer and Fikayo Tomori and a host of other players to Covid infections or the Africa Cup of Nations, but could have scored more after also striking the woodwork twice.
They are six points ahead of third-placed Napoli, who take on Juventus in the day's late match, after holding off significant Roma pressure after Tammy Abraham pulled a goal back for the away side shortly before the break.
Leao struck the crucial third eight minutes from the end after Roma, already down to 10 following the 75th-minute sending off of Rick Karsdorp, had gone close through Abraham and Henrikh Mkhitaryan.
Roma finished the match down with nine men when Gianluca Mancini picked up a second yellow card and gave away a stoppage-time penalty for a foul on Leao, but Zlatan Ibrahimovic's spot-kick was well-saved by Rui Patricio.
Jose Mourinho's team are six points from the Champions League places alongside Lazio, who could only draw 3-3 with Empoli.
Sergej Milinkovic-Savic nodded home his second of the game in the 93rd minute of a thrilling match at the Stadio Olimpico to snatch a draw for the hosts which leaves them in eighth.
"We want to finish in the top four. It's going to be hard as we are some way away but there are still lots of matches to play," the 26-year-old said.
Maurizio Sarri's side are four points and one place ahead of promoted Empoli, who thought they were set to come away with another big away win after victories at Juventus and Napoli this season before Milinkovic-Savic struck.