CSS Div kéo dài 100% chiều cao trang


195

Tôi có một thanh điều hướng ở phía bên trái của trang của mình và tôi muốn nó kéo dài đến 100% chiều cao của trang. Không chỉ chiều cao của chế độ xem, mà bao gồm các khu vực bị ẩn cho đến khi bạn cuộn. Tôi không muốn sử dụng javascript để thực hiện điều này.

Nó có thể được thực hiện trong HTML / CSS không?

Câu trả lời:


171

Đây là giải pháp cuối cùng tôi đã đưa ra khi sử dụng div làm thùng chứa cho nền động.

  • Loại bỏ các z-indexsử dụng không nền.
  • Hủy bỏ lefthoặc rightcho một cột chiều cao đầy đủ.
  • Hủy bỏ tophoặc bottomcho một hàng chiều rộng đầy đủ.

EDIT 1: CSS bên dưới đã được chỉnh sửa vì nó không hiển thị chính xác trong FF và Chrome. chuyển position:relativesang HTML và đặt phần thân height:100%thay vì min-height:100%.

EDIT 2: Đã thêm ý kiến ​​bổ sung cho CSS. Đã thêm một số hướng dẫn ở trên.

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! */
}

Các html:

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

Tại sao?

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

Không có điều này, DIV của bộ chứa đám mây sẽ bị xóa khỏi bối cảnh bố cục của HTML. position: relativeđảm bảo rằng DIV vẫn nằm trong hộp HTML khi nó được vẽ sao cho bottom:0liên quan đến đáy hộp HTML. Bạn cũng có thể sử dụng height:100%trên bộ chứa đám mây vì giờ đây nó đề cập đến chiều cao của thẻ HTML chứ không phải chế độ xem.


Điều này là tuyệt vời, nhưng sẽ không trung tâm. Bất kỳ sửa chữa cho điều đó? lề: 0 tự động; không hoạt động.
kem

Câu trả lời tuyệt vời. Tôi nhận thấy rằng bạn phải sử dụng chiều cao tối thiểu (và không chỉ chiều cao) trên htmlphần tử. Tại sao vậy?
HartleySan

Sử dụng heightlà nói 'bạn cao thế này; không hơn không kém.' Có nghĩa là nó sẽ là chiều cao của khung nhìn. Chúng tôi muốn nó ít nhất phải cao bằng khung nhìn hoặc cao hơn. min-heightlàm điều này độc đáo.
Knyri

1
Chỉ số z ở đó bởi vì đây là đoạn trích cho một nền tảng di chuyển mà tôi đã làm và tôi muốn chắc chắn rằng div vẫn ở trong nền. Nó không cần thiết cho các yếu tố bình thường.
Knyri

5
Thật tuyệt vời. Tôi đã làm CSS được 15 năm và nó chưa bao giờ nhấp vào việc định vị đến <html>và định vị cho khung nhìn là hai điều riêng biệt. Cảm ơn bạn!
Ben Hull

81

Với HTML5, cách dễ nhất chỉ đơn giản là làm height: 100vh. Trong đó 'vh' là viết tắt của chiều cao khung nhìn của cửa sổ trình duyệt. Đáp ứng thay đổi kích thước của trình duyệt và thiết bị di động.


38
Thiếu điểm hoàn toàn. OP đang yêu cầu chiều cao của trang, không phải chiều cao của cửa sổ / khung nhìn.
Greg

9
Chiều cao tài liệu, không phải chiều cao khung nhìn.
punkbit 23/2/2016

7
cùng nhận xét như trên
ericn

11
Tôi vội vàng đọc sai câu hỏi và thấy câu trả lời này hữu ích. Cảm ơn bạn đã mắc lỗi tương tự tôi đã làm, nhưng bây giờ tôi muốn đề nghị câu trả lời này được sửa đổi để bao gồm sự cảnh báo đó.
Durette

Nhân tiện, tôi đã tra cứu nó, cũng có vw.
Aaron Franke

14

Tôi đã có một vấn đề tương tự và giải pháp là làm điều này:

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

Tôi muốn có một div tập trung vào trang với chiều cao 100% chiều cao trang, vì vậy tổng giải pháp của tôi là:

#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*/
}

Bạn có thể cần phải làm cho một phần tử cha (hoặc đơn giản là 'cơ thể') có position: relative;


16
Tại sao mọi người gọi nó là a cloud-container?
Wilf

Cái này là một cái tốt! Bỏ qua việc sửa chữa chiều cao thực sự là một ý tưởng tuyệt vời và tôi chưa nhận thấy bất kỳ lỗi nào với nó. Yêu nó. HÔN ! Cảm ơn người đàn ông tip!
danec817

13

Bạn có thể gian lận bằng cách sử dụng Cột Faux Hoặc bạn có thể sử dụng một số thủ thuật CSS


1
Lưu ý rằng thủ thuật css sẽ giúp bạn có các cột có chiều cao bằng nhau, nhưng không phải là cột có chiều cao 100%.
thedz

Nếu thanh điều hướng mở rộng theo chiều cao của nội dung, xác định chiều cao của trang, nó sẽ cung cấp cho bạn 100% chiều cao.
Ryan Doherty

1
-1 vì không cung cấp một cách an toàn 100% để đảm bảo thanh điều hướng luôn đủ cao.
Aaron Digulla

liên kết chết: ((((
JBis

9

Thật đơn giản khi sử dụng bảng:

<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>

Khi DIV được giới thiệu, mọi người rất sợ những cái bàn đến nỗi DIV tội nghiệp trở thành cây búa ẩn dụ.


6
Mặc dù các DIV và kiểu chất lỏng là tuyệt vời, tôi nghĩ CSS vẫn không thể nắm bắt được bản chất của bố cục màn hình giống như cách TABLE đạt được bản chất của bố cục bảng. ... Và bố trí bảng vẫn là một cách chấp nhận được để làm việc.
Jeff Meatball Yang

8
Bảng có nghĩa là cho dữ liệu dạng bảng, không phải bố cục trang. Điều đó đang được nói, CSS có một số thiếu sót lớn khi nói đến câu hỏi chiều cao 100% tuổi. Tôi phải thừa nhận rằng tôi đã sử dụng giải pháp này khi đến hạn chót, nhưng tôi luôn cảm thấy như mình đang bỏ cuộc.
Scott Greenfield

6
@Scott: Tôi đã từng lãng phí ba tuần cố gắng để có được thiết kế chiều cao 100% ngay trong ba trình duyệt chính. Tôi thực sự không thể nghe thấy những chuyện nhảm nhí "bàn là xấu xa" nữa :-( Ngay cả với kiến ​​thức của tôi, sử dụng DIV cũng quá phức tạp.
Aaron Digulla

1
Lập kế hoạch phù hợp đảm bảo rằng không cần phụ thuộc vào các bảng. Bây giờ vào năm 2012, với toàn bộ ngành công nghiệp đã vượt qua IE6 / 7, tôi khuyên bạn không nên sử dụng bảng cho chiều cao 100%!
Vael Victus

4
Bạn không phải sử dụng <bảng>, bạn có thể sử dụng <div style = "display: table;" : D
Wilf

8

Sử dụng vị trí tuyệt đối. Lưu ý rằng đây không phải là cách chúng ta thường sử dụng để sử dụng vị trí tuyệt đối, đòi hỏi phải đặt thủ công hoặc có các hộp thoại nổi. Điều này sẽ tự động kéo dài khi bạn thay đổi kích thước cửa sổ hoặc nội dung. Tôi tin rằng điều này đòi hỏi chế độ tiêu chuẩn nhưng sẽ hoạt động trong IE6 trở lên.

Chỉ cần thay thế div bằng id 'thecontent' bằng nội dung của bạn (chiều cao được chỉ định chỉ để minh họa, bạn không phải chỉ định chiều cao trên nội dung thực tế.

<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>

Cách thức hoạt động của nó là div bên ngoài hoạt động như một điểm tham chiếu cho thanh điều hướng. Div bên ngoài được kéo dài bởi nội dung của div 'nội dung'. Thanh điều hướng sử dụng định vị tuyệt đối để tự kéo dài ra theo chiều cao của cha mẹ. Đối với căn chỉnh ngang, chúng tôi làm cho div nội dung tự bù đắp bằng cùng chiều rộng của thanh điều hướng.

Điều này được thực hiện dễ dàng hơn nhiều với mô hình hộp flex CSS3, nhưng chưa có trong IE và có một số đặc điểm riêng của nó.


Xin chào, tôi đã thử nghiệm trên IE6 và thanh điều hướng không kéo dài . Trên FireFox, Chrome hoạt động rất tốt.
Lucas Pottersky

Trên IE6, sử dụng bảng hoặc JavaScript hoặc trình chuyển đổi trình duyệt trừ khi bạn đã thực hiện việc này hàng chục lần trước đó.
Aaron Digulla

7

Nếu bạn đang nhắm mục tiêu các trình duyệt hiện đại hơn, cuộc sống có thể rất đơn giản. thử:

.elem{    
    height: 100vh;
 }

nếu bạn cần nó ở 50% trang, thay 100 bằng 50.


3
Điều này giả định rằng chiều cao trang giống với chiều cao màn hình. Một trang thường có thể dài hơn rất nhiều so với chiều cao của màn hình, do đó tại sao chúng ta cuộn xuống.
TidyDev

6

Tôi gặp vấn đề tương tự như bạn. Tôi muốn làm mộtDIV nền tảng, tại sao, bởi vì nó dễ dàng thao tác div thông qua javascript. Dù sao, ba điều tôi đã làm trong css cho div đó.

CSS:

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

5

Tôi muốn bao gồm toàn bộ trang web trước khi nhắc một cửa sổ bật lên phương thức. Tôi đã thử nhiều phương pháp bằng CSS và Javascript nhưng không có phương pháp nào giúp được cho đến khi tôi tìm ra giải pháp sau. Nó làm việc cho tôi, tôi hy vọng nó cũng giúp bạn.

<!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>

Chúc may mắn ;-)


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>


vui lòng thêm một số lời giải thích cho câu trả lời của bạn, cho biết những gì nó làm và cách giải quyết vấn đề
Người đàn ông của chúng tôi ở Chuối

div "trang" 100% chiều cao bất kỳ nền tảng. chỉ cần sao chép tập lệnh js vào thẻ <script> </ script> và dán vào mã HTML.
reaw_ni

0

Đơn giản, chỉ cần gói nó trong một bảng div ...

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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.