Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/css.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ function setPositiveNumber( _elem, value, subtract ) {
function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
var i = dimension === "width" ? 1 : 0,
extra = 0,
delta = 0;
delta = 0,
marginDelta = 0;

// Adjustment may not be necessary
if ( box === ( isBorderBox ? "border" : "content" ) ) {
Expand All @@ -56,8 +57,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
for ( ; i < 4; i += 2 ) {

// Both box models exclude margin
// Count margin delta separately to only add it after scroll gutter adjustment.
// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
if ( box === "margin" ) {
delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
}

// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
Expand Down Expand Up @@ -108,7 +111,7 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
) ) || 0;
}

return delta;
return delta + marginDelta;
}

function getWidthOrHeight( elem, dimension, extra ) {
Expand Down
7 changes: 6 additions & 1 deletion test/unit/dimensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ QUnit.test( "outerWidth()", function( assert ) {
} );

QUnit.test( "outerHeight()", function( assert ) {
assert.expect( 12 );
assert.expect( 14 );

var $div, div,
$win = jQuery( window ),
Expand Down Expand Up @@ -268,6 +268,11 @@ QUnit.test( "outerHeight()", function( assert ) {
$div.css( "display", "none" );
assert.equal( $div.outerHeight( true ), 94, "Test hidden div with padding, border and margin with margin option" );

$div.css( "display", "" );
$div.css( "margin", "-10px" );
assert.equal( $div.outerHeight(), 74, "Test with padding, border and negative margin without margin option" );
assert.equal( $div.outerHeight( true ), 54, "Test with padding, border and negative margin with margin option" );

// reset styles
$div.css( { "position": "", "display": "", "border": "", "padding": "", "width": "", "height": "" } );

Expand Down