Moin!
Das habe ich gesucht: http://bluerobot.com/web/layouts/layout2.html ---> Wirklich gut. Allerdings versteh ich das Style Sheet nicht ganz. Muss ich zugeben. Ich hab mal die Teile kopiert. Vielleicht kann ja jemand einen Gedankenanstoß geben.
...
p {
font:11px/20px verdana, arial, helvetica, sans-serif;
margin:0px 0px 16px 0px;
padding:0px;
}
#Content>p {margin:0px;}
Innerhalb des Elements mit der ID #Content jedes p-Tag, was eine Ebene drunter angesiedelt ist.
<div id="Content">
<p>Das ist gemeint</p>
<p>Das auch</p>
<div class="irgendwas><p>das aber nicht!</p>
...
#Content>p+p {text-indent:30px;}
Innerhalb des Elements mit der ID="Content" jedes p-Tag, welches direkter Nachfolger eines p-Tags ist, welches direkt eine Ebene unterhalb von dem ID-Element angesiedelt ist.
<div id="Content">
<p>Das ist nicht gemeint!</p>
<p>Das hier ist gemeint.</p>
<p>Das hier ist auch gemeint.</p>
...
...
#Header {
Selektor für das Element mit der ID="Header".
margin:50px 0px 10px 0px;
Die vier Zahlenangaben stehen für margin oben, rechts, unten, links (oder leicht zu merken: Nord, Ost, Süd, West).
padding:17px 0px 0px 20px;
Dito.
/* For IE5/Win's benefit height = [correct height] + [top padding] + [top and bottom border widths] */
height:33px; /* 14px + 17px + 2px = 33px */
Der IE rechnet die width und height falsch zusammen. Die width/height _beinhaltet_ fälschlich die Breiten von padding und border. Damit das Element nicht zu klein wird, muss man die width/height größer setzen, damit die gleiche Darstellung erreicht wird.
border-style:solid;
border-color:black;
border-width:1px 0px; /* top and bottom borders: 1px; left and right borders: 0px */
line-height:11px;
background-color:#eee;
/* Here is the ugly brilliant hack that protects IE5/Win from its own stupidity.
Thanks to Tantek Celik for the hack and to Eric Costello for publicizing it.
IE5/Win incorrectly parses the ""}"" value, prematurely closing the style
declaration. The incorrect IE5/Win value is above, while the correct value is
below. See http://glish.com/css/hacks.asp for details. */
voice-family: ""}"";
Das ist Bestandteil eines "Hacks". Der IE bricht bei der ersten schließenden }-Klammer die CSS-Definitionsregel ab. Alles nachfolgende wird ignoriert. Damit aber echte CSS-Browser nicht auch abbrechen, wird diese Klammer gut verpackt und der voice-family zugewiesen, einer Angabe, die heutige Bildschirmbrowser eher nicht beachten.
voice-family:inherit;
Damit aber kein Schaden angerichtet wird, wird die voice-family gleich noch einmal definiert: Sie soll dann doch lieber die Eigenschaften des übergeordneten Elements erben.
height:14px; /* the correct height */
Das ist jetzt die Definition der eigentlichen Höhe.
}
/* I've heard this called the "be nice to Opera 5" rule. Basically, it feeds correct
length values to user agents that exhibit the parsing error exploited above yet get
the CSS box model right and understand the CSS2 parent-child selector. ALWAYS include
a "be nice to Opera 5" rule every time you use the Tantek Celik hack (above). */
body>#Header {height:14px;}
Ein Selektor, der das Element mit der ID="Header" formatiert, welches sich direkt unterhalb des body-Tags befinden muss. Wird vom IE5 nicht verstanden, aber von Opera 5 (der leider auch bei der ersten }-Klammer die CSS-Regel abbricht, aber die height korrekt berechnet).
#Content {
margin:0px 210px 50px 10px;
padding:10px;
}
#Menu {
position:absolute;
...
line-height:17px;
/* Again, the ugly brilliant hack. */
voice-family: ""}"";
voice-family:inherit;
width:150px;
}
/* Again, "be nice to Opera 5". */
body>#Menu {width:150px;}
Dasselbe wie oben, nur weniger ausführlich kommentiert.
Meine Meinung zu diesem Hack: Ultraböse! Würde ich nie verwenden. Da werden Browserverhaltensweisen ausgenutzt, die in der nächsten Browserversion schon wieder ganz anders aussehen können. Stell dir nur vor, dass der IE irgendwann beigebracht kriegt, nicht an der ersten }-Klammer abzubrechen, aber die width/height immer noch falsch zu berechnen. Dann ist Asche, weil er die nachträgliche, für CSS-Verhältnisse korrekte Breite/Höhe auch mitkriegt. Oder die neue Version kann plötzlich richtig rechnen, bricht aber bei der ersten }-Klammer immer noch ab - dann ist auch Asche, weil dann die Breite/Höhe nicht mehr stimmt.
Und genau das ist passiert! Der IE6 schafft es plötzlich, nicht mehr die erste }-Klammer zu verstehen, sondern erkennt, dass diese in Anführungsstrichen escaped ist, und liest die CSS-Regel weiter. Zum Glück kann man ihn zwingen, die Breite/Höhe korrekt zu berechnen, indem man ihn in den Standards-Mode zwingt. Denn leider versteht er den nachfolgenden Selektor body>#ID immer noch nicht.
Kleiner Test gefällig:
<html>
<head>
<title>CSS-Hack-Test</title>
<style>
#test {
background-color:#F00;
voice-family:""}"";
voice-family:inherit;
background-color:#00F;
}
body>#test {
background-color:#0f0;
}
</style>
</head>
<body>
<div id="test">IE 5+ zeigt dies rot, IE6 blau, und echte Browser grün!</div>
</body>
</html>
Man muß damit leben, dass der IE die Breite teilweise falsch berechnet. Mit geschachtelten DIVs kann man sich aber ganz vernünftig aus der Affäre ziehen, indem man das äußere DIV auf die gewünschte Breite definiert, und erst dem inneren DIV border und padding-Werte verpaßt (die Breite bleibt undefiniert und wird dadurch so breit, wie durch das äußere Element Platz vorhanden ist).
- Sven Rautenberg