Re: [CSS21] 9.5.2 Effect of adjacent top margin of first in-flow child on clearance

Bruno Fassino wrote:
> consider this test case (online at
> http://www.brunildo.org/test/margin-collapse-clear-child-5.html) which
> in my interpretation confirms that at least Firefox and Safari include
> an adjacent top margin of the first inflow child when deciding the
> clearance:
> 
> <div style="background: lime; border-top: 1px solid">
> 	<div style="float: left; height: 10px; width: 10px"></div>
> 	<div style="clear: left">
> 		<div style="margin-top: 10px"></div>
> 	</div>
> </div>
> <div style="background: yellow">next</div>
>
> In both Firefox and Safari, the lime parent does not expand (has 0
> height) and the following yellow box is 10px below its top border. I
> could explain this with:
> Hypothetical position is taking into account the child margin, so
> there is no need for clearance and there is normal margin collapsing
> (the element with clear is "outside" its parent).
> If the child top margin would not be considered in the hypothetical
> position determination, clearance computation would be triggered, so
> even assuming that the result would be 0, one would say that the
> element with clear has clearance applied, then its margin would no
> more be allowed to 'escape' the bottom of the parent.

I agree with your analysis of this test case, that what browsers
currently show indicates that the top margin of the first in-flow child
is taken into account in the calculation of the hypothetical position.

I also agree that if it were intended to exclude the top margin of the
first in-flow child, there would be clearance of 0 and the parent's
content area would expand to 10px high.

However, in this particular test case, I think the latter behaviour is
desirable (in part due to the desire for continuity as seen when
reducing the height of the float from >10px down to <10px, but also for
consistency with the "easyclearing" technique whereby
div:after {
     content: "";
     display: block;
     clear: both;
}
causes the div to expand to enclose its floated children, even though
the generated content is empty) and hence I think that the current
wording of point 2 is appropriate insofar as the test case is concerned.

That browsers do not currently show this behaviour is probably a
consequence of them not currently implementing point 2 at all.

Cheers,
Anton Prowse
http://dev.moonhenge.net

Received on Sunday, 24 January 2010 16:38:50 UTC