Darijo Srna broke the deadlock on 24 minutes when he beat Marcell Jansen to Danijel Pranjic's cross and fired home.
Croatia were gifted a second goal on 63 minutes when Ivan Rakitic's cross came off Lukas Podolski and rebounded off the post for Ivica Olic to slot home.
Podolski pulled a goal back with a late drive but Bastian Schweinsteiger's red card ended German hopes in injury time.
It was a famous victory for Croatia, and an echo of their 3-0 success over the same opposition in the 1998 World Cup quarter-finals, but it casts serious doubts over Germany's credentials for the European crown.
In another Group B match, Co-hosts Austria were given a Euro 2008 lifeline when Ivica Vastic scored a stoppage-time penalty against Poland.
Mariusz Lewandowski hauled down Sebastian Proedl and substitute Vastic slammed the penalty past Artur Boruc.
Poland's goal came when Roger Guerreiro converted a first-half cross from an offside position three yards out.
It was a dramatic end in Vienna and both sides' chances of qualifying for the quarter-finals remain slim, though Vastic's goal does send Croatia through to the last eight.
Italy will take on Romania and Holland will play versus France in group C matches on June 13.
Add new comment