Getting the actual, floating-point width of an element

JqueryCssFloating PointWidth

Jquery Problem Overview


I'm using jQuery (v1.7.1) and I need to get the absolute, floating-point width of an element, but all of jQuery's width methods seem to be rounding-off the value of the width.

For example if the actual width of an element was 20.333333px, jQuery's width method returns 20, i.e ignoring the decimal value.

You can see what I mean on this jsFiddle

So, my question is: How do I get the floating-point value of the width of an element?

Jquery Solutions


Solution 1 - Jquery

If you already have a reference to the DOM element, element.getBoundingClientRect will get you the values you want.

The method has existed since Internet Explorer 4, and so it's safe to use everywhere. However, the width and height attributes exist only in IE9+. You have to calculate them if you support IE8 and below:

var rect = $("#a")[0].getBoundingClientRect();

var width;
if (rect.width) {
  // `width` is available for IE9+
  width = rect.width;
} else {
  // Calculate width for IE8 and below
  width = rect.right - rect.left;
}

getBoundingClientRect is 70% faster than window.getComputedStyle in Chrome 28, and the differences are greater in Firefox: http://jsperf.com/getcomputedstyle-vs-getboundingclientrect

Solution 2 - Jquery

Try this:

var element = document.getElementById("a");
alert(window.getComputedStyle(element).width);

Updated fiddle: http://jsfiddle.net/johnkoer/Z2MBj/18/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionS PView Question on Stackoverflow
Solution 1 - JqueryRoss AllenView Answer on Stackoverflow
Solution 2 - JqueryJohn KoernerView Answer on Stackoverflow