Goals from Thomas Delaney and Kasper Dolberg sent Denmark through to their first semi-final since 1992.
Delaney put the Danes ahead inside five minutes, capitalising on slack defending to plant a powerful header past Tomáš Vaclík from a corner.
Minutes later, Jaroslav Šilhavý’s side were in trouble again, Vaclík needing to block a Mikkel Damsgaard effort before Delaney scuffed wide. However, despite that bright spell, the Danes still had to keep their wits about them, as Kasper Schmeichel was forced to scramble back and atone for a wayward pass by denying Tomáš Holeš’s subsequent shot.
As the half-time whistle loomed, Denmark doubled their advantage in style. This time, Joakim Mæhle’s exquisite outside-of-the-boot delivery swerved into the stride of Dolberg, who only had to connect to steer into the roof of the net.
The Czechs faced a daunting task at the break but rallied just four minutes after the restart. Their goal came from a familiar source too, Patrik Schick guiding in from Vladimír Coufal’s neat cross to become only the ninth player to net five times in a EURO final tournament – and revive his team’s hopes.
In an entertaining second half, the game looked to be over as Mæhle latched onto Yussuf Poulsen’s through ball, but as he shaped up to finish, Vaclík read the situation well to keep his side in the tie.
Tomáš Souček went close late on, and the Czechs battled until the final whistle, but Kasper Hjulmand’s side dug in and did what they had to do to claim their third consecutive victory and book their place at the Wembley semi-finals.