Акуратне CSS-рішення
Використовуйте наступний код, щоб додати бездоганну первістку до ненавмисно рухомого діва:
.parent:before
{content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
Перевага цього методу полягає в тому, що вам не потрібно змінювати CSS жодного існуючого елемента, а тому має мінімальний вплив на дизайн. Поруч із цим доданий елемент - це псевдоелемент, якого немає у DOM-дереві.
Підтримка псевдоелементів широко поширена: Firefox 3+, Safari 3+, Chrome 3+, Opera 10+ та IE 8+. Це буде працювати в будь-якому сучасному веб-переглядачі (будьте обережні з новішим ::before
, який не підтримується в IE8).
Контекст
Якщо у першого дочірнього елемента елемента є a margin-top
, батьків буде коригувати його положення як спосіб згортання надлишкової межі. Чому? Це просто так.
З огляду на таку проблему:
<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>
Ви можете виправити це, додавши дитині вміст, наприклад простий пробіл. Але ми всі ненавидимо додавати пробіли для того, що стосується лише дизайну. Тому використовуйте white-space
властивість для підробки вмісту.
<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>
Там, де position: relative;
забезпечується правильне розташування фіксації. Завдяки цьому white-space: pre;
вам не потрібно додавати жодний вміст - наприклад, пробіл - до виправлення. І height: 0px;width: 0px;overflow: hidden;
гарантує, що ви ніколи не побачите виправлення.
Вам може знадобитися додати line-height: 0px;
або max-height: 0px;
переконатися, що висота фактично дорівнює нулю в старовинних браузерах IE (я не впевнений). І необов’язково ви можете додати <!--dummy-->
його до старих браузерів IE, якщо це не працює.
Коротше кажучи, ви можете зробити все це лише за допомогою CSS (що знімає необхідність додавати фактичне дочірнє дерево до дерева 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>