// 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: Firefox 70+
+ // Firefox includes border widths
+ // in computed dimensions for table rows. (gh-4529)
!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
// Fall back to offsetWidth/offsetHeight when value is "auto"
documentElement.appendChild( container ).appendChild( div );
var divStyle = window.getComputedStyle( div );
- pixelPositionVal = divStyle.top !== "1%";
+
+ // Support: Firefox <=48 - 61 only
+ // Inside hidden iframes computed style is null in old Firefox.
+ pixelPositionVal = divStyle && divStyle.top !== "1%";
// Don't run until window is visible (https://github.com/jquery/jquery-ui/issues/2176)
if ( div.offsetWidth === 0 ) {
.appendChild( tr )
.appendChild( trChild );
+ // Don't run until window is visible
+ if ( table.offsetWidth === 0 ) {
+ documentElement.removeChild( table );
+ return;
+ }
+
trStyle = window.getComputedStyle( tr );
reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
parseInt( trStyle.borderTopWidth, 10 ) +
<!DOCTYPE html>
<html>
<head>
+ <title>Test computeStyleTests for hidden iframe</title>
<meta charset="utf-8">
<style>
* {
border: 10px solid black;
width: 400px;
}
+ #test-table {
+ position: absolute;
+ width: 100.7px;
+ border-spacing: 0;
+ }
</style>
</head>
<body>
<div id="test"></div>
+<table id="test-table">
+ <tr id="test-tr"></tr>
+</table>
<script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script>
- var initialHeight = $('#test').outerHeight();
+ var initialHeight = $( "#test" ).outerHeight();
startIframeTest( initialHeight );
</script>
</body>
}
);
-testIframe(
- "Test computeStyleTests for hidden iframe",
- "css/cssComputeStyleTests.html",
- function( assert, jQuery, window, document, initialHeight ) {
- assert.expect( 2 );
- assert.strictEqual( initialHeight === 0 ? 20 : initialHeight, 20,
- "hidden-frame content sizes should be zero or accurate" );
- window.parent.jQuery( "#qunit-fixture-iframe" ).css( { "display": "block" } );
- jQuery( "#test" ).width( 600 );
- assert.strictEqual( jQuery( "#test" ).width(), 600, "width should be 600" );
- },
- undefined,
- { "display": "none" }
-);
+( function() {
+ var supportsFractionalTrWidth,
+ epsilon = 0.1,
+ table = jQuery( "<table><tr></tr></table>" ),
+ tr = table.find( "tr" );
+
+ table
+ .appendTo( "#qunit-fixture" )
+ .css( {
+ width: "100.7px",
+ borderSpacing: 0
+ } );
+
+ supportsFractionalTrWidth = Math.abs( tr.width() - 100.7 ) < epsilon;
+
+ testIframe(
+ "Test computeStyleTests for hidden iframe",
+ "css/cssComputeStyleTests.html",
+ function( assert, jQuery, window, document, initialHeight ) {
+ assert.expect( 3 );
+
+ assert.strictEqual( initialHeight === 0 ? 20 : initialHeight, 20,
+ "hidden-frame content sizes should be zero or accurate" );
+
+ window.parent.jQuery( "#qunit-fixture-iframe" ).css( { "display": "block" } );
+ jQuery( "#test" ).width( 600 );
+ assert.strictEqual( jQuery( "#test" ).width(), 600, "width should be 600" );
+
+ if ( supportsFractionalTrWidth ) {
+ assert.ok(
+ Math.abs( jQuery( "#test-tr" ).width() - 100.7 ) < epsilon,
+ "tr width should be fractional" );
+ } else {
+ assert.strictEqual( jQuery( "#test-tr" ).width(), 101, "tr width as expected" );
+ }
+ },
+ undefined,
+ { "display": "none" }
+ );
+} )();
( function() {
var supportsFractionalGBCR,