Re: [CSS21] BFC may become narrower and collide with a previous float

On 2/02/2012 12:38 AM, Morten Stenshorne wrote:

> I see that there has been some discussion in this thread regarding the
> meaning of "space". I believe space is two-dimensional in this context,
> but I don't think it matters that much here.
>
> Spec quote, part 1:
>
>      "The border box of a table, a block-level replaced element, or an
>      element in the normal flow that establishes a new block formatting
>      context (such as an element with 'overflow' other than 'visible')
>      must not overlap the margin box of any floats in the same block
>      formatting context as the element itself."
>
> Spec quote, part 2:
>
>       "If necessary, implementations should clear the said element by
>       placing it below any preceding floats, but may place it adjacent to
>       such floats if there is sufficient space."
>
> I don't see why anything in part 2 should invalidate what part 1
> says.

It doesn't. The problem is in the second part. It's just the wording 
like 'adjacent' (in 9.5) when used in something that has a left and 
right bias (like 'floats' or 'containing block'). It should state 
sufficient horizontal and vertical space.

> My interpretaion remains that under no circumstances should the
> border box of a table (...)  overlap the margin box of any floats in the
> same block formatting context.
>
> They clearly do overlap in e.g. Opera.

Agree fully. It is not good since some coders may use this technique as 
some unusual way to layout a page.

> Hence, I believe IE is more correct than the others.

If this is the case, then 9.4.1 [1] should also state that 'display: 
table' and 'display: table-row' also establish a new BFC since boxes 
with these display values also have the same behavior when beside floats.

Just noticed something with 9.4.1.

   | Floats, absolutely positioned elements, block containers
   | (such as inline-blocks, table-cells, and table-captions)
   | that are not block boxes, and block boxes with 'overflow'
   | other than 'visible' (except when that value has been
   | propagated to the viewport) establish new block formatting
   | contexts for their contents.

s/establish new block/establish a new block/


1. http://www.w3.org/TR/2011/REC-CSS2-20110607/visuren.html#block-formatting


-- 
Alan Gresley
http://css-3d.org/
http://css-class.com/

Received on Tuesday, 14 February 2012 04:48:36 UTC