A stunning strike from Thorgan Hazard gave Belgium a 1-0 win over holders Portugal to set up a Euro 2020 quarter-final against Italy.
In a sometimes cagey and ill-tempered encounter in Seville, the younger of the two Hazard brothers in Belgium's starting line-up provided the game's only real moment of quality when he unleashed a swerving, long-range effort which flew past Portugal goalkeeper Rui Patricio late in the first half.
Portugal had the better chances before that, with Diogo Jota firing wastefully wide and Euro 2020 top-scorer Cristiano Ronaldo forcing a diving save from Thibaut Courtois with a well-struck free-kick.
But despite the introductions of Bruno Fernandes and Joao Felix in the second half, Fernando Santos' side were unable to muster an equaliser, with Raphael Guerreiro going closest when he struck a low shot against the post in the closing stages.
- How the teams lined up | In-depth stats and analysis
- Subscribe to the Sky Sports Football Euros Podcast
Portugal's players became increasingly frustrated as their hopes of retaining the trophy receded, with referee Felix Brych showing a string of yellow cards in a stop-start second half, and it was not all positive for Roberto Martinez's side either.
Belgium lost Kevin De Bruyne to an ankle injury after a late challenge by Portugal midfielder Joao Palhinha shortly before half-time, while Eden Hazard may also be a doubt to face Italy in Munich on Friday having walked off clutching his hamstring late on.
Belgium: Courtois (8), Alderweireld (7), Vermaelen (8), Vertonghen (7), Meunier (7), Witsel (7), Tielemans (7), T Hazard (8), De Bruyne (6), E Hazard (8), Lukaku (6).
Subs used: Mertens (6), Dendoncker (6), Carrasco (6).
Portugal: Patricio (6), Dalot (6), Pepe (6), Dias (6), Guerreiro (7), Palhinha (6), Moutinho (6), Sanches (8), B Silva (7), Ronaldo (7), Jota (5).
Subs used: Fernandes (7), Felix (6), Silva (6), Danilo (6).
Man of the match: Thorgan Hazard
How Belgium sent the holders home
For all the anticipation around the tie, which pitted the competition's holders against the side ranked No 1 in the world, there was little in the way of excitement before Thorgan Hazard's stunning opener.
Portugal did, however, have an early opportunity to take the lead when the impressive Renato Sanches span away from Youri Tielemans in midfield and fed the onrushing Jota to his left.
The Liverpool man had a clear sight of goal after collecting Sanches' pass but he screwed his diagonal effort well wide of Courtois' left-hand post.
It was a let-off for Belgium, who struggled to break down Portugal at the other end, with Romelu Lukaku closely marshalled by Ruben Dias and Pepe, and Eden Hazard sending one first-time shot harmlessly over the bar from the edge of the box.
Martinez's side lacked their usual slickness in possession and Portugal were happy to stroke the ball around cautiously as they waited for openings, meaning the game was a cagey affair in the early stages.
- Belgium made five changes from their 2-0 win over Finland, with Toby Alderweireld, Jan Vertonghen, Thomas Meunier, Youri Tielemans and Thorgan Hazard all returning.
- Portugal made two changes from their 2-2 draw with France as Diogo Dalot and Joao Palhinha got the nod but Bruno Fernandes remained on the bench.
Ronaldo, like Lukaku, was a peripheral figure in the first half but he did go close on one occasion, unleashing a powerful free-kick which had to be parried away by a full-stretch Courtois.
It would have been a stunning opener from Ronaldo, who, on 109 goals for Portugal, only needed one more to set a new international scoring record, but instead it was left to Thorgan Hazard to conjure up the moment which lit up the game.
The 28-year-old was given room to control Thomas Meunier's pass and burst into the space ahead of him, and he made the most of the opportunity, releasing a venomous strike from 25 yards out that swerved too much for Patricio to stop.
The Belgian celebrations were dampened, however, when, a few minutes later, De Bruyne, who had only recently returned from the facial injury sustained in the Champions League final, needed treatment to his ankle following Palhinha's clumsy tackle.
The Manchester City man came back out for the second half, but only lasted a couple of minutes before he was unable to continue, making him a doubt for the quarter-final.
De Bruyne's withdrawal appeared to boost Portugal and so too did the introductions of Fernandes and Felix shortly afterwards.
Ronaldo started to drop deeper in an effort to influence the game and he almost created an equaliser when he dribbled through a crowd of Belgian defenders, played a one-two with Diogo Dalot and fed Jota, who fired over from 10 yards out.
There was still over half an hour to play at that point and it was one-way traffic from then on, but Portugal could not quite find a way through despite a flurry of shots.
Pepe embodied their frustration, twice clashing with Lukaku, and there was more of it to come in the final few minutes, with Dias going close from a corner and Guerreiro hitting the woodwork.
Substitute Andre Silva then fired straight at Courtois from close range, before Felix sent a low effort narrowly wide.
Belgium held on in the end, but with Hazard following De Bruyne off the pitch earlier than anticipated in the closing stages, it remains to be seen how strong they will be for their quarter-final tie against Italy in Munich.
What the managers said...
Portugal boss Fernando Santos: "I think the result is unfair but this is football. They scored, we didn't. After 10, 15 minutes when we didn't play that well and they pushed us back, we found our stride. We played with a strong mentality, we tried to attack when we had possession.
"We hit the post, we kept being dangerous, we always fought for it, but the ball wouldn't go in. We feel very disappointed. We thought we could reach the final and win.
"Ronaldo was a true captain. He tried to turn it around. None of the players can feel anything less than pride."
Belgium boss Roberto Martinez: "I thought we had incredible concentration, we defended really well. We controlled the game in the first half, scored a very good goal and the more that they had the momentum, we had to show an incredible mentality; we were disciplined, tactically astute.
"We know the talent of this generation and the good football we can play but I think all the other elements that you need to be a winning team, we showed. The commitment of these players allowed us to have a display like this. I don't think [that mentality] would have been there two, three years ago. It's come from consistency, the environment and the work and the focus of the players. I'm very proud of that backbone.
"We're going to need 48 hours for the injuries. Kevin's is his ankle - it was a really bad tackle - so we'll see. We haven't got any diagnosis yet. Eden is more a muscle sensation. We'll go back to Belgium [on Sunday night] and do the scans [on Monday]."
Opta stats - Belgium's winning streak
- This was Belgium's first win against Portugal since September 1989 (3-0 in a World Cup qualifier), ending a run of five meetings without a victory against them (D2 L3).
- Portugal were eliminated from Euro 2020 with just one victory from their four games (D1 L2); their fewest in a single tournament at the European Championships since their first appearance in 1984, when they also won one of four (D2 L1).
- Belgium have equalled their longest winning streak at major tournaments, winning five in a row for the second time (both under Roberto Martínez). Indeed, the Red Devils have won 10 of their 11 games across the World Cup and European Championships since Martínez took charge.
- Belgium have scored six goals from outside the box in the last two European Championships (2016 and 2020); at least twice as many as any other team in this period. Thorgan Hazard was the fifth different Belgian player to score from outside the box in the competition since 2016, along with Radja Nainggolan (2), Kevin De Bruyne, Romelu Lukaku and Eden Hazard.
- Belgium's starting XI against Portugal had an average age of 30 years and 148 days; their oldest in a game at the European Championships, and the oldest named by any of the remaining teams at Euro 2020 so far.
Belgium will play Italy in the Euro 2020 quarter-finals in Munich on Friday July 2, with kick-off at 8pm.