Kieran Trippier put the Three Lions ahead but goals from Ivan Perisic and Mario Mandzukic sealed Croatia's place in Sunday's final against France.
It was a dream start, as England took the lead in the 5th minute with a stunning free kick from Kieran Trippier after Dele Alli was brought down just outside the box.
The Tottenham defender's curling shot - reminiscent of a David Beckham strike - flew into the top corner and sparked jubilant scenes among England fans who had packed pubs and fan-zones across the country.
The goal was followed by a series of chances for England as Croatia struggled with the pace of the Three Lions' attack.
Harry Kane hit the post with a rebounded shot at a tight angle after his first effort was saved by Croatia's goalkeeper Danijel Subasic.
Minutes earlier Kane had been left one-on-one with Subasic but put his strike wide, although he had been flagged offside.
Jesse Lingard also went close after finding space at the edge of the box but his shot crept narrowly wide.
Croatia edged back into the game near the end of the first half and defender Dejan Lovren felt he should have had a penalty on the stroke of half time.
Lovren got in a tangle with Harry Maguire in England's box following a free-kick but the referee refused to give a spot-kick after consulting with VAR.
England continued to look strong at the start of the second half and Kane nearly got on the end of a terrific cross on the volley by Trippier.
Raheem Sterling, who was a constant threat throughout the game, had a decent shout for a penalty after he appeared to be tripped by Domagoj Vida.
Soon after Kyle Walker bravely blocked a shot by Ivan Perisic that looked to be flying into the net.
Croatia drew level in the 68th minute after Perisic fired in a shot after a cross from defender Sime Vrsaljko - setting up a nervous final 20 minutes for supporters as they saw England's slender lead disappear.
Croatia nearly took the lead four minutes later after sloppy defending allowed Perisic to nip in before his shot hit the post.
After a period of pressure from Croatia, Lingard nearly put England back in the lead with a strike across the face of goal.
But Croatia continued to pose a threat and a half-volley from striker Mario Mandzukic forced a great save from England goalkeeper Jordan Pickford.
As the game entered extra-time, England came agonisingly close to taking the lead when John Stones' header from a corner was cleared off the line.
Pickford, outstanding throughout the tournament, produced another sensational save at close range from Mandzukic.
Then came the moment that England fans were dreading: Juventus striker Mandzukic made no mistake in the second-half of extra time, striking a low left-footed shot past Pickford.
The 52-year wait for another major trophy goes on for the Three Lions and it will be Croatia who play France in Sunday's final.
England will now have to pick themselves up to face Belgium in the third place playoff on Saturday in Saint Petersburg.
Right now, however, that prospect will be sickening for the England players.
Some of the squad posted on social media shortly after the final whistle.
Harry Kane tweeted: "It hurts a lot. It will hurt for a while. We can be proud and we'll be back. Thanks for all your support."
Harry Maguire said he was "devastated" but thanked fans for their "incredible support".
Marcus Rashford posted: "Really tough right now but this team's special.. we'll be back. Hopefully this is the start of the future."
His Manchester United teammate, Jesse Lingard, added: "The squad we have is a great bunch of lads who are willing to learn and give everything and we can hold our heads high."