То, что упомянул @BoltClock, довольно солидно. И здесь я просто хочу добавить еще несколько решений для этой проблемы. проверьте это поле w3c_collapsing . Зеленые части - потенциальная мысль, как эта проблема может быть решена.
Решение 1
Поля между плавающим блоком и любым другим блоком не разрушаются (даже между плавающим элементом и его дочерними элементами в потоке).
что означает , что я могу добавить float:left
к любому #outer
или #inner
DEMO1 .
Также обратите внимание, что float
будет недействительным auto
в поле.
Решение 2
Поля элементов, которые устанавливают новые контексты форматирования блока (такие как плавающие элементы и элементы с «переполнением», отличным от «видимого»), не разрушаются вместе со своими дочерними элементами в потоке.
кроме visible
, давайте введем overflow: hidden
в #outer
. И этот способ кажется довольно простым и порядочным. Мне это нравится.
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
overflow: hidden;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
Решение 3
Поля абсолютно расположенных ящиков не разрушаются (даже с их дочерними потоками).
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: absolute;
}
#inner{
background: #FFCC33;
height: 50px;
margin: 50px;
}
или
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: relative;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
position: absolute;
}
эти два метода нарушат нормальный поток div
Решение 4
Поля встроенных блоков не разрушаются (даже при наличии дочерних элементов).
такой же, как @enderskill
Решение 5
Нижний край элемента уровня блока в потоке всегда сворачивается с верхним пределом его следующего элемента уровня уровня блока в потоке, если только у этого элемента нет зазора.
Это не имеет большого отношения к вопросу, так как это разрыв между братьями и сестрами. Обычно это означает, что есть приставка, margin-bottom: 30px
а приставная margin-top: 10px
. Общая разница между ними 30px
вместо 40px
.
Решение 6
Верхнее поле элемента блочного потока сворачивается с верхним полем его первого дочернего элемента на уровне блока, если у элемента нет верхней границы, верхнего заполнителя и у дочернего элемента нет свободного пространства.
Это очень интересно, и я могу просто добавить одну верхнюю границу
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
border-top: 1px solid red;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
И также <div>
по умолчанию используется на уровне блоков, поэтому вам не нужно объявлять его намеренно. Извините за невозможность опубликовать более 2 ссылок и изображений из-за моей репутации новичка. По крайней мере, вы знаете, откуда возникла проблема, когда в следующий раз увидите нечто подобное.