End of the road for Cristiano Ronaldo and defending champions Portugal.
Belgium will face Italy in quarter-finals, in Munich on July 2.
Defending champions Portugal were knocked out of Euro 2020 on Sunday after a 1-0 to defeat to Belgium, who will next face Italy in a mouth-watering quarter-final tie.
A 43rd-minute strike from Thorgan Hazard secured victory for Roberto Martinez's team, in Seville, Spain, after surviving plenty of pressure from the Portuguese in the second half.
But with the finishing touch missing, it was the end of the road for Cristiano Ronaldo and a Portugal team that had triumphed in Paris five years ago.
Portugal began brightly and Diogo Jota wasted a great chance in the sixth minute, dragging his shot wide after Renato Sanches had broken from midfield and found him in a promising position on the left.
Ronaldo then tested Belgium keeper Thibaut Courtois with a low-struck free kick as Fernando Santos's team continued to apply pressure.
But Belgium grew into the game with Kevin De Bruyne increasingly influential and three minutes before the interval they grabbed the lead.
A smart passing move ended with Thomas Meunier feeding Thorgan Hazard, whose wickedly swerving shot flew past the wrong-footed Portugal keeper Rui Patricio.
Belgium suffered a blow when De Bruyne limped off with an injury three minutes after the break and Santos sought to breathe life into his side's attack by introducing Bruno Fernandes and Joao Felix from the bench.
Ronaldo, cutting in from the right, did well to find Jota in the box but again the forward's effort was off target but Belgium were struggling to contain their opponents.
Belgium's attempts to counter were increasingly rare and Portugal turned up the heat in the final 10 minutes as they searched desperately for an equaliser.
Courtois punched away a thundering Ruben Dias header from a corner and then Raphael Guerreiro struck the post with a sweet first-time shot from the edge of the box.
Deep in added time, Portugal created one final opportunity but Felix's drive flashed just wide of Courtois's right-hand post.
Belgium will face Italy, who beat Austria 2-1 on Saturday, in Munich on July 2. The Italians are unbeaten in their last 31 matches.