- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Wed, 18 Aug 2010 01:11:25 -0700
- To: "www-style@w3.org" <www-style@w3.org>
This is for CSS2.1 Issue 159 http://wiki.csswg.org/spec/css2.1#issue-159 triggered by this email http://lists.w3.org/Archives/Public/www-style/2010Feb/0015.html This is version 2. | In CSS, the adjoining margins of two or more boxes (which could be | siblings or nested) can combine to form a single margin. | Margins that combine this way are said to <dfn>collapse</dfn>. | | Two margins are adjoining if and only if: | * both belong to normal-flow block-level boxes that participate | in the same block formatting context | * no line boxes, no clearance, and no non-empty padding or border | areas separate them | * both belong to vertically-adjacent box edges, i.e. form one of | the following pairs: | - top margin of a box and top margin of its first in-flow child | - bottom margin of box and top margin of its immediately | following in-flow sibling | - bottom margin of a last in-flow child and bottom margin | of its parent iff the parent has 'auto' height | - top and bottom margins of a box with zero used height and | no in-flow children | | Note. Adjoining margins can be generated by elements that are not | related as siblings or ancestors. | | Vertical margins collapse if they are adjoining, except: | * Margins of the root element's box do not collapse. | * If the top and bottom margins of an element with clearance are | adjoining, its margins collapse with the adjoining margins of | subsequent siblings but that resulting margin does not collapse | with the bottom margin of the parent block. | Horizontal margins never collapse. | | The above rules imply that: | * Vertical margins between a floated box and any other box do not | collapse (not even between a float and its in-flow children). | * Vertical margins of elements that establish new block formatting | contexts (such as floats and elements with 'overflow' other than | 'visible') do not collapse with their in-flow children. | * Margins of absolutely positioned boxes do not collapse (not even | with their in-flow children). | * Margins of inline-block elements do not collapse (not even with | their in-flow children). | * The bottom margin of an in-flow block-level element always | collapses with the top margin of its next in-flow block-level | sibling, unless that sibling has clearance. | * The top margin of an in-flow block element collapses with | its first in-flow block-level child's top margin if the | element has no top border, no top padding, and the child has | no clearance. | * The bottom margin of an in-flow block element with a | 'height' of 'auto' collapses with its last in-flow block-level | child's bottom margin if the element has no bottom padding or | border. | * An element's own margins collapse if the 'min-height' property | is zero, and it has neither top or bottom borders nor top or | bottom padding, and it has a 'height' of either 0 or 'auto', and | it does not contain a line box, and all of its in-flow children's | margins (if any) are adjoining. | | When two or more margins collapse, the resulting margin width is the | maximum of the collapsing margins' widths. In the case of negative | margins, the maximum of the absolute values of the negative adjoining | margins is deducted from the maximum of the positive adjoining margins. | If there are no positive margins, the absolute maximum of the negative | adjoining margins is deducted from zero. | | If the top and bottom margins of a box are adjoining, then it is | possible for margins to collapse through it. In this case, the | position of the element depends on its relationship with the other | elements whose margins are being collapsed. | * If the element's margins are collapsed with its parent's top | margin, the top border edge of the box is defined to be the | same as the parent's. | * Otherwise, either the element's parent is not taking part in | the margin collapsing, or only the parent's bottom margin is | involved. The position of the element's top border edge is | the same as it would have been if the element had a non-zero | bottom border. | Note that the positions of elements that have been collapsed through | have no effect on the positions of the other elements with whose | margins they are being collapsed; the top border edge position is | only required for laying out descendants of these elements. ~fantasai
Received on Wednesday, 18 August 2010 08:12:00 UTC