diff --git a/src/effects.js b/src/effects.js index e154d2bd4..24d3d34a8 100644 --- a/src/effects.js +++ b/src/effects.js @@ -4,6 +4,7 @@ var elemdisplay = {}, iframe, iframeDoc, rfxtypes = /^(?:toggle|show|hide)$/, rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i, + rMarginProp = /^margin/, timerId, fxAttrs = [ // height animations @@ -636,8 +637,8 @@ jQuery.extend( jQuery.fx, { // Ensure props that can't be negative don't go there on undershoot easing jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) { - // exclude marginTop, marginLeft, marginBottom and marginRight from this list - if ( prop.indexOf( "margin" ) ) { + // Exclude marginTop, marginLeft, marginBottom and marginRight from this list + if ( !rMarginProp.test( prop ) ) { jQuery.fx.step[ prop ] = function( fx ) { jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit ); }; diff --git a/test/unit/effects.js b/test/unit/effects.js index e478cdf63..25c9834e4 100644 --- a/test/unit/effects.js +++ b/test/unit/effects.js @@ -263,6 +263,15 @@ test("animate negative height", function() { }); }); +test("animate negative margin", function() { + expect(1); + stop(); + jQuery("#foo").animate({ marginTop: -100 }, 100, function() { + equal( jQuery(this).css("marginTop"), "-100px", "Verify margin." ); + start(); + }); +}); + test("animate negative padding", function() { expect(1); stop();