为什么vw包含滚动条作为视口的一部分?

Kev*_*vin 16 html css scrollbar viewport css3

我正在尝试建立一个有很多宽度和高度相同的盒子的网站.例如,我有一个页面,它有两个相同大小的框并排.

简单的解决方案是将宽度和高度设置为50vw.这有效,直到有一个滚动条.我用Google搜索了几个小时,无法理解为什么在地球上vw和vh会将滚动条包含在视口中.

这是我的问题的一个例子

HTML

<div class="container">
    <div class="box red"></div>
    <div class="box green"></div>
</div>
<div class="lotta-content"></div>
Run Code Online (Sandbox Code Playgroud)

CSS

body {
    margin: 0;
    padding: 0;
}

.container {
    width: 100vw;
}

.box {
    float: left;
    width: 50vw;
    height: 50vw;
}

.red {
    background-color: red;
}

.green {
    background-color: green;   
}

.lotta-content {
    height: 10000px;   
}
Run Code Online (Sandbox Code Playgroud)

注意不需要的水平滚动条

https://jsfiddle.net/3z887swo/

一种可能的解决方案是使用宽度的百分比,但是使用高度的vw,但它不会是一个完美的盒子,这不是世界上最糟糕的东西,但仍然不理想.这是一个样本

https://jsfiddle.net/3z887swo/1/

有谁知道为什么vw/vh包含滚动条作为视口的一部分?此外,如果某人有比我自己更好的解决方案,我很乐意听到.我正在寻找一个纯CSS解决方案.我宁愿没有javascript.

ZJR*_*ZJR 26

我有一个不同的答案,并觉得有必要分享我的挫折感

因为标准制造者很愚蠢

(委员会,总的来说,总是如此)

一个简单的解决方法是始终保持滚动条并处理它

html,body {margin:0;padding:0}
html{overflow-y:scroll}
Run Code Online (Sandbox Code Playgroud)

(用于使用overflow-x的布局vh)

我相信他们严重搞砸了这个狗.

  • 不幸的是,使滚动条始终存在仍然无法解决问题.100vw滚动条是否可见不会改变实际结束值100vw.每个浏览器也以不同方式处理滚动条.Safari和其他Mac OS X浏览器覆盖它们,Edge和我相信更新的IE浏览器也会覆盖它们.有些实际上会占用视口中的空间并移动您的内容.但感谢你的建议,我确实感到沮丧 (9认同)
  • 元链接:https://meta.stackoverflow.com/questions/425340/ (5认同)
  • 他们应该做一个vw2,这是滚动条exhced ahhha! (4认同)
  • 沮丧的+1.刚发现这个,当滚动条出现时它完全打破了我的布局.幸运的是,我的布局是这样的,我可以用`calc(100% - 50px)`替换`calc(100vw - 50px)`,但不幸的是,使用百分比是一个非常局部的解决方案,相比于迄今为止坚如磐石的`vw`单位 - 不再那么坚如磐石了...... :-(在更实际的说明中,也许正确的事情是提交PR或错误报告或其他什么? (2认同)

Shi*_*iel 8

如果视口单元不包含滚动条但是它毕竟是显示尺寸(屏幕)会很方便.看看这个带有伪元素的解决方案:

http://www.mademyday.de/css-height-equals-width-with-pure-css.html

在你的例子中做一个正方形:

https://jsfiddle.net/3z887swo/4/

.box {
    float: left;
    width: 50%;
}

.box::before {
    content: "";
    display: block;
    padding-top: 100%;
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 如果有人想知道为什么这样做(垂直填充响应原始元素的宽度)......这基本上是如何在规范中定义的:

百分比是根据生成的框的包含块的宽度计算的,即使对于"填充顶部"和"填充底部"也是如此.

http://www.w3.org/TR/CSS2/box.html#padding-properties

  • 干杯,我也这么认为.希望自己能够如此聪明地想出自己的想法.:-) (2认同)