Re: Issue 158 proposed text

On Tue, Jun 29, 2010 at 6:37 AM, Bruno Fassino <fassino@gmail.com> wrote:
> Well, this defines "preceding" margins, explicitly excluding margins
> of the element's children.
> So I'm back to one of my original doubts: is it "reasonable" to
> exclude such margins? Not much, in my opinion.
>
> In something like this:
>
> <div style="background: yellow">before</div>
> <div style="float: left; height: 50px; width: 100px; background:blue"></div>
> <div style="clear: left">
>        <div style="margin-top: 100px"></div>
> </div>
> <div style="background: yellow">next</div>
>
> I would prefer to say that the hypothetical position is already 100px
> below the first yellow box, so it stays there and no clearance is
> necessary (which seems to be Firefox's behavior).
>
> In other words, I would not exclude margins of children collapsing
> with the element's top margin (the rationale for this could be that
> for what concerns the position of the element's top border these
> margins have the same role as the element's top margin. Only the
> element's bottom margin and margins of following siblings have a
> different role and should be excluded.  Of course I'm not sure this
> makes sense :-).

Hmm, maybe.  I see your point - without any clearing at all, the third
div would have 100px of separation from the first div.  With my text,
that space would be eaten, and the third would be flush with the
bottom of the second, only 50px away from the first.

So children are all right.  Bottom margins are not.  That
automatically rules out following siblings as well, since they'll only
collapse if the element's bottom margin collapses with its top.  But
I'm looking at another case where we'd want following siblings to
collapse, or else we'd eat the separation...

[time passes]

I've looked at a few more cases now.  It actually seems that just
going with all adjoining margins is indeed what we want.  The only
problem in all the cases is when the clearing element has no content,
so that its top and bottom margins are adjoining.  Any other element
being self-adjoining is fine, it's the clearing element specifically
that causes problems in everything I've looked at so far.

There are two ways we can deal with this.  The simplest is to just
ignore the problems that self-adjoining clearing elements cause.  The
behavior in that case is well-defined, it's just not ideal.  The less
simple solution is to say that margins collapse as normal, but the
clearing element itself is prevented from being self-adjoining.  As
far as I can tell, this adequately resolves all the cases I've that
have been given in the thread, and some variations that I've come up
with myself.

If we choose the second option, the first paragraph of that section
would instead look like this:

| 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 all appropriate adjoining margins per normal margin-collapse
| rules, except that the clearing element's top margin is not allowed
| to collapse with the clearing element's bottom margin.

I don't have any particular opinion on this.  Implementors?

~TJ

Received on Tuesday, 29 June 2010 20:46:59 UTC