깔끔한 CSS 전용 솔루션
다음 코드를 사용하여 무의식적 인 첫 번째 자녀를 실수로 움직이는 div 앞에 추가하십시오.
.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에서는 지원되지 않는 최신 버전 에서는 주의하십시오 ).
문맥
요소의 첫 번째 자식에가있는 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;
당신은 수정을 보지 못할 것입니다.
고대 IE 브라우저에서 높이를 실제로 0 으로 추가 line-height: 0px;
하거나 max-height: 0px;
확인 해야 할 수도 있습니다 (확실하지 않습니다). 선택적으로 <!--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>