A Fernandinho own goal and fierce strike from Kevin De Bruyne put Roberto Martinez’s side in early control of a compelling encounter.
Brazil responded after the break and pulled one back through substitute Renato Augusto 14 minutes from time but Belgium withstood considerable pressure to hold on, although they were perhaps fortunate not to concede a penalty.
Gabriel Jesus looked to have been caught in the box by his Manchester City team-mate Vincent Kompany but, despite a VAR review, nothing was given.
Thibaut Courtois also made a brilliant fingertip save to keep out a Neymar effort in injury time.
Belgium made a flying start, perhaps aided by a change of tactics and personnel.
Manager Martinez decided to start with Marouane Fellaini and Nacer Chadli, the midfielders who transformed the game as substitutes in the last-16 fightback against Japan. That freed De Bruyne to play in a more advanced role and the City midfielder revelled in the space Brazil continually gave him.
It was Brazil who had the first serious chance after winning a corner but Thiago Silva miscued in front of goal and bundled his effort against the woodwork.
Belgium made them rue the miss as they took the lead from a corner of their own after 13 minutes, although they did enjoy some good fortune.
Kompany obscured the view of his City team-mates Jesus and Fernandinho, pictured, as he leapt to reach Chadli’s cross and the ball rebounded in off the latter’s shoulder. Brazil sought a quick response but Courtois comfortably dealt with Philippe Countinho’s long-range strike and Fernandinho had a shot blocked. Marcelo also tested Courtois but it was Belgium who looked the more threatening as they launched wave after wave of counter-attacks.
Brazil struggled to handle their pace and the second goal came just after the half-hour as Romelu Lukaku charged from deep and fed De Bruyne outside the area. De Bruyne made no mistake as he lashed home a thunderous drive from distance.
De Bruyne went close again as Alisson tipped over a free-kick and Courtois ensured Belgium carried their advantage into the break by pushing away another Coutinho strike.
Brazil upped their tempo after the break. Neymar wanted a penalty after falling as Fellaini challenged but Serbian referee Milorad Mazic was unimpressed. Jesus had a stronger appeal after Kompany’s challenge but again Brazil were denied.
Brazil were almost caught out as they pushed forward but Eden Hazard fired wide after another quick counter-attack.
Brazil came back again and finally replied when Augusto guided home a header from Coutinho’s expertly-floated cross. Augusto went close to another as he drove narrowly wide moments later and Coutinho sliced wide from another good opening.
Brazil kept up the pressure to the end but Neymar, after having another, more dubious penalty appeal rejected, could not beat the flying Courtois from distance.