Der Internet Explorer 6 und sein Problem mit IDs und Klassen
Vor einer Weile hat mich der IE 6 wieder viel Zeit gekostet, weil er eine valide Seite mit validem Markup und validem CSS nicht korrekt anzeigen wollte. Irritierenderweise aber stellt der IE 6 die Dinge im Prinzip schon da, nur nicht in der von mir angewanten Methodik. Das lief schief: Der IE 6 ignorierte Klassen, die einem Container mit einer ID zugewiesen wurden, aber das eben nur teilweise. Die Lösung hatte ich mir vor mehr als einem Jahr mal notiert und hole es hier nun für euch nach.
Das Markup
Nehmen wir an, wir wollen einem Container ein Hintergrundbild mit auf den Weg geben:
Das CSS sieht dann dazu so aus:
width: 200px;
height: 50px;
background: #eee url("/images/standard.gif") no-repeat;
}
Die Darstellung sieht hier im IE 6 genau so aus, wie unter dem Firefox.
Jetzt möchte ich aber jeder statischen Seite ein anderes Hintergrundbild zuweisen. Damit ich immer einen Standard habe, definiere ich nun zusätzlich Klassen:
Das CSS sieht bei ein paar Seiten dann so aus:
width: 200px;
height: 50px;
background: #eee url("/images/standard.gif") no-repeat;
}
#footer.unterseite1 { background-image: url("/images/unterseite1.gif"); }
#footer.unterseite2 { background-image: url("/images/unterseite2.gif"); }
#footer.unterseite3 { background-image: url("/images/unterseite3.gif"); }
#footer.unterseite4 { background-image: url("/images/unterseite4.gif"); }
Interessanterweise stellt der nun IE 6 die “Unterseite 1” mit dem jeweiligem Bild dar. Bei der Seiten 2 – 4 wird das Standardbild angezeigt. Halten wir fest: Das Markup ist 100% valide ohne Fehler und Warnungen, das CSS ist ebenfalls validiert.
Wenn ich nun im CSS zuerst das Hintergrundbild für Seite 3 definiere und dann erst 1, 2 und 4, so wird das jeweilige Bild bei Seite 3 korrekt angezeigt, bei der Seite 1, die ja zuvor richig angezeigt wurde, wie auch bei den anderen nicht. Dort erscheint nun das Standardbild.
Die Fakten
Der Internet Explorer 6 hat Probleme, Klassen zu erkennen, sofern die Objekte ebenfalls eine ID enthalten.
Die Lösung
Da es offensichtlich auch kein Wordaround für dieses Problem gibt, musste ich mir anders helfen. Eine Lösung wäre gewesen, wenn ich jeder Unterseite eine eigene ID oder eben eine eigene Klasse (ohne ID) mit auf den Weg gebe, was aber heissen würde, dass ich im CSS die gleichen Anweisungen für verschiedene IDs oder Klassen definieren müsste.
In meiner Löung verzichte ich auf die Definierung einer eindeutigen ID und mache aus ihr eine weitere Klasse. Da man einem Objekt zwei oder mehr Klassen mit auf dem Weg geben kann, was übrigens auch der IE 6 beherrscht, finden wir so zur Lösung:
Das CSS sieht dann so aus:
width: 200px;
height: 50px;
background: #eee url("/images/standard.gif") no-repeat;
}
div.unterseite1 { background-image: url("/images/unterseite1.gif"); }
div.unterseite2 { background-image: url("/images/unterseite2.gif"); }
div.unterseite3 { background-image: url("/images/unterseite3.gif"); }
div.unterseite4 { background-image: url("/images/unterseite4.gif"); }
1 Dennis Frank schrieb am 17. März 2008 (17:03 Uhr)
2 Jens Grochtdreis schrieb am 17. März 2008 (18:03 Uhr)
3 macx schrieb am 17. März 2008 (19:03 Uhr)
4 Dominik schrieb am 17. März 2008 (20:03 Uhr)
5 Niko Fischer schrieb am 18. März 2008 (11:03 Uhr)
6 Heiko Fuhrmann schrieb am 27. Juli 2008 (21:07 Uhr)
7 macx schrieb am 28. Juli 2008 (08:07 Uhr)
8 qwertz schrieb am 13. August 2008 (21:08 Uhr)
9 Florian Stelter schrieb am 15. Februar 2009 (12:02 Uhr)
10 Computer Kiel schrieb am 04. Oktober 2010 (09:10 Uhr)
11 Opticshop schrieb am 29. März 2011 (15:03 Uhr)