Raheem Sterling gave England the lead against the run of play in the 16th minute by finishing off a swift counter-attack and Marcus Rashford fired into the top corner for the second on the half-hour after a superb pass from captain Harry Kane.
Sterling, who had not got an England goal for three years, struck again from another Kane assist to give Gareth Southgate’s side a big halftime lead against Spain, who had scored 12 goals in their last three games and beat England 2-1 last month.
Spain hit back with a header by substitute Paco Alcacer just before the hour and were almost gifted another goal after an error from Jordan Pickford although the keeper managed to tackle Rodrigo Moreno, sparking fierce penalty appeals from the hosts.
Captain Sergio Ramos got a second for Spain with a diving header in the eighth minute of added time with the last action of the match, leaving his side tasting their first defeat over 90 minutes since they were beaten 2-0 by Italy in Euro 2016.
Spain lead the group with six points after three games while England are second on four, leaving Croatia bottom with one point although the World Cup runners-up have a game in hand.
YOUNG ENGLAND
Gareth Southgate fielded the youngest England starting 11 this century and his side had to withstand a whirlwind of early Spain attacks at a packed Benito Villamarin stadium in Seville, with Pickford using his head to thwart Marcos Alonso.
England took the lead through a lightning quick break involving Kane, Sterling and Rashford, and the three forwards had their footprints all over the three goals which led to the home fans booing their team off the pitch at the interval.
Sterling and company were helped by their team mates’ aggressive pressing which unsettled Spain, a side usually so comfortable in possession but who were suddenly surrendering the ball with alarming frequency.
Luis Enrique’s side were a different prospect in the second half and kept threatening Pickford’s goal, with Marco Asensio smashing the ball wide and Alonso heading against the bar just before Ramos struck, but England hung on to claim a first win away to Spain since a Gary Lineker-inspired 4-2 victory in 1987.
The same day, Switzerland kept their Nations League semi-final hopes alive and sent Iceland down into the second tier with a 2-1 win in rainy Reykjavik in their League A Group 2 match.
Switzerland have six points from three games, level with group leaders Belgium who have a game in hand. Iceland have lost all three games and will finish bottom of the section.
Belgium host Iceland on November 15 before visiting Switzerland in what will be the group's decisive game three days later.
An Edin Dzeko brace handed Bosnia a 2-0 home win over Northern Ireland in an action-packed Nations League clash on Monday, which further consolidated their place on top of the second-tier's Group 3.
The result left the Bosnians on a maximum nine points from three games, ahead of Austria who have three points from two matches. Northern Ireland have none from three games.
UEFA Nations League results:
Iceland 1-2 Switzerland
Spain 2-3 England
Bosnia and Herzegovina 2-0 Northern Ireland
Estonia 3-3 Hungary
Finland 2-0 Greece
Luxembourg 3-0 San Marino
Belarus 0-0 Moldova