[英]How to make a div 100% height of the browser window
我有一個包含兩列的布局 - 左div
和右div
。
右側的div
具有灰色background-color
,我需要它根據用戶瀏覽器 window 的高度垂直擴展。 現在, background-color
在該div
中的最后一段內容處結束。
我試過height:100%
, min-height:100%;
, ETC。
有幾個 CSS 3 度量單位稱為:
來自上面鏈接的 W3 候選推薦:
視口百分比長度與初始包含塊的大小有關。 當初始包含塊的高度或寬度發生變化時,它們會相應地縮放。
這些單位是vh
(視口高度)、 vw
(視口寬度)、 vmin
(視口最小長度)和vmax
(視口最大長度)。
對於這個問題,我們可以使用vh
: 1vh
等於視口高度的 1%。 也就是說, 100vh
等於瀏覽器窗口的高度,而不管元素在 DOM 樹中的位置:
<div></div>
div {
height: 100vh;
}
這實際上就是所需要的。 這是一個使用中的JSFiddle 示例。
目前,除 Opera Mini 外,所有最新的主要瀏覽器都支持此功能。 查看Can I use...以獲得進一步的支持。
對於手頭的問題,具有左右分隔符,這是一個JSFiddle 示例,顯示了包含vh
和vw
的兩列布局。
100vh
與100%
有何不同?以這個布局為例:
<body style="height: 100%">
<div style="height: 200px">
<p style="height: 100%; display: block;">Hello, world!</p>
</div>
</body>
這里的p
標簽設置為 100% 高度,但是因為它包含的div
有 200 像素的高度,所以 200 像素的 100% 變成了 200 像素,而不是body
高度的 100%。 100vh
意味着無論div
高度如何, p
標簽都將是body
100% 高度。 看看這個隨附的 JSFiddle可以輕松看出區別!
如果你想設置<div>
或任何元素的高度,你也應該將<body>
和<html>
的高度設置為 100%。 然后你可以用 100% 設置元素的高度:)
下面是一個例子:
body, html {
height: 100%;
}
#right {
height: 100%;
}
如果你能夠絕對定位你的元素,
position: absolute;
top: 0;
bottom: 0;
會做的。
您可以在 CSS 中使用視口單元:
HTML:
<div id="my-div">Hello World!</div>
CSS:
#my-div {
height: 100vh; /* vh stands for view-port height, 1vh is 1% of screen height */
}
與flex 模型解決方案相比,所有其他解決方案,包括投票最高的具有vh
解決方案,都是次優的。
隨着CSS flex 模型的出現,解決 100% 高度問題變得非常非常容易:使用height: 100%; display: flex
height: 100%; display: flex
在父元素上, flex: 1
在子元素上。 它們會自動占用容器中的所有可用空間。
請注意標記和 CSS 是多么簡單。 沒有桌子黑客或任何東西。
html, body { height: 100%; } body { display: flex; } .left, .right { flex: 1; } .left { background: orange; } .right { background: cyan; }
<div class="left">left</div> <div class="right">right</div>
在此處了解有關flex 模型的更多信息。
你沒有提到一些重要的細節,比如:
這是一種可能性:
body, div { margin: 0; border: 0 none; padding: 0; } html, body, #wrapper, #left, #right { height: 100%; min-height: 100%; } #wrapper { margin: 0 auto; overflow: hidden; width: 960px; // width optional } #left { background: yellow; float: left; width: 360px; // width optional but recommended } #right { background: grey; margin-left: 360px; // must agree with previous width }
<html> <head> <title>Example</title> </head> <body> <div id="wrapper"> <div id="left"> Left </div> <div id="right"></div> </div> </body> </html>
這取決於哪些柱需要固定,哪些是液體,這有很多變化。 您也可以使用絕對定位來做到這一點,但我通常發現使用浮點數會得到更好的結果(尤其是在跨瀏覽器方面)。
這對我有用:
<div style="position:fixed; top:0px; left:0px; bottom:0px; right:0px; background: red;"> </div>
使用position:fixed
而不是position:absolute
,這樣即使向下滾動分區也會擴展到屏幕的末尾。
這是高度的修復。
在您的 CSS 中使用:
#your-object: height: 100vh;
對於不支持vh-units
瀏覽器,請使用 Modernizr。
添加此腳本(添加對vh-units
檢測)
// https://github.com/Modernizr/Modernizr/issues/572
// Similar to http://jsfiddle.net/FWeinb/etnYC/
Modernizr.addTest('cssvhunit', function() {
var bool;
Modernizr.testStyles("#modernizr { height: 50vh; }", function(elem, rule) {
var height = parseInt(window.innerHeight/2,10),
compStyle = parseInt((window.getComputedStyle ?
getComputedStyle(elem, null) :
elem.currentStyle)["height"],10);
bool= !!(compStyle == height);
});
return bool;
});
最后,如果瀏覽器不支持vh-units
,則使用此函數將視口的高度添加到#your-object
:
$(function() {
if (!Modernizr.cssvhunit) {
var windowH = $(window).height();
$('#your-object').css({'height':($(window).height())+'px'});
}
});
即使有了這里的所有答案,我還是驚訝地發現沒有一個能真正解決問題。 如果我使用100vh
height
/ min-height
,當內容比頁面長時布局會中斷。 如果我改為使用100%
height
/ min-height
,則當內容小於頁面高度時布局會中斷。
我找到的解決方案解決了這兩種情況,是結合前兩個答案:
html, body, #mydiv {
height: 100%;
min-height: 100vh;
}
試試這個 - 測試:
body {
min-height: 100%;
}
#right, #left {
height: 100%;
}
編輯:2020 更新:
您現在可以使用vh
:
#right, #left {
height: 100vh
}
100vw = 視口寬度的 100%。
100vh = 視口高度的 100%。
如果要將div
寬度或高度設置為瀏覽器窗口大小的 100%,則應使用:
寬度: 100vw
對於高度: 100vh
或者,如果您想將其設置得更小,請使用 CSS calc
函數。 例子:
#example {
width: calc(100vw - 32px)
}
100%
的寬度和高度不同。
當您指定width: 100%
,它意味着“從父元素或窗口的寬度中占用可用寬度的 100%”。
當您指定height: 100%
,它僅表示“占用父元素可用高度的 100%”。 這意味着如果您不在頂層元素指定高度,則所有子元素的高度將為0
或父元素的高度,這就是為什么您需要將最頂層元素設置為具有min-height
的原因窗戶高度。
我總是指定主體的最小高度為 100vh,這使定位和計算變得容易,
body {
min-height: 100vh;
}
一個完整的頁面稱為“視口” ,您可以在 CSS3 中根據其視口設計元素。
這些單位稱為視口百分比長度,與初始包含塊的大小有關。
vh
。 頁面的完整高度為 100vh。vw
。 頁面的完整高度為 100vw。所以現在,您的問題可以通過將以下內容添加到您的 CSS 中輕松解決:
.classname-for-right-div /*You could also use an ID*/ {
height: 100vh;
}
添加min-height: 100%
並且不指定高度(或將其設置為自動)。 它完全為我完成了工作:
.container{
margin: auto;
background-color: #909090;
width: 60%;
padding: none;
min-height: 100%;
}
最簡單的方法是這樣做。
div { background: red; height: 100vh; } body { margin: 0px; }
<div></div>
這對我有用:
html, body {
height: 100%; /* IMPORTANT!!! Stretches viewport to 100% */
}
#wrapper {
min-height: 100%; /* Minimum height for a modern browser */
height:auto !important; /* Important rule for a modern browser */
height:100%; /* Minimum height for Internet Explorer */
overflow: hidden !important; /* Firefox scroll-bar */
}
取自本頁。
嘗試在html
和body
設置height:100%
html,
body {
height: 100%;
}
如果你想要 2 div 高度相同的使用或設置父元素display:flex
屬性。
有多種方法可以將<div>
的高度設置為 100%。
方法(一):
html, body { height: 100%; min-height: 100%; } .div-left { height: 100%; width: 50%; background: green; } .div-right { height: 100%; width: 50%; background: gray; }
<div class="div-left"></div> <div class="div-right"></div>
使用 vh 的方法 (B):
html, body { height: 100%; min-height: 100%; } .div-left { height: 100vh; width: 50%; background: green; float: left; } .div-right { height: 100vh; width: 50%; background: gray; float: right; }
<div class="div-left"></div> <div class="div-right"></div>
方法(c)使用彈性盒:
html, body { height: 100%; min-height: 100%; } .wrapper { height: 100%; min-height: 100%; display: flex; } .div-left { width: 50%; background: green; } .div-right { width: 50%; background: gray; }
<div class="wrapper"> <div class="div-left"></div> <div class="div-right"></div> </div>
以下內容與您在之前的答案中的內容不完全相同,但可能對某些人有所幫助:
body {
display: flex;
flex-direction: column;
height: 100vh;
margin: 0px;
}
#one {
background-color: red;
}
#two {
margin-top: 0px;
background-color: black;
color: white;
overflow-y: scroll;
}
默認情況下,塊元素占用其父元素的全部寬度。
這就是他們如何滿足他們的設計要求,即垂直堆疊。
在塊格式化上下文中,框從包含塊的頂部開始一個接一個地垂直排列。
但是,這種行為不會擴展到高度。
默認情況下,大多數元素是其內容的高度( height: auto
)。
與寬度不同,如果需要額外的空間,則需要指定高度。
因此,請記住以下兩點:
.Contact { display: flex; /* full width by default */ min-height: 100vh; /* use full height of viewport, at a minimum */ } .left { flex: 0 0 60%; background-color: tomato; } .right { flex: 1; background-color: pink; } body { margin: 0; } /* remove default margins */
<div class="Contact"> <section class="left"> <div class=""> <h1>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</h1> </div> </section> <section class="right"> <img /> </section> </div>
選項之一是使用 CSS 表。 它有很好的瀏覽器支持,甚至可以在 Internet Explorer 8 中運行。
html, body { height: 100%; margin: 0; } .container { display: table; width: 100%; height: 100%; } .left, .right { display: table-cell; width: 50%; } .right { background: grey; }
<div class="container"> <div class="left"></div> <div class="right"></div> </div>
只需使用“vh”單位而不是“px”,即視口高度。
height: 100vh;
試試這個一次...
*{ padding:0; margin:0; } .parent_div{ overflow:hidden; clear:both; color:#fff; text-align:center; } .left_div { float: left; height: 100vh; width: 50%; background-color: blue; } .right_div { float: right; height: 100vh; width: 50%; background-color: green; }
<div class=" parent_div"> <div class="left_div">Left</div> <div class="right_div">Right</div> </div>
Flexbox 非常適合解決此類問題。 雖然以水平方向布局內容而聞名,但 Flexbox 實際上同樣適用於垂直布局問題。 您所要做的就是將垂直部分包裹在一個 flex 容器中,然后選擇要擴展的部分。 它們會自動占用容器中的所有可用空間。
您需要做兩件事,一是將高度設置為您已經設置的 100%。 其次是將位置設置為絕對。 這應該夠了吧。
html,
body {
height: 100%;
min-height: 100%;
position: absolute;
}
您可以使用display: flex
和height: 100vh
html, body { height: 100%; margin: 0px; } body { display: flex; } .left, .right { flex: 1; } .left { background: orange; } .right { background: cyan; }
<div class="left">left</div> <div class="right">right</div>
.wrapper { display: -webkit-box; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; height: 100vh; // Height window (vh) } .wrapper .left{ width: 80%; // Width optional, but recommended } .wrapper .right{ width: 20%; // Width optional, but recommended background-color: #dd1f26; }
<!-- vw: hundredths of the viewport width. vh: hundredths of the viewport height. vmin: hundredths of whichever is smaller, the viewport width or height. vmax: hundredths of whichever is larger, the viewport width or height. --> <div class="wrapper"> <div class="left"> Left </div> <div class="right"> Right </div> </div>
實際上,對我來說最有效的是使用vh
屬性。
在我的 React 應用程序中,即使調整大小,我也希望 div 與頁面高度匹配。 我試過height: 100%;
, overflow-y: auto;
,但在設置height:(your percent)vh;
時它們都height:(your percent)vh;
它按預期工作。
注意:如果您使用填充、圓角等,請確保從vh
屬性百分比中減去這些值,否則會增加額外的高度並顯示滾動條。 這是我的示例:
.frame {
background-color: rgb(33, 2, 211);
height: 96vh;
padding: 1% 3% 2% 3%;
border: 1px solid rgb(212, 248, 203);
border-radius: 10px;
display: grid;
grid-gap: 5px;
grid-template-columns: repeat(6, 1fr);
grid-template-rows: 50px 100px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr);
}
嘗試以下 CSS:
html {
min-height: 100%;
margin: 0;
padding: 0;
}
body {
height: 100%;
}
#right {
min-height: 100%;
}
現在使用高度:100vh; 對於固定窗口高度
<style>
.header-top{height:100vh; background:#000; color:#fff;display:flex;align-items:center;padding:10px; justify-content: space-around;}
.header-top ul{list-style:none;padding:0; margin:0;display:flex;align-items:center; }
.header-top ul li{padding:0px 10px;}
</style>
<div class="header-top">
<div class="logo">Hello</div>
<ul>
<li>Menu</li>
<li>About Us</li>
<li>Contact US</li>
<li>Login</li>
</ul>
</div>
如果使用position: absolute;
和jQuery,您可以使用
$("#mydiv").css("height", $(document).height() + "px");
我有兩列的布局-左div
和右div
。
右邊的div
具有灰色的background-color
,我需要根據用戶瀏覽器窗口的高度將其垂直擴展。 現在, background-color
在該div
中的最后一條內容處結束。
我已經嘗試過height:100%
, min-height:100%;
, 等等。
最簡單的:
html, body { height: 100%; min-height: 100%; } body { position: relative; background: purple; margin: 0; padding: 0; } .fullheight { display: block; position: relative; background: red; height: 100%; width: 300px; }
<html class=""> <body> <div class="fullheight"> This is full height. </div> </body> </html>
盡管此解決方案是使用jQuery I完成的,但對於任何適合列大小以適合屏幕尺寸的人來說,它可能都是有用的。
對於從頁面頂部開始的列,此解決方案是最簡單的。
body,html{
height:100%;
}
div#right{
height:100%
}
對於不在頁面頂部開始的列(例如:如果它們在標題下方開始)。
<script>
$(document).ready(function () {
var column_height = $("body").height();
column_height = column_height - 100; // 100 is the header height
column_height = column_height + "px";
$("#column").css("height",column_height);
});
</script>
第一種方法將主體高度也應用於主體和各列,這意味着height100%
+ height100%
。
第二種方法是通過獲取正文的高度來獲取顯示給用戶的頁面的高度,然后減去標題大小以知道還剩下多少高度才能顯示該列。
您可以使用以下CSS將div設置為瀏覽器窗口高度的100%:
display: block;
position: relative;
bottom: 0;
height: 100%;
如果您將 html 和正文高度設置為 100%,那么它將覆蓋整個頁面,如果您將任何特定的 div 最小高度設置為 100%,那么它將覆蓋整個窗口,如下所示:
CSS<\/strong>
html,body{
height:100%;
}
div#some-div{
min-height:100%;
}
非常簡單的解決方案,支持跨域,還支持瀏覽器調整大小。
<div style="height: 100vh;">
<iframe src="..." width="100%" height="80%"></iframe>
</div>
根據需要調整iframe height
屬性(將div
height
屬性保留為 100vh)。
為什么是 80%? 在我的實際場景中,我在div
內有一個標題,在iframe
之前,它占用了一些垂直空間 - 所以我將iframe
設置為使用 80% 而不是 100% (否則它將是包含div
的高度,但是在標題之后開始,並溢出div
的底部)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.