The former Liverpool striker fired the hosts into the lead before Ricardo Pereira doubled the lead.
Marquinhos pulled one back but Thiago Motta was dismissed for clashing with Paul Baysse before Anastasios Donis made it 3-1.
Angel Di Maria was shown a straight red for a challenge on Arnaud Souquet.
Victory for Nice sees them move three points behind second-placed PSG, who had won their previous eight league games to keep their title chances alive.
But Leonardo Jardim's Monaco, who have a game in hand over PSG, require seven points from their last four games to be crowned champions of France for the first time since 2000.
Florian Thauvin scored a hat-trick as Marseille won 5-1 away at Caen to keep alive their hopes of playing in next season's Europa League.
The French forward, who is on loan from Newcastle United, scored in the second, 63rd and 89th minutes against the relegation-threatened hosts.
The 24-year-old has scored 15 goals in 35 Ligue 1 games since moving to France last August.
Marseille are sixth in Ligue 1, one point behind fifth-placed Bordeaux with three games remaining.
A fifth-placed finish will secure a place in the Europa League third qualifying round.
Match ends, Nice 3, Paris Saint Germain 1.
Second Half ends, Nice 3, Paris Saint Germain 1.
Ángel Di María (Paris Saint Germain) is shown the red card.
Foul by Ángel Di María (Paris Saint Germain).
Arnaud Souquet (Nice) wins a free kick in the defensive half.
Goal!  Nice 3, Paris Saint Germain 1. Anastasios Donis (Nice) header from very close range to the bottom left corner.
Thiago Motta (Paris Saint Germain) is shown the red card for violent conduct.
Foul by Thiago Motta (Paris Saint Germain).
Paul Baysse (Nice) wins a free kick in the defensive half.
Marco Verratti (Paris Saint Germain) wins a free kick in the attacking half.
Foul by Mickael Le Bihan (Nice).
Thiago Silva (Paris Saint Germain) wins a free kick in the defensive half.
Foul by Ricardo Pereira (Nice).
Foul by Thomas Meunier (Paris Saint Germain).
Mickael Le Bihan (Nice) wins a free kick in the defensive half.
Attempt missed. Lucas Moura (Paris Saint Germain) right footed shot from the right side of the box misses to the left. Assisted by Ángel Di María with a cross.
Substitution, Nice. Mounir Obbadi replaces Vincent Koziello.
Attempt missed. Thomas Meunier (Paris Saint Germain) right footed shot from outside the box is high and wide to the right.
Foul by Thomas Meunier (Paris Saint Germain).
Jean Michael Seri (Nice) wins a free kick in the defensive half.
Offside, Paris Saint Germain. Thomas Meunier tries a through ball, but Marquinhos is caught offside.
Corner,  Paris Saint Germain. Conceded by Arnaud Souquet.
Blaise Matuidi (Paris Saint Germain) wins a free kick in the defensive half.
Foul by Ricardo Pereira (Nice).
Substitution, Paris Saint Germain. Lucas Moura replaces Julian Draxler.
Substitution, Nice. Mickael Le Bihan replaces Mario Balotelli.
Foul by Edinson Cavani (Paris Saint Germain).
Paul Baysse (Nice) wins a free kick in the defensive half.
Attempt missed. Ángel Di María (Paris Saint Germain) left footed shot from outside the box is close, but misses to the right following a corner.
Attempt blocked. Thiago Motta (Paris Saint Germain) left footed shot from the centre of the box is blocked.
Attempt saved. Thiago Silva (Paris Saint Germain) header from the centre of the box is saved in the centre of the goal. Assisted by Julian Draxler with a cross.
Substitution, Nice. Anastasios Donis replaces Valentin Eysseric because of an injury.
Corner,  Paris Saint Germain. Conceded by Dalbert.
Attempt missed. Edinson Cavani (Paris Saint Germain) header from the centre of the box is high and wide to the left. Assisted by Ángel Di María with a cross.
Attempt saved. Thomas Meunier (Paris Saint Germain) left footed shot from outside the box is saved in the centre of the goal.
Corner,  Paris Saint Germain. Conceded by Arnaud Souquet.
Marquinhos (Paris Saint Germain) wins a free kick in the defensive half.
Foul by Mario Balotelli (Nice).
Foul by Blaise Matuidi (Paris Saint Germain).
Arnaud Souquet (Nice) wins a free kick in the defensive half.
Mario Balotelli scored as Nice beat nine-man Paris St-Germain to leave Monaco firmly in the driving seat for their first Ligue 1 title for 17 years.