Ian Bell cruised past a third hundred in his last five Test innings to help give England an outside chance of victory in the third npower Test.
Bell (119no) continued his prolific form, and Eoin Morgan (71) again showed his liking for the Rose Bowl - where he made two one-day international centuries last year - in England's first-innings 377 for eight declared.
Their bowlers were then rewarded for much graft and plenty of skill with three Sri Lanka wickets in the remaining 49 overs on day four as the tourists narrowed a deficit of 193 by 112.
Unless another gloomy forecast for the final day proves wide of the mark, England may still not have time to do more than close out a 1-0 series success on the back of their remarkable first-Test victory in Cardiff.
It has rained even more here than it did there - 155 overs lost to 121 in Wales - meaning England's undoubted superiority may yet be measured simply by their unexpected victory surge and Sri Lanka's sudden brittleness in one session at the SWALEC Stadium.
The tourists demonstrated significantly more determination today, after England put the onus on them shortly before tea to bat out the remainder of this match.
It was not a case of the hosts bowling poorly either, as they did at times during the drawn second Test at Lord's.
Chris Tremlett, usurping Stuart Broad as James Anderson's new-ball partner after his first-innings career-best figures, again stuck to testing lines and found plenty of bounce from the pavilion end on his former home ground.
But Sri Lanka had a point to prove, and England soon knew they would have to work for their wickets this time.
Anderson got Tharanga Paranavitana towards the end of his opening spell, the left-hander edging low to Graeme Swann at second slip thanks to a little extra movement from the bowler's natural angle across him.
Number three Kumar Sangakkara, shunted back into the captaincy here thanks to Tillakaratne Dilshan's broken thumb, had much personal and national pride to play for - and batted accordingly.
He is conspicuously short of runs in this country for a world-class batsman, but proved immovable this time - first in company with young opener Lahiru Thirimanne, then his old-firm team-mate Mahela Jayawardene and finally nightwatchman Rangana Herath.
Thirimanne bravely kept England at bay for 111 balls, only for the return of Tremlett to have him edging to slip on the front-foot defence.
Andrew Strauss also tried the off-spin of Swann and Kevin Pietersen, and there was a little turn and bounce for both.
But Sri Lanka refused to yield again, until Broad struck a telling blow with a delivery which left Jayawardene to find the edge behind and give England renewed hope.
After they had resumed this morning on 195 for four, Bell's expert cutting - using the pace and true bounce of an excellent surface - was the most impressive feature of a chanceless 14th Test hundred which contained 12 fours from 159 balls.
Morgan was initially unhurried, taking 10 balls to get off the mark, before gradually building momentum in what became a punishing sixth-wicket stand of 137 out of England's 182 runs in 44.4 overs today.
Nightwatchman Anderson was under way almost immediately this morning with a back-foot force for four in the first over, and maintained a handy scoring rate until - having just hit Chanaka Welegedara for successive off-side boundaries - he wafted an edge behind off the same bowler.
Morgan was initially content to allow Bell to press on. But after lunch, he joined in the relatively easy pickings off an unremarkable international attack which, even with the second new ball, could do little to halt the runs.
Morgan completed his 88-ball 50 and the century stand with a crunching square-drive off Welegedara for the fifth of his seven boundaries.
The left-hander survived on 58 when DRS showed a delivery from Suranga Lakmal pitching marginally outside leg, reversing Rod Tucker's original lbw verdict.
When Morgan did go, edging behind on the charge at Lakmal, Matthew Prior followed him back quickly - for a second ball duck, carving a catch straight to backward-point off Thisara Perera.
Broad also made no score, holing out in the leg-side deep off Lakmal (three for 99) - at which point Strauss decided it was time for England to bowl again, with partial cloud cover still hanging over the ground.
They did not squander those favourable conditions, but found it hard going as Sri Lanka dug in.Reuse content