Те, що згадував @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 посилань та зображень через мою репутацію початківця. Принаймні ви знаєте, звідки виникає проблема наступного разу, коли ви бачите щось подібне.