CSS Div 스트레치 100 % 페이지 높이


196

내 페이지 왼쪽에 탐색 표시 줄이 있고 페이지 높이의 100 %로 늘리기를 원합니다. 뷰포트의 높이뿐만 아니라 스크롤 할 때까지 숨겨진 영역을 포함합니다. 이것을 달성하기 위해 자바 스크립트를 사용하고 싶지 않습니다.

HTML / CSS로 할 수 있습니까?

답변:


171

다음은 동적 배경의 컨테이너로 div를 사용할 때 마침내 생각해 낸 솔루션입니다.

  • z-index백그라운드가 아닌 용도를 제거하십시오 .
  • 전체 높이 열을 제거 left하거나 제거하십시오 right.
  • 전체 폭 행을 제거 top하거나 제거하십시오 bottom.

편집 1 : 아래의 CSS는 FF 및 Chrome에서 올바르게 표시되지 않아 편집되었습니다. position:relativeHTML 로 이동 하고 본문 height:100%대신을 (를) 설정했습니다 min-height:100%.

편집 2 : CSS에 추가 의견이 추가되었습니다. 위에 몇 가지 지침을 추가했습니다.

CSS :

html{
    min-height:100%;/* make sure it is at least as tall as the viewport */
    position:relative;
}
body{
    height:100%; /* force the BODY element to match the height of the HTML element */
}
#cloud-container{
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0;
    overflow:hidden;
    z-index:-1; /* Remove this line if it's not going to be a background! */
}

HTML :

<!doctype html>
<html>
<body>
    <div id="cloud-container"></div>
</body>
</html>

왜?

html{min-height:100%;position:relative;}

이것이 없으면 클라우드 컨테이너 DIV가 HTML의 레이아웃 컨텍스트에서 제거됩니다. position: relativeDIV가 그려 질 때 DIV가 HTML 상자 bottom:0의 하단 을 참조 하도록 HTML 상자 안에 유지되도록합니다 . height:100%클라우드 컨테이너에서도 뷰포트가 아닌 HTML 태그의 높이를 참조하므로 사용할 수 있습니다 .


이것은 훌륭하지만 중심이 아닙니다. 그 어떤 수정? 여백 : 0 자동; 작동하지 않습니다.
cream

멋진 답변입니다. html그래도 요소 에서 높이뿐만 아니라 최소 높이를 사용해야한다는 것을 알았습니다 . 왜 그런 겁니까?
HartleySan

사용 height은 '너는 키가 크다. 더 이상은 아닙니다. ' 뷰포트의 높이가됩니다. 뷰포트 나 키보다 크거나 같기를 원합니다. min-height이 잘한다.
Knyri

1
z- 색인은 움직이는 배경에 대한 스 니펫이기 때문에 div가 백그라운드에 유지되도록하고 싶었습니다. 일반적인 요소에는 필요하지 않습니다.
Knyri

5
이것은 우수하다. CSS를 15 년 동안 해왔으며 <html>뷰포트에 대한 위치 지정과 뷰포트에 대한 위치 지정이 별개의 두 가지 라는 것을 클릭하지 않았습니다 . 감사합니다!
벤 헐

82

HTML5를 사용하는 가장 쉬운 방법은 간단하게하는 것 height: 100vh입니다. 여기서 'vh'는 브라우저 창의 뷰포트 높이를 나타냅니다. 브라우저 및 모바일 장치의 크기 조정에 응답합니다.


40
요점이 완전히 누락되었습니다. OP는 창 / 뷰포트의 높이가 아닌 페이지 높이를 요구합니다.
Greg

9
뷰포트 높이가 아닌 문서 높이.
punkbit

7
위와 같은 의견
ericn

11
나는 급히 질문을 잘못 읽고이 답변이 유용하다는 것을 알았습니다. 내가했던 것과 똑같은 실수를 해 주셔서 감사합니다. 그러나 이제이 답변을 수정하여 해당 경고를 포함하고 싶습니다.
durette

그건 그렇고, 나는 그것을 찾았다 vw.
Aaron Franke

14

비슷한 문제가 있었고 해결책은 다음과 같습니다.

#cloud-container{
    position:absolute;
    top:0;
    bottom:0;
}

페이지 높이가 100 % 인 페이지 중심 div를 원했기 때문에 전체 솔루션은 다음과 같습니다.

#cloud-container{
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0; 
    width: XXXpx; /*otherwise div defaults to page width*/
    margin: 0 auto; /*horizontally centers div*/
}

부모 요소 (또는 단순히 'body')를 만들어야 할 수도 있습니다. position: relative;


17
왜 모두가 그것을 부르는가 cloud-container?
윌프

이것은 좋은 것입니다! 높이 고정을 무시하는 것은 실제로 훌륭한 아이디어이며 아직 버그를 발견하지 못했습니다. 그것을 사랑하십시오. 키스! 팁 맨 감사합니다!
daneczech

13

가짜 열을 사용하여 속일 수도 있고 CSS 속임수를 사용할 수도 있습니다.


1
css trickery는 높이 높이가 같지만 높이는 100 %가 아닙니다.
thedz

탐색 모음이 페이지 높이를 결정하는 컨텐츠 높이까지 확장되면 100 % 높이가됩니다.
Ryan Doherty

1
탐색 막대가 항상 충분히 높도록 100 % 안전한 방법을 제공하지 않은 경우 -1입니다.
Aaron Digulla

죽은 링크 : ((((
JB는

9

테이블을 사용하는 것은 간단합니다.

<html>

<head>
    <title>100% Height test</title>
</head>

<body>
    <table style="float: left; height: 100%; width: 200px; border: 1px solid red">
        <tbody>
            <tr>
                <td>Nav area</td>
            </tr>
        </tbody>
    </table>
    <div style="border: 1px solid green;">Content blabla... text
        <br /> text
        <br /> text
        <br /> text
        <br />
    </div>
</body>

</html>

DIV가 소개되었을 때 사람들은 테이블을 두려워하여 가난한 DIV가 은유 적 망치가되었습니다.


6
DIV와 유동적 인 스타일은 훌륭하지만 CSS가 TABLE이 테이블 레이아웃의 본질을 달성하는 것과 같은 방식으로 화면 레이아웃의 본질을 캡처하지 못한다고 생각합니다. ... 그리고 테이블 레이아웃은 여전히 ​​허용 가능한 방법입니다.
Jeff Meatball 양

9
테이블은 페이지 레이아웃이 아닌 테이블 형식 데이터를위한 것입니다. 즉, CSS는 오래된 100 % 높이 질문에 관해서는 몇 가지 주요 단점이 있습니다. 마감 시간이 촉박 할 때이 솔루션을 사용했음을 인정해야하지만 항상 포기한 것처럼 느껴졌습니다.
Scott Greenfield

6
@ 스콧 : 세 번의 주요 브라우저에서 100 % 높이의 디자인을 얻으려고 3 주를 낭비했습니다. 난 정말 더 이상 "테이블이 악"헛소리를들을 수 없습니다 :-( 심지어 내 지식으로, 지정된 div 사용하여 너무 복잡하다.
아론 Digulla에게

1
적절한 계획은 테이블에 의존하지 않아도됩니다. 이제 2012 년 업계 전체가 IE6 / 7을 넘어서면서 100 % 높이의 테이블을 사용하지 말 것을 강력히 권합니다!
Vael Victus

4
<table>을 사용할 필요는 없습니다. <div style = "display : table;"을 사용할 수 있습니다. : D
Wilf

8

절대 위치를 사용하십시오. 이것은 일반적으로 수동으로 물건을 배치하거나 플로팅 대화 상자가 필요한 위치 절대 값을 사용하는 데 사용되는 방법이 아닙니다. 창 또는 내용의 크기를 조정할 때 자동으로 늘어납니다. 표준 모드가 필요하지만 IE6 이상에서 작동한다고 생각합니다.

div를 ID 'thecontent'로 바꾸고 콘텐츠로 지정하십시오 (지정된 높이는 설명을 위해 실제 콘텐츠에 높이를 지정할 필요가 없습니다).

<div style="position: relative; width: 100%;">
      <div style="position: absolute; left: 0px; right: 33%; bottom: 0px; top: 0px; background-color: blue; width: 33%;" id="navbar">nav bar</div>
      <div style="position: relative; left: 33%; width: 66%; background-color: yellow;" id="content">
         <div style="height: 10000px;" id="thecontent"></div>
      </div>
</div>

이것이 작동하는 방식은 외부 div가 탐색 모음의 참조 점으로 작동한다는 것입니다. 외부 div는 'content'div의 내용으로 확장됩니다. 탐색 모음은 절대 위치를 사용하여 상위 높이까지 확장됩니다. 가로 정렬의 경우 콘텐츠 div를 동일한 탐색 표시 줄 너비만큼 오프셋합니다.

CSS3 flex box 모델을 사용하면 훨씬 쉽게 만들 수 있지만 IE에서는 아직 사용할 수 없으며 자체 단점이 있습니다.


안녕하세요 tstanis, IE6에서 테스트했지만 탐색 표시 줄이 늘어나지 않았습니다 . FireFox에서는 Chrome이 크게 작동합니다.
Lucas Pottersky

IE6에서는이 작업을 수십 번 수행하지 않은 한 테이블이나 JavaScript 또는 브라우저 스위치를 사용하십시오.
Aaron Digulla

7

나는 당신과 같은 문제에 부딪쳤다. DIV자바 스크립트를 통해 div를 조작하기 쉽기 때문에 배경 으로 만들고 싶었습니다 . 어쨌든 그 div의 CSS에서 세 가지 일을했습니다.

CSS :

{    
position:absolute; 
display:block; 
height:100%; 
width:100%; 
top:0px; 
left:0px; 
z-index:-1;    
}

6

보다 최신 브라우저를 대상으로하는 경우 인생은 매우 간단 할 수 있습니다. 시험:

.elem{    
    height: 100vh;
 }

페이지의 50 %에서 필요하면 100을 50으로 바꾸십시오.


4
페이지 높이가 화면 높이와 같다고 가정합니다. 페이지는 종종 화면 높이보다 훨씬 길 수 있으므로 아래로 스크롤하는 이유는 무엇입니까?
TidyDev

5

모달 팝업을 표시하기 전에 전체 웹 페이지를 덮고 싶습니다. CSS와 Javascript를 사용하여 많은 방법을 시도했지만 다음 해결책을 알아낼 때까지 그중 아무것도 도움이되지 않습니다. 그것은 나를 위해 작동합니다, 나는 그것이 당신도 도움이되기를 바랍니다.

<!DOCTYPE html>
<html>
	<head>
		<style>
			html, body {
			    margin: 0px 0px;
			    height 100%;
			}
          
            div.full-page {
                position: fixed;
                top: 0;
                bottom: 0;
                width: 100%;
                height: 100%;
                background-color: #000;
                opacity:0.8;
                overflow-y: hidden;
                overflow-x: hidden;
            }
          
            div.full-page div.avoid-content-highlight {
                position: relative;
                width: 100%;
                height: 100%;
            }
          
            div.modal-popup {
                position: fixed;
                top: 20%;
                bottom: 20%;
                left: 30%;
                right: 30%;
                background-color: #FFF;
                border: 1px solid #000;
            }
		</style>
		<script>
		
			// Polling for the sake of my intern tests
			var interval = setInterval(function() {
				if(document.readyState === 'complete') {
					clearInterval(interval);
					isReady();
				}    
			}, 1000);
			
			function isReady() {
				document.getElementById('btn1').disabled = false;
				document.getElementById('btn2').disabled = false;
				
				// disable scrolling
                document.getElementsByTagName('body')[0].style.overflow = 'hidden';
			}
			
			function promptModalPopup() {
                document.getElementById("div1").style.visibility = 'visible';
                document.getElementById("div2").style.visibility = 'visible';
				
				// disable scrolling
                document.getElementsByTagName('body')[0].style.overflow = 'hidden';
            }
          
            function closeModalPopup() {
                document.getElementById("div2").style.visibility = 'hidden';  
                document.getElementById("div1").style.visibility = 'hidden';
				
				// enable scrolling
                document.getElementsByTagName('body')[0].style.overflow = 'scroll';
            }
		</script>
		
	</head>
	<body id="body">
		<div id="div1" class="full-page">
			<div class="avoid-content-highlight">
                
            </div>
		</div>
        <button id="btn1" onclick="promptModalPopup()" disabled>Prompt Modal Popup</button>
		<div id="demo">
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
		</div>
        <div id="div2" class="modal-popup">
            I am on top of all other containers
            <button id="btn2" onclick="closeModalPopup()" disabled>Close</button>
        <div>
	</body>
</html>

행운을 빕니다 ;-)


2
* {
margin: 0;
}
html, body {
height: 90%;
}
.content {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto ;
}

1

 
           document.body.onload = function () {
                var textcontrol = document.getElementById("page");
                textcontrol.style.height = (window.innerHeight) + 'px';
            }
<html>
<head><title></title></head>
<body>

<div id="page" style="background:green;">
</div>
</body>
</html>


답변에 설명을 추가하여 문제의 해결 방법과 문제를 해결하는 방법을 보여주십시오.
바나나에서 우리의 남자

div "페이지"모든 플랫폼 높이 100 % js 스크립트를 <script> </ script> 태그에 복사하고 HTML 코드에 붙여 넣으십시오.
reaw_ni

0

간단하게, 그냥 테이블 사업부에 싸서 ...

HTML :

<div class="fake-table">
   <div class="left-side">
     some text
   </div>
   <div class="right-side">
     My Navigation or something
   </div>
</div>

CSS :

<style>

 .fake-table{display:table;width:100%;height:100%;}
 .left-size{width:30%;height:100%;}
 .left-size{width:70%;height:100%;}

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