외부 div를 플로팅 콘텐츠와 자동으로 같은 높이로 만듭니다.


94

나는 divdiv안에 떠 다니는 s 를 감싸기 위해 검정색 인 바깥 쪽을 원합니다 . 내가 사용하려는 해달라고 style='height: 200pxdivouterdiv내가 (예를 들어, 부동 자동으로 컨텐츠의 높이로 원하는 아이디 div들).

<div id='outerdiv' style='border: 1px solid black;background-color: black;'>
<div style='width=300px;border: red 1px dashed;float: left;'>
    <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
</div>

<div style='width=300px;border: red 1px dashed;float: right;'>
    <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
</div>

이것을 달성하는 방법?

답변:


167

outerdiv의 CSS를 이것으로 설정할 수 있습니다.

#outerdiv {
    overflow: hidden; /* make sure this doesn't cause unexpected behaviour */
}

끝에 요소를 추가하여이 작업을 수행 할 수도 있습니다 clear: both. 이것은 일반적으로 JS (좋은 솔루션이 아님) 또는 :afterCSS 의사 요소 (이전 IE에서 널리 지원되지 않음 )를 사용하여 추가 할 수 있습니다 .

문제는 컨테이너가 자연스럽게 떠 다니는 아이들을 포함하도록 확장되지 않는다는 것입니다. 첫 번째 예제를 사용할 때 경고를 받으십시오. 부모 요소 외부에 자식 요소가 있으면 숨겨집니다. 속성 값으로 'auto'를 사용할 수도 있지만 요소가 외부에 나타나면 스크롤바가 호출됩니다.

부모 컨테이너를 플로팅 할 수도 있지만 디자인에 따라 불가능하거나 어려울 수 있습니다.


37
나는 왜 overflow : hidden이이 경우에 작동하는지에 대한 논리를 이해했으면합니다.
masteroleary

2
예, 저는 이것이 직관에 반하는 것이라고 생각한 사람이 나만이 아니기를 바랬습니다. 알렉스?
regularmike

3
@masteroleary @regularmike는 HTML/CSS그것을 너무 직관적 일이 :) 매우 일반적이며, 좋은 UI 기술 적이있다
YURIY Nakonechnyy

2
@masteroleary 나는 이것이 옛 스레드이지만, 나는 최근에 비슷한 질문에 대답하려고 실현 stackoverflow.com/questions/21041297#21041625을 희망은 도움이 -
XEC

1
float솔루션에 +1 . 특히 Twitter Bootstrap과 함께 사용할 때 다른 사람들과 잘 작동합니다.
Fizzix 2014

17

첫째, CSS 스타일링을 인라인으로 수행하는 것보다 외부 CSS 파일에서 수행하는 것이 좋습니다. 유지 관리가 훨씬 쉽고 클래스를 사용하여 더 재사용 할 수 있습니다.

Alex의 대답 (& Garret의 clearfix)에서 "clear : both를 사용하여 끝에 요소 추가"를 수행하면 다음과 같이 할 수 있습니다.

    <div id='outerdiv' style='border: 1px solid black; background-color: black;'>
        <div style='width: 300px; border: red 1px dashed; float: left;'>
            <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
        </div>

        <div style='width: 300px; border: red 1px dashed; float: right;'>
            <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
        </div>
        <div style='clear:both;'></div>
    </div>

이것은 작동합니다 (하지만 인라인 CSS는 그렇게 예쁘지 않습니다).


왜 평가를 받았습니까? 그것은 효과가 있고 나는 그것이 예쁜 해결책이 아니라는 것을 당연히 인정했습니다.
Lycana 2009

1
잘 모르겠습니다. 최소한 0으로 되돌리려 고 +1했습니다. 그의 잘못된 CSS를 수정하지 않았기 때문에 투표를 받았을 수 있습니다. 즉, CSS 속성을 설정하기 위해 등호를 사용하는 것은 올바르지 않습니다.
alex

그럴 수 있지. +1 alex에 감사드립니다. 제 진술이 공정하다고 생각했습니다.
Lycana 2009

이 솔루션은 더 나은 IMO입니다. 내 질문이라면이 대답을 받아 들였을 것입니다.
ksg91


7

나는 어떤 사람들이 나를 미워할 것이라는 것을 알고 있지만, 나는 display:table-cell이 경우에 도움을 줄 수 있다는 것을 알게 되었습니다.

정말 깨끗합니다.


외부 div 사용 디스플레이 : 테이블; div 내부에서 display : table-cell;
Anukul Limpanasil

4

우선 width=300pxCSS가 width: 300px;아닌 태그의 속성 설정을 사용 하지 않고 대신 사용하세요.

clearfix기술을 적용하는 것이 좋습니다 #outerdiv. Clearfix 는 2 개의 부동 div를 지우는 일반적인 솔루션이므로 상위 div가 2 개의 부동 div를 수용하도록 확장됩니다.

<div id='outerdiv' class='clearfix' style='width:600px; background-color: black;'>
    <div style='width:300px; float: left;'>
        <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
    </div>

    <div style='width:300px; float: left;'>
        <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
    </div>
</div>

다음은 상황에 대한 와이를 해결하기 위해 Clearfix가 수행하는 작업입니다.


3

jQuery 사용 :

Parent Height = Child offsetHeight를 설정합니다.

$(document).ready(function() {
    $(parent).css("height", $(child).attr("offsetHeight"));
}

3
과잉, CSS만으로 할 수있을 때.
alex

1
내 대답으로 부모 높이를 자식 높이와 동일하게 설정할 수 있지만 오버플로를 사용하면 부모 div 이후에 데이터를 표시하는 경우 몇 가지 문제를 일으키는 부모 높이를 변경하지 않습니다.
Harpal

1

사용하다 clear: both;

나는 이것을 알아 내기 위해 일주일 이상을 보냈다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.