Charlie Lindgren made 45 saves for the Canadiens (26-34-12), who are 1-5-2 in their past eight games.
"I felt good tonight. Obviously, they were throwing a lot of pucks to the net," Lindgren said. "Especially in the second period, they came really hard and generated a lot of scoring chances. They had a really good effort tonight and unfortunately we came out on the wrong side."
Nylander ended his 13-game goal drought when he scored on the power play at 16:01 of the first period to give the Maple Leafs a 1-0 lead.
Kapanen made it 2-0 at 3:00 of the second period when he took a pass from Travis Dermott and beat Lindgren on a breakaway.
Kapanen thought he scored again at 15:06, but the Canadiens won a challenge for goaltender inference.
But the Maple Leafs made it 3-0 at 19:31 when Kadri deflected a pass from Mitchell Marner in the slot on a power play.
"The first wasn't terrible, but the second (period) we were on our heels, they controlled the play," Canadiens forward Brendan Gallagher said. "The penalty kill gives up two goals and we just didn't do enough to play in the other end. It's a little bit disappointing. As of late we'd been doing the little things to win, and tonight we got away from that and got the result that we deserved."
Johnsson scored at 15:27 of the third period to make it 4-0 when he took a pass from Zach Hyman at the side of the net and put it over Lindgren's blocker.