我想计算滚动条的宽度,以便在CSS calc()
声明中使用结果。
目前,我假设滚动条的宽度总是17px
,如下所示:
body {
width:calc(100vw - 17px);
}
.container {
max-width:calc(100vw - 17px);
}
这样做的问题是,当你选择不同的浏览器缩放%时,滚动条的宽度会改变。所以我想使用计算的结果来做一些事情:
body {
width:calc(100vw - CALCULATED SCROLL-BAR WIDTH);
}
.container {
max-width:calc(100vw - CALCULATED SCROLL-BAR WIDTH);
}
**编辑:**我现在已经解决了这个问题的帮助下,这个question
用于计算滚动条宽度的JavaScript(不过,我发现您需要一个时间间隔才能使其自动更新):
function getScrollbarWidth() {
var outer = document.createElement("div");
outer.style.visibility = "hidden";
outer.style.width = "100px";
outer.style.msOverflowStyle = "scrollbar"; // needed for WinJS apps
document.body.appendChild(outer);
var widthNoScroll = outer.offsetWidth;
// force scrollbars
outer.style.overflow = "scroll";
// add innerdiv
var inner = document.createElement("div");
inner.style.width = "100%";
outer.appendChild(inner);
var widthWithScroll = inner.offsetWidth;
// remove divs
outer.parentNode.removeChild(outer);
return widthNoScroll - widthWithScroll;
}
我的代码(用于将函数结果嵌入到CSS calc()
声明中)。
$('body').css({
'width':'calc(100vw - ' + getScrollbarWidth() + 'px)'
});
$('.container').css({
'max-width':'calc(100vw - ' + getScrollbarWidth() + 'px)'
});
4条答案
按热度按时间5gfr0r5j1#
实际上,你可以通过css和自定义属性来获得滚动条的宽度(完全不需要javascript):
然后你可以像这样在子元素中使用这个变量:
这是因为100vw始终是视图的内部宽度,但主体的100%不包括滚动条。
zfycwa2u2#
扩展jonas_jonas的答案,它可以工作,但如果
.container
必须与主体具有相同的宽度。如果不是这样的话,即使如此,您也可以使用vanilla JS,像这样定义一个CSS属性
然后你可以在CSS中使用它
w8rqjzmb3#
为什么需要这么多代码来完成这些工作?
简单的方法与纯javascript它是:
3yhwsihp4#
这可以通过在任何滚动区域上使用纯CSS的新容器查询来组织: