[CSS21] 9.2 Anonymous boxes

Several issues arise concerning anonymous block boxes.


9.2.1 (Block-level elements and block boxes) says:[1]

   # Block-level elements (except for display 'table' elements, which are
   # described in a later chapter) generate a principal block box that
   # contains either only block boxes or only inline boxes.

9.2.1.1 (Anonymous block boxes) says:[2]

   # In a document like this:
   #
   # <DIV>
   #   Some text
   #   <P>More text
   # </DIV>
   #
   # (and assuming the DIV and the P both have 'display: block'), the DIV
   # appears to have both inline content and block content. To make it
   # easier to define the formatting, we assume that there is an
   # anonymous block box around "Some text".
   #
   # In other words: if a block box (such as that generated for the DIV
   # above) has another block box or run-in box inside it (such as the P
   # above), then we force it to have only block boxes and run-in boxes
   # inside it.

OK. But we also have the following from 16.6.1 (The 'white-space'
processing model)[3] (which will likely be moved to Ch.9; see [4]):

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

Issue 1:

Does that mean that there's an anonymous inline box around "Some text"
or that there's one around "Some text <P>More text" (which would mean
that the rules for breaking an inline box around a block then come into
play)?  In fact it doesn't matter, since we end up with an anonymous
block containing an anonymous inline containing "Some text" in both
interpretations.  But what if it were
"Some text <SPAN>More text</SPAN> End text"?  In this case the two
interpretations – anonymous inline boxes around "Some text" and "End
text" or one anonymous inline box around everything – yield different
results.

I think the sentence from 16.6.1 says that it's the first
interpretation, in each case.  I'd be grateful for confirmation of that!


9.2.1.1:
   # When an inline box contains a block box, the inline box (and its
   # inline ancestors within the same line box) are broken around the
   # block. The line boxes before the break and after the break are
   # enclosed in anonymous boxes, and the block box becomes a sibling of
   # those anonymous boxes. [...]

Issue 2:

s/contains a block box/contains an in-flow block box/

since containing a float doesn't cause the inline content to be split
between two different blocks.


Issue 3:

What /does/ happen when an inline box contains a float?  Does the run of
inlines+floats in which it sits get wrapped in an anonymous block box
which becomes the sibling of the floats?  If so, this needs stating.


Issue 4:

Is it the case that, with the exception of an anonymous table box, an
anonymous block box contains either only block boxes or only inline
boxes, much like a principal block box?  (This is essentially the same
question I'm asking in [5] as part of the great box cleanup; we'll need
to ensure we get the same answer!)


9.2.1.1:
   # This model would apply in the following example if the following
   # rules:
   #
   # body { display: inline }
   # p    { display: block }
   #
   # were used with this HTML document:
   #
   # <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
   # <HEAD>
   # <TITLE>Anonymous text interrupted by a block</TITLE>
   # </HEAD>
   # <BODY>
   # This is anonymous text before the P.
   # <P>This is the content of P.</P>
   # This is anonymous text after the P.
   # </BODY>
   #
   # The BODY element contains a chunk (C1) of anonymous text followed by
   # a block-level element followed by another chunk (C2) of anonymous
   # text. The resulting boxes would be an anonymous block box around the
   # BODY, containing an anonymous block box around C1, the P block box,
   # and another anonymous block box around C2.

Issue 5:

Why would there be an anonymous block box around the BODY?  Surely the
principal block box of the (implied[6]) HTML is what surrounds the
anonymous block box around C1, the principal block box of the P, and the
anonymous block box around C2.


[1] http://www.w3.org/TR/CSS2/visuren.html#block-boxes
[2] http://www.w3.org/TR/CSS2/visuren.html#anonymous-block-level
[3] http://www.w3.org/TR/CSS2/text.html#white-space-model
[4] http://lists.w3.org/Archives/Public/www-style/2010Jul/0440.html
[5] http://lists.w3.org/Archives/Public/www-style/2010Aug/0004.html
[6] http://www.w3.org/TR/html5/syntax.html#optional-tags

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

Received on Sunday, 1 August 2010 21:47:29 UTC