Kristian Huselius scored for the third straight game and added an assist as the Flames (9-7-2) won their sixth straight game to move within one point of the Edmonton Oilers for seventh spot in the Western Conference.
The loss ended a nine-game winning streak for Detroit (12-5-1).
Matthew Lombardi, Daymond Langkow and Dion Phaneuf also scored, while Chuck Kobasew had two assists to end a nine-game pointless streak. Alex Tanguay had two assists for the fourth consecutive game.
Miikka Kiprusoff stopped 29 shots for his ninth win of the season. The Finnish netminder ran his shutout streak to 160 minutes, 27 seconds, just short of his franchise record of 161:11 set last season.
Dan Cleary ended Kiprusoff's streak with a power-play goal with 41 seconds left in the game.
The line of Lombardi, Kobasew and Huselius was buzzing all around the offensive zone in the first period.
Six minutes into the game, Lombardi centred a puck out front to Huselius, who wired a shot on net. Detroit goalie Dominik Hasek made the save, falling to the ice and quickly looking behind him before realizing he had the puck.
Huselius then scored his sixth goal of the season on a power play at 7:13. Kobasew tipped a point shot by Roman Hamrlik wide of the net, and Huselius picked up the puck on his forehand before quickly backhanding the puck into an open net behind a fallen Hasek.
The Flames scored their second power-play goal at 16:02, when Huselius passed the puck out front to Lombardi, who quickly backhanded a perfect shot over Hasek.
Kiprusoff made 10 saves in the opening period, including four off the stick of Swedish forward Mikael Samuelsson. The best one was a glove grab off a Samuelsson one-timer from the slot during a Detroit power play.
The Flames added to their lead at 1:11 of the second period when Langkow converted a pass from Jarome Iginla past Hasek.
Phaneuf then scored at 13:31 of the third when he snapped a shot past Hasek to give Calgary three power-play goals in five chances.
To sell-out crowd of 19,289 was denied a shutout when Cleary one-timed a shot past Kiprusoff. That also ended Kiprusoff's shut-out streak on home ice at 214:23.
Notes: Six times in their history, the Red Wings have compiled nine-game winning streaks, but they've never been able to win 10 in a row. . . . With an assist on Langkow's goal, Iginla extended his point-scoring streak to seven games during which time he has three goals and seven assists. . . . For Detroit, both Cleary and Niklas Lidstrom extended their point-scoring streaks to five games.