2008-10-09 4 views
13

Ich möchte ein einfaches Feld mit einer Kopfzeile erstellen, die einen Titel und einige Werkzeugschaltflächen enthält. Ich habe das folgende Markup:Seltsames Float-Verhalten in IE7

<div style="float:left"> 
    <div style="background-color:blue; padding: 1px; height: 20px;"> 
     <div style="float: left; background-color:green;">title</div> 
     <div style="float: right; background-color:yellow;">toolbar</div> 
    </div> 
    <div style="clear: both; width: 200px; background-color: red;">content</div> 
</div> 

Dies macht in Firefox und Chrome:

http://www.boplicity.nl/images/firefox.jpg

jedoch IE7 total vermasselt und setzt das Recht schwebte Element rechts von der Seite:

http://www.boplicity.nl/images/ie7.jpg

Kann dies behoben werden?

+0

Sie müssen möglicherweise ein wenig mehr Kontext für diese Frage geben. Sie sagten, dass der Inhaltsbereich Tabellen unterschiedlicher Größe enthalten wird? –

+1

Nützlich http://css-class.com/articles/explorer/floats/floatandcleartest1.htm – elclanrs

Antwort

23

angeben Breite. Wenn diese Breite in Ihrem Inhalt div bedeutet dies die gesamte Breite der Box ist, fügen Sie es einfach an den äußersten div und (optional) entfernen Sie es von Inhalt, wie folgt aus:

<div style="float:left; width: 200px;"> 
    <div style="background-color:blue; padding: 1px; height: 20px;"> 
     <div style="float: left; background-color:green;">title</div> 
     <div style="float: right; background-color:yellow;">toolbar</div> 
    </div> 
    <div style="clear: both; background-color: red;">content</div> 
</div> 
+7

Das behebt es. Die Größe des Inhalts kann jedoch nicht von vornherein bekannt sein. Auf meiner Site enthält es normalerweise Tabellen, deren Breite wachsen kann. –

-2

Machen diesen <div style="background-color:blue; padding: 1px; height: 20px;> der Elternteil der 2 floating divs in äußerster div auch clear:all

+0

Sorry, das hat nicht geholfen. Hier sind die Screenshots: www.boplicity.nl/images/firefox.jpg www.boplicity.nl/images/ie7.jpg –

3

Dies ist nur eine kurze antworte, also halte ich meine Hände hoch, wenn es nicht klappt. Ich denke Markos Lösung wird wahrscheinlich funktionieren, wenn Sie nur die Breite und nicht die Breite hinzufügen. Wenn Sie versuchen, auch für ie6 zu sorgen, müssen Sie möglicherweise einen Hack verwenden, da die minimale Breite von ie6 und seinen Nachkommen nicht unterstützt wird.

Das sollte also mit IE7 und anderen modernen Browsern funktionieren. Stellen Sie die Mindestbreite auf das ein, was geeignet ist.

<div style="float:left; min-width: 200px;"> 
    <div style="background-color:blue; padding: 1px; height: 20px;"> 
     <div style="float: left; background-color:green;">title</div> 
     <div style="float: right; background-color:yellow;">toolbar</div> 
    </div> 
    <div style="clear: both; background-color: red;">content</div> 
</div> 
+0

Entschuldigung, min-width hat keine Wirkung in diesem Fall –

2

Ich reparierte es jQuery mit dem Verhalten der Nicht-IE-Browser zu emulieren:

// IE fix for div widths - size header to width of content 
    if (!$.support.cssFloat) { 
     $("div:has(.boxheader) > table").each(function() { 
       $(this).parent().width($(this).width()); 
     }); 
    } 
+0

Wie beantwortet das die ursprüngliche Frage? – Craig

+0

Es behebt das Problem. Anstatt die Breiten statisch wie bei anderen Postern einzustellen, setze ich sie jetzt dynamisch. –

+5

Das Werfen einer 50K Javascript-Bibliothek ist nicht die beste Lösung, wenn ein CSS-Hack das beheben kann. – Rob

1

Versuchen position:relative; zu Eltern-Elemente und für das Kind-Element setzen. Es hat das Problem für mich gelöst.

+3

hat bei mir nicht funktioniert –

+0

hat auch nicht funktioniert. – Ben

1

In letzter Zeit wissen, dass die richtigen Floated-Elemente mit den Divs vor den anderen Elementen angehängt werden müssen. Dies ist die einfachste Lösung, ohne eine Änderungslinie hinzuzufügen.

<div style="background-color:blue; padding: 1px; height: 20px;"> 
    <div style="float: right; background-color:green;">title</div> 
    <div style="float: left; background-color:yellow;">toolbar</div> 
</div> 
+0

Das ist richtig, jedoch ist der wichtige Unterschied hier, dass dein äußeres "div" nicht floated ist. Wenn Sie das floaten, funktioniert es nicht. – kasimir

+0

+1 das funktionierte in meinem Fall, danke – soupy1976