Sri Lanka rattled England with three quick wickets late on the fourth day of the first Test in Galle on Sunday, but the visitors remained favourites to win the match with just 36 more runs needed and seven wickets in hand.
England were expected to comfortably close in on a victory after Sri Lanka finished with 359 in their second innings, leaving the visitors needing only 74 to win.
But Sri Lanka struck early, with Dom Sibley (2) and Zak Crawley (8) falling to left-arm spinner Lasith Embuldeniya. Captain Joe Root was run-out for one after a mix-up with Jonny Bairstow.
Bairstow and Dan Lawrence, who was making his debut, took a nervous England to 38-3 as bad light brought an early end to proceedings at Galle International Stadium.
Earlier, England's spinners had claimed three key wickets to tighten the noose around the hosts in their second innings.
Off-spinner Dom Bess removed Dinesh Chandimal (20) and Niroshan Dickwella (29) while left-armer Jack Leach sent back Dasun Shanaka for four.
Sri Lanka were bundled out for 135 runs in their first innings.
Angelo Mathews struck 71 after hitting his 36th half century in Tests to hold fort at one end after opener Lahiru Thirimanne made 111 to steady the innings.
This was Thirimanne's second hundred of his Test career and his first in seven years.
Mathews was batting on 51 with Wanindu Hasaranga (3) at the break.
England, who made 421 in their first innings on the back of a fine double century by Root, struck in the first over after lunch, with Bess having Chandimal caught at first slip.
Mathews stitched a 48-run partnership with Dickwella before the wicketkeeper-batsman nicked one behind off Bess.
England took a review against Mathews after the on-field umpire ruled not out to an lbw appeal from Bess. However, replays showed the ball was missing the stumps.
The match is being played in an empty stadium due to Covid-19 restrictions.