Was @BoltClock erwähnt hat, ist ziemlich solide. Und hier möchte ich nur einige weitere Lösungen für dieses Problem hinzufügen. Überprüfen Sie diesen w3c_collapsing-Rand . Die grünen Teile sind der mögliche Gedanke, wie dieses Problem gelöst werden kann.
Lösung 1
Die Ränder zwischen einer schwebenden Box und einer anderen Box fallen nicht zusammen (nicht einmal zwischen einem Float und seinen untergeordneten Elementen).
das heißt, ich kann float:left
entweder #outer
oder #inner
demo1 hinzufügen .
Beachten Sie auch, dass float
dies die auto
In-Marge ungültig machen würde .
Lösung 2
Ränder von Elementen, die neue Blockformatierungskontexte einrichten (z. B. Floats und Elemente mit einem anderen als "sichtbaren" Überlauf), werden nicht mit ihren untergeordneten Elementen zusammengeführt.
ausgenommen visible
, Put - Lassen Sie uns overflow: hidden
in #outer
. Und dieser Weg scheint ziemlich einfach und anständig. Ich mag das.
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
overflow: hidden;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
Lösung 3
Die Ränder absolut positionierter Kisten kollabieren nicht (auch nicht bei ihren unterströmten Kindern).
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: absolute;
}
#inner{
background: #FFCC33;
height: 50px;
margin: 50px;
}
oder
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: relative;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
position: absolute;
}
Diese beiden Methoden unterbrechen den normalen Fluss von div
Lösung 4
Die Ränder von Inline-Block-Boxen fallen nicht zusammen (auch nicht bei ihren In-Flow-Kindern).
ist das gleiche wie @enderskill
Lösung 5
Der untere Rand eines In-Flow-Block-Level-Elements kollabiert immer mit dem oberen Rand seines nächsten In-Flow-Block-Level-Geschwisters, es sei denn, dieses Geschwister hat Freiraum.
Dies hat nicht viel mit der Frage zu tun, da es sich um den kollabierenden Spielraum zwischen Geschwistern handelt. es bedeutet im Allgemeinen, wenn eine Top-Box hat margin-bottom: 30px
und eine Geschwister-Box hat margin-top: 10px
. Die Gesamtspanne zwischen ihnen ist 30px
statt 40px
.
Lösung 6
Der obere Rand eines In-Flow-Blockelements wird mit dem oberen Rand des ersten untergeordneten In-Flow-Blockelements reduziert, wenn das Element keinen oberen Rand, keine obere Polsterung und das Kind keinen Abstand hat.
Das ist sehr interessant und ich kann nur eine obere Grenzlinie hinzufügen
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
border-top: 1px solid red;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
Und <div>
ist ebenfalls standardmäßig auf Blockebene, sodass Sie es nicht absichtlich deklarieren müssen. Es tut mir leid, dass ich aufgrund meines unerfahrenen Rufs nicht mehr als 2 Links und Bilder posten kann. Zumindest wissen Sie, woher das Problem kommt, wenn Sie das nächste Mal etwas Ähnliches sehen.