마진 축소를 비활성화하는 방법이 있습니까? 내가 찾은 유일한 해결책 ( “unollapsing”이라는 이름으로)은 1px 테두리 또는 1px 패딩을 사용합니다. 나는 이것을 용납 할 수 없다는 것을 알았습니다. 외부 픽셀은 아무 이유없이 계산을 복잡하게 만듭니다. 이 마진 축소를 비활성화하는보다 합리적인 방법이 있습니까?
답변
여백 축소에는 두 가지 주요 유형이 있습니다.
- 인접한 요소 사이의 축소 여백
- 부모 요소와 자식 요소 사이의 축소 여백
안쪽 여백 또는 테두리를 사용하면 후자의 경우에만 축소되지 않습니다. 또한 부모에 적용된 overflow
기본값 ( visible
) 과 다른 값은 축소를 방지합니다. 따라서, 모두 overflow: auto
와 overflow: hidden
동일한 효과를 얻을 수 있습니다. hidden
부모가 고정 된 높이를 가진 경우 내용을 숨기면 의도하지 않은 결과가 사용될 때 유일한 차이점 일 수 있습니다.
일단 부모에게 적용되면이 문제를 해결하는 데 도움이되는 다른 속성은 다음과 같습니다.
float: left / right
position: absolute
display: inline-block / flex
http://jsfiddle.net/XB9wX/1/ 에서 모든 것을 테스트 할 수 있습니다 .
평소처럼 Internet Explorer는 예외입니다. 보다 구체적으로, IE 7에서와 같이 부모 요소에 대해 어떤 종류의 레이아웃이 지정되면 여백이 축소되지 않습니다 width
.
출처 : Sitepoint의 기사 무너지는 여백
답변
이를 위해 좋은 오래된 마이크로 클리어 픽스를 사용할 수도 있습니다.
#container:before, #container:after{
content: ' ';
display: table;
}
업데이트 된 바이올린 참조 : http://jsfiddle.net/XB9wX/97/
답변
내가 아는 한 시각적 영향을 미치지 않는 마진 축소를 비활성화하는 한 가지 간결한 트릭은 부모의 패딩을 다음과 같이 설정하는 것입니다 0.05px
.
.parentClass {
padding: 0.05px;
}
패딩이 더 이상 0이 아니므로 더 이상 축소가 발생하지 않지만 동시에 패딩이 작아서 시각적으로 0으로 반올림됩니다.
다른 패딩이 필요한 경우 예를 들어 여백 축소가 필요하지 않은 “방향”에만 패딩을 적용하십시오 padding-top: 0.05px;
.
작업 예 :
.noCollapse {
padding: 0.05px;
}
.parent {
background-color: red;
width: 150px;
}
.children {
margin-top: 50px;
background-color: lime;
width: 100px;
height: 100px;
}
<h3>Border collapsing</h3>
<div class="parent">
<div class="children">
</div>
</div>
<h3>No border collapsing</h3>
<div class="parent noCollapse">
<div class="children">
</div>
</div>
편집 : 값을에서 (으) 0.1
로 변경 했습니다 0.05
. Chris Morgan 이 아래 주석에서 언급 했듯이이 작은 테스트 에서 Firefox는 실제로 0.1px
패딩을 고려 하는 것으로 보입니다 . 그러나 0.05px
트릭을 수행하는 것 같습니다.
답변
overflow:hidden
접히는 여백을 방지하지만 부작용이 없습니다. 즉 오버플로를 숨 깁니다.
이것과 당신이 언급 한 것을 제외하고는 실제로 그것을 배우고 그들이 실제로 유용 할 때 (3 ~ 5 년마다) 오늘 배워야합니다.
답변
실제로, 완벽하게 작동하는 것이 있습니다.
디스플레이 : 플렉스; 플렉스 방향 : 열;
IE10 이상 만 지원하면서 살 수있는 한
.container {
display: flex;
flex-direction: column;
background: #ddd;
width: 15em;
}
.square {
margin: 15px;
height: 3em;
background: yellow;
}
<div class="container">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<div class="container">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
답변
모든 웹킷 기반 브라우저는 속성을 지원해야합니다 -webkit-margin-collapse
. 상단 또는 하단 여백에 대해서만 설정하는 하위 속성도 있습니다. 값 축소 (기본값), 버리기 (인접 여백이있는 경우 여백을 0으로 설정) 및 분리 (여백 축소 방지)를 제공 할 수 있습니다.
이것이 2014 버전의 Chrome 및 Safari에서 작동하는지 테스트했습니다. 불행히도, 이것이 웹킷을 기반으로하지 않기 때문에 IE에서 지원되지 않을 것이라고 생각합니다.
자세한 설명은 Apple의 Safari CSS Reference 를 참조하십시오 .
Mozilla의 CSS 웹킷 확장 프로그램 페이지 를 확인하면 이러한 특성이 독점 특성으로 나열되며 사용하지 않는 것이 좋습니다. 빠른 시일 내에 표준 CSS에 들어 가지 않을 가능성이 높기 때문에 웹킷 기반 브라우저 만 지원할 수 있기 때문입니다.
답변
나는 이것이 매우 오래된 게시물이라는 것을 알고 있지만 부모 요소에 flexbox를 사용하면 자식 요소에 대한 마진 축소가 비활성화된다고 말하고 싶었습니다.