我有两列的布局-左div
和右div
。
右边div
有一个灰色background-color
,我需要根据用户浏览器窗口的高度垂直扩展它。现在background-color
结束于该内容的最后一部分div
。
我试过height:100%
,min-height:100%;
等
height
带有百分比值的CSS 属性的简单明了的解释:stackoverflow.com/a/31728799/3597276
我有两列的布局-左div
和右div
。
右边div
有一个灰色background-color
,我需要根据用户浏览器窗口的高度垂直扩展它。现在background-color
结束于该内容的最后一部分div
。
我试过height:100%
,min-height:100%;
等
height
带有百分比值的CSS 属性的简单明了的解释:stackoverflow.com/a/31728799/3597276
Answers:
有几个CSS 3度量单位,称为:
根据上面链接的W3候选推荐书:
视口百分比长度相对于初始包含块的大小。更改初始包含块的高度或宽度时,将对其进行相应缩放。
这些单位是vh
(视口高度),vw
(视口宽度),vmin
(视口最小长度)和vmax
(视口最大长度)。
对于这个问题,我们可以使用vh
:1vh
等于视口高度的1%。也就是说,100vh
等于元素在DOM树中的位置,它等于浏览器窗口的高度:
<div></div>
div {
height: 100vh;
}
这实际上就是所需要的。这是一个正在使用的JSFiddle示例。
目前,除Opera Mini之外,所有最新的主流浏览器均支持此功能。查看我可以使用...以获得更多支持。
对于带有左右分隔线的当前问题,这是一个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
改为使用表示p
标签的高度将为100%的高度,body
而与div
高度无关。看看这个随附的JSFiddle,可以轻松看到其中的区别!
min-height:100vh
似乎可以解决此问题。
如果要设置a <div>
或任何元素的高度,也应将<body>
和的高度也设置<html>
为100%。然后您可以将元素的高度设置为100%:)
这是一个例子:
body, html {
height: 100%;
}
#right {
height: 100%;
}
html { height: 100%*number of blocks; }
,body { height: 100%;}
,#div { height: 100%/number of blocks; }
。因此,如果您有3个部分,它将是html { height: 300%; } body { height: 100%; } #div { height: 33.3% }
如果您能够完全定位自己的元素,
position: absolute;
top: 0;
bottom: 0;
会做到的。
position:relative
并且其高度不是视口的100%,那将不起作用。它将顶部和底部调整为下一个相对或绝对祖先。
您可以在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 */
}
* { box-sizing: border-box; }
来防止这种情况的发生。
vh
在这种情况下,您可以使用相对于视口高度的1% ...
这意味着如果您想掩盖高度,只需使用即可100vh
。
请看下面我为您绘制的图像:
试试我为您创建的代码段,如下所示:
.left {
height: 100vh;
width: 50%;
background-color: grey;
float: left;
}
.right {
height: 100vh;
width: 50%;
background-color: red;
float: right;
}
<div class="left"></div>
<div class="right"></div>
paddings/margins
vh
与flex模型解决方案相比,所有其他解决方案(包括投票最多的解决方案)都不是最佳选择。
随着CSS flex模型的问世,解决100%高度问题变得非常非常容易: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模型的更多信息。
overflow-y: auto;
可能会避免“容器超出原始机体高度”。
您没有提到一些重要的细节,例如:
这是一种可能性:
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;
});
#your-object
如果浏览器不支持,最后使用此函数将视口的高度添加到vh-units
:
$(function() {
if (!Modernizr.cssvhunit) {
var windowH = $(window).height();
$('#your-object').css({'height':($(window).height())+'px'});
}
});
100%
宽度和高度的工作原理不同。
如果指定width: 100%
,则表示“从父元素或窗口的宽度中获取可用宽度的100%”。
当指定时height: 100%
,仅表示“占据父元素的可用高度的100%”。这意味着,如果未在顶层元素上指定高度,则所有子元素的高度将为0
或父元素的高度,这就是为什么您需要将最顶层元素设置为具有min-height
窗口高度的原因。
我总是将主体的最小高度指定为100vh,这使定位和计算变得容易,
body {
min-height: 100vh;
}
添加min-height: 100%
并且不指定高度(或将其设置为自动)。它完全为我完成了工作:
.container{
margin: auto;
background-color: #909090;
width: 60%;
padding: none;
min-height: 100%;
}
有几种方法可以将a的高度设置<div>
为100%。
方法(A):
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>
这为我工作:
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 */
}
取自此页面。
尝试设置height:100%
在html
&body
html,
body {
height: 100%;
}
如果要2 div高度相同,请使用或设置父元素display:flex
属性。
默认情况下,块元素消耗其父级的全部宽度。
这就是他们满足其垂直堆叠设计要求的方式。
在块格式设置上下文中,将框从包含块的顶部开始垂直地一个接一个地布置。
但是,此行为不会扩展到高度。
默认情况下,大多数元素都是其内容的高度(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>
这与您之前的答案并不完全相同,但可能对某些人有帮助:
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;
}
Flexbox非常适合此类问题。尽管Flexbox以水平方向上的内容布局而闻名,但实际上它对于垂直布局问题也同样有效。您所要做的就是将垂直部分包装在flex容器中,然后选择要扩展的部分。他们会自动占用容器中的所有可用空间。
选项之一是使用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>
您可以使用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>
您需要做两件事,一件事是将高度设置为已经完成的100%。第二是将位置设置为绝对。这应该够了吧。
html,
body {
height: 100%;
min-height: 100%;
position: absolute;
}
vh
代替。
vh
如果您打算在移动设备上使用自适应设计,请不要使用。
实际上,最适合我的是使用 vh
物业。
在我的React应用程序中,我希望div即使调整大小也要与页面高匹配。我尝试了height: 100%;
,overflow-y: auto;
但是设置时它们都不起作用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);
}
box-sizing: border-box;
能够克服这一点,这意味着在计算元素的大小(宽度和高度)时也要考虑边框大小。
尝试一次...
*{
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>
如果您使用position: absolute;
jQuery,则可以使用
$("#mydiv").css("height", $(document).height() + "px");
// 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>
<style>
.wrapper {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
height: 100vh; // Height window (vh)
}
.wrapper .left{
widht: 80%; // Width optional, but recommended
}
.wrapper .right{
widht: 20%; // Width optional, but recommended
background-color: #dd1f26;
}
<style>
widht
接近尾声)