Der IE und CSS – zwei Welten

Webentwicklung könnte einfach – und seien wir ehrlich: langweiliger – sein, wenn es nicht diese Browser aus Redmond gäb. Die Internet Explorer haben nicht nur in den unterschiedlichen Versionen unterschiedliche Bugs, sie verhalten sich auch ein wenig seltsam beim Lesen von CSS-Dateien.

Bekanntermassen kann ja noch nicht einmal der nagelneue IE8 mit allen verfügbaren CSS-Selektoren umgehen, weil sich Microsoft weigert, CSS3 zu implementieren. Doch wenn der IE Selektoren wie :last-child nicht kennt, sollte er sie wenigstens ignorieren. Das tut er zwar, aber leider ignoriert er einfach die komplette Regel, also auch Selektoren, die mit dem Unbekannten gruppiert sind. Tobias Kunisch hat diesen Bug in seinem Blog dokumentiert.

Es scheint Abstufungen dieses Bugs zu geben, aber als eiserne Regel bleibt für mich, daß man moderne Selektoren nur alleine stellen sollte, maximal mit anderen CSS3-Selektoren gruppiert. Einen ähnlichen Effekt kann man übrigens beobachten, wenn man IE7 und IE6 mit ihren jeweiligen Filtern ansprechen will.
Man kann folgende Regeln schreiben:


#selektor {color: black;} /* alle richtigen Browser */
* html #selektor {color: red;} /* IE6 */
*+html #selektor {color: red;} /* IE7 */

Würde man die beiden IE-Regeln in einer Zeile zusammenfassen, würden sie nicht interpretiert werden.

4 Kommentare

  1. Das ist ein völlig korrektes Verhalten. http://www.w3.org/TR/CSS2/syndata.html#rule-sets schreibt vor, daß die ganze Regel ignoriert werden muß, wenn sie einen unbekannten Selektor enthält.
    Daran halten sich *alle* Browser, soweit ich weiß.

    • Mmmmh, sollte es echt so sein, daß Microsoft etwas richtig macht? Spannend ist allerdings, daß Tobias keine Konsistenz im Verhalten feststellt. Der eine Selektor läßt die gesamte Regel im IE8 scheitern, im IE6 und 7 aber nicht. Der andere in allen. Wenn ich das so richtig im Kopf habe.
      Ich habe bei den IE-Stern-Filtern irgendwann gestutzt, weil ich nicht damit gerechnet hatte. Schließlich ignoriert der Browser ja auch Eigenschaften, die er nicht kennt. Ich kann gefahrlos „min-width“ definieren, ohne daß der IE6 die komplette Regel ignoriert.

      Ich finde, man sollte sich die im Artikel genannte Faustregel merken, um nicht – aus welchen Gründen auch immer – beim IE (welcher Nummerierung auch immer) auf die Nase zu fallen. Möglicherweise war hier mein Reflex, alles Böse auf der Welt nach Redmond zu schieben, voreilig. Das Ergebnis bleibt gleich.

  2. Der IE 8 ist in dem Punkt etwas genauer geworden und hat sich hierin den anderen Browsern genähert.

    Aber schon der IE 5 ignoriert Regeln meistens, wenn er einen Selektor nicht erkennt. »Meistens«, nicht »immer«, weil frühere IEs eher geneigt sind, Unbekanntes als Tippfehler zu behandeln, den die interne Fehlerkorrektur wieder repariert – also in Bekanntes wandelt.