Croatia scored in the 109th minute to dash the hope of the English team appearing in the World Cup finals for the first time in 52 years.
Croatia came from behind to win 2-1 in extra time and reach their first-ever World Cup final.
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.
Croatia then 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.
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.
England paid the price for 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.
Croatia suddenly started playing with accuracy and purpose as England lost their shape and composure. Mario Mandzukic then struck in the 109th minute with a firm low finish to beat Pickford.
Croatia will meet France who defeated Belgium 1-0 on Sunday.