diff options
author | Mike Sherov <mike.sherov@gmail.com> | 2012-02-24 00:14:15 -0500 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2012-02-24 00:14:15 -0500 |
commit | a52391aa1dcf3f28306e274e1b2d7f0affc4e725 (patch) | |
tree | 161193e695bc1f4b9f034aafeb968c7e7b4c9b16 | |
parent | 1c35f3816a3b1be0855dcea8ab212af506e91f83 (diff) | |
download | jquery-a52391aa1dcf3f28306e274e1b2d7f0affc4e725.tar.gz jquery-a52391aa1dcf3f28306e274e1b2d7f0affc4e725.zip |
Fix #7986. $.support.boxModel shan't be fooled by page-level CSS.
-rw-r--r-- | src/css.js | 2 | ||||
-rw-r--r-- | src/dimensions.js | 2 | ||||
-rw-r--r-- | src/effects.js | 4 | ||||
-rw-r--r-- | src/support.js | 37 | ||||
-rw-r--r-- | test/data/support/bodyBackground.html | 7 |
5 files changed, 34 insertions, 18 deletions
diff --git a/src/css.js b/src/css.js index 68b8098b0..960ac5ae6 100644 --- a/src/css.js +++ b/src/css.js @@ -163,7 +163,7 @@ jQuery.extend({ } }); -// DEPRECATED, Use jQuery.css() instead +// DEPRECATED in 1.3, Use jQuery.css() instead jQuery.curCSS = jQuery.css; if ( document.defaultView && document.defaultView.getComputedStyle ) { diff --git a/src/dimensions.js b/src/dimensions.js index 769b99693..8069676eb 100644 --- a/src/dimensions.js +++ b/src/dimensions.js @@ -34,7 +34,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat doc = elem.document; docElemProp = doc.documentElement[ clientProp ]; - return doc.compatMode === "CSS1Compat" && docElemProp || + return jQuery.support.boxModel && docElemProp || doc.body && doc.body[ clientProp ] || docElemProp; } diff --git a/src/effects.js b/src/effects.js index 7d0c2a8ab..1536d2d8e 100644 --- a/src/effects.js +++ b/src/effects.js @@ -157,7 +157,7 @@ jQuery.fn.extend({ prop[ name ] = prop[ p ]; delete prop[ p ]; } - + if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) { replace = hooks.expand( prop[ name ] ); delete prop[ name ]; @@ -676,7 +676,7 @@ function defaultDisplay( nodeName ) { // document to it; WebKit & Firefox won't allow reusing the iframe document. if ( !iframeDoc || !iframe.createElement ) { iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; - iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" ); + iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" ); iframeDoc.close(); } diff --git a/src/support.js b/src/support.js index 0ae630092..27ef1ab4c 100644 --- a/src/support.js +++ b/src/support.js @@ -94,6 +94,9 @@ jQuery.support = (function() { pixelMargin: true }; + //jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = document.compatMode === "CSS1Compat"; + // Make sure checked status is properly cloned input.checked = true; support.noCloneChecked = input.cloneNode( true ).checked; @@ -172,7 +175,8 @@ jQuery.support = (function() { // Run tests that need a body at doc ready jQuery(function() { var container, outer, inner, table, td, offsetSupport, - marginDiv, conMarginTop, ptlm, vb, style, html, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, body = document.getElementsByTagName("body")[0]; if ( !body ) { @@ -181,15 +185,16 @@ jQuery.support = (function() { } conMarginTop = 1; - ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; - vb = "visibility:hidden;border:0;"; - style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; - html = "<div " + style + "><div></div></div>" + - "<table " + style + " cellpadding='0' cellspacing='0'>" + + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" + + "<table " + style + "' cellpadding='0' cellspacing='0'>" + "<tr><td></td></tr></table>"; container = document.createElement("div"); - container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; body.insertBefore( container, body.firstChild ); // Construct the test element @@ -203,8 +208,7 @@ jQuery.support = (function() { // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) - div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>"; - + div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>"; tds = div.getElementsByTagName( "td" ); isSupported = ( tds[ 0 ].offsetHeight === 0 ); @@ -241,18 +245,23 @@ jQuery.support = (function() { // elements when setting their display to 'inline' and giving // them layout // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; div.style.display = "inline"; div.style.zoom = 1; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); // Check if elements with layout shrink-wrap their children // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "<div style='width:4px;'></div>"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "<div style='width:5px;'></div>"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); } - div.style.cssText = ptlm + vb; + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; div.innerHTML = html; outer = div.firstChild; diff --git a/test/data/support/bodyBackground.html b/test/data/support/bodyBackground.html index cd3744b87..0f12e75f9 100644 --- a/test/data/support/bodyBackground.html +++ b/test/data/support/bodyBackground.html @@ -6,6 +6,13 @@ body { background: #000000; } + + div { + padding: 15px; + border: 1px solid #999; + display: inline; + margin:8px; + } </style> </head> <body> |