The Diavolo were ahead early on through Alessio Romagnoli’s header before Franck Kessie’s penalty doubled the advantage before half time, as Milan were too sharp for their struggling opponents.
Kessie had the chance to double his tally from the spot before half-time but saw his poor effort well saved, though it did not prove costly as Milan remained in control to go five points clear at the top of the table.
Fiorentina started brightly and were a threat on the counter, whilst enjoying a series of corners. Yet it was the Rossoneri that broke the deadlock from a corner of their own. Kessie rose highest to flick the delivery on, and the unmarked Romagnoli stooped at the back post to nod in.
The Viola almost hit back immediately through Dusan Vlahovic as he latched onto Franck Ribery’s through ball and drilled against the post.
However, Milan doubled their advantage from the penalty spot after Alexis Saelemaekers was clipped by German Pezzella in the box after racing clear. Kessie stepped up and coolly slotted beyond Bartlomiej Dragowski as the hosts began to dominate.
The dangerous Hakan Calhanoglu almost put the match beyond doubt on the half hour mark after spinning and firing a sumptuous half-volley just inches wide of the top corner, and Milan were becoming increasingly comfortable after a nervy start.
Fiorentina were in disarray at the back and Martin Caceres clumsily dragged Theo Hernandez down late in the first half in the box. However, Dragowski read Kessie’s strike at the second time of asking and pulled off a smart stop to push the Ivorian’s penalty away.
Milan began the second half on the front foot and rattled the post early on through Calhanoglu’s low drive from range, before Dragowski reacted well to keep out Sandro Tonali’s follow up.
At the other end Ribery raced clear into the box and lofted the ball over the head of the onrushing Gianluigu Donnarumma, but the goalkeeper got a strong hand to palm the ball off course and wide of an empty net.
The Viola were pushing for a way back in and ex-Milan striker Patrick Cutrone met an in-swinging Pol Lirola cross at the back post, but was unable to guide his header on target.
Meanshwhile, Pezzella’s bullet header from a corner forced a good low save from Donnarumma late on, but Fiorentina were unable to force a way through.
Victory for Milan extends their unbeaten run in Serie A to 22 matches, whilst Fiorentina languish in 16th ahead of the later kick-offs in Serie A.