[css] 자식 요소의 여백은 부모 요소를 움직입니다.

다른 ( child ) 를 포함 하는 div( parent )가 있습니다 . Parent는 특별한 CSS 스타일이없는 첫 번째 요소 입니다. 내가 설정할 때divbody

.child
{
    margin-top: 10px;
}

최종 결과는 내 자녀의 상단이 여전히 부모와 일치한다는 것입니다. 자식이 10px 아래로 이동하는 대신 부모님이 10px 아래로 이동합니다.

내로 DOCTYPE설정되어 XHTML Transitional있습니다.

내가 여기서 무엇을 놓치고 있습니까?

편집 1
부모는 배경을 위에서 아래로 표시해야하기 때문에 엄격하게 정의 된 치수를 가져야합니다 (픽셀 완벽). 따라서 수직 여백을 설정 하지 않아도 됩니다.

편집 2
이 동작은 FF, IE 및 CR에서 동일합니다.



답변

DIV 내에 여백이 있는 하위 요소 에서 대안을 찾았습니다 .

.parent { overflow: auto; }

또는:

.parent { overflow: hidden; }

이렇게하면 여백이 무너지는 것을 방지 할 수 있습니다. 테두리와 패딩도 동일합니다. 따라서 다음을 사용하여 상단 여백 붕괴를 방지 할 수 있습니다.

.parent {
    padding-top: 1px;
    margin-top: -1px;
}

인기있는 요청에 의한 업데이트 :
축소 여백의 요점은 텍스트 내용을 처리하는 것입니다. 예를 들면 다음과 같습니다.

h1, h2, p, ul {
  margin-top: 1em;
  margin-bottom: 1em;
}
<h1>Title!</h1>
<div class="text">
  <h2>Title!</h2>
  <p>Paragraph</p>
</div>
<div class="text">
  <h2>Title!</h2>
  <p>Paragraph</p>
  <ul>
    <li>list item</li>
  </ul>
</div>

브라우저가 여백을 축소하기 때문에 텍스트가 예상대로 나타나고 <div>래퍼 태그는 여백에 영향을 미치지 않습니다. 각 요소는 주위에 간격이 있지만 간격은 두 배가되지 않습니다. 다음은의 마진 <h2><p>최대 추가하지 않습니다,하지만 서로에 슬라이드 (그들은 붕괴). <p><ul>요소에 대해서도 마찬가지 입니다.

안타깝게도 현대적인 디자인 으로이 아이디어는 컨테이너를 명시 적으로 원할 때 물릴 수 있습니다. 이를 CSS 말하기에서 새로운 블록 형식화 컨텍스트 라고합니다 . overflow또는 마진 트릭은 당신에게 그것을 줄 것이다.


답변

이것은 정상적인 동작입니다 (최소한 브라우저 구현 중). 부모가 패딩을하지 않는 한 여백은 부모와 관련하여 자녀의 위치에 영향을 미치지 않습니다.이 경우 대부분의 브라우저는 부모의 패딩에 자녀의 여백을 추가합니다.

원하는 동작을 얻으려면 다음이 필요합니다.

.child {
    margin-top: 0;
}

.parent {
    padding-top: 10px;
}


답변

모든 답변이 문제를 해결하지만 다음과 같은 트레이드 오프 / 조정 / 약속과 함께 제공됩니다.

  • floats, 당신 요소를 부동 해야
  • border-top, 이렇게하면 부모를 1px 이상 아래로 밀고 -1px부모 요소 자체에 여백을 도입하여 조정해야 합니다. 부모가 이미 margin-top상대 단위에 있을 때 문제가 발생할 수 있습니다 .
  • padding-top을 사용하는 것과 동일한 효과 border-top
  • overflow: hidden, 부모가 드롭 다운 메뉴와 같이 넘친 콘텐츠를 표시해야 할 때 사용할 수 없습니다
  • overflow: auto, 그림자 또는 툴팁의 삼각형과 같이 (과도하게) 넘쳐나는 콘텐츠가있는 상위 요소에 대한 스크롤바를 소개합니다

다음과 같이 CSS3 의사 요소를 사용하여이 문제를 해결할 수 있습니다.

.parent::before {
  clear: both;
  content: "";
  display: table;
  margin-top: -1px;
  height: 0;
}

https://jsfiddle.net/hLgbyax5/1/


답변

display:inline-block자식 요소 에 스타일 추가


답변

부모 요소는 최소한 &nbsp;자식 요소 앞에 두지 않아야합니다 .


답변

이것이 나를 위해 일한 것입니다

.parent {
padding-top: 1px;
margin-top: -1px;
}

.child {
margin-top:260px;
}

http://jsfiddle.net/97fzwuxh/


답변

.css 내부 에서 div 요소 의 표시 속성인라인 차단 으로 설정하면 문제가 해결됩니다. 예상대로 마진이 작동합니다.