[CSS] Unerwünschter Abstand zwischen floatenden Boxen im IE6 - was tun?

Status
Nicht offen für weitere Antworten.
#1
Unerwünschter Abstand zwischen floatenden Boxen im IE6 - was tun?

Die Ausgangssituation: Eine Box ist mit der float:left-Eigenschaft ausgezeichnet, und wird von der nachfolgenden Box mit einem der Boxenbreite entsprechenden linken Außenabstand rechts umflossen.

Markup:

Code:
<div id="wrapper">
     <div id="leftBox">leftBox</div>
     <div id="rightBox">rightBox</div>
</div>
Stylesheet:

Code:
#wrapper {
width:500px;
margin:0 auto;
border:1px solid #000;
}

#leftBox {
width:250px;
height:250px;
float:left;
background:#dfdfdf;
}

#rightBox {
height:250px;
margin-left:250px;
background:#cfcfcf;
}
Das Ergebnis in den Browsern:

float-container_modern-browser.jpg (Firefox, IE7, Netscape, Opera, Safari, usw.)

float-container_ie6.jpg (IE6)

Wie auf dem IE6-Screenshot zu erkennen ist, klafft zwischen den beiden Boxen eine Lücke, die drei Pixel beträgt. Daher wurde dieser Bug in der Vergangenheit "IE Three Pixel Gap" oder "IE Three Pixel Text-Jog" getauft.

Dieser Darstellungsfehler tritt meistens dann in Erscheinung, wenn die umfliessende Box (hier #rightBox) mit einer Höhenangabe ausgestattet ist.

Lösung:

Code:
#leftBox {
width:250px;
height:250px;
float:left;
background:#dfdfdf;
margin-right:0 !important; /* Gilt für die modernen Browser */
margin-right:-3px; /* Gilt für den IE6 und älter */
}

#rightBox {
height:250px;
margin-left:250px !important; /* Gilt für die modernen Browser */
margin-left:247px;  /* Gilt für den IE6 und älter */
background:#cfcfcf;
}
Die erste margin-Deklaration mit der !important-Regel ist für die modernen Browser bestimmt. Mit der angehängten !important-Regel wird dafür gesorgt, dass die Browser die nachfolgend gleichlautende CSS-Eigenschaft übergehen und sie ignorieren.

Wer den "Conditional Comment" bevorzugt, um den IE mit seinem spezifischen Stylesheet zu bedienen, kann die Korrektur selbstverständlich auch darin vornehmen, was dann die !important-Regel überflüssig macht.

Code:
<style type="text/css">
#wrapper {
width:500px;
margin:0 auto;
border:1px solid #000;
}

#leftBox {
width:250px;
height:250px;
float:left;
background:#dfdfdf;
}

#rightBox {
height:250px;
margin-left:250px;
background:#cfcfcf;
}
</style>
<!--[if lt IE 7]>
<style type="text/css">
#leftBox {
margin-right:-3px;
}
#rightBox {
margin-left:247px;
}
</style>
<![endif]-->

mfg Maik
 
Status
Nicht offen für weitere Antworten.