Re: CSS2.1: \A and white-space

[Fri, 23 Aug 2002 08:55:36 -0400] fantasai:
>After all, \A is just an escape sequence that means "newline". CSS2.1,
>however, seems to override that expectation with the wording of its \A
>explanation and the following example.


This part is not changed from CSS 2.
However, it seems to be difficult to find a browser that gets it right.

IE doesn't implement :before and :after at all.

Opera gets it mostly right: it interprets \xxxxxx sequences as Unicode
characters and it doesn't treat &-prefixed strings as entity references;
but it fails to interpret "\A" as a new line at all: it just displays
a substitution character (the character, usually a box, that's displayed
for a code point that has no glyph in the requested font).

From what you wrote, I gather that Mozilla also applies the white-space
property to data in the content property, but does treat \A as a newline
character.  Does it properly recognize \xxxxxx sequences as Unicode
characters (*not* as code points from the document character set) and avoid
recognizing entity references (e.g., "<" is 4 characters, not one)?


The description of the white-space property here:
     http://www.w3.org/TR/CSS21/text.html#propdef-white-space 
explains what is expected in regard to \A characters in generated content.
The clear reason for the choice is so that a <br /> element can be defined
by a style sheet (as in <http://www.w3.org/TR/CSS21/sample.html>, for
example) --- this is of little importance for HTML, but I imagine it is
quite significant for use with XML.


There is one obvious error in the present CSS 2.1 definition of the
white-space property --- the change noted here:
     http://www.w3.org/TR/2002/WD-CSS21-20020802/changes.html#q29
has not yet been incorporated in the main text.

I think there is a more subtle error as well.  Note that:
     http://www.w3.org/TR/CSS21/text.html#propdef-white-space 
says:
||   This property declares how whitespace inside the element is handled.
and links "whitespace" to:
     http://www.w3.org/TR/CSS21/syndata.html#whitespace
which defines white space in CSS.

Shouldn't the "whitespace" which is affected by the "white-space" property
be "whitespace" as defined by the document language, not by CSS?


I also think it should be clarified how other white space is to be handled
in generated content: one might expect the behavior to be analogous to that
of newline characters, but it isn't specified.  (This becomes more
problematic, at least in principle, if you accept my contention that the
document language --- not CSS --- must define the "whitespace" that is at
issue here.)  I can think of two simple ways to resolve these ambiguities;
it's not clear to me which is preferable:

1. Now that it is agreed that the white-space property applies to all
elements (not just block-level elements), change the sample style sheet
for HTML 4.0 to specify:
     br:before       { content: "\A" ; white-space: pre}
and change the description of the white-space property to remove any
suggestion that generated content should be treated differently than
document content.

2. Specify that generated content is not affected by the white-space
property: it is always treated as if "white-space: pre" were in effect.

My guess is that the first choice would be simpler for browser writers,
while the second preserves compatibility with the CSS 2 specification
(though nobody seems to implement that correctly anyway).
-- 
Randall Joseph Fellmy aka Randy@Coises.com

Received on Sunday, 25 August 2002 05:38:03 UTC