Re: [CSS21] Negative clearance

Anton Prowse wrote:
> 
>  From CSS21:
> 
> Clearance is introduced as spacing above the margin-top of an element. 
> [...] Computing the clearance of an element on which 'clear' is set is 
> done by first determining the hypothetical position of the element's top 
> border edge within its parent block. This position is determined after 
> the top margin of the element has been collapsed with previous adjacent 
> margins (including the top margin of the parent block).  If this 
> hypothetical position of the element's top border edge is not past the 
> relevant floats, then its clearance must be set to the greater of:
>    1. The amount necessary to place the border edge of the block even 
> with the bottom outer edge of the lowest float that is to be cleared.
>    2. [...]
> 
> Firstly, it is not clear from a naive reading of expression (1) above 
> that the amount described can be a negative quantity (and hence that 
> clearance itself can be negative); only when the assumption is made (as 
> affirmed in [1]) that the presence of non-zero clearance on an element 
> prohibits margin-collapsing of that element's margin top with all 
> non-descendant elements does the spec make sense to me.  If this is the 
> correct reading, could this assumption not be made clearer?

There's a note where clearance is defined
   http://www.w3.org/TR/CSS21/visuren.html#flow-control
that says that clearance can be negative.

That clearance causes margins to not collapse is specified in 8.3.1:
   http://www.w3.org/TR/CSS21/box.html#collapsing-margins

Do you have a suggestion on how to make that clearer?

> Secondly, whilst the presence of negative clearing results in a 
> rendering in which the margin-top of the clear appears to disappear[1], 
> the implication in the spec is that it doesn't really disappear but that 
> instead there is "negative spacing" above the margin top.  To me the 
> result seems rather like "position: relative; top: 
> <negative-clearance>".  Yet take for example [2];  if the margin-top of 
> 50px is "still there", why doesn't it overlay the first div, thus 
> covering the hyperlink and making it unclickable?

Margins are transparent. I would expect them to be transparent wrt
events as well as to color.

> Thirdly, I understand from [1] that clearance was originally implemented 
> as a change in margin-top.  Superficially this seems intuitive, so there 
> must be some tricky edge-cases which expose problems with this 
> implementation.  Would somebody be able to summarize these for me or 
> point me to a description?

dbaron would probably have to answer that. I wouldn't know.

~fantasai

Received on Monday, 29 December 2008 23:29:01 UTC