- Kasper Dolberg (33')
- Andreas Skov Olsen (39')
Didier Deschamps's side, who will face Denmark in Group D at the World Cup in November, conceded first-half goals by Kasper Dolberg and Andreas Skov Olsen to finish third in their Group with five points from six games.
Croatia qualified for the final four with 13 points, one ahead of Denmark, who burst into life against France after being dominated in the first 20 minutes.
World champions France, who had several first-choice players out injured including Paul Pogba, Karim Benzema and Hugo Lloris, were a far cry from their best and Deschamps will be crossing fingers that all have recovered for the tournament in Qatar.
"We had a lot of chances, but we were not aggressive enough and made several technical mistakes," Deschamps said. "We had a young team and they don't have the experience of a high level. Tonight was a reality check.
"I'm not worried for the World Cup because we'll get most of our injured players back in time. We don't however think we're stronger than the others and we know it's going to be a big fight."
Kylian Mbappe had a good shot parried away by Kasper Schmeichel and Aurelien Tchouameni and Eduardo Camavinga bossed the midfield as France were on top in the opening stages of a lively game, but they gradually faded away.
The hosts opened the scoring on 34 minutes when Dolberg latched on to a perfect cross from Christian Eriksen.
Five minutes later, Skov Olsen's volley from just outside the area gave Denmark a 2-0 lead.
Les Bleus struggled to handle their opponents' pace but tried to hit back after the break, with Schmeichel denying Mbappe at the end of a swift counter-attack and blocking the forward's powerful shot from close range.
France lacked defensive stability with Raphael Varane on the bench as Deschamps looked to preserve other key players amid a packed schedule.
- Istvan Kovacs