| Inherited | Initial | Version |
|---|---|---|
| No | 0 |
CSS1 |
| IE5.5+ | FF1+ | SA1.3+ | OP9.2+ | CH2+ |
|---|---|---|---|---|
| Buggy | Full | Full | Full | Full |
Syntax
Description
This property defines the horizontal distance from the left border edge of the element concerned to the edge of its containing block, or the element that’s horizontally adjacent to it.
If the element to the side is
floated, or absolutely positioned, the margin will pass through it,
because floats and absolute elements are removed from the flow. The margin
will only be affected by static elements (or elements for which
position is set to relative, and
which have no coordinates) in the normal flow of the document—this
includes the containing block itself.
Refer to the sections on the CSS box model, collapsing margins, containing blocks, and floating and clearing to understand exactly how margins work for all elements. The section on inline formatting also explains how margins affect inline elements.
Example
This style rule assigns a margin of
20 pixels to the left of paragraphs within the element with ID
"example":
#example p {
margin-left: 20px;
}
Value
The property takes a CSS length (px, pt, em, and so on),
the keyword auto, or a percentage of the width of the
element’s containing block. Note
that even for the top and bottom margins the percentage value will refer
to the width of the containing block.
If the containing block’s width depends on the element
to which percentage margins are applied, the resulting layout is undefined
in CSS2.1. More verbosely this would be apparent for floated or absolutely
positioned elements without an explicit width set,
where a child element has margin expressed as a
percentage. The parent element needs to know the dimensions of the child
element to compute its own width (shrink-wrapping the contents), but the
child box element also needs to know the parent's width
to compute its margin (and hence its dimensions).
Negative values are allowed for margins (although
implementation-specific limits may apply), and have the effect of pulling
the element in the direction of the margin specified. This may cause the
element to overlap other elements, which may, of course, be the desired
effect. In cases where overlap occurs, we can determine the elements’
stacking levels by applying z-index values to them. In
the case of non-positioned or floated elements, a z-index only takes
effect when a position is set to
relative for the elements, as a
z-index can be applied only to positioned
elements.
Negative margins on floats are handled differently and the details are covered in Floating and Clearing.
When you use the value auto,
you’re allowing the browser to calculate the margins for you
automatically. In most cases, the calculated value will default either to
zero or to the distance required to reach the parent element’s edge. In
the case of a block element that has a specified width, left and right
margins to which a value of auto is applied will be
set to be equal. This will effectively center the element in the available
space.
If margins are over-constrained—that is,
the total of their specified dimensions is greater than the available
content space—the browser will reset one of the margins to
auto to overcome the problem.
Compatibility
| Internet Explorer | Firefox | Safari | Opera | Chrome | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 5.5 | 6.0 | 7.0 | 8.0 | 1.0 | 1.5 | 2.0 | 3.0 | 3.5 | 1.3 | 2.0 | 3.1 | 4.0 | 9.2 | 9.5 | 10.0 | 2.0 |
| Buggy | Buggy | Buggy | Buggy | Full | Full | Full | Full | Full | Full | Full | Full | Full | Full | Full | Full | Full |
Internet Explorer
version 5.5 (and version 6 in quirks mode) does not support the centering
of a block element that has a specified width by setting its left and
right margins to auto.
In
Internet Explorer versions up to and including 6, the left or right
margins are doubled on floated elements that touch their parents’ side
edges. The margin value is doubled on the side that touches the parent. A
simple fix for this problem is to set display to
inline for the floated element.
If the value of the horizontal negative margins are greater or equal to the sum of the width, padding, and borders of the element, the width of the element effectively becomes zero. Some older browsers (for example, Mozilla 1.6 and earlier versions) will appear to ignore the position of the element, much as they would an absolute element. This causes issues where following elements may not correctly clear the element in question. However, most modern browsers don’t experience this issue.
Internet Explorer for Windows versions up to and
including 7 don’t support the value inherit.
Internet Explorer for Windows version 8 doesn’t use
the computed value of the parent’s margin when the
keyword inherit is used (see James
Hopkins for test case).
User-contributed notes
There are no comments yet.