Gunnar Bittersmann: IE6 liest falsche CSS Datei

Beitrag lesen

@@Perelina:

nuqneH

<link href="css/layout.css" media="screen, projection" rel="stylesheet" type="text/css"/>

Und beim Ausdrucken sollen deine Stile nicht gelten?

Am besten in HTML keine Medientypen angeben; dies gehört ins Stylesheet.

<!--[if IE 7]>
  <style type="text/css" media="all">@import  "/css/ie.css";</style>

Warum hier nicht auch '<link href="css/layout.css" rel="stylesheet" type="text/css"/>'?

Am liebsten wäre mir natürlich eine Lösung, bei der ich nur eine CSS Datei für alle Browser nutzen könnte.

JA!!!11einself

Es ist sinnvoll, Stilangaben für verschiedene Browser nicht im HTML zu trennen, sondern im Stylesheet – in dem einen Stylesheet für alle Browser.

Dazu nutzt du Hacks:

foo { bar: baz }  
  
* html foo { bar: quz }

Setzt für alle 'foo'-Elemente die Eigenschaft 'bar' auf den Wert "baz"; im IE < 7 auf den Wert "quz".

'* html foo' selektiert alle 'foo'-Elemente innerhalb des 'html'-Elements, welches Nachfahre eines beliebigen Elements ('*') ist. Da das 'html'-Element aber das Wurzelelement ist, also nicht Nachfahre eines anderen, gibt es solche Elemente nicht. Deshalb tut diese Regel gar nichts – in vernünftigen Browsern.

Nicht so im IE 6: Der tut so als wäre der '*' gar nicht da und liest 'html foo { bar: quz }', wendet die Regel also an.

*:first-child+html foo { bar: quz }

tut dasselbe für IE 7.

Leider kann man das nicht zusammenfassen: '* html foo, *:first-child+html foo { bar: quz }' funktioniert nicht, weil der IE 6 weder ':first-child' noch '+' kennt und deshalb die ganze Regel ignoriert.

Dies lässt sich für einen Hack ausnutzen, mit dem man Regeln nur für Mozilla (Firefox) angeben kann:

foo, x:-moz-any-link { bar: quz }

Da andere Browser die proprietäre Pseudoklasse '-moz-any-link' nicht kennen, ignorieren sie die Regel.

Auf die Art kommt man mit einem Stylesheet für alle Browser aus. Der große Vorteil daran ist, dass man die für die Browser verschiedenen Stilangaben für ein Element direkt untereinander notieren kann und sie damit immer in einem Blick hat.

Qapla'

--
Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)