England wing-back Kieran Trippier had opened the scoring from a brilliant free kick in just the fifth minute, curling the ball over the Croatia wall and into the top right-hand corner.
England boss Gareth Southgate - on the day that was dubbed Waistcoat Wednesday in his honour back home - named an unchanged side to face Croatia, while Zlatko Dalić surprisingly made just one change from the side that beat Russian Federation on penalties in the quarter-final, bringing in midfield Marcelo Brozović for striker Andrej Kramarić.
Mario Mandzukic became Croatia's hero when he put Croatia in front with 11 minutes to go after a great through ball from Pivaric.
Croatia's legs at the start seemed to carry the weight of so many minutes in the knockout stage, and a pressing England went up quickly.
Croatia were "underestimated" by English pundits who lacked respect, says captain Luka Modric.
"Croatia were magical in finishing the English", they said. Defender Sime Vrsaljko lofted a pass toward England's goal.
"We've got to keep getting over those hurdles and I know we talked about the success of the younger teams but this is a much harder, much bigger level for the players and the belief is building as things are happening". But Kane said the team could "hold our heads held high" as they "went further than anybody thought".
Defender Vrsaljko was also instrumental, clearing a shot off the line in the first half of extra time as well as setting up Perisic's equaliser.
France will be favourites on Sunday, but don't write Croatia off.
England's Marcus Rashford covers his face after losing the semi final.
Click through the mini-gallery above to see pictures of Croatia's celebrations after they qualified for the World Cup final!
As well as scoring, Perisic also hit the post for the second straight game and set up Mandzukic's victor, heading a poor clearance toward the Juventus striker to score. They scored an hour in, and finally netted the winning second goal in extra time.
But Croatia rallied after the break and forced extra-time through Ivan Perisic's flying finish, eventually wrapping up victory through Mario Mandzukic in the second half of the additional period, taking them to the first final in their history.