Saya memiliki header div sebagai elemen pertama di wrapper div saya, tetapi ketika saya menambahkan margin atas ke h1 di dalam header header itu mendorong seluruh header header ke bawah. Saya menyadari ini terjadi setiap kali saya menerapkan margin atas ke elemen pertama yang terlihat pada halaman.
Berikut ini cuplikan kode sampel. Terima kasih!
div#header{
width: 100%;
background-color: #eee;
position: relative;
}
div#header h1{
text-align: center;
width: 375px;
height: 50px;
margin: 50px auto;
font-size: 220%;
background: url('../../images/name_logo.png') no-repeat;
}
<div id="header">
<h1>Title</h1>
<ul id="navbar"></ul>
</div>
overflow:hidden
lebih baik untuk 90% kasus.overflow: hidden
atauoverflow: auto
dapat menyebabkan efek samping yang tidak diinginkan, beberapa di antaranya mungkin tidak Anda lihat pada pandangan pertama. Saya telah menemukan bahwa mengubahmargin
untukpadding
melakukan trik, seperti jawaban di bawah ini menyarankan. Namun, masih tidak mengerti mengapa seluruh masalah terjadi.Saya tidak memiliki penjelasan yang solid pada mengapa hal ini terjadi, tapi aku sudah tetap ini dengan mengubah
top-margin
ketop-padding
, atau menambahkandisplay: inline-block
dengan gaya elemen.EDIT: Ini teoriku
Saya punya perasaan itu ada hubungannya dengan bagaimana margin diciutkan (digabungkan).
dari W3C Collapsing Margins :
Teori saya adalah bahwa sejak elemen pertama Anda berada di sebelah tubuh, dua margin digabungkan dan diterapkan ke tubuh: ini memaksa konten tubuh untuk mulai di bawah margin yang diterapkan, sesuai dengan model kotak .
Ada situasi di mana margin tidak runtuh yang mungkin layak untuk dimainkan (dari Collapsing Margins ):
sumber
Ini adalah beberapa cara untuk menghindari runtuhnya margin antara elemen orangtua-anak. Gunakan yang sesuai dengan gaya Anda:
display
ke selainblock
.float
ke selainnone
.padding
. Misalnya jika sudahmargin-top: 10px
, ganti denganpadding-top: 10px;
.position
(absolute
ataurelative
) dengan atributtop
,bottom
dll Sebagai contoh jika Anda memilikimargin-top: 10px
, ganti denganposition: relative; top: 10px;
.padding
atau aborder
di sisi di mana margin runtuh, ke elemen induk . Perbatasan dapat 1px dan transparan.overflow
ke selainvisible
ke elemen induk .sumber
Saya tahu ini adalah masalah lama, saya sudah sering melihatnya. Masalahnya adalah bahwa semua perbaikan di sini adalah peretasan yang berpotensi memiliki konsekuensi yang tidak diinginkan.
Pertama, ada penjelasan mudah untuk masalah root. Karena cara runtuh margin bekerja, jika elemen pertama di dalam wadah memiliki margin atas, margin atas itu secara efektif diterapkan pada wadah induk itu sendiri. Anda dapat menguji ini sendiri dengan melakukan hal berikut:
Dalam debugger, buka ini dan arahkan div. Anda akan melihat bahwa div itu sendiri sebenarnya ditempatkan di mana margin atas elemen H1 berhenti . Perilaku ini dimaksudkan oleh browser.
Jadi ada perbaikan yang mudah untuk ini tanpa harus menggunakan peretasan aneh, seperti sebagian besar posting di sini (tidak ada penghinaan yang dimaksudkan, itu hanya kebenaran) - cukup kembali ke penjelasan asli -
...if the first element inside a container has a top margin...
- Setelah itu, Anda perlu elemen pertama dalam sebuah wadah yang TIDAK memiliki margin atas. Oke, tapi bagaimana Anda melakukannya tanpa menambahkan elemen yang tidak mengganggu dokumen Anda secara semantik?Mudah! Elemen semu! Anda bisa melakukan ini melalui kelas atau mixin yang telah ditentukan. Tambahkan
:before
elemen pseudo:CSS melalui kelas:
Dengan ini, mengikuti contoh markup di atas Anda akan memodifikasi div Anda seperti itu:
Mengapa ini bekerja?
Elemen pertama dalam sebuah wadah, jika tidak memiliki margin atas, menetapkan posisi awal dari margin atas elemen berikutnya. Dengan menambahkan
:before
elemen pseudo, browser sebenarnya menambahkan elemen non-semantik (dengan kata lain, bagus untuk SEO) ke dalam wadah induk sebelum elemen pertama Anda.Q. Mengapa tingginya: .0000001em?
A. Dibutuhkan ketinggian untuk browser untuk mendorong elemen margin ke bawah. Ketinggian ini secara efektif nol, tetapi masih memungkinkan Anda untuk menambahkan padding ke wadah induk itu sendiri. Karena secara efektif nol, tidak akan berpengaruh pada tata letak wadah. Cantik.
Sekarang Anda dapat menambahkan kelas (atau lebih baik, di SASS / KURANG, mixin!) Untuk memperbaiki masalah ini alih-alih menambahkan gaya tampilan aneh yang akan menyebabkan konsekuensi yang tak terduga ketika Anda ingin melakukan hal-hal lain dengan elemen Anda, dengan sengaja menghilangkan margin pada elemen dan / atau menggantinya dengan padding, atau posisi aneh / gaya mengambang yang benar-benar tidak dimaksudkan untuk menyelesaikan masalah ini.
sumber
display: flex
akan bekerja dalam hal ini. Berikan elemen indukdisplay: flex;
dan berikan margin sesuai kebutuhan Anda padah1
tag.sumber
Jalankan masalah ini hari ini.
overflow: hidden
tidak berfungsi seperti yang diharapkan ketika saya memiliki lebih banyak elemen yang diikuti.Jadi saya mencoba mengubah properti tampilan div induk dan
display: flex
bekerja !!!Semoga ini bisa membantu seseorang. :)
sumber
Menambahkan sedikit padding ke atas elemen induk dapat memperbaiki masalah ini.
Ini berguna jika Anda membutuhkan elemen di dalam induk agar terlihat di luar elemen induk, seperti jika Anda membuat efek yang tumpang tindih.
sumber
Ini terjadi karena margin collapse. Ketika elemen anak menyentuh batas elemen induk dan salah satunya diterapkan dengan margin, maka:
Margin yang terbesar akan menang (diterapkan).
jika ada dari mereka yang memiliki margin maka keduanya akan berbagi sama.
Solusi
sumber