Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to calculate the width of the scroll bar?

Tags:

Given a <textarea> with a fixed width, I would like its "active width" to be constant (in px). By "active width" I mean the area where the text appears.

When the vertical scroll bar doesn't appear, the "active width" equals to width. But, when the vertical scroll bar appears, the "active width" becomes smaller than width (I guess smaller exactly by the width of the scroll bar).

I thought to identify whether the vertical scroll bar appears or not, and if yes, to increase the width of the <textarea> by the width of the scroll bar. How could I identify the width of the scroll bar?

Is there a better approach?

(I'm interested in Firefox, if it makes the life easier.)

like image 368
Misha Moroshko Avatar asked Nov 10 '11 12:11

Misha Moroshko


People also ask

What is the width of the scroll bar?

The default scrollbar width can range anywhere from 12px to 17px. Webkit browsers also have the ability for the user to configure scrollbar widths. Webkit browsers, such as Chrome can have custom scrollbars that can have any size scrollbar.

How is scroll bar height calculated?

It is usually a percentage. E.g. if the visible area is 99% of the full area, the scrollbar is 99% of the height. Likewise if the visible is 50% of the full area, the scrollbar is 50% of the height.

Does width include scrollbar?

outerWidth() do not include the scrollbar width in their value. Especially when trying to match the window width to the CSS media queries.


1 Answers

There is a jQuery plugin that can help with this: https://github.com/brandonaaron/jquery-getscrollbarwidth/blob/master/jquery.getscrollbarwidth.js

Also, from http://www.alexandre-gomes.com/?p=115 Here is some code that may help.

This creates a hidden <p> element at 100% width inside a <div> with a scrollbar, then calculates the <div> width - the <p> width = scroll bar width.

function getScrollBarWidth () {    var inner = document.createElement('p');    inner.style.width = "100%";    inner.style.height = "200px";     var outer = document.createElement('div');    outer.style.position = "absolute";    outer.style.top = "0px";    outer.style.left = "0px";    outer.style.visibility = "hidden";    outer.style.width = "200px";    outer.style.height = "150px";    outer.style.overflow = "hidden";    outer.appendChild (inner);     document.body.appendChild (outer);    var w1 = inner.offsetWidth;    outer.style.overflow = 'scroll';    var w2 = inner.offsetWidth;    if (w1 == w2) w2 = outer.clientWidth;     document.body.removeChild (outer);     return (w1 - w2);  };  
like image 128
David Houde Avatar answered Oct 11 '22 20:10

David Houde