Wie kommt es, dass meine Float-Elemente nicht in ihrem übergeordneten Element sind?

Lesezeit: 3 Minuten

Benutzer-Avatar
dave

Im Grunde habe ich also dieses Wrapper-Div, und alle darin enthaltenen Elemente sind Floating-Elemente. Die einzige Sache ist, dass die Grenze des Wrapper-Div keine Floating-Elemente enthält. Beispiel:

<div id = "wrapper>
   <div id = "content"></div>
</div>

hier das css:

#wrapper
{
   width:         1000px;
   margin-left:   auto;
   margin-right:  auto;
   border:        1px solid;
} 

#content
{
   border:        1px solid;
   width:         850px;
   height:        400px;
   display:       block;
   float:         left;
}

Im Grunde genommen ist #content nicht innerhalb der Grenze von #wrapper eingeschlossen, sondern wird immer noch darin ausgerichtet, warum ist das so?

  • mögliches Duplikat von Welche Methode von ‘clearfix’ ist am besten?

    – Pekka

    8. Januar 2011 um 0:29 Uhr

  • Super, vielen Dank. Aber die letzte Antwort war einfacher zu erklären.

    – dave

    8. Januar 2011 um 0:46 Uhr

Benutzer-Avatar
Markus Whybrow

Sie müssen das Container-Div “clearfixen”.

Floating-Elemente werden bei der Berechnung der Abmessungen eines Containers nicht berücksichtigt, es gibt jedoch mehrere Problemumgehungen, um das gewünschte Ergebnis zu erzielen.

Das einfachste

Fügen Sie einfach ein Div wie dieses als letztes untergeordnetes Element in Ihrem Container-Div hinzu:

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

Wie @Pekka kommentiert, gibt es viele andere Möglichkeiten, den in dieser SO-Frage aufgeführten Effekt (ohne zusätzliches Markup) zu erzielen:

Welche ‘clearfix’-Methoden kann ich verwenden?

  • Da dieses div eine Höhe haben kann und es das Hinzufügen eines zusätzlichen Elements zum Dokument erfordert, wird diese Methode im Allgemeinen nicht bevorzugt.

    – QUentin

    8. Januar 2011 um 0:36 Uhr

  • @David True, ich bevorzuge die Verwendung einer Clearfix-Klasse, aber das erfordert offensichtlich ein wenig Einrichtung.

    – Marcus Whybrow

    8. Januar 2011 um 0:38 Uhr

  • Vielleicht nicht bevorzugt, aber es hat das Problem perfekt gelöst. Was ist also die andere bevorzugte Methode in einfachen Worten?

    – dave

    8. Januar 2011 um 0:47 Uhr

  • @dave Eine Klasse, die Sie auf den Container anwenden, der CSS verwendet, um Inhalt nach dem Container einzufügen, der seine Höhe über die schwebenden Kinder zieht. Dies wird bevorzugt, da es Ihren Markup-Quellcode semantisch glücklich hält (dh keine Divs vorhanden sind, die nichts vom Inhalt darstellen).

    – Marcus Whybrow

    8. Januar 2011 um 0:49 Uhr

  • @dave overflow: hidden wie ich in meiner Antwort sagte

    – QUentin

    8. Januar 2011 um 0:53 Uhr

Benutzer-Avatar
QUentin

Weil das Schwimmerpunkt ist, Ihnen zu erlauben, Dinge zu tun wie

ein Bild über mehrere Absätze erstrecken

Wenn Sie Elemente in einer Reihe anordnen möchten (mit optionalem Umbruch), dann suchen Sie nach Verwendung Flexbox stattdessen. Es ist ein Layout-Tool, das dafür entwickelt wurde.

div {
    display: flexbox;
    border: 2px solid blue;
}

img { 
    margin: 3px; 
}
<div>
  <img src="https://placekitten.com/100/100" alt="">
  <img src="https://placekitten.com/100/200" alt="">
  <img src="https://placekitten.com/200/100" alt="">
  <img src="https://placekitten.com/150/150" alt="">
  <img src="https://placekitten.com/75/100" alt="">
  <img src="https://placekitten.com/100/75" alt="">
  <img src="https://placekitten.com/75/75" alt="">
  <img src="https://placekitten.com/105/95" alt="">
</div>

Wenn schwimmt sind das richtige Werkzeug für Ihren Anwendungsfall, dann beschreibt Ed Eliot eine große Sammlung von verschiedene Möglichkeiten, einen Container zu erweitern, um seine schwebenden untergeordneten Elemente aufzunehmen. Generell empfehle ich die Einstellung overflow: hidden darauf (um einen neuen Blockformatierungskontext einzurichten).

div {
    overflow: hidden;
    border: 2px solid blue;
}

img { 
    float: left;
    margin: 3px; 
}
<div>
  <img src="https://placekitten.com/100/100" alt="">
  <img src="https://placekitten.com/100/200" alt="">
  <img src="https://placekitten.com/200/100" alt="">
  <img src="https://placekitten.com/150/150" alt="">
  <img src="https://placekitten.com/75/100" alt="">
  <img src="https://placekitten.com/100/75" alt="">
  <img src="https://placekitten.com/75/75" alt="">
  <img src="https://placekitten.com/105/95" alt="">
</div>

  • Hinzu kommt: Ein schwebendes Element fügt seinem übergeordneten Element keine Höhe/Breite hinzu. Also wenn die schwamm div ist das einzige, was in den Eltern divist das übergeordnete div 0 x 0 Pixel groß.

    – keithjgrant

    8. Januar 2011 um 0:34 Uhr

1013740cookie-checkWie kommt es, dass meine Float-Elemente nicht in ihrem übergeordneten Element sind?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy