Daniel Sedin scored twice and the Canucks snapped Calgary's franchise-record 10-game home winning streak with a 3-1 victory.
"Today was a team effort. The whole team played well," Sedin said.
Trevor Linden also scored and Roberto Luongo made 26 saves for Vancouver, which ended a six-game road skid and tied Calgary for fourth place in the tight Northwest Division. The Canucks and Flames are just one point back of division co-leaders Colorado, Minnesota and Edmonton.
"I know they play very well in here so it's nice to come in here and get a win. It's a good way to start us off after the break," Linden said.
Sedin's first goal of the game came at 18:29 of the second period. He made it 2-0 by snapping a 20-foot shot past Miikka Kiprusoff after retrieving his own errant pass.
"It was a bad pass, but I was lucky to get it back," Sedin said. "It was nice to get that goal before the third period."
Sedin added his 12th of the season at 10:51 of the third when he wheeled out from behind the net and neatly converted a centering pass from brother Henrik Sedin to make it 3-0.
Just before that goal, Luongo turned in his best sequence of saves. He stopped Jarome Iginla, Dion Phaneuf and Daymond Langkow twice from in-close during a 1:02 two-man advantage for the Flames.
"He was obviously on top of his game tonight," Langkow said. "We had some chances, we hit some posts, but against a goalie of his caliber you want to generate more chances and get more shots on him."
Luongo lost his shutout bid with 23 seconds left when rookie David Moss scored off a scramble for his second goal in two games.
Calgary lost at home for the first time since Oct. 30. The Flames and Canucks now head to Vancouver, where they'll meet for the fourth time in December on Wednesday night. After that, Calgary returns for a six-game homestand.
"This one doesn't feel good, but at least we get a chance to go and beat them in their rink in 20 or so hours," Iginla said. "No matter how the first game goes, the second game is always more important."
The first period was scoreless despite a couple of great chances for the Flames in the opening eight minutes. Just two minutes in, Tony Amonte dashed in on a breakaway but rang a shot off the post. Later, with the Flames on a power play, Phaneuf hit the post on a slap shot from the blue line.
"For once it was the other team hitting the posts and not us," Luongo said. "Sometimes you're going to be lucky and sometimes you're not. We'll take it."
Vancouver opened the scoring 5:05 into the second on a power play. Kevin Bieksa's slap shot from the blue line was kicked out by Kiprusoff, but the rebound went right onto Linden's stick. He put it into an open net for his fourth of the season.
After going 30 games without a goal, it was Linden's third in the last five games.
Calgary D Richie Regher was hit hard in the first period and did not return. ... With 614 points, Iginla is two behind Joe Nieuwendyk for third place on the Flames' career scoring list. ... Calgary defensemen Roman Hamrlik and Andrei Zyuzin each missed a fifth straight game with a groin injury. ... Vancouver is the only NHL team without a short-handed goal. ... During their 10-game home winning streak, the Flames trailed for only 24:38. They trailed for 34:55 in this one.