First-half goals from Clarence Seedorf and Alexandre Pato put AC Milan in command before Juan Vargas pulled one back and Ibrahimovic, returning from a two-match ban following his red card at Bari, was dismissed.
Napoli won 2-0 at Bologna to keep up the pressure on Milan and there was more drama at Palermo, who conceded two stoppage-time goals against 10-man Cesena and drew 2-2 in coach Delio Rossi's comeback barely a month after he was sacked.
Lazio's 2-0 win over Parma moved them into the Champions League qualifying round spot and Luca Toni struck a late winner to give Juventus a 3-2 win over Genoa to keep alive their hopes of at least making the Europa League next season.
Milan have 68 points from 32 games, three more than Napoli with defending champions Inter Milan, 2-0 winners over Chievo Verona on Saturday, a further two behind in third place.
With only six matches left, Inter look increasingly unlikely to win a sixth successive title.
Napoli, missing top-scorer Edinson Cavani, made the most of some slack defending as Giuseppe Mascara and Marek Hamsik, from a penalty, scored in the first half at Bologna.
That win briefly pulled them level with Milan as they attempt to win their first title since 1990, when Diego Maradona was still at the club.
Milan quickly went about restoring their lead at the top in the evening game when they scored in the eighth minute at Fiorentina, Dutchman Seedorf volleying in from Pato's headed pass.
Brazilian Pato added the second four minutes before the break, finishing off a slick break involving Ibrahimovic and Kevin-Prince Boateng.
Ibrahimovic could have sewn it up but twice sidefooted wide from good positions after the re-start before Vargas scored with a deflected shot in the 80th minute.
The Peruvian scraped the crossbar two minutes later, then Ibrahimivic was given a straight red card for remarks made to a linesman, but Milan held on.
Lazio moved into fourth place with 57 points, overtaking Udinese who lost 2-1 at home to AS Roma on Saturday, thanks to goals in either half from Brazilian midfielder Hernanes and Sergio Floccari.
Palermo's rollercoaster season continued against Cesena as Rossi returned to the hot seat, replacing Serse Cosmi who was sacked just a month and five games into the job following last Sunday's 4-0 hammering by Catania in the Sicily derby.
Rossi was given another chance despite club president Maurizio Zamparini saying he had ruined the team following a 7-0 home defeat by Udinese which led to his sacking.
Palermo raced to a 2-0 lead in only 36 minutes thanks to goals from Jasmin Kurtic and Mauricio Pinilla.
Cesena's troubles deepened when Steve von Bergen was shown a straight red card for a foul on Pinilla in the 74th minute and Paolo Sammarco was ordered from the substitutes bench as Cesena protested.
Marco Parolo pulled one back in the second minu
Thank you for reading 5 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1