[css] 여백 축소를 비활성화하는 방법은 무엇입니까?

마진 축소를 비활성화하는 방법이 있습니까? 내가 찾은 유일한 해결책 ( “unollapsing”이라는 이름으로)은 1px 테두리 또는 1px 패딩을 사용합니다. 나는 이것을 용납 할 수 없다는 것을 알았습니다. 외부 픽셀은 아무 이유없이 계산을 복잡하게 만듭니다. 이 마진 축소를 비활성화하는보다 합리적인 방법이 있습니까?



답변

여백 축소에는 두 가지 주요 유형이 있습니다.

  • 인접한 요소 사이의 축소 여백
  • 부모 요소와 자식 요소 사이의 축소 여백

안쪽 여백 또는 테두리를 사용하면 후자의 경우에만 축소되지 않습니다. 또한 부모에 적용된 overflow기본값 ( visible) 과 다른 값은 축소를 방지합니다. 따라서, 모두 overflow: autooverflow: 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를 사용하면 자식 요소에 대한 마진 축소가 비활성화된다고 말하고 싶었습니다.