Bangladesh lost their last nine wickets for 49 runs as England hit back from a slow start on the first day of the second and final Test in Dhaka.
Tamim Iqbal hit 104 as Bangladesh cruised to 171 for one but off-spinner Moeen Ali took five for 5-57 as the hosts crumbled to 220 all out.
England then lost three wickets, including captain Alastair Cook for 14 and were 50-3, 170 runs behind, when rain brought an early end to the day's play.
Joe Root (15) and Moeen (2) were unbeaten for the touring side, who lead the series 1-0.
On a manic opening day at the Shere Bangla National Stadium, the hosts collapsed either side of the tea break, triggered by Tamim's dismissal after scoring his eighth hundred in Tests.
Moeen began things with Tamim's prized scalp as he picked up his second five-wicket haul in Tests while paceman Chris Woakes also picked up three wickets.
Bangladesh looked in complete control when Tamim (104) and Mominul Haque (66) added 170 for the second wicket despite losing Imrul Kayes in the third over of the day after skipper Mushfiqur Rahim had won the toss and opted to bat.
Tamim and Mominul took time to settle but ensured England did not have many opportunities to make further inroads in the first session.
The duo launched a counter-attack against some wayward English bowling and were particularly rough on debutant left-arm spinner Zafar Ansari, who replaced off-spinner Gareth Batty in the side.
Ansari went for 36 runs in his six overs in the first session and did not bowl again.
Tamim, who did not score off his first 19 balls, needed 60 deliveries to bring up his half-century and reached his century with two consecutive boundaries off Moeen.
The left-hander hit 12 fours in his 147-ball innings, which included a reprieve when he was given out on 66, caught down the leg side off Stokes, a decision which was overturned on review with replays confirming the ball had brushed his shirt.
Tamim fell leg before to Moeen after offering no shot to a straight delivery.
Mominul was equally impressive and his innings featured 10 fours before he was bowled by Moeen with a delivery that did not spin.
Moeen also picked up the wicket of Mushfiqur, who had earlier crashed to the ground after being hit on the side of his helmet by a bouncer from Stokes.
The paceman got the ball to move both ways and accounted for Mahmudullah and Sabbir Rahman, both caught edging behind, to further Bangladesh's collapse.
In reply, Shakib Al Hasan dismissed Ben Duckett in his first over, the second of the innings, before Cook and Gary Ballance fell to teenage off-spinner Mehedi Hasan.
Bangladesh first innings
Tamim Iqbal lbw b Ali 104
Imrul Kayes c Duckett b Woakes 1
Mominul Haque b Ali 66
Mahmudullah c Cook b Stokes 13
Shakib Al Hasan c Bairstow b Woakes 10
Mushfiqur Rahim c Cook b Ali 4
Sabbir Rahman c Bairstow b Stokes 0
Shuvagata Hom c Bairstow b Woakes 6
Mehedi Hasan lbw b Ali 1
Taijul Islam not out 5
Kamrul Islam c Root b Ali 0
Extras (b-1 lb-9) 10
Total (all out, 63.5 overs) 220
Fall of wickets: 1-1, 2-171, 3-190, 4-196, 5-201, 6-202, 7-212, 8-213, 9-215
Bowling: Woakes 9-3-30-3, Finn 8-1-30-0, Ali 19.5-5-57-5, Ansari 6-0-36-0, Stokes 11-5-13-2, Rashid 10-0-44-0.