2013-11-20 21 views
5

Die meisten Clearfix-Techniken beinhalten das Hinzufügen von Dingen ganz unten im übergeordneten Container, und ich bevorzuge den Pseudo-Element-Ansatz am meisten, da dies nicht der Fall ist Fügen Sie nicht benötigte Elemente in den HTML-Code ein.HTML/CSS: Floating-Elemente in der Mitte löschen, ohne unnötige Tags hinzuzufügen

Allerdings habe ich kürzlich festgestellt, dass ich es mit einem Container zu tun habe, in dem einige Kinder schweben, aber nicht alle. Sagen Sie den ersten beiden Kindern, dass die ersten Schwimmer übrig sind und der zweite Schwimmer nach rechts. Ich brauche einen Weg, um den Float direkt nach dem zweiten Element zu löschen, damit der Inhalt nicht dazwischen gequetscht wird. Gibt es eine Möglichkeit, Floating-Elemente in der Mitte zu löschen, ohne ein Clearfix-Element hinzuzufügen?

Unten ist ein Beispiel:

HTML

<div class="container"> 
    <div class="child"> 
     first child! 
    </div> 
    <div class="child"> 
     second child! 
    </div> 
    <div class="child"> 
     third child! 
    </div>  
</div> 

CSS

.container { 
    width: 200px; 
} 

.child:nth-child(1) { 
    float: left; 
    background: yellow; 
} 

.child:nth-child(2) { 
    float: right; 
    background: red; 
} 

.child:nth-child(3) { 
    background: blue; 
    color: white; 
} 

diese jsfiddle Bitte beachten Sie, um zu sehen, was ich jetzt habe.

Antwort

9

Verwenden Sie einfach clear: both; auf dem 3 rd Element, auf diese Weise haben Sie nicht <div style="clear: both;"></div> nach dem Floats zu verwenden.

.child:nth-child(3) { 
    background: blue; 
    color: white; 
    clear: both; 
} 

Demo


Auch wenn, wann immer Sie suchen, um ein übergeordnetes Element zu löschen, ohne Hinzufügen eines zusätzlichen Element oder mit overflow: hidden;, die clear schwebt eine schmutzige Art und Weise ist, können Sie eine class rufen das Mutterelement, mit den Eigenschaften unter

.clear:after { 
    content: ""; 
    display: table; 
    clear: both; 
} 

Zum Beispiel

<div class="wrapper clear"> 
    <div class="left_floated_div"></div> 
    <div class="right_floated_div"></div> 
</div> 
+0

Danke für die Beantwortung, alle sind großartige und offensichtliche Antworten, aber ich werde deins akzeptieren, da es mehr Informationen hat. Und Junge, oh Junge, ich war so dumm, keine so offensichtliche Lösung zu sehen ... Benutze einfach alles, was danach kommt, um den Float zu räumen! Nebenbei gesagt, gibt es, wenn ich mehrere Elemente abwechselnd links und rechts schwebe, sowieso, dass sie eine neue Zeile auf jedem verbleibenden Float beginnen sollen, anstatt sie alle auf derselben Linie zu stauen? Ohne Breite auf ihnen einzustellen. –

+1

@Xavier_Ex Ich habe auch eine Antwort [hier] (http://Stackoverflow.com/a/12871734/1542290), die ein bisschen Floats zu deckt;) und Sie begrüßen ... –

+0

@Xavier_Ex und für Ihre Frage, ändern das DOM, das ist eine gute Übung, um die schwebenden Elemente in einem Wrapper-Element zu wickeln, und verwenden Sie 'clear' Klasse, die ich bereits in meiner Antwort http: // jsfiddle vorgeschlagen habe.net/dJxD4/9/ –

1

ein klares hinzufügen: beide; im 3. Kind hilft:

.child:nth-child(3) { 
    background: blue; 
    color: white; 
    clear:both; 
} 
+2

Die gleiche Antwort von Mr.Alien – DaniP

1

Sie müssen die clear property verwenden.

Für Ihr Beispiel:

.child:nth-child(3) { 
    clear: both; 
} 

In jsfiddle.

+2

Die gleiche Antwort von Mr.Alien – DaniP