问:
我有一个包含两列的布局 - 左 div 和右 div。
右边的 div 有一个灰色的 background-color,我需要它根据用户浏览器窗口的高度垂直展开。现在,background-color 结束于该 div 中的最后一段内容。
我试过 height:100%、min-height:100%; 等。
答1:
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
有几个 CSS 3 度量单位称为:
视口百分比(或视口相对)长度
什么是视口百分比长度?
从上面链接的 W3 候选推荐中:
视口百分比长度与初始包含块的大小有关。当初始包含块的高度或宽度发生变化时,它们会相应地缩放。
这些单位是 vh(视口高度)、vw(视口宽度)、vmin(视口最小长度)和 vmax(视口最大长度)。
如何使用它来使分隔线填充浏览器的高度?
对于这个问题,我们可以利用 vh:1vh 等于视口高度的 1%。也就是说,100vh 等于浏览器窗口的高度,与元素在 DOM 树中的位置无关:
HTML
CSS
div {
height: 100vh;
}
这实际上就是所有需要的。这是使用中的JSFiddle example。
哪些浏览器支持这些新单元?
目前,除 Opera Mini 外,所有最新的主流浏览器都支持此功能。查看 Can I use… 以获得更多支持。
这如何与多列一起使用?
对于手头的问题,具有左右分隔符,这里有一个 JSFiddle example,显示了一个包含 vh 和 vw 的两列布局。
100vh 与 100% 有何不同?
以这种布局为例:
Hello, world!
这里的 p 标记设置为 100% 高度,但是因为它包含的 div 有 200 像素高度,所以 200 像素的 100% 变成了 200 像素,不是 body 高度的 100% .改用 100vh 意味着 p 标记将是 body 的 100% 高度,而与 div 高度无关。看看这个 accompanying JSFiddle 即可轻松看出区别!
当元素实际上比视口高时,滚动的奇怪行为。容器保持视口高度,内容流出容器。 min-height:100vh 似乎可以解决这个问题。
@DGDD 接下来:这里有很多其他解决方案可以追溯到 IE5,所以我不需要重复其他人已经说过的话。对于自该规范首次引入以来最近 3 年发布的大多数浏览器来说,这个答案已经足够可靠了。
@DGDD 这适用于 iOS Safari 6+、Android Browser 4.4+、BlackBerry Browser 10.0 和 IEMobile 10.0。我不知道您指的是哪种移动浏览器,但这 4 种占使用的移动浏览器的 90% 以上。此问题未指定在移动浏览器上工作的要求。
@robross0606 再次,这不是我在这里回答的问题。这完全是一个不同的问题,其答案确实使用了 flexbox:stackoverflow.com/questions/90178/…
移动警报:将 vh mess 与未考虑其导航栏的 Chrome 移动设备一起使用。然后它会用它覆盖您的页面顶部。如果你在那里有菜单,这是一个严重的问题......
答2:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
如果您想设置
这是一个例子:
body, html {
height: 100%;
}
#right {
height: 100%;
}
如果我错了,请纠正我,但我认为你还需要为 div 的所有父母设置高度,才能真正工作
如果我使用持续设计,这将不起作用:页面 6000 像素高度,块代表页面。我希望一个块正好是视口的高度。
@DanyY,你是对的。您确实需要为 div 的所有父级设置高度,这意味着所有内容都具有屏幕高度。这是一个example。
这个技巧在某些情况下有效,但在某些情况下也无效,如果您搜索兼容性或更推荐的方式,您可以查看上面的@James 的答案 :) 使用视口百分比方法 :) ,这也应该有效。干杯
@Qwerty,这是解决方案。将 css 设置为: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% }
答3:
huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。
如果你能够绝对定位你的元素,
position: absolute;
top: 0;
bottom: 0;
会做的。
这是通过将元素从文档流中取出并将其底部值固定到其父级的高度来实现的。当您的内容超过其父级的高度时,这并不理想。
这不起作用,当它的父母之一设置为 position:relative 并且它的高度不是视口的 100% 时。它将调整顶部和底部以适应它的下一个相对或绝对祖先。
答4:
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
您可以在 CSS 中使用视口单元:
HTML:
Hello World!
CSS:
#my-div {
height: 100vh; /* vh stands for view-port height, 1vh is 1% of screen height */
}
@Lamar 您应该使用 * { box-sizing: border-box; } 来防止这种情况发生。
值得检查 caniuse 浏览器对视口单元的支持:caniuse.com/#feat=viewport-units
答5:
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
在这种情况下,您可以使用 vh,它相对于视口 1% 的高度…
这意味着如果您想遮住高度,只需使用 100vh。
看看我在这里为你画的下图:
https://i.stack.imgur.com/g0kUu.jpg
试试我为你创建的片段如下:
.left { 高度:100vh;宽度:50%;背景颜色:灰色;向左飘浮; } .right { 高度:100vh;宽度:50%;背景颜色:红色;浮动:对; }
给 100vh 为页面添加了一个垂直滚动,所以跟着这个但没有用。 stackoverflow.com/questions/44645465/…。有什么办法可以避免垂直滚动并让 div 在没有任何内容的情况下触摸底部?
@DILEEPTHOMAS 寻找现有的 paddings/margins
@Legends 在根文件中我尝试给出 * {margin: 0, padding: 0} 但没有奏效
@DILEEPTHOMAS 看看 Alireza 提供的这个例子,它也有一个滚动条,因为 body 元素有一个边距。如果删除边距,滚动条就消失了。它可能有不同的原因,但我会先检查这个原因。
答6:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
与 flex model 解决方案相比,所有其他解决方案(包括投票最多的带有 vh 的解决方案)都不是最佳解决方案。
随着 CSS flex model 的出现,解决 100% 高度问题变得非常非常容易:在父元素上使用 height: 100%; display: flex,在子元素上使用 flex: 1。它们会自动占用容器中的所有可用空间。
请注意标记和 CSS 是多么简单。没有桌子黑客或任何东西。
弹性模型是 supported by all major browsers 以及 IE11+。
html, 身体 { 高度:100%; } 身体 { 显示:弹性; } .left, .right { 弹性:1; } .left { 背景:橙色; } .right { 背景:青色; } 左 右
在此处了解有关 flex model 的更多信息。
一个警告:当左/右容器之一的内容超过原来的身体高度时,对面的容器不会被调整大小,所以容器最终会有不同的高度。
Schellmax 指出的问题示例:jsfiddle.net/Arete/b4g0o3pq
根据设计,overflow-y: auto; 可能会避免“容器超出原始车身高度”。
body 还需要 margin: 0px
答7:
huntsbot.com – 高效赚钱,自由工作
你没有提到一些重要的细节,比如:
布局是固定宽度吗?
两列或两列的宽度是否固定?
这是一种可能性:
身体,div {边距:0;边框:0 无;填充:0; } html, body, #wrapper, #left, #right { 高度:100%;最小高度:100%; } #wrapper { 边距:0 自动;溢出:隐藏;宽度:960px; // 宽度可选 } #left { 背景:黄色;向左飘浮;宽度:360px; // 宽度可选但推荐 } #right { 背景:灰色;左边距:360px; // 必须和之前的宽度一致 } Example Left
根据需要固定哪些色谱柱以及哪些色谱柱是液体,对此有许多变化。您也可以使用绝对定位来做到这一点,但我通常会发现使用浮动来获得更好的结果(特别是在跨浏览器方面)。
答8:
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
这对我有用:
使用 position:fixed 而不是 position:absolute,这样即使您向下滚动,分区也会扩展到屏幕的末尾。
这段带有“位置:[固定|绝对]”的代码非常适合弹出窗口的背景(例如当您单击以缩放图片时),但在您需要实际向下滚动的情况下不太确定。还是有用的面团!
答9:
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
这是高度的修复。
在您的 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'});
}
});
答10:
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
即使这里有所有的答案,我惊讶地发现没有一个能真正解决问题。如果我使用 100vh height/min-height,当内容超过一页时,布局会中断。如果我改为使用 100% height/min-height,则当内容小于页面高度时布局会中断。
我发现解决这两种情况的解决方案是结合前两个答案:
html, body, #mydiv {
height: 100%;
min-height: 100vh;
}
我有一个固定的 90px 高度导航栏,所以我只需要将“100vh”更改为“calc(100vh - 90px)”
答11:
huntsbot.com – 高效赚钱,自由工作
100vw = 视口宽度的 100%。
100vh = 视口高度的 100%。
如果您想将 div 宽度或高度设置为 browser-window-size 的 100%,您应该使用:
对于宽度:100vw
对于高度:100vh
或者,如果您想将其设置为更小,请使用 CSS calc 函数。例子:
#example {
width: calc(100vw - 32px)
}
huntsbot.com – 高效赚钱,自由工作