Skipper Mahela Jayawardene smashed his 24th Test century and shared two century stands with Kumar Sangakkara and Thilan Samaraweera to help Sri Lanka stretch their lead over Bangladesh to 406 in the opening Test on Sunday.
Jayawardene was unbeaten on 129 as Thilan Samaraweera followed his first innings 90 with 62 in the second before he was bowled by Mashrafe Mortaza, a dismissal that prompted the umpires to call off the third day's play for bad light.
Their 138-run stand came after Sangakkara had recorded his 27th Test fifty. His was the only wicket to fall in the session, caught behind by keeper Mushfiqur Rahim off Mehrab Hossain for 67.
Sri Lanka reached 291-4 at the close thanks to another healthy partnership of 135 runs built by Jayawardene and Sangakkara after the visitors' second innings had got off to a terrible start.
Malinda Warnapura was trapped lbw for eight by paceman Mahbubul Alam and Mortaza uprooted the stumps of Michael Vandort on six to leave Sri Lanka reeling at 18-2.
Earlier in the morning, Muttiah Muralitharan wasted little time in ending Bangladesh's first innings when he snapped up his sixth wicket to bowl the home side out for 178.
After fog delayed play for 30 minutes, Bangladesh resumed on 177-9 but were dismissed on the final ball of the first over when Warnapura caught Alam at forward short-leg for a duck.
Muralitharan had completed his 66th five-wicket haul in Tests on the second day and finished with figures of 6-49 after Sri Lanka made 293 in their first innings.