Solusi khusus CSS yang rapi
Gunakan kode berikut untuk menambahkan anak pertama tanpa konten ke div bergerak yang tidak disengaja:
.parent:before
{content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
Keuntungan dari metode ini adalah Anda tidak perlu mengubah CSS elemen apa pun yang ada, dan karena itu memiliki dampak minimal pada desain. Di sebelah ini, elemen yang ditambahkan adalah elemen pseudo, yang tidak ada di pohon DOM.
Dukungan untuk elemen semu tersebar luas: Firefox 3+, Safari 3+, Chrome 3+, Opera 10+, dan IE 8+. Ini akan berfungsi di browser modern apa pun (hati-hati dengan yang lebih baru ::before
, yang tidak didukung di IE8).
Konteks
Jika anak pertama dari suatu elemen memiliki margin-top
, orang tua akan menyesuaikan posisinya sebagai cara meruntuhkan margin yang berlebihan. Mengapa? Seperti itu saja.
Diberikan masalah berikut:
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
</style>
<div class="parent"><!--This div moves 40px too-->
<div class="child">Hello world!</div>
</div>
Anda dapat memperbaikinya dengan menambahkan anak dengan konten, seperti ruang sederhana. Tapi kita semua benci menambahkan ruang untuk apa yang hanya masalah desain. Karena itu, gunakan white-space
properti untuk konten palsu.
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.fix {position: relative;white-space: pre;height: 0px;width: 0px;overflow: hidden;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="fix"></div>
<div class="child">Hello world!</div>
</div>
Di mana position: relative;
memastikan posisi perbaikan yang benar. Dan white-space: pre;
membuat Anda tidak perlu menambahkan konten apa pun - seperti ruang kosong - untuk memperbaikinya. Dan height: 0px;width: 0px;overflow: hidden;
pastikan Anda tidak akan pernah melihat perbaikannya.
Anda mungkin perlu menambah line-height: 0px;
atau max-height: 0px;
memastikan ketinggian sebenarnya nol di browser IE kuno (saya tidak yakin). Dan opsional Anda bisa menambahkannya <!--dummy-->
di browser IE lama, jika tidak berfungsi.
Singkatnya, Anda dapat melakukan semua ini hanya dengan CSS (yang menghilangkan kebutuhan untuk menambahkan anak yang sebenarnya ke pohon HTML DOM):
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.parent:before {content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="child">Hello world!</div>
</div>