From dea19250497716bbd6f9128eacaa785a620aafde Mon Sep 17 00:00:00 2001 From: John Resig Date: Thu, 15 Jun 2006 02:27:18 +0000 Subject: [PATCH] Fixed height/width issues that happend due to the box model, in $.css(). --- fx/fx.js | 4 ++-- jquery/jquery.js | 44 +++++++++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/fx/fx.js b/fx/fx.js index d2bb89d0..c7a0924e 100644 --- a/fx/fx.js +++ b/fx/fx.js @@ -99,8 +99,8 @@ $.fx = function(el,op,ty,tz){ z.el = el.constructor==String?document.getElementById(el):el; var y = z.el.style; z.a = function(){z.el.style[ty]=z.now+z.o.unit;}; - z.max = function(){return z.el["io"+ty]||z.el["natural"+tz]||z.el["scroll"+tz]||z.cur();}; - z.cur = function(){return parseInt($.getCSS(z.el,ty),10);}; + z.max = function(){return z.el["io"+ty]||z.cur();}; + z.cur = function(){return $.css(z.el,ty);}; z.show = function(){z.ss("block");z.o.auto=true;z.custom(0,z.max());}; z.hide = function(){z.el.$o=$.getCSS(z.el,"overflow");z.el["io"+ty]=this.cur();z.custom(z.cur(),0);}; z.ss = function(a){if(y.display!=a){y.display=a;}}; diff --git a/jquery/jquery.js b/jquery/jquery.js index 4a9614c5..75dd9076 100644 --- a/jquery/jquery.js +++ b/jquery/jquery.js @@ -347,24 +347,34 @@ $.apply = function(o,f,a) { $.getCSS = function(e,p) { // Adapted from Prototype 1.4.0 if ( p == 'height' || p == 'width' ) { - if ($.getCSS(e,"display") != 'none') { - return p == 'height' ? - e.offsetHeight || parseInt(e.style.height,10) : - e.offsetWidth || parseInt(e.style.width,10); + var ph = $.browser == "msie" ? 0 : + parseInt($.css(e,"paddingTop")) + parseInt($.css(e,"paddingBottom")); + var pw = $.browser == "msie" ? 0 : + parseInt($.css(e,"paddingLeft")) + parseInt($.css(e,"paddingRight")); + + var oHeight, oWidth; + + if ($.css(e,"display") != 'none') { + oHeight = e.offsetHeight || parseInt(e.style.height,10); + oWidth = e.offsetWidth || parseInt(e.style.width,10); + } else { + var els = e.style; + var ov = els.visibility; + var op = els.position; + var od = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = ''; + oHeight = e.clientHeight - ph || parseInt(e.style.height,10); + oWidth = e.clientWidth || parseInt(e.style.width,10); + els.display = od; + els.position = op; + els.visibility = ov; } - var els = e.style; - var ov = els.visibility; - var op = els.position; - var od = els.display; - els.visibility = 'hidden'; - els.position = 'absolute'; - els.display = ''; - var oHeight = e.clientHeight || parseInt(e.style.height,10); - var oWidth = e.clientWidth || parseInt(e.style.width,10); - els.display = od; - els.position = op; - els.visibility = ov; - return p == 'height' ? oHeight : oWidth; + + return p == 'height' ? + (oHeight - ph < 0 ? 0 : oHeight - ph) : + (oWidth - pw < 0 ? 0 : oWidth - pw); } if (e.style[p]) {