Sri Lanka claimed a healthy first-innings lead of 182 in the first Test with Bangladesh before rain wiped out the evening session in Galle.
After limiting Sri Lanka to 494 all out on Wednesday, Bangladesh began day three in a promising position on 133-2, with Soumya Sarkar unbeaten on 66.
However, Sarkar gave his wicket away after adding just five to his overnight total and several of his team-mates were also guilty of loose strokes as Sri Lanka seized control - Dilruwan Perera and Rangana Herath returning 3-53 and 3-72 respectively.
Bangladesh were ultimately dismissed for 312, skipper Mushfiqur Rahim (85) and Mehedi Hasan (41) offering the only resistance of note in a seventh-wicket stand of 106.
The tourists lost four wickets for 59 runs prior to that partnership and collapsed alarmingly at the end of their innings after avoiding the follow-on.
Rain prevented Sri Lanka from beginning their second dig but the hosts will now be confident of pushing for victory over the remaining two days.
-- ICC (@ICC) March 9, 2017
Suranga Lakmal made the initial breakthrough for Herath's men on Thursday, as Sarkar top-edged a pull off his hip to fine-leg.
Shakib Al Hasan (23) was then caught down the leg side off Lakshan Sandakan, while Mahmudullah (8) and Liton Das (5) were each guilty of poor footwork as they fell to Lahiru Kumara and Herath respectively, leaving Bangladesh 192-6.
Mushfiqur, playing as a specialist batsman, was hit on the helmet by Kumara early in his innings and there was also a scare for Mehedi when he was dropped on nine by Asela Gunaratne.
The duo counter-attacked effectively after lunch, finding regular boundaries, but Mehedi was then lbw to a quicker ball from Dilruwan Perera and the next delivery saw the Sri Lanka spinner pin Taskin Ahmed in front for a golden duck.
Only 10 runs were added before Mushfiqur was bowled coming down the pitch to Herath and the same bowler accounted for last man Mustafizur Rahman before the heavens opened.