2013-05-10 2 views
7

Ich habe folgendes Layout mit 2 Schwimmer Behälter:Löschen float für nur übergeordneten Container, nicht Vorfahren?

<div id="navigation" style="float: left; width: 150px; height: 200px; background-color: #eee">Navigation</div> 
<div id="container" style="margin-left: 150px; background-color: #f00"> 
    <div style="float: left; width: 50%; height: 100px; background-color: #ff0">Block</div> 
    <div style="float: left; width: 50%; height: 20px; background-color: #f0f">Block</div> 
    <div style="clear: both"></div> 
    <div style="float: left; width: 50%; height: 50px; background-color: #00f">This Block</div> 
</div> 

Sie können es bei http://jsfiddle.net/dNmNj/ sehen.

Meine Absicht ist, floats für zu löschen, so dass der blaue Block (This Block) direkt unter dem gelben (nicht dem rosa) bleibt. Das Ergebnis ist jedoch, dass es auch Floats für #navigation löschte.

Wie lösche ich Floats nur für den übergeordneten Container und nicht für alle Vorgängercontainer?

+0

nicht sicher, ob dies ist, was Sie wollen: http://jsfiddle.net/dNmNj/2/ (hinzugefügt 'overflow: hidden 'to' # container') – Pete

+0

Ja danke! Genau das wollte ich. Könntest du mir ein wenig erklären, wie sich der Überlauf auf Floats auswirkt? –

+0

haben eine Antwort hinzugefügt - der Overflow versteckte Sache hat etwas mit den Browsern zu tun hasLayout – Pete

Antwort

10

können Sie erreichen, was Sie von overflow:hidden zu Ihrem #container Hinzufügen möchten:

http://jsfiddle.net/dNmNj/2

dies ein guter Artikel über Clearing wird schwimmt

http://www.quirksmode.org/css/clearing.html

aber der Grund, deine blauen div dropping wo es ist, weil das #container div nicht floated ist - nur Rand links

Im Folgenden wird eine Überarbeitung, die mehr Cross-Browser kompatibel:

http://jsfiddle.net/dNmNj/3/

+0

@He Shiming: Außer der Erklärung ist falsch. 'overflow: hidden' löscht floats nicht, es ist kein hasLayout-Problem, wie ich oben erwähnt habe, und es gibt keinen großen Unterschied in der Browserkompatibilität zwischen den beiden hier angegebenen Beispielen. – BoltClock

+0

@BoltClock, könntest du klären, was "overflow: hidden" in diesem Fall macht? Ich arbeite mit Chrome und IE8 und habe gerade festgestellt, dass dieses Layout nicht in IE funktioniert. –

+0

@Pete, die Cross-Browser-Version funktioniert nicht ganz in IE8. Ich werde es versuchen und untersuchen. –