1. Subtract clientWidth
from offsetWidth
The clientWidth
property indicates the width without scrollbar. The offsetWidth
, on the other hand, includes the scrollbar if there is.
Here is the simple calculation to determine the width of scrollbar:
const scrollbarWidth = document.body.offsetWidth - document.body.clientWidth;
2. Use a fake element
We create two fake div
elements, one of them is the child of the other. Then calculate the difference between their widths.
const calculateScrollbarWidth = function () {
// Create the parent element
const outer = document.createElement('div');
outer.style.visibility = 'hidden';
outer.style.overflow = 'scroll';
// Append it to `body`
document.body.appendChild(outer);
// Create the child element
const inner = document.createElement('div');
outer.appendChild(inner);
// Calculate the difference between their widths
const scrollbarWidth = outer.offsetWidth - inner.offsetWidth;
// Remove the parent element
document.body.removeChild(outer);
return scrollbarWidth;
};
This method doesn’t work on macOS if the Show scroll bars option is set as Automatically based on mouse or trackpad or When scrolling.