Eine Frage, die mich in letzter Zeit öfter mal via E-Mail und Blog-Kommentar erreicht hat, ist die nach dem Sinn der browserspezifischen CSS-Präfixe wie bei -moz-box-shadow und -webkit-border-radius. Die Antwort auf die Frage wieso bauen die das nicht gleich richtig ein? ist recht einfach: Die CSS-Eigenschaften sind in 90% aller Fälle Work-In-Progress-Varianten der richtigen CSS3-Eigenschaften. Der CSS2.1-Standard schreibt vor: wenn etwas zwar teilweise, aber nicht vollständig implementiert ist, soll man als verantwortungsvoller Browsermacher das Prefix davorkleben um anzuzeigen: das ist noch nicht die richtige Implementierung, sondern (erst mal) nur unsere Implementierung.

Besonders anschaulich wird das am Beispiel von border-top-left-radius. Bei Webkit-Browsern rundet man die obere linke Ecke einer Box wie folgt ab:

-webkit-border-top-left-radius:10px;

Bei Firefox geht das hingegen wie folgt:

-moz-border-radius-topleft:10px;

Da ist nicht nur das Präfix unterschiedlich, sondern gleich der ganze Name der CSS-Eigenschaft – da steht also noch einige Arbeit für Webkit- und Gecko-Entwickler an. Aber sobald die Implementierung standardkonform umgesetzt ist, fliegt das Präfix raus. So ist es jüngst beim Firefox 3.5 geschehen, wo man schon vor einiger Zeit opacity korrekt umgesetzt hatte und dafür nun das alte -moz-opacity rausgeworfen hat.

Die restlichen 10% der CSS-Präfixe entfallen auf echte proprietäre CSS-Eigenschaften wie das -ms-filter des IE8. Mehr Infos zu CSS-Präfixen bzw. vendor specific CSS extensions gibt es in diesem feinen Artikel nebst weiterführenden Links von Bobby van der Sluis (via Guymon).