나는 이것이 오래된 문제라는 것을 알고 있습니다. 나는 여러 번 그것을 보았습니다. 문제는 여기에있는 모든 수정 프로그램이 의도하지 않은 결과를 초래할 수있는 해킹이라는 것입니다.
먼저 근본 문제에 대한 쉬운 설명이 있습니다. 여백 축소가 작동하는 방식으로 인해 컨테이너 내부의 첫 번째 요소에 상단 여백이 있으면 해당 상단 여백이 상위 컨테이너 자체에 효과적으로 적용됩니다. 다음을 수행하여 직접 테스트 할 수 있습니다.
<div>
<h1>Test</h1>
</div>
디버거에서이를 열고 div를 가리 킵니다. div 자체가 실제로 H1 요소의 상단 여백이 중지 되는 곳에 배치되어 있음을 알 수 있습니다. 이 동작은 브라우저에서 의도 한 것입니다.
그래서 여기의 대부분의 게시물 (모욕이 없으며 의도 만 진실) 이하는 것처럼 이상한 해킹에 의지하지 않고이 문제를 쉽게 해결할 수 있습니다-단순히 원래의 설명으로 돌아가십시오-- ...if the first element inside a container has a top margin...그에 따라 컨테이너의 첫 번째 요소는 NOT 최고 마진을 가지고있다. 좋아, 그러나 문서 적으로 의미를 방해하지 않는 요소를 추가하지 않고 어떻게합니까?
쉬운! 의사 요소! 클래스 또는 미리 정의 된 믹스 인을 통해이 작업을 수행 할 수 있습니다. :before의사 요소를 추가하십시오 .
클래스를 통한 CSS :
.top-margin-fix:before {
content: ' ';
display: block;
width: 100%;
height: .0000001em;
}
이를 통해 위의 마크 업 예제에 따라 div를 다음과 같이 수정합니다.
<div class="top-margin-fix">
<h1>Test</h1>
</div>
왜 이것이 작동합니까?
컨테이너의 첫 번째 요소 (상단 여백이없는 경우)는 다음 요소의 상단 여백 시작 위치를 설정합니다. :before의사 요소 를 추가 하면 브라우저는 실제로 의미가없는 (즉, SEO에 적합) 요소를 상위 컨테이너에 추가합니다. 첫 번째 요소 전에 에 추가 합니다.
Q. 왜 높이 : .0000001em?
A. 브라우저가 여백 요소를 아래로 밀려면 높이가 필요합니다. 이 높이는 사실상 0이지만 부모 컨테이너 자체에 패딩을 추가 할 수 있습니다. 사실상 0이므로 컨테이너의 레이아웃에도 영향을 미치지 않습니다. 아름다운.
이제 요소를 사용하여 다른 일을 할 때 예기치 않은 결과를 초래하는 이상한 디스플레이 스타일을 추가하는 대신이 문제를 해결하기 위해 클래스 (또는 SASS / LESS에서는 mixin!)를 추가 할 수 있습니다. 패딩 또는이 문제를 해결하기위한 의도가 아닌 이상한 위치 / 부동 스타일로 바꾸십시오.
overflow:hidden사례의 90 %가 더 좋습니다.