aboutsummaryrefslogtreecommitdiffstats
path: root/src/css.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/css.js')
-rw-r--r--src/css.js46
1 files changed, 34 insertions, 12 deletions
diff --git a/src/css.js b/src/css.js
index c5c01ecac..9db659967 100644
--- a/src/css.js
+++ b/src/css.js
@@ -9,6 +9,7 @@ var ralpha = /alpha\([^)]*\)/i,
rnum = /^-?\d/,
rrelNum = /^[+\-]=/,
rrelNumFilter = /[^+\-\.\de]+/g,
+ rinputbutton = /input|button/i,
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssWidth = [ "Left", "Right" ],
@@ -338,24 +339,45 @@ curCSS = getComputedStyle || currentStyle;
function getWH( elem, name, extra ) {
var which = name === "width" ? cssWidth : cssHeight,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+ cur = curCSS( elem, name ),
+
+ // We're addressing the way Firefox handles certain inputs and buttons,
+ // offsetWidth/height actually returns a normal width/height
+ boxSizing = rinputbutton.test( elem.nodeName ) &&
+ ( curCSS( elem, "-moz-box-sizing" ) === "border-box" ||
+ curCSS( elem, "box-sizing" ) === "border-box" );
+
+ // IE will return auto if we try to grab a width/height that is not set
+ if ( boxSizing || cur === "auto" ) {
+ cur = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+ }
- if ( extra === "border" ) {
- return val;
+ // Make sure that IE7 returns the correct computed value for display
+ if ( name === "height" ) {
+ elem.offsetHeight;
}
+
+ var val = parseFloat( cur ) || 0;
- jQuery.each( which, function() {
- if ( !extra ) {
- val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
- }
+ if ( extra ) {
+ for ( var i = 0, len = which.length; i < len ; i++ ) {
+ var dir = which[i];
- if ( extra === "margin" ) {
- val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+ // outerWidth/height
+ if ( extra === "border" || extra === "margin" ) {
+ val += parseFloat(jQuery.css( elem, "border" + dir + "Width" )) || 0;
+ val += parseFloat(jQuery.css( elem, "padding" + dir )) || 0;
- } else {
- val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+ if ( extra == "margin" ) {
+ val += parseFloat(jQuery.css( elem, "margin" + dir )) || 0;
+ }
+
+ // innerWidth/height
+ } else {
+ val += parseFloat(jQuery.css( elem, "padding" + dir )) || 0;
+ }
}
- });
+ }
return val;
}