부모 <div>를 자식의 높이로 확장


308

다음과 비슷한 페이지 구조가 있습니다.

<body>
  <div id="parent">
    <div id="childRightCol">
      /*Content*/
    </div>
    <div id="childLeftCol">
      /*Content*/
    </div>
  </div>
</body>

부모가 내가 좋아하는 것 div에 확장 height내부 때 divheight증가.

편집 :
한 가지 문제는 width하위 컨텐츠 중 하나가 width브라우저 창을 지나 확장되면 현재 CSS가 상위 스크롤 막대를 가로 스크롤 막대에 배치한다는 것 div입니다. 스크롤 막대가 페이지 수준에 있기를 원합니다. 현재 부모 div가overflow: auto;

CSS를 도와 주시겠습니까?


6
내부 div를 떠 있습니까? 현재 CSS를 게시 할 수 있습니까?
Eric

2
@ 에릭-내 문제도 있었다-내 자식 div가 float : left 였는데, 제거했을 때 '부모'가 자동으로 인식되어 전체 높이로 확장되었습니다!
Michael Goltsman

답변:


539

부모님을 위해 이것을 시도해보십시오.

overflow:auto; 

최신 정보:

작동하는 또 하나의 솔루션 :

부모 :

display: table;

아동 :

display: table-row;

67
overflow:auto브라우저가 적용 할 값을 결정해야 함을 의미합니다. 정말로 않는 트릭 것은 overflow: overlay.
Alba Mendez

14
@jmendeth "오버레이"라는 오버플로 값이 없습니다. 자식 div가 부동 상태이면 작동하는 것이 선언 overflow:hidden됩니다.
Christoph

16
와아 아아 편하게 하다. overlay웹킷 외부에서는 지원되지 않는다고 주장하는 것이 있습니다. 완전히 다른 또 다른 것은 그것이 전혀 존재하지 않는다고 말하는 것입니다. 제발, 첫 RTFM . ;)
Alba Mendez

6
웹킷에만있는 경우 20 % 만 존재합니다 .P 링크를 응원합니다. 잘 유지 관리되고 업데이트 되었습니까? 맹세합니까?
pilau

20
다른 대답은 stackoverflow.com/questions/450903/… 이며 set을 제안합니다 display:inline-block. 어느 것이 나를 위해 잘 작동했습니다.
Jens

26

을 추가하십시오 clear:both. 열이 떠 있다고 가정합니다. 키가 부모로 지정된 방법에 따라 overflow : auto;

<body>
<div id="parent">
    <div id="childRightCol">
    <div>
    <div id="childLeftCol">
    <div>
    <div id="clear" style="clear:both;"></div>
</div>
</body>

이렇게하면 내용이 브라우저 창보다 넓은 경우 부모 div에 가로 스크롤 막대가 나타납니다. 가로 스크롤을 전체 페이지에 놓고 싶습니다.
Steve Horn

1
overflow : auto;가 왜 필요한가요? 내 시험에서 분명하다 : 둘 다; 충분하다.
Paolo Bergantino

3
이것은 또한 부모가 높이를 지정하지 않았다고 가정합니다.
bendewey

이 방법은 Firefox에서는 잘 작동하지만 IE 6에서는 작동하지 않습니다. 해결 방법이 있습니까?
Steve Horn



4

이 답변의 지시 사항에서 이것을 이해할 수없는 사람들을 위해 :

패딩 값 을 0 이상 으로 설정하십시오. 자식 div에 margin-top 또는 margin-bottom이 있으면 패딩으로 바꿀 수 있습니다

예를 들어

#childRightCol
{
    margin-top: 30px;
}
#childLeftCol
{
    margin-bottom: 20px;
}

다음과 같이 바꾸는 것이 좋습니다.

#parent
{
    padding: 30px 0px 20px 0px;
}

4

자체 정리와 같은 것을 사용하는 것은 이와 같은 div상황에 적합 합니다 . 그런 다음 부모의 클래스를 사용합니다.

<div id="parent" class="clearfix">

3

더하다

clear:both; 

부모 div의 CSS에 또는 부모 div의 맨 아래에 다음을 지우는 div를 추가하십시오.

overflow : auto; 정답입니다. 간단한 웹 레이아웃에서는 작동하지만 음수 여백 등과 같은 요소를 사용하기 시작하는 요소가 엉망이됩니다.


2

이것이 당신이 원하는 것을합니까?

.childRightCol, .childLeftCol
{
    display: inline-block;
    width: 50%;
    margin: 0;
    padding: 0;
    vertical-align: top;
}


1

자식 div를 절대 지정과 같은 위치 지정 속성이없는 단일 열로 사용하여 자식 div의 내용을 확장하여 부모 div를 만들었습니다.

예:

#wrap {width:400px;padding:10px 200px 10px 200px;position:relative;margin:0px auto;}
#maincolumn {width:400px;}

#wrap의 가장 깊은 하위 div 인 maincolumn div를 기반으로 이것은 #wrap div의 깊이를 정의하고 양쪽에 200px 패딩은 두 개의 큰 빈 열을 생성하여 원하는대로 절대 위치 div를 배치 할 수 있습니다. position : absolute를 사용하여 패딩 상단 및 하단을 변경하여 머리글 div 및 바닥 글 div를 배치 할 수도 있습니다.


0

상위 컨테이너에 clearfix 솔루션을 적용해야합니다. 다음은 수정 링크를 설명하는 좋은 기사입니다.


0

#childRightCol 및 #childRightCol 내부의 콘텐츠가 왼쪽이나 오른쪽으로 떠 다니는 경우 CSS에 추가하십시오.

#childRightCol:before { display: table; content: " "; }
#childRightCol:after { display: table; content: " "; clear: both; }
#childLeftCol:before { display: table; content: " "; }
#childLeftCol:after { display: table; content: " "; clear: both; }

0

이것은 사양에 설명 된대로 작동합니다-여기에 몇 가지 대답이 유효하며 다음과 일치합니다.

블록 수준 자식이있는 경우 높이는 가장 큰 블록 수준 자식 상자의 위쪽 테두리 가장자리와 가장자리가 접히지 않은 가장 아래쪽 블록 수준 자식 상자 사이의 거리입니다. 이를 통해 여백이 축소되지 않습니다. 그러나 요소에 0이 아닌 위쪽 패딩 및 / 또는 위쪽 테두리가 있거나 루트 요소 인 경우 내용은 최상위 자식의 위쪽 여백 가장자리에서 시작합니다. (첫 번째 경우는 요소의 위쪽과 아래쪽 여백이 최상위 자식과 가장 아래쪽 하위의 여백으로 축소되는 반면, 두 번째 경우에는 패딩 / 테두리가 있으면 위쪽 여백이 무너지는 것을 방지합니다.) 요소에 0이 아닌 아래쪽 패딩 및 / 또는 아래쪽 테두리가 있으면 내용이 가장 아래쪽 자식의 아래쪽 여백 가장자리에서 끝납니다.

여기에서 : https://www.w3.org/TR/css3-box/#blockwidth


0

아래 코드는 나를 위해 일했습니다.

CSS

.parent{
    overflow: auto;
} 

html

<div class="parent">
    <div class="child1">
    </div>
    <div class="child2">
    </div>
    <div id="clear" style="clear:both;"></div>
</div>


0

우리가 시작하는 곳

다음은 상용구 HTML 및 CSS입니다. 이 예에서는 두 개의 부동 자식 요소가있는 부모 요소가 있습니다.

/* The CSS you're starting with may look similar to this.
 * This doesn't solve our problem yet, but we'll get there shortly.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}
<!-- The HTML you're starting with might look similar to this -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

솔루션 # 1 : 오버 플로우 : 자동

모든 최신 브라우저와 Internet Explorer에서 IE8로 돌아가는 솔루션 overflow: auto은 부모 요소 에 추가 하는 것입니다. 이것은 스크롤 막대가 추가 된 IE7에서도 작동합니다.

/* Our Modified CSS.
 * This is one way we can solve our problem.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
  overflow: auto;
  /*This is what we added!*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

솔루션 # 2 : 플로트 부모 컨테이너

모든 최신 브라우저에서 작동하고 IE7로 돌아가는 또 다른 솔루션은 부모 컨테이너를 플로팅하는 것입니다.

부모 div를 플로팅하면 페이지 레이아웃의 다른 부분에 영향을 줄 수 있기 때문에 항상 실용적이지는 않을 수 있습니다.

/* Modified CSS #2.
 * Floating parent div.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  float: left;
  /*Added*/
  height: auto;
  width: 100%;
  /*Added*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

방법 # 3 : 플로팅 된 요소 아래에 지우기 div 추가

/* 
 * CSS to Solution #3.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clear {
  clear: both;
}
<!-- Solution 3, Add a clearing div to bottom of parent element -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
  <div class="clear"></div>
</div>

방법 # 4 : 부모 요소에 Clearing Div 추가이 솔루션은 구형 브라우저와 최신 브라우저 모두에 대해 방탄 효과가 있습니다.

/* 
 * CSS to Solution #4.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clearfix {
  clear: both;
}

.clearfix:after {
  clear: both;
  content: "";
  display: table;
}
<!-- Solution 4, make parent element self-clearing -->
<div class="containing-div clearfix">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

에서 https://www.lockedownseo.com/parent-div-100-height-child-floated-elements/


-1

이 CSS를 부모로 사용하고 작동합니다.

min-height:350px;
background:url(../images/inner/details_middle.gif) repeat-y 0 0 ;
padding:5px 10px;   
text-align:right;
overflow: hidden;
position: relative;
width: 100%;

2
당신은 최소 높이를 사용하므로 계산하지 않습니다;)
pilau

-1

#parent{
  background-color:green;
  height:auto;
  width:300px;
  overflow:hidden;
}

#childRightCol{
  color:gray;
  background-color:yellow;
  margin:10px;
  padding:10px;
}
<div id="parent">
    <div id="childRightCol">
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate sit amet neque ac consequat.
        </p>
    </div>
  </div>

overflow:hidden;CSS의 속성 을 사용하여 관리하고 있습니다.

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