diff --git a/mozilla/layout/generic/nsHTMLReflowState.cpp b/mozilla/layout/generic/nsHTMLReflowState.cpp
index 5c03b8f93aa..ba23c63a307 100644
--- a/mozilla/layout/generic/nsHTMLReflowState.cpp
+++ b/mozilla/layout/generic/nsHTMLReflowState.cpp
@@ -556,6 +556,7 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit()) ||
(eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit())) {
+ // Calculate the amount of space for margins
nscoord availMarginSpace = containingBlockWidth -
computedOffsets.left - mComputedBorderPadding.left -
computedWidth - mComputedBorderPadding.right -
@@ -568,10 +569,12 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
computedMargin.left = availMarginSpace / 2;
computedMargin.right = availMarginSpace - computedMargin.left;
} else {
- computedMargin.left = availMarginSpace;
+ // Just 'margin-left' is 'auto'
+ computedMargin.left = availMarginSpace - computedMargin.right;
}
} else {
- computedMargin.right = availMarginSpace;
+ // Just 'margin-right' is 'auto'
+ computedMargin.right = availMarginSpace - computedMargin.left;
}
}
}
@@ -670,6 +673,7 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetTopUnit()) ||
(eStyleUnit_Auto == mStyleSpacing->mMargin.GetBottomUnit())) {
+ // Calculate the amount of space for margins
nscoord availMarginSpace = containingBlockHeight - computedOffsets.top -
mComputedBorderPadding.top - computedHeight - mComputedBorderPadding.bottom -
computedOffsets.bottom;
@@ -681,10 +685,12 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
computedMargin.top = availMarginSpace / 2;
computedMargin.bottom = availMarginSpace - computedMargin.top;
} else {
- computedMargin.top = availMarginSpace;
+ // Just 'margin-top' is 'auto'
+ computedMargin.top = availMarginSpace - computedMargin.bottom;
}
} else {
- computedMargin.bottom = availMarginSpace;
+ // Just 'margin-bottom' is 'auto'
+ computedMargin.bottom = availMarginSpace - computedMargin.top;
}
}
}
diff --git a/mozilla/layout/html/base/src/nsHTMLReflowState.cpp b/mozilla/layout/html/base/src/nsHTMLReflowState.cpp
index 5c03b8f93aa..ba23c63a307 100644
--- a/mozilla/layout/html/base/src/nsHTMLReflowState.cpp
+++ b/mozilla/layout/html/base/src/nsHTMLReflowState.cpp
@@ -556,6 +556,7 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit()) ||
(eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit())) {
+ // Calculate the amount of space for margins
nscoord availMarginSpace = containingBlockWidth -
computedOffsets.left - mComputedBorderPadding.left -
computedWidth - mComputedBorderPadding.right -
@@ -568,10 +569,12 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
computedMargin.left = availMarginSpace / 2;
computedMargin.right = availMarginSpace - computedMargin.left;
} else {
- computedMargin.left = availMarginSpace;
+ // Just 'margin-left' is 'auto'
+ computedMargin.left = availMarginSpace - computedMargin.right;
}
} else {
- computedMargin.right = availMarginSpace;
+ // Just 'margin-right' is 'auto'
+ computedMargin.right = availMarginSpace - computedMargin.left;
}
}
}
@@ -670,6 +673,7 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetTopUnit()) ||
(eStyleUnit_Auto == mStyleSpacing->mMargin.GetBottomUnit())) {
+ // Calculate the amount of space for margins
nscoord availMarginSpace = containingBlockHeight - computedOffsets.top -
mComputedBorderPadding.top - computedHeight - mComputedBorderPadding.bottom -
computedOffsets.bottom;
@@ -681,10 +685,12 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext& aPresContext,
computedMargin.top = availMarginSpace / 2;
computedMargin.bottom = availMarginSpace - computedMargin.top;
} else {
- computedMargin.top = availMarginSpace;
+ // Just 'margin-top' is 'auto'
+ computedMargin.top = availMarginSpace - computedMargin.bottom;
}
} else {
- computedMargin.bottom = availMarginSpace;
+ // Just 'margin-bottom' is 'auto'
+ computedMargin.bottom = availMarginSpace - computedMargin.top;
}
}
}