mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Fix #13543. offsetWidth is wrong on non-1 zoom. Close gh-1194.
This commit is contained in:
parent
1205103a72
commit
8db7d6f20b
25
src/core.js
25
src/core.js
@ -781,7 +781,30 @@ jQuery.extend({
|
||||
length ? fn( elems[0], key ) : emptyGet;
|
||||
},
|
||||
|
||||
now: Date.now
|
||||
now: Date.now,
|
||||
|
||||
// A method for quickly swapping in/out CSS properties to get correct calculations.
|
||||
// Note: this method belongs to the css module but it's needed here for the support module.
|
||||
// If support gets modularized, this method should be moved back to the css module.
|
||||
swap: function( elem, options, callback, args ) {
|
||||
var ret, name,
|
||||
old = {};
|
||||
|
||||
// Remember the old values, and insert the new ones
|
||||
for ( name in options ) {
|
||||
old[ name ] = elem.style[ name ];
|
||||
elem.style[ name ] = options[ name ];
|
||||
}
|
||||
|
||||
ret = callback.apply( elem, args || [] );
|
||||
|
||||
// Revert the old values
|
||||
for ( name in options ) {
|
||||
elem.style[ name ] = old[ name ];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.ready.promise = function( obj ) {
|
||||
|
21
src/css.js
21
src/css.js
@ -277,27 +277,6 @@ jQuery.extend({
|
||||
return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
|
||||
}
|
||||
return val;
|
||||
},
|
||||
|
||||
// A method for quickly swapping in/out CSS properties to get correct calculations
|
||||
swap: function( elem, options, callback, args ) {
|
||||
var ret, name,
|
||||
old = {};
|
||||
|
||||
// Remember the old values, and insert the new ones
|
||||
for ( name in options ) {
|
||||
old[ name ] = elem.style[ name ];
|
||||
elem.style[ name ] = options[ name ];
|
||||
}
|
||||
|
||||
ret = callback.apply( elem, args || [] );
|
||||
|
||||
// Revert the old values
|
||||
for ( name in options ) {
|
||||
elem.style[ name ] = old[ name ];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -75,12 +75,16 @@ jQuery.support = (function( support ) {
|
||||
container = document.createElement("div");
|
||||
container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
|
||||
|
||||
// Check box-sizing and margin behavior
|
||||
// Check box-sizing and margin behavior.
|
||||
body.appendChild( container ).appendChild( div );
|
||||
div.innerHTML = "";
|
||||
div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
|
||||
|
||||
support.boxSizing = div.offsetWidth === 4;
|
||||
// Workaround failing boxSizing test due to offsetWidth returning wrong value
|
||||
// with some non-1 values of body zoom, ticket #13543
|
||||
jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
|
||||
support.boxSizing = div.offsetWidth === 4;
|
||||
});
|
||||
support.doesNotIncludeMarginInBodyOffset = body.offsetTop !== 1;
|
||||
|
||||
// Use window.getComputedStyle because jsdom on node.js will break without it.
|
||||
|
19
test/data/support/boxSizing.html
Normal file
19
test/data/support/boxSizing.html
Normal file
@ -0,0 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<style>
|
||||
body {
|
||||
zoom: 0.87;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../../jquery.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
window.parent.iframeCallback( jQuery.support.boxSizing );
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -19,6 +19,11 @@ if ( jQuery.css ) {
|
||||
});
|
||||
}
|
||||
|
||||
testIframeWithCallback( "A non-1 zoom on body doesn't cause WebKit to fail box-sizing test", "support/boxSizing.html", function( boxSizing ) {
|
||||
expect( 1 );
|
||||
equal( boxSizing, jQuery.support.boxSizing, "box-sizing properly detected on page with non-1 body zoom" );
|
||||
});
|
||||
|
||||
testIframeWithCallback( "A background on the testElement does not cause IE8 to crash (#9823)", "support/testElementCrash.html", function() {
|
||||
expect( 1 );
|
||||
ok( true, "IE8 does not crash" );
|
||||
|
Loading…
Reference in New Issue
Block a user