Matchen, en av de mest underhållande hittills i VM-slutspelet, i andra omgången i grupp F var bara inne i den andra minuten när Alphonso Davies nickade in 1–0.
Bayern Münchens snabbfotade stjärna tog en lång löpning, kroaterna hade inte koll på 22-åringen, som elegant använde pannan på Tajon Buchanans högerinlägg.
Kanadensarna firade vilt medan kroaterna undrade vad som hände.
Tids nog skulle rollerna vara ombytta. Kroatien, som aldrig förlorat sin andra match i ett VM eller EM, jobbade sig stadigt in i matchen, tog över och styrde matchen på sina villkor.
Andrej Kramaric fick en kvittering bortdömd för offside, men fick snart sin revansch.
Ivan Perisic spelade fram Kramaric, som med ett vänsterskott slog in 1–1 i Milan Borjans bortre hörn.
Med minuten kvar av ordinarie tid i första halvlek fick Kroatien betalt för sitt kraftiga spelövertag. Marko Livaja placerade in 2–1 när Borjan hade kroppstyngden på fel ben.
Halvvägs in i andra halvlek slog Kramaric, Bundesligaproffs i Hoffenheim, spiken i kistan med sitt tredje mål hittills i mästerskapet.
På tilläggstid gjorde Lovro Majer 4–1.
– Jag är besviken på resultatet. Det var inte lätt. Vi gjorde vårt bästa, vi kämpade hela matchen. Vi ser fram emot nästa match och förhoppningsvis får vi några poäng, säger Alphonso Davies.
Kroatien och Belgien går en avgörande match på torsdag om vilken av nationerna som får spela vidare.
För kroaterna räcker det med en poäng för att säkra en plats i åttondelsfinalen.
Marocko, som är tvåa bakom Kroatien i gruppen, möter Kanada.