Apa yang @BoltClock sebutkan cukup solid. Dan Di sini saya hanya ingin menambahkan beberapa solusi untuk masalah ini. periksa margin w3c_collapsing ini . Bagian hijau adalah pemikiran potensial bagaimana masalah ini dapat diselesaikan.
Solusi 1
Margin antara kotak mengambang dan kotak lainnya tidak runtuh (bahkan antara float dan anak-anak in-flow-nya).
itu berarti saya dapat menambahkan float:left
ke salah satu #outer
atau #inner
demo1 .
juga pemberitahuan yang float
akan membatalkan auto
margin.
Solusi 2
Margin elemen yang membentuk konteks pemformatan blok baru (seperti mengapung dan elemen dengan 'luapan' selain 'terlihat') tidak runtuh dengan anak-anak mereka yang mengalir.
selain visible
, mari dimasukkan overflow: hidden
ke dalam #outer
. Dan cara ini tampaknya cukup sederhana dan layak. Saya suka itu.
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
overflow: hidden;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
Solusi 3
Margin kotak yang benar-benar diposisikan tidak runtuh (bahkan dengan anak-anak mereka yang sedang mengalir).
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: absolute;
}
#inner{
background: #FFCC33;
height: 50px;
margin: 50px;
}
atau
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: relative;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
position: absolute;
}
dua metode ini akan mematahkan aliran normal div
Solusi 4
Margin kotak inline-blok tidak runtuh (bahkan dengan anak-anak mereka yang sedang mengalir).
sama dengan @enderskill
Solusi 5
Margin bawah elemen level blok in-flow selalu runtuh dengan margin teratas dari saudara level blok in-flow berikutnya, kecuali jika saudara tersebut memiliki izin.
Ini tidak banyak berhubungan dengan pertanyaan karena itu adalah jatuhnya margin antara saudara kandung. itu umumnya berarti jika kotak atas memiliki margin-bottom: 30px
dan kotak saudara margin-top: 10px
. Margin total di antara mereka 30px
bukan 40px
.
Solusi 6
Margin atas elemen blok in-flow runtuh dengan margin top anak tingkat blok in-flow pertama jika elemen tidak memiliki batas atas, tidak ada bantalan atas, dan anak tidak memiliki izin.
Ini sangat menarik dan saya bisa menambahkan satu garis batas atas
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
border-top: 1px solid red;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
Dan juga <div>
adalah blok-level secara default, jadi Anda tidak perlu mendeklarasikannya dengan sengaja. Maaf karena tidak dapat memposting lebih dari 2 tautan dan gambar karena reputasi pemula saya. Setidaknya Anda tahu dari mana masalahnya berasal saat Anda melihat sesuatu yang serupa.