100vw 大小是包括滚动条的
测试滚动条宽度的方法
function getScrollbarWidth() {
// Creating invisible container
const outer = document.createElement('div');
outer.style.visibility = 'hidden';
outer.style.overflow = 'scroll'; // forcing scrollbar to appear
outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps
document.body.appendChild(outer);
// Creating inner element and placing it in the container
const inner = document.createElement('div');
outer.appendChild(inner);
// Calculating difference between container's full width and the child width
const scrollbarWidth = (outer.offsetWidth - inner.offsetWidth);
// Removing temporary elements from the DOM
outer.parentNode.removeChild(outer);
return scrollbarWidth;
}
另外一套源码,可以设置到 css 的 root 中
const getScrollbarWidth = () => {
// Create a temporary div container and append it into the body
const container = document.createElement('div');
// Append the container in the body
document.body.appendChild(container);
// Force scrollbar on the container
container.style.overflow = 'scroll';
// Add ad fake div inside the container
const inner = document.createElement('div');
container.appendChild(inner);
// Calculate the width based on the container width minus its child width
const width = container.offsetWidth - inner.offsetWidth;
// Remove the container from the body
document.body.removeChild(container);
return width;
};
// Get the scrollbar dimension
const scrollbarWidth = getScrollbarWidth();
// Set a custom property with the value we calculated
document.documentElement.style.setProperty('--scrollbar', `${scrollbarWidth}px`);