Re: [css3-gcpm] containing block for top/bottom floats

Also sprach MURAKAMI Shinyu:

 > I have a question about CSS3 GCPM Page floats [1].
 > 
 > [1] http://dev.w3.org/csswg/css3-gcpm/#page-floats
 > | page 
 > |   This keyword indicates that the page box acts as containing block
 > |   for the purpose of 'float'.
 > | multi-column 
 > |   This keyword indicates that the multi-column element acts as
 > |   containing block for the purpose of 'float'.
 > | top
 > |   This keyword indicates that the element is floated to the top of the
 > |   containing block.
 > | bottom 
 > |   This keyword indicates that the element is floated to the bottom of
 > |   the containing block.
 > 
 > My question:
 > What about the containing block for top/bottom floats when neither page
 > nor multi-column keyword is specified?

 > I expect the top-float is floated to the top of the current column.

Yes. 

 > But that is not obvious in the GCPM spec.

Right. However, the multicol specification [1] says:

  Floats that appear inside multi-column layouts are positioned with
  regard to the column box where the float appears.

  [1] http://dev.w3.org/csswg/css3-multicol/

 > My proposal:
 > When the float property value has a vertical keyword (top, bottom) and
 > has no reference keyword (page, multi-column), the containing block is
 > formed by the content edge of the nearest box that is a column box or 
 > is a "flow root" defined in the CSS3 basic box model [3] or page area.
 > In vertical text, a horizontal keyword is vice versa.

Again, from the multicol specification [1]:

  Column boxes act like block-level, table cell, and inline-block
  boxes as per CSS 2.1, section 10.1, item 2 [CSS21]. As a result,
  floats are positioned with regard to the column box. However, the
  column box does not establish a containing block for elements with
  'position: fixed' or 'position: absolute'.

So, there are reasons to not make the column box a containing block.

However, I agree that GCPM should state that floats float within the
column box unless "page" or "multi-column" is specified. I propose to
express it in the description of "page" and "multi-column":

   <dt>page 

   <dd>This keyword indicates that the page box (and not the column
   box) acts as containing block for the purpose of 'float'

   <dt>multi-column

   <dd>This keyword indicates that the multi-column element (and not
   the column box) acts as containing block for the purpose of 'float'

Could this work?

-h&kon
              Håkon Wium Lie                          CTO °þe®ª
howcome@opera.com                  http://people.opera.com/howcome

Received on Sunday, 4 January 2009 14:16:08 UTC