"./core",
"./core/access",
"./core/camelCase",
+ "./core/nodeName",
"./var/rcssNum",
"./css/var/rnumnonpx",
"./css/var/cssExpand",
"./core/init",
"./core/ready",
"./selector" // contains
-], function( jQuery, access, camelCase, rcssNum, rnumnonpx, cssExpand,
+], function( jQuery, access, camelCase, nodeName, rcssNum, rnumnonpx, cssExpand,
getStyles, swap, curCSS, adjustCSS, addGetHookIf, support, finalPropName ) {
"use strict";
}
- // Fall back to offsetWidth/offsetHeight when value is "auto"
- // This happens for inline elements with no explicit setting (gh-3571)
- // Support: Android <=4.1 - 4.3 only
- // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
- // Support: IE 9-11 only
- // Also use offsetWidth/offsetHeight for when box sizing is unreliable
- // We use getClientRects() to check for hidden/disconnected.
- // In those cases, the computed value can be trusted to be border-box
+ // Support: IE 9 - 11 only
+ // Use offsetWidth/offsetHeight for when box sizing is unreliable.
+ // In those cases, the computed value can be trusted to be border-box.
if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+ // Support: IE 10 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Interestingly, in some cases IE 9 doesn't suffer from this issue.
+ !support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+ // Fall back to offsetWidth/offsetHeight when value is "auto"
+ // This happens for inline elements with no explicit setting (gh-3571)
val === "auto" ||
+
+ // Support: Android <=4.1 - 4.3 only
+ // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+ // Make sure the element is visible & connected
elem.getClientRects().length ) {
isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
}
var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
- reliableMarginLeftVal,
+ reliableTrDimensionsVal, reliableMarginLeftVal,
container = document.createElement( "div" ),
div = document.createElement( "div" );
scrollboxSize: function() {
computeStyleTests();
return scrollboxSizeVal;
+ },
+
+ // Support: IE 9 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Behavior in IE 9 is more subtle than in newer versions & it passes
+ // some versions of this test; make sure not to make it pass there!
+ reliableTrDimensions: function() {
+ var table, tr, trChild;
+ if ( reliableTrDimensionsVal == null ) {
+ table = document.createElement( "table" );
+ tr = document.createElement( "tr" );
+ trChild = document.createElement( "div" );
+
+ table.style.cssText = "position:absolute;left:-11111px";
+ tr.style.height = "1px";
+ trChild.style.height = "9px";
+
+ documentElement
+ .appendChild( table )
+ .appendChild( tr )
+ .appendChild( trChild );
+
+ var trStyle = window.getComputedStyle( tr );
+ reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
+
+ documentElement.removeChild( table );
+ }
+ return reliableTrDimensionsVal;
}
} );
} )();
assert.equal( el_dis.css( "height" ), el_dis.css( "height", el_dis.css( "height" ) ).css( "height" ), "css('height') is not respecting box-sizing for disconnected element, see #11004" );
} );
+QUnit.test( "table rows width/height should be unaffected by inline styles", function( assert ) {
+ assert.expect( 2 );
+
+ var table = jQuery(
+ "<table>\n" +
+ " <tr id=\"row\" style=\"height: 1px; width: 1px;\">\n" +
+ " <td>\n" +
+ " <div style=\"height: 100px; width: 100px;\"></div>\n" +
+ " </div>\n" +
+ " </tr>\n" +
+ "</table>"
+ );
+ var tr = table.find( "tr" );
+
+ table.appendTo( "#qunit-fixture" );
+
+ assert.ok( parseInt( tr.css( "width" ) ) > 10, "tr width unaffected by inline style" );
+ assert.ok( parseInt( tr.css( "height" ) ) > 10, "tr height unaffected by inline style" );
+} );
+
testIframe(
"css('width') should work correctly before document ready (#14084)",
"css/cssWidthBeforeDocReady.html",
"pixelPosition": true,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": false,
"scrollboxSize": true
},
ie_10_11: {
"pixelPosition": true,
"radioValue": false,
"reliableMarginLeft": true,
+ "reliableTrDimensions": false,
"scrollboxSize": true
},
ie_9: {
"pixelPosition": true,
"radioValue": false,
"reliableMarginLeft": true,
+ "reliableTrDimensions": false,
"scrollboxSize": false
},
chrome: {
"pixelPosition": true,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
safari: {
"pixelPosition": true,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
safari_9_10: {
"pixelPosition": false,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
firefox: {
"pixelPosition": true,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
firefox_60: {
"pixelPosition": true,
"radioValue": true,
"reliableMarginLeft": false,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
ios: {
"pixelPosition": true,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
ios_9_10: {
"pixelPosition": false,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
ios_8: {
"pixelPosition": false,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
ios_7: {
"pixelPosition": false,
"radioValue": true,
"reliableMarginLeft": true,
+ "reliableTrDimensions": true,
"scrollboxSize": true
},
android: {
"pixelPosition": false,
"radioValue": true,
"reliableMarginLeft": false,
+ "reliableTrDimensions": true,
"scrollboxSize": true
}
};