[html] 최소 신장이있는 부모 내부의 자녀 : 100 % 상속받지 않음

설정하여 div 컨테이너가 페이지의 전체 높이를 차지할 수있는 방법을 찾았습니다 min-height: 100%;. 그러나 중첩 된 div를 추가하고 설정 height: 100%;하면 컨테이너 높이로 확장되지 않습니다. 그것을 고칠 수있는 방법이 있습니까?

html, body {
  height: 100%;
  margin: 0;
}

#containment {
  min-height: 100%;
  background: pink;
}

#containment-shadow-left {
  height: 100%;
  background: aqua;
}
<div id="containment">
  <div id="containment-shadow-left">
    Hello World!
  </div>
</div>



답변

이것은보고 된 웹킷 (chrome / safari) 버그이며, 키가 최소 인 부모의 자녀는 height 속성을 상속 할 수 없습니다. https://bugs.webkit.org/show_bug.cgi?id=26559

분명히 Firefox도 영향을받습니다 (현재 IE에서 테스트 할 수 없음)

가능한 해결 방법 :

  • 위치를 추가합니다 : #containment
  • 위치 추가 : # containment-shadow-left에 절대

내부 요소에 절대 위치가 있으면 버그가 표시되지 않습니다.

http://jsfiddle.net/xrebB/를 참조하십시오

2014 년 4 월 10 일 편집

나는 현재 내가하는 프로젝트에서 일하고 있어요 때문에 정말 와 부모 컨테이너가 필요 min-height컨테이너의 높이를 상속하고, 자식 요소를 좀 더 많은 연구를했다.

첫째 : 현재 브라우저 동작이 실제로 버그인지 확실하지 않습니다. CSS2.1 사양은 다음과 같이 말합니다.

백분율은 생성 된 상자를 포함하는 블록의 높이를 기준으로 계산됩니다. 포함하는 블록의 높이가 명시 적으로 지정되지 않은 경우 (즉, 내용 높이에 따라 다름)이 요소가 절대적으로 배치되지 않으면 값은 ‘auto’로 계산됩니다.

컨테이너에 최소 높이를 넣으면 높이를 명시 적으로 지정 하지 않으므로 요소의 auto높이를 가져와야합니다. 이것이 바로 Webkit과 다른 모든 브라우저가하는 일입니다.

둘째, 내가 찾은 해결 방법 :

컨테이너 요소를 display:table로 설정 height:inherit하면 min-height100 %를 주는 것과 정확히 동일한 방식으로 작동합니다 . 더 중요한 것은 자식 요소를 설정 display:table-cell하면 컨테이너 요소의 높이를 100 % 이상으로 완벽하게 상속합니다.

전체 CSS :

html, body {
  height: 100%;
  margin: 0;
}

#container {
  background: green;
  display: table;
  height: inherit;
  width: 100%;
}

#content {
  background: red;
  display: table-cell;
}

마크 업 :

<div id="container">
  <div id="content">
      <p>content</p>
  </div>
</div>

http://jsfiddle.net/xrebB/54/를 참조하십시오 .


답변

height: 1px부모 컨테이너에 추가하십시오 . Chrome, FF, Safari에서 작동합니다.


답변

나는 이것을 어디서나 보지 못했기 때문에 이것을 공유 할 것이라고 생각했고, 나는 해결책을 고치는 데 사용했습니다.

해결책 :min-height: inherit;

나는 지정된 최소 키를 가진 부모가 있었고 그 키가 될 아이가 필요했습니다.

.parent {
  min-height: 300px;
  background-color: rgba(255,255,0,0.5); //yellow
}

.child {
  min-height: inherit;
  background-color: rgba(0,255,0,0.5); //blue
}

p {
  padding: 20px;
  color: red;
  font-family: sans-serif;
  font-weight: bold;
  text-align: center;
}
<div class="parent">
  <div class="child">
    <p>Yellow + Blue = Green :)</p>
  </div>
</div>

이런 식으로 아이는 이제 최소 높이의 100 % 높이로 작동합니다.

나는 어떤 사람들이 이것을 유용하게 사용하기를 바랍니다 🙂


답변

이것은 @jackocnr의 코멘트에 추가되었지만 놓쳤습니다. 최신 브라우저의 경우 이것이 최선의 방법이라고 생각합니다.

컨테이너가 너무 작 으면 내부 요소가 전체 컨테이너를 채우도록하지만 컨테이너가 너무 크면 컨테이너의 높이가 확장됩니다.

#containment {
  min-height: 100%;
  display: flex;
  flex-direction: column;
}

#containment-shadow-left {
  flex: 1;
}


답변

Kushagra Gour의 솔루션은 (적어도 크롬과 IE에서) 작업을 수행하고 사용하지 않고 원래의 문제를 해결 display: table;하고 display: table-cell;. 플 런커 참조 : http://plnkr.co/edit/ULEgY1FDCsk8yiRTfOWU

min-height: 100%; height: 1px;외부 div를 설정 하면 필요에 따라 실제 높이가 100 % 이상이됩니다. 또한 내부 div가 높이를 올바르게 상속받을 수 있습니다.


답변

기존 답변 외에도 vh사용할 뷰포트 단위 가 있습니다. 아래의 간단한 스 니펫. 물론 페이지 머리글과 바닥 글의 높이 가 calc()같은 min-height: calc(100vh - 200px);경우 에도 함께 사용할 수 있습니다 200px.

body {
  margin: 0;
}

.child {
  min-height: 100vh;
  background: pink;
}
<div class="parent">
  <div class="child"></div>
</div>


답변

나는 이것이 브라우저의 버그라고 생각하지 않습니다. 모두 같은 방식으로 작동합니다. 즉, 명시적인 높이 지정을 중단하면 최소 높이는 기본적으로 “마지막 단계”입니다.

CSS 2.1 사양에서 제안하는 방식과 정확히 일치하는 것으로 보입니다.
http://www.w3.org/TR/CSS2/visudet.html#the-height-property

백분율은 생성 된 상자를 포함하는 블록의 높이를 기준으로 계산됩니다. 포함하는 블록의 높이가 명시 적으로 지정되지 않은 경우 (즉, 내용 높이에 따라 다름)이 요소가 절대적으로 배치되지 않으면 값은 ‘auto’로 계산됩니다.

따라서 min-height부모에는 명시 적 height속성이 설정되어 있지 않으므로 기본값은 auto입니다.

display: table-cell타겟 고객의 브라우저에서 가능한 경우 flexbox와 같은 최신 스타일 을 사용 하여이 문제를 해결할 수있는 방법이 있습니다. 또한 절대적으로 배치 된 내부 요소 에서 topbottom속성을 사용하여 특정 상황에서이를 무시할 수 있습니다 .