Happ led off the second inning with a drive to straightaway center and put another Adam Wainwright pitch over the right-field fence in the third as the Cubs won their fourth straight game.
Chicago used a series of two-out hits to pile up runs against Wainwright (3-2), who was pulled after back-to-back doubles in the fourth. The Cardinals starter allowed 11 hits — one short of his career high — and a season-high seven runs in the shortest of his nine starts this season.
A crowd of 54,662, MLB’s largest this season, filled London Stadium, some singing “Go Cubs Go.” Chicago (37-38) has won nine of 10 and with a win Sunday could get back to .500 for the first time in more than a month.
The Cubs had more hits (14) than swings and misses (10). Nine of the hits were with two outs.
St. Louis, last in the NL Central at 31-45, lost its second straight following a four-game winning streak.
Happ’s first homer cleared the 16-foot fence in center, a wall pushed back 7 feet to 392 after the New York Yankees and Boston combined for 50 runs in two games in 2019, when MLB made its European debut. The ball hit at about the spot where West Ham, the stadium’s home team in the Premier League, has its “Hammers” logo concealed by the high fence and blacked out seats.
Happ entered with just five home runs this season.
Steele (8-2) allowed five hits in six innings and struck out eight, matching his season high.
“It’s definitely something different in the energy and the electricity in this building,” Steele said. “I mean, I felt every fan with me, honestly felt like everybody was out there on the mound with me. It was really cool. It was something I’ll never forget.”
Steele squashed a Cardinals mini-rally with three consecutive strikeouts ending the sixth.
Paul Goldschmidt singled home Tommy Edman before Nolan Arenado singled to put two on. Steele got Willson Contreras and Jordan Walker swinging and, after a wild pitch moved the runners up, threw a called third strike past Dylan Carlson.
The left-hander kept the Cardinals hitless before a leadoff single in the fifth by Walker, who has the longest active hitting streak at 14 games.
Dansby Swanson hit a two-run homer with two outs in the ninth. Christopher Morel had three hits on his 24th birthday and No. 9 hitter Nick Madrigal was 2 for 4.
The Red Sox and Yankees had a marathon first inning in their first game in London. It was 6-6 after one frame. This time around, it was a tidy 1-2-3 inning on both sides.