Lamine Yamal scored a sublime long-range strike to restore parity following Randal Kolo Muani's early opener in Munich.
RB Leipzig attacker Dani Olmo netted Spain's second goal just four minutes later, before La Roja produced a strong defensive display to keep France at bay.
Here, Sports Mole provides the player ratings for Spain's narrow win over France to keep them in the hunt for a fourth European Championship trophy.
Spain player ratings vs. France: Yamal, Olmo star for in-form La Roja
GOALKEEPER
Unai Simon - 7/10
There was nothing he could do to prevent Kolo Muani from netting the opener. Made a couple of saves and watched France send a couple of late shot over his goal.
DEFENCE
Jesus Navas - 6/10
Probably should have done more to stop Mbappe's cross for the opening goal. But he offered a useful threat on the overlap before his evening was cut short in the 57th minute due to an injury issue.
Nacho Fernandez - 7/10
Showed all his experience to do a a fine job in his second start of the tournament after being called into the side to replace the suspended Robin Le Normand.
Aymeric Laporte - 6/10
Lost Kolo Muani for the France goal, but was resolute for the rest of the contest despite receiving a blow to his face in the second half.
Marc Cucurella - 6/10
Was surprisingly booed by the local supporters, who felt he should have been penalised for a handball in the quarter-final against Germany. Another solid display to prove why he is playing instead of Alex Grimaldo.
MIDFIELD
Rodri - 7/10
Barely put a foot wrong in the middle of the park, making 52 of his 55 passes to keep things ticking over against a top-quality French midfield.
Fabian Ruiz - 6/10
Should have done better with his early header. Went on to put in another solid display to complement his central midfield partner.
ATTACK
Lamine Yamal - 9/10
Turned the game in Spain's favour with a sensational strike that he will remember for the rest of his career. Could have had an assist if Ruiz converted in the opening stages.
Dani Olmo - 9/10
Produced a couple of neat touches to work the space to fire home Spain's second goal, even if he got some help from Jules Kounde. Now joint-leading scorer at the tournament.
Nico Williams - 6/10
Did not have as much influence as recent games, but he still managed to keep Kounde honest down the left flank.
Alvaro Morata - 6/10
Experienced a quiet outing and is now an injury concern after a steward slipped into him after the game had finished.
SUBSTITUTES
Dani Vivian - 6/10
Did a reasonable job after being called off the bench to replace Navas and play out of position at right back.
Mikel Oyarzabal - 5/10
Touches were few and far between as Spain focused on protecting their lead rather than adding to their slender advantage.
Mikel Merino - 6/10
The midfielder did what he had to do, but there were no memorable moments like his late winner against Germany.
Martin Zubimendi - N/A
Ferran Torres - N/A
France player ratings vs. Spain: Mbappe fails to hit top form
GOALKEEPER
Mike Maignan - 7/10
Nothing he could do to prevent Yamal and Olmo from getting on the scoresheet. Played the sweeper-keeper role to negate Williams's threat in the first minute of the second period.
DEFENCE
Jules Kounde - 7/10
Was initially credited with an own goal before Olmo's strike was rightly credited to the Spaniard. Kept Williams relatively quiet and made several important tackles.
Dayot Upamecano - 6/10
Experienced a tough evening against Spain's mobile attack, but he still managed to make clearances throughout the game.
William Saliba - 6/10
Gave Morata very little, but won just two of his six ground duels in what was a tricky evening for the France backline.
Theo Hernandez - 6/10
Spurned a brilliant chance to pull France level in the second half as he blazed over the bar with his weaker right foot. Could not stop Yamal from cutting inside onto his favoured right foot.
MIDFIELD
N'Golo Kante - 6/10
Underwhelming performance from the Al-Ittihad midfielder. Failed to gain any control of the game before being withdrawn just after the hour mark
Aurelien Tchouameni - 6/10
Made 36 of his 38 passes, but he did pick up a yellow card for a clumsy foul on Morata.
Adrien Rabiot - 5/10
Outsmarted by Yamal for Spain's equaliser, allowing the youngster to shift the ball onto his favoured left foot.
ATTACK
Ousmane Dembele - 6/10
Created a couple of chances, including a cross which required Simon to take action. But his contributions ultimately failed to translate into a meaningful reward.
Kylian Mbappe - 6/10
Got off to a positive start after ditching his face mask. However, his assist proved to be the only bright point, and he spurned a golden opportunity to at least test Simon in the final few minutes of the contest.
Randal Kolo Muani - 7/10
Took his early header well to register France's first goal from open play in Euro 2024. Unable to produce another shot in the game and made way in the 62nd minute as Deschamps made several alterations.
SUBSTITUTES
Eduardo Camavinga - 6/10
Was unable to have any influence on the contest after being introduced as part of a triple change by Deschamps.
Antoine Griezmann - 5/10
Mustered just 10 touches in his substitute appearance, summing up what has been a difficult tournament for the 33-year-old attacker.
Bradley Barcola - 6/10
Produced a neat pass which led to Mbappe's late shot. Completed three dribbles, but was unable to help his side find the elusive equaliser.
Olivier Giroud - 5/10
Was sent on as a last-ditch attempt to keep France in the competition. Likely to be his final international appearance.