Re: [CSS21] Proposal to define "Block container element"

On 19/09/2012 17:37, fantasai wrote:
> On 09/03/2012 01:56 PM, Anton Prowse wrote:
>>
>> : <INS>Certain values of the 'display' property cause an element of
>> : the source document to generate</INS> a
>> : *principal <DEL>block-level</DEL> box*
>
> I still find this phrase awkward, because it's so vague. Since you don't
> want to list 'display: none' explicitly, how about:
>
>    <INS>Elements that appear in the formatting structure generate</INS>

To summarize what we discussed on the telecon[1] for the record, my 
concern is whether we want inline elements to generate a principal box. 
  Like you, I think the box model is more natural and coherent if they 
do (and we regard the "multiple inline boxes" described by CSS21 as 
being the result of fragmentation across different line boxes), but I'm 
concerned that this might conflict with certain other aspects of the 
inline formatting model described in CSS21.  If so, it may well be that 
we can change those aspects since I suspect that either they don't 
actually impact the rendering result or else they already create 
inconsistencies.  But I'd prefer to defer that investigation to later.

So in [1] the WG resolved to keep my vague wording, on the understanding 
that the issue of whether an inline element generates a principal box be 
treated as a separate issue that will progress in parallel with this 
one. That issue is duly filed at [2].

>> : <DEL>Except for table boxes, which are described in a later
>> : chapter, and replaced elements</DEL><INS>In CSS 2.1</INS>, a
>> : block-level box is also a block container box <INS>unless it is
>> : a table box or the principal box of a replaced element</INS>. A
>> : block container box either contains only block-level boxes or
>> : establishes an _inline formatting context_<link to 9.4.2> and thus
>> : contains only _inline-level boxes_<link to 9.2.2>. <INS>An element
>> : whose principal box is a block container box is a *block container
>> : element*. Values of the 'display' property which make a
>> : non-replaced element generate a block container include 'block',
>> : 'list-item' and 'inline-block'.</INS> Not all block container boxes
>> : are block-level boxes: non-replaced inline blocks and non-replaced
>> : table cells are block containers but <INS>are</INS> not block-level
>> : <DEL>boxes</DEL>. Block-level boxes that are also block containers
>> : are called block boxes.
>
> I might consider
>
>    | Most block-level boxes are also block container boxes.
>    | A block container box [... stuff from above ...] 'inline-block'.
>    | Not all block container boxes [... stuff from above ...] block-level.
>    | Similarly, not all block-level boxes are block container boxes:
>    | in CSS2.1, table boxes and replaced elements are can be block-level,
>    | but are not block containers.
>    | Block-level boxes that are also block containers are called block
> boxes.
>
> You do need an s/which make/that make/, though.

I'm happy with this suggestion, and in [1] we resolved to accept my 
proposal as modified by this suggestion.  Specifically, the resulting 
accepted proposal is:

Proposal F:

   : 9.2 Controlling box generation
   :
   : The following sections describe the types of boxes that may be
   : generated in CSS 2.1. A box's type affects, in part, its behavior
   : in the visual formatting model. The 'display' property, described
   : below, specifies a box's type.
   :
   : <MovedFrom9.2.1><DEL>Each block-level element generates</DEL>
   : <INS>Certain values of the 'display' property cause an element of
   : the source document to generate</INS> a
   : *principal <DEL>block-level</DEL> box* that contains descendant
   : boxes and generated content and is also the box involved in any
   : positioning scheme. Some <DEL>block-level</DEL> elements may
   : generate additional boxes in addition to the principal box:
   : 'list-item' elements. These additional boxes are placed with
   : respect to the principal box.</MovedFrom9.2.1>
   :
   : 9.2.1 Block-level elements and block boxes
   :
   : Block-level elements <DEL>are</DEL> <INS> – </INS> those elements of
   : the source document that are formatted visually as blocks (e.g.,
   : paragraphs)<DEL>.</DEL> <INS> – are elements which generate a
   : block-level principal box.</INS> <DEL>The following values</DEL>
   : <INS>Values</INS> of the 'display' property <INS>that</INS> make an
   : element block-level<DEL>:</DEL> <INS>include</INS> 'block',
   : 'list-item', and 'table'. <MovedFromBelow>*Block-level boxes* are
   : boxes that participate in a
   : _block formatting context_.</MovedFromBelow>
   :
   : <MovedToAbove>Block-level boxes are boxes that participate in a
   : block formatting context.</MovedToAbove> <MovedTo9.2>Each
   : block-level element generates a principal block-level box that
   : contains descendant boxes and generated content and is also the box
   : involved in any positioning scheme. Some block-level elements may
   : generate additional boxes in addition to the principal box:
   : 'list-item' elements. These additional boxes are placed with
   : respect to the principal box.</MovedTo9.2>
   :
   : <DEL>Except for table boxes, which are described in a later
   : chapter, and replaced elements, a block-level box is also a block
   : container box.</DEL> <INS>Most block-level boxes are also block
   : container boxes.</INS> A block container box either contains only
   : block-level boxes or establishes an
   : _inline formatting context_<link to 9.4.2> and thus contains only
   : _inline-level boxes_<link to 9.2.2>. <INS>An element whose
   : principal box is a block container box is a
   : *block container element*. Values of the 'display' property that
   : make a non-replaced element generate a block container include
   : 'block', 'list-item' and 'inline-block'.</INS> Not all block
   : container boxes are block-level boxes: non-replaced inline blocks
   : and non-replaced table cells are block containers but
   : <INS>are</INS> not block-level <DEL>boxes</DEL>. <INS>Similarly,
   : not all block-level boxes are block container boxes: in CSS2.1,
   : table boxes and replaced elements are can be block-level, but are
   : not block containers.</INS> Block-level boxes that are also block
   : containers are called block boxes.
   :
   : The three terms "block-level box," "block container box," and
   : "block box" are sometimes abbreviated as "block" where unambiguous.


   : 9.2.4 The 'display' property
   :
   : [...]
   :
   : The values of this property have the following meanings:
   :
   : block
   :   This value causes an element to generate a <INS>principal</INS>
   :   block box.
   :
   : inline-block
   :   This value causes an element to generate <DEL>an</DEL>
   :   <INS>a principal</INS> inline-level block container.
   :   <INS>(</INS>The inside of an inline-block is formatted as a block
   :   box, and the element itself is formatted as an atomic
   :   inline-level box.<INS>)</INS>


   : 17.4 Tables in the visual formatting model
   :
   : In terms of the visual formatting model, a table can behave
   : like a block-level (for 'display: table') or inline-level (for
   : 'display: inline-table') element.
   :
   : In both cases, the table generates a principal block
   : <INS>container</INS> box called the table wrapper box that
   : contains the table box itself and any caption boxes (in
   : document order). The table box is a block-level box that contains
   : the table's internal table boxes. The caption boxes are
   : <INS>principal</INS> block-level boxes that retain their own
   : content, padding, margin, and border areas, and are rendered as
   : normal block boxes inside the table wrapper box. Whether the
   : caption boxes are placed before or after the table box is decided
   : by the 'caption-side' property, as described below.
   :
   : The table wrapper box is <DEL>a 'block' box if the table is
   : block-level</DEL> <INS>block-level for 'display: table'</INS>, and
   : <DEL>an 'inline-block' box if the table is inline-level</DEL>
   : <INS>inline-level for 'display: inline-table'</INS>. [...]


[1] http://lists.w3.org/Archives/Public/www-style/2012Sep/0358.html
[2] https://www.w3.org/Bugs/Public/show_bug.cgi?id=18930

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

Received on Thursday, 20 September 2012 08:26:06 UTC