Kieran Trippier curled a magnificent free-kick into the top corner to leave goalkeeper Danijel Subasic stranded and give England a fifth minute lead.
Harry Kane came close to doubling their advantage before half-time, but after being put through on goal he put his effort too close to Danijel Subasic and then hit the post from the rebound at close range.
Ivan Perisic levelled for Croatia in the 68th minute, meeting a Sime Vrsaljko with an instinctive prod of the foot just in front of Kyle Walker’s head.
The match headed into extra-time with the two sides level on 90 minutes, and John Stones thought he had headed England back in front only for Vrsaljko to clear it off the line.
But it was the Croats who took the lead, with Mario Mandzukic drilled home 11 minutes from time after an instinctive header from Perisic played him in.