England have a stranglehold on the first Test after forcing Sri Lanka to follow on 207 runs in arrears.
James Anderson took 5-16 and Stuart Broad 4-21 to dismiss the tourists for 91 on the second day at Headingley.
England had extended their overnight 171-5 to 298 all out, with Jonny Bairstow completing a fine second Test century before holing out for 140.
Broad claimed early two wickets and Anderson returned late on to wreak havoc, with Sri Lanka 1-0 at the close.
Bad light ended play two balls into their second innings but, with three days left in the game and cloud cover expected to remain, helping bowlers swing the ball, England will be confident of going on to take the lead in this three-match series.
"The pitch is very different to a normal Headingley one — there's a bit more in it for the bowlers," said Anderson.
"When it's swinging like that, that's my ideal conditions. I find it a lot of fun."
Yorkshire's Bairstow earned a recall to the side midway through the Ashes series last year and said his international absence made him determined to make the most of his second chance.
"You learn a lot about yourself when you're out of the side, wanting to get back to where you potentially could have been," he said.
"There's no better place to do it than at your home ground. It's been a while coming."
Bairstow has been in peerless form this summer, and had come in to this match desperate to score a Test ton on his home ground.
And after his overnight partner Alex Hales had ended his patient 206-ball innings with an ill-judged swipe off Rangara Herath to be caught at deep cover for 86, Bairstow pushed on with Steven Finn as Sri Lanka's bowlers struggled to make best use of the conditions.
Bairstow's hundred came up off 144 balls courtesy of a couple of overthrows, and he removed his helmet to point his bat and clenched glove to the Leeds skies.
Naturally attacking and freed from the pre-century nerves, he continued to accelerate, taking 18 off one over from Pradeep and working the strike intelligently with Finn.
He had struck 13 fours and a six when his adventure finally cost him, an attempted lofted drive over the top off Dushmantha Chameera instead ending in Nuwan Pradeep's hands at mid-off.
England's pacemen on the charge
It was a critical innings from Bairstow, comprising almost half the team's tally and, with his wicketkeeper's gloves on, he was straight back in the action.
Broad produced a classic Headingley delivery — pitched up on off stump, moving away late — to take the edge of Dimuth Karunaratne's bat, Anderson induced another edge with a short, spitting delivery to account for Kaushal Silva for 11 and Broad repeated the trick to dismiss Kusal Mendis for a duck.
It was perfect bowling for quintessential Leeds conditions, and a batting order missing its great stars of the past decade had no answer.
Ben Stokes had Dinesh Chandimal taken beautifully by a diving James Vince at third slip and, while skipper Angelo Mathews marshalled a brief rearguard, Anderson — who was swinging the ball both ways — returned in the extended evening session to worsen the tourists' predicament.
A big inswinger had Mathews trapped lbw for 15, although a review would have seen the batsman survive, and when debutant Dasun Shanaka edged behind for a golden duck Bairstow had his fourth catch of the innings.
With 99 needed to avoid the follow-on, Anderson kept up the assault, clearing up the tail to finish with 5-16 — his best Test figures at Headingley — and move past India's Kapil Dev and into sixth in the all-time Test wicket-taker's list.
While bad light denied him the chance to make inroads in the second innings, it was a fitting reward for 11 overs of persistent accuracy and threat.
'Greenidge & Haynes would have struggled' — What they said
Former England batsman Geoffrey Boycott on BBC Test Match Special: "Anderson and Broad are two high-quality bowlers, and they get enough balls in the right area to create pressure.
"At Headingley, in these conditions, Greenidge and Haynes would have struggled to stay in."
BBC cricket correspondent Jonathan Agnew: "Jonny Bairstow's was an outstanding knock and, in the context of the game, absolutely remarkable.
"He played such a range of shots so confidently and with beautiful timing, which no-one else has managed to do in this match."
The stats you may have missed
Jonny Bairstow is only the second England wicketkeeper — after Matt Prior — to score a century and take five catches in a Test
Bairstow's 140 was the fifth highest score by a number seven against Sri Lanka
James Anderson has now taken 19 five-wicket hauls in Tests
There were a combined six ducks in both first innings, one short of the Test record