2012-06-10 9 views
26

Ich habe ein div um zwei Kinder gewickelt, einer schwebte links und der andere rechts. Ich möchte einen Rahmen und einen Hintergrund um die Kinder legen, aber das div hat eine Höhe von 0, da es sich nicht an die Größe der Kinder anpasst. HierWie man die Höhe eines div passt, um seine floated Kinder zu wickeln

ist ein Beispiel davon in Aktion: http://jsfiddle.net/VVZ7j/17/

ich die roten Hintergrund wollen den ganzen Weg hinunter gehen. Ich habe Höhe versucht: Auto, aber das hat nicht funktioniert.

Alle und alle Hilfe wäre dankbar, danke.

P.S. Ich möchte kein Javascript verwenden, wenn das möglich ist.

Antwort

58

Dies ist ein häufiges Problem beim Arbeiten mit Floats. Es gibt mehrere gebräuchliche Lösungen, die ich nach persönlicher Präferenz geordnet habe (bestes Vorgehen zuerst):

  1. Verwenden Sie das :: After CSS-Pseudoelement. Dies ist bekannt als "Clearfix" und funktioniert IE8 und höher. Wenn Sie Kompatibilität mit früheren Versionen von IE benötigen, this answer should help. Example.

    .parentelement::after { 
        content: ""; 
        display: table; 
        clear: both; 
    } 
    
  2. Fügen Sie die beiden Schwimmer in einen Behälter mit dem CSS-Attribut overflow: auto oder overflow: hidden. Dieser Ansatz kann jedoch Probleme verursachen (z. B. wenn eine QuickInfo die Kanten des übergeordneten Elements überlappt, wird eine Bildlaufleiste angezeigt). Example.

    <div style="overflow: auto"> 
        <div style="float: left"></div> 
        <div style="float: left"></div> 
    </div> 
    
  3. Fügen Sie dem übergeordneten Element eine festgelegte Höhe hinzu. Example.

    <div style="height: 200px"> 
        <div style="float: left"></div> 
        <div style="float: left"></div> 
    </div> 
    
  4. Machen Sie das Elternelement zu einem Float. Example.

    <div style="float: left"> 
        <div style="float: left"></div> 
        <div style="float: left"></div> 
    </div> 
    
  5. ein div nach den Schwimmern mit clear: both hinzufügen. Example.

    <div style="float: left"></div> 
    <div style="float: left"></div> 
    <div style="clear: both"></div> 
    
+2

Und tun Sie nicht # 1 für das Hinzufügen von zusätzlichen leeren, nicht-semantischen Elemente, die nur Dinge durcheinander bringen. – Rob

+0

Ich probierte tatsächlich no.1 und es hat nicht funktioniert (ich arbeite in WP so wahrscheinlich ich es an der falschen Stelle in der Vorlage), aber no.2 funktioniert ein Leckerbissen, danke! – WolfBookyr

+0

Vielen Dank für die sehr gründliche Erklärung. Jedes Mal, wenn ich auf dieses Problem gestoßen bin, habe ich immer # 1 benutzt, obwohl es so hässlich ist, aber ich hatte keine andere Lösung gesehen. Ich stieß auf einen Fall, bei dem das Hinzufügen eines zusätzlichen Divs keine Option war, ein wenig extra graben und Ihre Antwort gefunden haben. Jetzt bin ich bewaffnet und gefährlich! lol. Danke noch einmal. – MatthewLee

5

Fügen Sie overflow: hidden; zu #wrap hinzu. Dies ist ein clear fix. Hier einige Dokumentation über sie: http://positioniseverything.net/easyclearing.html

LE: Darüber hinaus gibt es mehrere Möglichkeiten, wie Sie dies erreichen können, in Abhängigkeit des Browsers compatibilty:

  1. Überlauf hinzufügen: versteckt an den übergeordneten Container.

#wrap { overflow: hidden; }

  1. ein Pseudoelement verwenden clear: both hinzuzufügen.

#wrap:after { clear: both; content: ""; display: table;}

  1. Die am häufigsten verwendete tehnique ist ein extra als letztes Element des Mutterbehälters hinzuzufügen.

<div style="clear:both"></div>

I preffer not den 3. ein verwenden, wie Sie zusätzlichen HTML-Markup zu bekommen.

3

Versuchen Sie, overflow: hidden zu Ihrem #wrapdiv hinzuzufügen.

0

Nur noch ein div mit Stil hinzufügen clear: both vor einem äußeren div dh hier schließen "wrap"

--Sample code--

<div id="wrap"> 
    <div id="left"> 
     <p>some content at left</p> 
    </div> 
    <div id="right"> 
     <p>some content at right</p> 
    </div> 
    <div style="clear:both"></div> 
</div> 
2

Ich bin gekommen, um diese "Micro-Clearfix" -Lösung von Nicolas Gallagher zu verwenden.

http://nicolasgallagher.com/micro-clearfix-hack/

/* For modern browsers */ 
.cf:before, 
.cf:after { 
    content:""; 
    display:table; 
} 

.cf:after { 
    clear:both; 
} 

/* For IE 6/7 (trigger hasLayout) */ 
.cf { 
    *zoom:1; 
} 

Fügen Sie einfach die zu Ihrem CSS und jedem Floats, fügen Sie den „cf“ Klasse der Umhüllung eines jeden Elements, das Kinder schwebte hat.

Verwandte Themen