Mario Mandzukic scored in the 109th minute as Croatia came from behind to beat England 2-1 after extra time and reach their first World Cup final, where they will face France on Sunday.
England, appearing in their first semi-final since 1990, had looked on course for their first final since 1966 as they led through Kieran Trippier’s fifth-minute free kick and totally dominated the opening half.
Croatia, in their first semi since 1998, levelled through Ivan Perisic after 68 minutes and then looked the more dangerous side.
It stayed level at 90 minutes, meaning Croatia faced extra time for the third successive game, having got past Denmark and Russia on penalties.
But just when it looked as if they would become the first team to appear in three shootouts at a single World Cup Mandzukic struck with a well-taken low shot.
“It’s tough, we’re gutted,” said England’s captain and the tournament’s current top-scorer Harry Kane. “We worked so hard, the fans were amazing, it was a tough game, a 50-50 game. When we look back we will think there’s the stuff we could have done better.
“We worked as hard as we could… it hurts, it hurts a lot and it will hurt for a long time. We have had a fantastic journey, further than we thought.”
Earlier, England had got off to a flying start when Trippier curled a superb free-kick into the top corner.
It was his first goal for his country, England’s 12th of the tournament and ninth from a set-piece, but they should have added more from open play as they revelled in the space they were being given in the first half.
Harry Kane shot weakly at Danijel Subasic when through, then forced the rebound against a post and Raheem Sterling was a constant thorn in the Croatia defence, though again his final ball was too often astray.
England paid the price for those early misses when Perisic showed great determination to get in front of Kyle Walker to meet a curling Sime Vrsaljko cross and though his boot was arguably high, Walker was stooping and there were few complaints.