Juve moved seven points clear at the summit with a 4-1 win over rivals Torino earlier on Saturday and Lazio were unable to close the gap in their game in hand.
Lazio had not lost in 16 home games since September 2017 but were two down at half-time - Ibrahimovic scoring a penalty after setting up Hakan Calhanoglu for the opener.
Ante Rebic added a third for Europe-chasing Milan in the second half as Lazio, without leading goalscorer Ciro Immobile, fell to just a second loss in 25 league matches.
Calhanoglu continued his good form since the restart by opening the scoring after 23 minutes, the midfielder's strike deflecting off Marco Parolo to help it over Thomas Strakosha.