- From: Bert Bos <bert@w3.org>
- Date: Mon, 21 May 2012 17:17:40 +0200
- To: www-style list <www-style@w3.org>
On May 18, 2012, at 08:34, John Daggett wrote: > > I wanted to follow up on some of Bert's comments regarding reserved > keywords and the syntax of font family names at the F2F and try again > to propose more precise wording that will allow proper testing of this > issue. > > On the telcon a few weeks ago there was a discussion about situations > like these: > > font-family: foo, inherit; > > I don't actually see how the present wording explictly makes 'inherit, foo' > invalid but not 'foo, inherit'. Specifically, I'm not sure I see an implicit > priority in the grammar productions that distinguish 'foo, inherit' from > 'inherit, foo'. I agree, there is no ambiguity in the current wording. 'font-family: inherit' is the keyword inherit; and 'font-family: foo, inherit, bar' is invalid, because the font name "inherit" must be quoted. But even if it is unambiguous, it is apparently not clear. Otherwise different implementers wouldn't have implemented it differently. I propose to add a note in the last para of 15.3: Note that 'font-family: Times, inherit' is therefore an invalid declaration, because 'inherit' in that position can neither be a valid keyword nor a valid font family name. But other wordings are possible, too. See below. > Both Tab and Elika feel that any unquoted name that includes > keywords like 'inherit' should be invalid, so declarations like > the ones below would be invalid: > > font-family: foo inherit; > font-family: inherit foo; I don't see any ambiguity in the spec about these. They are valid family names. Some real-world examples would be: font-family: Microsoft Sans Serif font-family: Schoolhouse Cursive B > > I put together some tests for this (Javascript required): > > http://people.mozilla.org/~jdaggett/tests/font-family-parsing.html > > As you can see, the results vary widely. Webkit treats as invalid any > declaration that includes a font name with 'inherit' or 'initial'. > Firefox only throws out declarations that begin with 'inherit' and not > much else. IE9 is simply bizarre, it almost never invalidates > 'font-family' declarations but does invalidate, sometimes, within > 'font' declarations. > > I think the real problem is the wording below in CSS 2.1 (and in CSS3 > Fonts): > > Font family names that happen to be the same as a keyword value > ('inherit', 'serif', 'sans-serif', 'monospace', 'fantasy', and > 'cursive') must be quoted to prevent confusion with the > keywords with the same names. The keywords 'initial' and > 'default' are reserved for future use and must also be quoted > when used as font names. UAs must not consider these keywords > as matching the '<family-name>' type. > > This is written from the point of view of the author, it doesn't > completely define which situations produce valid declarations and > which ones don't. The term "these keywords" in the last sentence > needs to apply to 'inherit', 'default' and 'initial'. Yes, that is why I think adding a note like the one above can help. It translates the sentence to the point of view of a reader. > > I think the answer here is to come up with wording that explicitly > defines as valid/invalid the rules below: > > /* valid */ > font-family: inherit foo; > font-family: foo inherit; > font-family: initial foo; > font-family: foo initial; > font-family: default foo; > font-family: foo default; > > /* invalid */ > font-family: inherit, foo; > font-family: foo, inherit; > font-family: initial, foo; > font-family: foo, initial; > font-family: default, foo; > font-family: foo, default; > > In terms of CSS 2.1 errata, I would propose two changes: > > 1. Correct the syntax to fix the placement of the comma: > > Existing: > font-family: [[<family-name> | <generic-family>] [, <family-name>| <generic-family>]* ] | inherit > > Proposed: > font-family: [[<family-name> | <generic-family>] [, [<family-name>| <generic-family>]]* ] | inherit Interesting that nobody found that error before. It was correct in the first REC. The error was introduced in the first WD of the revised edition, in 2002... > > 2. Make the wording less ambiguous: > > Existing: > Font family names that happen to be the same as a keyword value > ('inherit', 'serif', 'sans-serif', 'monospace', 'fantasy', and > 'cursive') must be quoted to prevent confusion with the > keywords with the same names. The keywords 'initial' and > 'default' are reserved for future use and must also be quoted > when used as font names. UAs must not consider these keywords > as matching the '<family-name>' type. > > Proposed: > Font family names that happen to be the same as the keyword values > 'inherit', 'default' and 'initial' are not allowed to match the > '<family-name>' type. These names or those that match generic font > keywords ('serif', 'sans-serif', 'monospace', 'fantasy', and > 'cursive') must be quoted to prevent confusion with the keywords > with the same names. Yes, that works, too. > If this makes sense, I can align the wording in CSS3 Fonts to match > this and provide more explanation and examples of valid/invalid usage. Bert -- Bert Bos ( W 3 C ) http://www.w3.org/ http://www.w3.org/people/bos W3C/ERCIM bert@w3.org 2004 Rt des Lucioles / BP 93 +33 (0)4 92 38 76 92 06902 Sophia Antipolis Cedex, France
Received on Monday, 21 May 2012 15:18:30 UTC