Federico Chiesa put Juventus ahead from a brilliant pass from Dybala in the 18th minute of the game.
Federico Chiesa scored the second goal at the 62nd minute while Weston McKennie made it three at the 76th minute.
The win has pushed Juventus up to 4th place in the log.
Andrea Pirlo’s men played a fantastic attacking football to become the first team to beat table-leader, Milan, in the league in 28 consecutive matches without their top scorer, Alvaro Morata.
Milan responded at the 41st minute from a brilliant finish from Davide Calabria to level the goals at 1-1 at half time.
The attacking pressure from Milan made Juventus goalkeeper, Wojciech Szczesny, to be in fine form and proving his worth.
With the win, Juventus have now won three of their last four Serie A matches this season.
Chiesa was substituted due to an injury and was replaced with McKennie, who scored Juventus’ third in the 76th minute after a jinking run through Milan’s defence by fellow substitute Dejan Kulusevski.
The Bianconeri will hope this was a turning point in a challenging season while Milan will reflect on a missed opportunity to extend their lead at the top to four points after Inter lost to Sampdoria.