CSS 만 사용하여 HTML 요소가 나머지 화면 높이의 100 %를 어떻게 채울 수 있습니까?


118

헤더 요소와 콘텐츠 요소가 있습니다.

#header
#content

헤더는 고정 높이이고 콘텐츠는 화면에서 사용 가능한 나머지 높이를 모두 overflow-y: scroll;.

Javascript없이 가능합니까?

답변:


83

이에 대한 트릭은 html 및 body 요소에 100 % 높이를 지정하는 것입니다. 일부 브라우저는 높이를 계산하기 위해 상위 요소 (html, body)를 찾습니다.

<html>
    <body>
        <div id="Header">
        </div>
        <div id="Content">
        </div>
    </body>
</html>

html, body
{
    height: 100%;
}
#Header
{
    width: 960px;
    height: 150px;
}
#Content
{
    height: 100%;
    width: 960px;
}

1
나는 모든 솔루션을 시도 만 내 문제를 해결했다.
Alex

1
@Alex가 대상으로하는 모든 브라우저에서 작동한다면 반드시 계속해서 구현하십시오. 모든 사람의 요구 사항이 다릅니다.
BentOnCoding

321

모든 대답을 잊어 버리십시오.이 CSS 줄은 2 초 만에 저에게 효과적이었습니다.

height:100vh;

1vh = 브라우저 화면 높이의 1 %

출처

반응 형 레이아웃 크기 조정의 경우 다음을 사용할 수 있습니다.

min-height: 100vh

[2018 년 11 월 업데이트] 댓글에서 언급했듯이 최소 높이를 사용하면 반응 형 디자인에 문제가 발생하지 않을 수 있습니다.

[2018 년 4 월 업데이트] 댓글에서 언급했듯이 질문이 제기 된 2011 년에 모든 브라우저가 뷰포트 단위를 지원하지는 않았습니다. 다른 답변은 당시 솔루션 vmax이었습니다. IE에서는 여전히 지원되지 않으므로 아직 모두에게 최상의 솔루션이 아닐 수도 있습니다.


9
모든 부모 요소의 높이를 100 %로 설정할 필요가 없기 때문에 이것이 가장 간단한 대답입니다. 여기 VH에 대한 현재 지원입니다 - caniuse.com/#feat=viewport-units - 아이폰 OS는 분명히 "iOS의 VH가 높이 계산 아래 도구 모음의 높이를 포함하는 것으로보고있다"등의 해결을해야 할 수도 있습니다.
Brian Burns

2
와우, 좋은 발견! 지나치게 복잡한 대답을 가진이 모든 사람들을보십시오.
NoName

8
2011 년에 질문을 받았을 때 주요 브라우저는 뷰포트 단위를 지원하지 않았습니다. 그 "과도하게 복잡한 답변"은 그 당시 유일한 선택이었습니다.
JJJ

6
a min-height: 100vh가 훨씬 더 나을 것이라는 사소한 제안 . 반응 형 디자인에서도 확장 할 수 있습니다.
Wiggy A.

3
이것은 질문에 대한 답변이 아니며 뷰포트의 100 %를 차지합니다. 그는 다른 답변이 정확하기 때문에 그의 헤더가 뷰포트의 x %를 차지하기 때문에 이것을 원하지 않습니다.
4cody

35

실제로 가장 좋은 방법은 다음과 같습니다.

html { 
    height:100%;
}
body { 
    min-height:100%;
}

이것은 나를 위해 모든 것을 해결하고 바닥 글을 제어하는 ​​데 도움이되며 페이지가 아래로 스크롤 되더라도 고정 바닥 글을 가질 수 있습니다.

기술 솔루션-편집 됨

역사적으로 '높이'는 가장 쉬운 '너비'에 비해 성형하기가 까다 롭습니다. CSS <body>는 스타일링이 작동하는 데 중점을 둡니다 . 위의 코드-우리가 준 <html>것과 <body>높이. 이것은 마술이 등장하는 곳입니다. 우리는 테이블에 '최소 높이' <body><html>있기 때문에 브라우저 <body>에 최소 높이를 유지 하기 때문에 더 우월하다고 말하고 있습니다. 이것은 이미 높이가 이미 있기 때문에 <body>재정의를 허용 합니다 . 다시 말해, 우리는 브라우저를 속여서 테이블에서 "범핑" 하여 독립적으로 스타일을 지정할 수 있습니다.<html><html><html>


1
오 마이 갓! 기적이야!
Geoff

기적처럼 작동합니다! 하지만 제발 : 왜 min-height그리고 height?
Joy

1
@ShaojiangCai-역사적으로 '높이'는 가장 쉬운 '너비'에 비해 성형하기 까다로운 것입니다. CSS <body>는 스타일링이 작동하는 데 중점을 둡니다 . 이 코드는 우리가 준 <html>것과 <body>높이입니다. 이것은 마술이 등장하는 곳입니다. 우리는 테이블에 'min-height'를 가지고 있기 때문에 , 우리는 min-height를 보유하고 있기 때문에 더 <body>우월한 서버를 말하고 있습니다. 이것은 이미 높이가 이미 있기 때문에 재정의를 허용 합니다 . 즉, 우리는 서버를 속여서 테이블에서 "폭발"하도록하여 독립적으로 스타일을 지정할 수 있습니다. <html><body><body><html><html><html>
Faron

2
@Faron '서버'대신 '브라우저'가 더 나은 단어 선택 인 것 같습니다. ;)
LETs 2015 년

@EunLeem ...이 문제를 해결하기 위해 적절한 문구를 어떻게 선택할 수 있었는지에 대해 동의합니다. "elbow-bump"팁에 감사드립니다. 그에 따라 내 대답을 업데이트했습니다.
Faron 2015 년

14

min-height 속성에 vh를 사용할 수 있습니다.

min-height: 100vh;

여백을 사용하는 방법에 따라 다음과 같이 할 수 있습니다.

min-height: calc(100vh - 10px) //Considering you're using some 10px margin top on an outside element

10

허용 된 솔루션은 실제로 작동하지 않습니다. 콘텐츠 div가 부모의 높이와 같음을 알 수 있습니다 body. 따라서 body높이를 100%로 설정하면 브라우저 창의 높이와 동일하게 설정됩니다. 768px콘텐츠 div높이를 로 설정 하면 브라우저 창이 높이에 있다고 가정 100%하면 div의 높이는 768px. 따라서 헤더 div는 150px이고 콘텐츠 div는 768px. 결국 150px페이지 하단 아래에 콘텐츠가 있습니다 . 다른 솔루션은 이 링크를 확인 하십시오.


8

HTML5를 사용하면 다음을 수행 할 수 있습니다.

CSS :

body, html{ width:100%; height:100%; padding: 0; margin: 0;}
header{ width:100%; height: 70px; }
section{ width: 100%; height: calc(100% - 70px);}

HTML :

<header>blabablalba </header>
<section> Content </section>

백분율 높이에 대한 계산 사용에주의하십시오. 모든 부모가 높이를 설정하지 않으면 Firefox가 올바르게 작동하지 않습니다.
TomDK

4

나를 위해 다음은 잘 작동했습니다.

헤더와 콘텐츠를 div에 래핑했습니다.

<div class="main-wrapper">
    <div class="header">

    </div>
    <div class="content">

    </div>
</div>

참조 를 사용하여 높이를 flexbox로 채웠습니다. CSS는 다음과 같습니다.

.main-wrapper {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}
.header {
    flex: 1;
}
.content {
    flex: 1;
}

flexbox 기술에 대한 자세한 내용은 참조를 방문하십시오.



1

수락 된 답변이 작동하지 않습니다. 그리고 가장 많이 득표 한 답변은 실제 질문에 대한 답변이 아닙니다. 고정 픽셀 높이 헤더와 브라우저의 나머지 디스플레이에 필러를 사용하고 스크롤하여 owerflow를 찾습니다. 다음은 절대 위치 지정을 사용하여 실제로 작동하는 솔루션입니다. 나는 또한 질문에서 "고정 헤더"의 소리로 헤더의 높이를 알고 있다고 가정합니다. 여기에서는 150px를 예로 사용합니다.

HTML :

<html>
    <body>
        <div id="Header">
        </div>
        <div id="Content">      
        </div>
    </body>
</html>

CSS :( 시각적 효과만을위한 배경색 추가)

#Header
{
    height: 150px;
    width: 100%;
    background-color: #ddd;
}
#Content
{
   position: absolute;
   width: 100%;
   top: 150px;
   bottom: 0;
   background-color: #aaa;
   overflow-y: scroll;
}

내부의 실제 콘텐츠와 함께 이것이 어떻게 작동하는지 더 자세히 보려면 부트 스트랩 행과 열을 사용 #Content하여이 jsfiddle을 살펴보십시오 .


"고정 픽셀 높이 헤더"-> 정확히! 이 bottom숙박 시설은 #Content페이지 끝 부분에 고정되어 있는지 확인했습니다 . 시간을내어 설명해 주셔서 감사합니다.
Armfoot

1
그리고 나는 그것이 누군가를 도왔다는 것을 기쁘게 생각합니다;)
jumps4fun

1

이 경우 전체 페이지가 브라우저 높이의 100 %를 차지하도록 기본 콘텐츠 div가 유동적 인 높이가되기를 원합니다.

height: 100vh;


1

여기에 5 센트를 더하고 고전적인 솔루션을 제공하겠습니다.

html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idHeader {position:absolute; left:0; right:0; border:solid 3px red;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
<div id="idOuter">
  <div id="idHeader" style="height:30px; top:0;">Header section</div>
  <div id="idContent" style="top:36px; bottom:0;">Content section</div>
</div>

이것은 모든 브라우저, 스크립트, 플렉스없이 작동합니다. 전체 페이지 모드에서 스 니펫을 열고 브라우저 크기 조정 : 전체 화면 모드에서도 원하는 비율이 유지됩니다.

노트 :

  • 배경색이 다른 요소는 실제로 서로를 덮을 수 있습니다. 여기서는 요소가 올바르게 배치되었는지 확인하기 위해 단색 테두리를 사용했습니다.
  • idHeader.heightidContent.top경계를 포함하도록 조정하고, 경계를 사용하지 않는 경우와 동일한 값을 가져야한다. 그렇지 않으면 계산 된 너비에 테두리, 여백 및 / 또는 패딩이 포함되지 않으므로 요소가 뷰포트에서 빠져 나옵니다.
  • left:0; right:0;width:100%테두리를 사용하지 않으면 같은 이유로 대체 될 수 있습니다 .
  • 별도의 페이지 (스 니펫이 아님)에서 테스트 할 때는 html / body 조정이 필요하지 않습니다.
  • IE6 및 이전 버전에서는 요소에 padding-top및 / 또는 padding-bottom속성을 추가해야합니다 #idOuter.

내 대답을 완성하기 위해 다음은 바닥 글 레이아웃입니다.

html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
#idFooter {position:absolute; left:0; right:0; border:solid 3px blue;}
<div id="idOuter">
  <div id="idContent" style="bottom:36px; top:0;">Content section</div>
  <div id="idFooter" style="height:30px; bottom:0;">Footer section</div>
</div>

다음은 머리글과 바닥 글이 모두있는 레이아웃입니다.

html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idHeader {position:absolute; left:0; right:0; border:solid 3px red;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
#idFooter {position:absolute; left:0; right:0; border:solid 3px blue;}
<div id="idOuter">
  <div id="idHeader" style="height:30px; top:0;">Header section</div>
  <div id="idContent" style="top:36px; bottom:36px;">Content section</div>
  <div id="idFooter" style="height:30px; bottom:0;">Footer section</div>
</div>


0

IE 9 이하를 지원할 필요가 없다면 flexbox를 사용하겠습니다.

body { display: flex; flex-direction: column; }
.header { height: 70px; }
.content { flex: 1 1 0 }

전체 페이지를 채우려면 본문도 필요합니다.

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

0

CSS PLaY | 크로스 브라우저 고정 머리글 / 바닥 글 / 중앙 단일 열 레이아웃

CSS 프레임, 버전 2 : 예제 2, 지정된 너비 | 456 Berea Street

한 가지 중요한 것은 이것이 쉬운 것처럼 들리지만 이와 같은 효과를 얻기 위해 CSS 파일에 들어가는 추악한 코드가 상당히 많이있을 것입니다. 불행히도 이것이 유일한 선택입니다.


링크 전용 답변은 권장하지 않습니다. 답변에 코드를 포함 해보십시오.
사용자가 아닌 사용자

0
#Header
{
width: 960px;
height: 150px;
}

#Content
{
min-height:100vh;
height: 100%;
width: 960px;
}

-1

지금까지 찾은 가장 좋은 해결책은 페이지 하단에 바닥 글 요소를 설정 한 다음 바닥 글 오프셋과 확장해야하는 요소의 차이를 평가하는 것입니다. 예 :

HTML 파일

<div id="contents"></div>
<div id="footer"></div>

CSS 파일

#footer {
    position: fixed;
    bottom: 0;
    width: 100%;
}

js 파일 (jquery 사용)

var contents = $('#contents'); 
var footer = $('#footer');
contents.css('height', (footer.offset().top - contents.offset().top) + 'px');

각 창 크기 조정에서 내용 요소의 높이를 업데이트하고 싶을 수도 있습니다.

$(window).on('resize', function() {
  contents.css('height', (footer.offset().top -contents.offset().top) + 'px');
});


-3

이런 식으로 시도해 보셨습니까?

CSS :

.content {
    height: 100%;
    display: block;
}

HTML :

<div class=".content">
<!-- Content goes here -->
</div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.