Bo Horvat and Jake Virtanen each had a goal and an assist, and Alexander Edler had two assists for Vancouver (17-17-4), which is 6-1-1 in its past eight games after going 1-10-2 in its previous 13.
"We've still got work to do to be where we want to be, but it's a really good stretch for us right now for sure," said Markstrom, who has a .942 save percentage during his win streak.
WATCH: [All Blues vs. Canucks highlights]
Vladimir Tarasenko scored, and Jake Allen made 24 saves for St. Louis (13-16-4), which has lost two of its past three games.
"We played a really good first period, got pucks to the net, got pucks in deep and generated a lot of shots, and their goalie made some huge saves and we missed some opportunities," Blues forward Tyler Bozak said. "And in the second we got away from it, tried to make too many plays, myself included, and turned it over."
The Blues outshot the Canucks 15-5 in the first period, but Markstrom made several difficult saves. He slid to his left to rob Brayden Schenn on a one-timer off a cross-ice rebound and stopped Bozak twice in the final two minutes to keep the game scoreless.
"It definitely wasn't the prettiest first from us by any means, but [Markstrom] came up huge for us and made some unbelievable saves," Horvat said.
Vancouver had the first eight shots of the second period and scored on two of them.
"It's great that we came back out and got ready to play in the second period there, and I think that's when our game changed," Horvat said.