当前位置: 首页 > 面试题库 >

vw为什么将滚动条包含在视口中?

呼延钱明
2023-03-14
问题内容

我正在尝试建立一个网站,其中包含许多宽度和高度相等的盒子。例如,我有一个页面,其中并排有2个相等大小的框。

简单的解决方案是将宽度和高度设置为50vw。除非有滚动条,否则效果很好。我已经在Google上搜索了几个小时,无法理解为什么大众和大众在滚动条中将滚动条作为视口的一部分。

这是我的问题的样本

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;   
}

注意不需要的水平滚动条

一种可能的解决方案是对宽度使用百分比,对高度使用vw,但这永远不会是一个完美的盒子,这并不是世界上最糟糕的事情,但仍然不是理想的。这是一个样本

有谁知道为什么vw /vh在视口中包含滚动条?另外,如果有人有比我更好的解决方案,我很想听听。我正在寻找一个纯CSS解决方案。我宁愿没有javascript。


问题答案:

如果视口单位不 包括 原因滚动条,但毕竟是显示尺寸(屏幕),这将很方便。不过,请使用伪元素查看此解决方案

在您的示例中也使一个正方形:

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

.box::before {
    content: "";
    display: block;
    padding-top: 100%;
}

编辑-如果有人想知道这为什么起作用(垂直填充响应原始元素的宽度)…基本上就是在规范中对其进行定义的方式:

即使对于“ padding-top”和“ padding-bottom”,该百分比也是相对于所生成的框的包含块的宽度计算的。

遇到我自己的答案后,我认为它需要一些改进。语义上的歧义是为什么我在顶部用“ cause”代替“
include”一词。因为更多的事实是vw单位仅考虑了视口的大小- 包括任何滚动条并在其宽度加到其他方向时 _导致_溢出和在另一个方向上的滚动条100vw(使得视口所需的总空间加上滚动条的宽度超过屏幕)。

就像这里的问题一样,处理vw单元的最佳方法是尽可能避免使用它们,因为它们与桌面浏览器(没有覆盖的滚动条)不太兼容。

我编辑了包含CSS变量的想法,但是看起来还是很希望。



 类似资料:
  • 在移动视图中,当我尝试垂直滚动时,网页被卡住。在中,我有

  • 我正在尝试建立一个网站,有很多框,是相等的宽度和高度。例如,我有一个页面,它有两个大小相等的框并排。 简单的解决方案是将宽度和高度设置为50VW。在有滚动条之前,这工作很好。我在谷歌上搜索了好几个小时,不明白为什么大众和vh会把滚动条作为视区的一部分。 这是我的问题的一个例子 HTML CSS 注意不需要的水平滚动条 https://jsfidle.net/3z887swo/ 一个可能的解决方案是

  • 我正在研究一个相当复杂的布局。有两个区域(红色和蓝色)必须同时垂直滚动,但右侧区域(蓝色)必须能够独立于其他区域水平滚动。 我设法做到了这一点,但是滚动条总是在的底部,我需要滚动条总是在视口的底部可见。 用HTML/CSS可以做到这一点吗?什么简单的JS或jQuery插件可以帮助实现这一点? 小工具演示

  • 我试图理解DOM结构 所以我在正文中添加了 但我不明白为什么滚动条也被染成红色? null null

  • 我已经在我的页面上实现了平滑滚动条,它的工作相当不错,但我也想在滚动内容中添加一些过渡效果。基本上,我想在一个滚动事件上做这件事,但我不知道scrollbar的工作有多流畅,以及在滚动事件上执行什么对象。我检查了#my-scrollbar没有执行此操作: 滚动事件的原因是什么?或者有没有其他的方法可以做一些额外的效果而不检查滚动事件? 编辑:我正在粘贴我的代码(我正在使用react.js)来进行更

  • 我有一个问题与自动滚动在滚动视图。 在我的例子中,有两个Recyclerview。第一个循环视图,水平滚动,第二个垂直滚动。第一个循环视图仅用于拖动,第二个循环视图只用于拖放。两个循环视图都在ScrollView中,所以我在第二个循环视图中禁用了垂直滚动。我在第二个Recyclerview的项目中添加了DragListener。每个项目都有一个拖动侦听器,因此我在拖放项目时添加/替换项目。 所以我