England secured the top spot in Group C with a gritty 0-0 draw against Slovenia, avoiding a last-16 clash with hosts Germany, while France's failure to beat Poland has complicated their path to the final.
Gareth Southgate's team has struggled to find their best form in the tournament, delivering another lackluster performance in Cologne, which will do little to quell the growing criticism back home.
However, the draw was enough to advance as group winners after an equally uninspiring 0-0 draw between Denmark and Serbia in Munich, allowing Denmark to finish second ahead of Slovenia despite having an identical record.
"That was the aim before the start of the tournament, to come top of the group," England captain Harry Kane told ITV. "These games are really, really tough. We've been here before and stepped it up in the knockouts. Hopefully, we can do it again but whoever we get in the next round will be tough."
England must wait to find out which of the four best third-placed teams they will meet in Gelsenkirchen on Sunday for a place in the quarterfinals.
Denmark pipped Slovenia to the runners-up spot by virtue of a better qualifying ranking after both nations finished with three draws, the same goal difference, number of goals scored, and disciplinary points.
Germany awaits Denmark in the last 16, while Slovenia celebrated reaching the knockout phase of a major tournament for the first time.
Serbia was eliminated after coming last in the section, with Croatia's exit also confirmed.
France falter
France blew the chance to finish first in their group despite Kylian Mbappe scoring his maiden European Championship goal from the spot in a 1-1 draw with Poland, as Austria won a thriller against the Netherlands to snatch the top spot.
Didier Deschamps' France failed to top their group at a major tournament for the first time since Euro 2012 after being made to pay for a series of missed chances.
"We've achieved our first objective," said Deschamps. "Even if we don't have the spot we were aiming for because we are second. A new competition is about to start."
Austria, who lost their opening game to France, grabbed a 3-2 victory over the Dutch to wrap up a last-16 berth and relegate their already-qualified opponents to third place in Group D.
France dominated for long periods against Poland but has still only scored twice in Germany – an own goal by Austria's Maximilian Woeber and Mbappe's penalty.
Les Bleus will face the runners-up from Group E, in which Belgium, Ukraine, Romania, and Slovakia all have three points, in the last 16.
As a result of coming second, France also now finds themselves in the half of the draw with Germany, Spain and Portugal.
Mbappe – playing in a mask after breaking his nose against Austria – finally broke his Euros duck in the 56th minute, as he slotted in a penalty after Ousmane Dembele was felled by Jakub Kiwior.
But Poland was awarded a spot-kick themselves with 13 minutes remaining for a foul on Karol Swiderski.
Robert Lewandowski's weak initial effort was comfortably saved by Mike Maignan, but the France goalkeeper had strayed off his line and the Poland talisman dispatched his second attempt.
Austria powers through
Dutch fans turned Berlin orange as they continued to light up the tournament, but it was the Austrians in full voice early on as their team was rewarded for an enterprising start when Donyell Malen inadvertently fired into his own net.
But the Netherlands drew level less than two minutes after the restart, as Austria midfielder Florian Grillitsch lost the ball in midfield before Cody Gakpo cut inside and finished off a rapid counter-attack.
Just as the Oranje started to get on top, Austria reclaimed the lead as Romano Schmid's header found the net via a deflection off Stefan de Vrij on the line.
Memphis Depay struck with an excellent touch and volley to equalize again after a good header down by substitute Wout Weghorst.
But one of the games of the tournament was not yet done and Marcel Sabitzer hammered home in the 80th minute to put Austria in front for the third time.
Ralf Rangnick's men now have a match against either Turkey, Czechia or Georgia to look forward to as they bid to reach the quarterfinals for the first time.
The Netherlands will play the winners of either Groups C or E.
"We didn't get around to playing football. In the second half, things got better but it wasn't enough," Gakpo told Dutch broadcaster NOS.