The 2018 runners-up came through their second consecutive shootout after beating Japan also on penalties in the last 16 and will now face either the Netherlands or Argentina who play each other later.
In an evening filled with tension and drama, Brazil superstar Neymar thought he had won the game when he rifled in an extra-time goal for the five-time world champions.
Croatia substitute Bruno Petkovic's left-footed equaliser three minutes from the end of extra time drew his side level, breaking Brazilian hearts in Doha's Education City Stadium.
The Croats kept their composure from the penalty spot as Brazil's Marquinhos and Rodrygo failed to convert.
Croatia initially refused to be intimidated by their more illustrious opponents and in the first half successfully stifled most Brazil moves early.
Apart from a weak Vinicius Jr. shot, Brazil had little else to offer in terms of attack with Neymar off the pace and shut out by a hard-working backline.
It was Croatia who looked sharper, more skilled in their passing game and with a precise game plan, and by the end of the first half they had the upper hand in terms of possession.
A Neymar free kick just before the break did not trouble Croatia keeper Dominik Livakovic as the Brazilians, whose last win over a European opponent in the knockout phase came in their 2002 final victory over Germany, struggled to find any space.
They did, however, almost take the lead three minutes after the restart when Josko Gvardiol tried to clear the ball but almost turned it into his own goal.
Seconds later, claims for a hand ball by defender Josip Juranovic were shot down following a VAR review before Neymar was sent through by Richarlison in the 55th minute only to have his close-range effort blocked by Livakovic.
The Brazilians, who have now lost four of their last five World Cup quarter-finals all to European opposition, enjoyed a much better start to the second half and came close again in the 66th when Lucas Paqueta was denied by Livakovic.
The Croatia keeper was kept busy and stopped Neymar in the 76th and by that time had more saves in the match (seven) than his Brazil counterpart, Alisson, had in the entire tournament (five).
Livakovic parried another Paqueta shot five minutes later as the few hundred Brazil fans in the stands grew louder and more impatient and the game trickled over to extra time with Brazil coach Tite visibly nervous.
In stoppage time of the first period, Neymar, largely lacklustre until then, launched an attack outside the box, played two consecutive one-twos to bamboozle the tired Croatian defence and then rounded the keeper to equal Brazil great Pele's record of 77 international goals.
But the Croats refused to surrender with Petkovic's equaliser forcing penalties and coming out on top in the shootout with Livakovic saving Rodrygo's spot kick and Marquinos hitting the post.