[CSS21] Box tree - comments on Working Draft

As a result of the resolution of Issue 177,[1] 9.2.2.1 (Anonymous inline 
boxes) now says:

   # Any text that is directly contained inside a block container
   # element (not inside an inline element) must be treated as an
   # anonymous inline element.

Whilst I re-emphasize that this might be a technical change from the 
previous version of the spec (since I believe that this sentence, which 
has been moved from 16.6.1, was introduced purely for the narrow 
purposes of the white space processing model; see [2]), I do think it's 
a good change.  In a situation like

<p>text</p>

the principal block box generated by the p element now contains an 
anonymous inline box containing the word "text" (possibly split into 
multiple inline boxes across different lines if the UA implements some 
sort of hyphenation functionality).

It's difficult to see how the inline formatting model holds together 
without all text being contained in some inline box.


Issue 1: 9.2.2.1 goes on to say:

   # In a document with HTML markup like this:
   #
   # <p>Some <em>emphasized</em> text</p>
   #
   # the <p> generates a block box, with several inline boxes inside it.
   # The box for "emphasized" is an inline box generated by an inline
   # element (<em>), but the other boxes ("Some" and "text")) are inline
   # boxes generated by a block-level element (<p>).

We need:

s/"Some"/"Some "/
s/"text"/" text"/

since the white space processing has not yet taken place at the time of 
introducing the anonymous inline boxes.

This fact also creates a problem for the subsequent paragraph:

   # White space content that would subsequently be collapsed away
   # according to the 'white-space' property does not generate any
   # anonymous inline boxes.

At the time of generating the inline boxes, it is not known whether the 
white space would be subsequently collapsed away.  It could be possible 
to know this... but that would involve changing the white space 
processing model in 16.6.1 which currently relies on the fact that the 
inline boxes are already present.


Issue 2: 16.3.1 (Underlining, overlining, striking, and blinking: the 
'text-decoration' property) says:

   # [...] For block containers that establish an inline formatting
   # context, the decorations are propagated to an anonymous inline
   # element that wraps all the in-flow inline-level children of the
   # block container.

Is this anonymous inline in addition to the anonymous inline that is 
generated when a block container has text content but no element 
children?  For example, in

<p>text</p>

are there two nested anonymous inline boxes containing the text?  This 
section and its example would certainly imply this.  When does this 
outer anonymous inline box exist?  Always, or only when the computed 
value of 'text-decoration' is other than none?  (I suspect we don't want 
to treat this anonymous inline as something additional.  Rather, we 
should define block containers which establish an inline formatting 
context to *always* contain an anonymous inline box which wraps its 
content.  This complements the example in 16.3.1 as well as simplifying 
9.2.2.1 (although the example in 9.2.2.1 would need adjusting).


Issue 3: 17.2.1 (Anonymous table objects) says:

   # Document languages other than HTML may not contain all the elements
   # in the CSS 2.1 table model. In these cases, the "missing" elements
   # must be assumed in order for the table model to work. Any table
   # element will automatically generate necessary anonymous table
   # objects around itself, consisting of at least three nested objects
   # corresponding to a 'table'/'inline-table' element, a 'table-row'
   # element, and a 'table-cell' element. Missing elements generate
   # _anonymous_ objects (e.g., anonymous boxes in visual table layout)
   # according to the following rules

where _anonymous_ links to 9.2.2.1 (Anonymous inline boxes).  Wouldn't 
it be better to link to 9.2.1.1 (Anonymous block boxes) since that's 
where the discussion of anonymous boxes begins?


[1] http://wiki.csswg.org/spec/css2.1#issue-177
[2] http://lists.w3.org/Archives/Public/www-style/2010Aug/0421.html 
(Issues 1 and 2)

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

Received on Friday, 7 January 2011 21:02:16 UTC