- 此问题已在此处有答案**:
Maintain the aspect ratio of a div with CSS(33答案)
Setting Element Width Based on Height Via CSS(10个答案)
CSS grid square layout [duplicate](4个答案)
2小时前关闭
我正试图建立一个网站,有很多的盒子,是平等的宽度和高度。例如,我有一个页面,它有两个并排的相等大小的框。
简单的解决方案是将宽度和高度设置为50vw。这工作得很好,直到有一个滚动条。我在谷歌上搜索了好几个小时,还是不明白为什么大众和vh会把滚动条作为视口的一部分。
这是我的问题的一个样本
- HTML**
<div class="container">
<div class="box red"></div>
<div class="box green"></div>
</div>
<div class="lotta-content"></div>
- 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;
}
请注意不需要的水平滚动条
https://jsfiddle.net/3z887swo/
一个可能的解决方案是使用百分比的宽度,但大众的高度,但它永远不会是一个完美的盒子,这不是世界上最糟糕的事情,但仍然不理想。这里有个样本
https://jsfiddle.net/3z887swo/1/
有谁知道为什么vw/vh要把滚动条作为viewport的一部分?另外,如果有人有比我更好的解决方案,我很乐意听听。我正在寻找一个纯CSS解决方案。我宁愿没有javascript。
5条答案
按热度按时间vx6bjr1n1#
我有一个不同的答案,我觉得有必要分享我的挫折感
因为标准制定者很愚蠢
一个简单的(简单化的)解决方法是保持滚动条始终存在并处理它
(use
overflow-x
(用于使用vh
的布局)我相信他们真的搞砸了这只狗。
ecbunoof2#
如果视口单位不包括原因滚动条会很方便,但毕竟它是显示尺寸(屏幕)。看看这个解决方案与伪元素虽然:
http://www.mademyday.de/css-height-equals-width-with-pure-css.html
在你的例子中也是一个正方形:
https://jsfiddle.net/3z887swo/4/
编辑-如果有人想知道为什么这样做(垂直填充响应原始元素的宽度)...这基本上就是它在规范中的定义:
百分比是相对于生成的盒子的包含块的宽度计算的,即使对于“padding-top”和“padding-bottom”也是如此。
http://www.w3.org/TR/CSS2/box.html#padding-properties
在找到自己的答案后,我认为它需要一些改进。语义上的歧义是我为什么在顶部用“原因”代替“包括”这个词的原因。因为
vw
单位只考虑了视口的大小- * 不 * 包括任何滚动条和 * 导致 * 溢出和滚动条在另一个方向,当它的宽度增加到100vw
(使所需的总空间为视口加上滚动条的宽度,超过屏幕)。与这里的问题一样,处理
vw
单元的最佳方法可能是尽可能避免使用它们,因为它们与桌面浏览器(没有重叠的滚动条)不太兼容。nuypyhwy3#
这个问题很老了,上面回答得很好,所以我将重点放在获取滚动条宽度,然后用来计算元素宽度,因为这就是我在这里的原因。希望这能帮助其他Google员工。
草率的CSS解决方案
我根据下面的计算开始编写纯CSS解决方案,但一旦你开始考虑可变宽度容器中的元素,特别是当它们不是100%可见宽度时,
calc
函数就开始变得复杂和不可读。对于任何感兴趣的人来说,根元素(
<html>
)上的calc
(假设文档是全宽的,没有更宽的)将给予你滚动条宽度或0,当没有滚动条显示时。强大的解决方案
就我个人而言,我不会在这方面与CSS战斗。使用适合作业的工具:
juud5qan4#
似乎有效
thtygnil5#
我有个解决办法当你使用100vw时,它会包括滚动条宽度,对吗?所以如果我们不能把它做好,那么我们可以删除滚动条,让它隐形。像这样:Hide scroll bar, but while still being able to scroll