자식을 플로팅했을 때 부모 div 높이가 0 인 이유


131

CSS에 다음이 있습니다. 모든 여백 / 패딩 / 테두리가 전체적으로 0으로 재설정됩니다.

#wrapper{width: 75%; min-width: 800px;}
.content{text-align: justify; float: right; width: 90%;}
.lbar{text-align: justify; float: left; width: 10%;}

이제 HTML을 다음과 같이 쓸 때

<div id="wrapper">
    <div class="content">
        some text here
    </div>
    <div class="lbar">
        some text here
    </div>
</div>

페이지가 올바르게 렌더링됩니다. 그러나 요소를 검사 할 때 높은 div#wrapper것으로 표시됩니다 0px. 나는 말까지 확장 할 것으로 예상 한 것 div.contentdiv.lbar... 왜 이런 일이 무엇입니까?

다시, 페이지는 잘 렌더링됩니다. 이 행동은 나를 당황하게합니다.


4
이것은 당신에게 유용 할 수 있습니다 CSS 수레 (101) 에서, 떨어져 목록 .
데이비드는 모니카

답변:


250

떠 다니는 내용물은 컨테이너의 높이에 영향을 미치지 않습니다. 요소에는 플로팅되지 않은 내용이 포함되어 있지 않으므로 컨테이너의 높이가 비어있는 것처럼 0이되는 것은 없습니다.

설정 overflow: hidden컨테이너에하면 새 설정하여이를 방지 할 블록 포맷 문맥을 . 참조 수레를 포함하는 방법 다른 기술과 수레가 포함 된 CSS가 이런 식으로 디자인 된 이유에 대한 설명을.


다음은 컨테이너에 페이지에 요소를 추가하지 않고도 CSS에서 해결되는 부동 소수점을 컨테이너에 포함시키는 또 다른 방법 입니다.
Phil

56

일반적으로 float부모의 레이아웃에는 s가 포함되지 않습니다.

이를 방지하려면 overflow: hidden부모에게 추가 하십시오.


16
고마워, 이것은 효과가 있지만, 왜 ... overflow : hidden은 넘겨 지는 내용 을 숨기고 그것을 포함하기 위해 요소를 확대 하지 않는 것으로 이해 되지 않습니다.
ripper234

@ ripper234 여기에 이유가 있습니다 : stackoverflow.com/questions/25818199/…
kristianp

6

이것이 올바른 방법인지 확실하지 않지만 display: inline-block;래퍼 div 에 추가 하여 해결했습니다 .

#wrapper{
    display: inline-block;
    /*border: 1px black solid;*/
    width: 75%;
    min-width: 800px;
}

.content{
    text-align: justify; 
    float: right; 
    width: 90%;
}

.lbar{
    text-align: justify; 
    float: left; 
    width: 10%;
}

1
이것이 내가 찾던 정확한 솔루션이었습니다. 오버플로 : 숨겨진 원인 상자 그림자가 자연스럽게 사라집니다.
키티 아라
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.