das ist aber nicht der sinn von css hacks sie per ua einzubauen,
Code:
* HTML $element {
anweisung: wert;
} nimmt nur der IE 6. weil der IE 6 als einziger browser * HTML als selektor ansieht. der selektor ist aber eigentlich schwachsinn weil * HTML ja nur heisst "alle elemente die HTML als element enthalten". und um HTML rum ist kein element was selektiert werden könnte.
der IE 6 der auch formatierungen für das HTML element selber annimmt (Opera und Firefox nicht, da html ja kein sichtbares element an sich ist) nimmt das aber weil * für ihn in dem fall auch "kein" element mit einschliesst. (oder er denkt sich da was)
der IE 7 indes reagiert nicht mehr auf den selektor * HTML, hat aber noch ähnliche darstellungsfehler wie der IE 6, deswegen waren auch alle seiten mit css hacks kaputt nach ie 7 update.
allerdings nimmt der ie 7 stattdessen:
Code:
*+HTML $element {
anweisung: wert;
} genauso unsinnig wie * HTML, allerdings wird dieser selektor wiederrum nicht vom ie 6 interpretiert (+ mag er glaub ich noch nicht) aber auch von keinem anderen browser (opera soll denn irgendwann mal interpretiert haben, tut das in den 9.2er Versionen definitiv aber nicht mehr).
Alle anderen Browser ignorieren diese deklarationen im css, da die selektoren für sie richtigerweise keine bedeutung haben. es gibt kein element um HTML und HTML kann natürlich garkeine styles haben laut standards. Dank der Selektoren und dem umstand das für den ie auch HTML einen style haben kann ergeben sich aus diesen anweisungen die o.g. css hacks. Ganz ohne Parsing fehler und ohne Useragent überprüfung.
hier mal ein testcase:
stylesheet:
Code:
#box {
width: 200px;
height: 200px;
background-color: green;
}
* HTML #box {
background-color: red;
}
*+HTML #box {
background-color: blue;
} das html element was im <body> stehen sollte:
Code:
<div id="box">Ich wechsle meine farbe</div>
Ergebnisse:
Firefox: grünes viereck
Opera: Grünes Viereck
Safari: Grünes Viereck
Konqueror: Grünes Viereck
Internet Explorer 6: rotes Viereck
Internet Explorer 7: blaues Viereck
Und im IE 8 ergibt mein testcase:
Internet Explorer 8: rotes Viereck
also nimmt der IE 8 wieder * HTML. Kurios ist allerdings das ich ihn in einigen tests heute auch den *+HTML selektor wieder interpretieren sehen habe (sieht man anhand der developer toolbar was interpretiert wird und was nicht)
quod erat demonstrandum.
Der IE 8 ist nicht konform mit gängigen Webstandards, da sonst die selektoren garnicht akzeptiert würden.
Wenn ich das mal in einer richtigen umgebung untersucht habe, wo komplexes css genutzt wurde, kann ich mehr über das verhalten des ies sagen.
Anne van Kaesteren hat einen sehr "netten" blogpost zum IE 8 geschrieben:
http://annevankesteren.nl/2008/03/ie8-bad
Cross Site Ajax ist natürlich ohne fixe sicherheitsstandards ein riesiges sicherheitsrisiko, nur mal als anmerkung. So kann eine per XSS korrumpierte seite über ajax requests von anderen domains uneingeschränkt daten nachladen und manipulieren, teilweise login daten an dubiose server posten und und und.
edit:
bei einem gescheiten doctype bewirkt
PHP-Code:
<meta http-equiv="X-UA-Compatible" content="IE=7" />
das das viereck blau ist. also erfolgreiches switchen des rendering modes zu Internet Explorer 7 Verhalten.
edit 2:
http://validator.w3.org erkennt das html mit dem X-UA-Compatible string ebenfalls als valides html an.