W3C home > Mailing lists > Public > www-font@w3.org > January to March 2011

Re: [css3-fonts] new editor's draft posted

From: John Daggett <jdaggett@mozilla.com>
Date: Sun, 13 Mar 2011 20:16:07 -0700 (PDT)
To: Sylvain Galineau <sylvaing@microsoft.com>
Cc: www-style list <www-style@w3.org>, www-font@w3.org, liam@w3.org
Message-ID: <1743885069.38448.1300072567857.JavaMail.root@cm-mail03.mozilla.org>
Sylvain Galineau wrote:

> [Liam R E Quin:]
> > I am not convinced by making all of the hard-coded sub-properties.
> > The stability of the Adobe opentype feature registry isn't clear, and I
> > think having "low-level" and "high-level" access to the same features
> > confusing - you can turn ligatures on with one property and off again with
> > another, they are not orthogonal.  In addition, as new features are added
> > from time to time, or for other font formats, CSS would need to be updated.
> 
> I was starting to wonder about that. If a font-variant-* property and the
> font-feature-settings property contradict each other, what happens ?

While this is certainly a problem, the goal here is to cover most important
OpenType features by defining appropriate font-variant values for them. For
those excluded from the defined set, authors can use the feature tags
directly but this will only be necessary in special situations.

The specific rules for resolving the feature settings for a given element
are defined in section 7:

  http://dev.w3.org/csswg/css3-fonts/#rendering-considerations

Basically, low-level settings take precedence over high-level settings and
settings specified in properties take precedence over those specified
within @font-face rules.

Example (see OpenType feature registry [1] for exact tag definitions):

@font-feature-values {
  @styleset stacked-a 3;
}

@font-face {
  font-family: Jupiter Gothic;
  font-variant: styleset(stacked-a);      /* ss03=1 */
  font-feature-settings: "ital", "lnum";  /* ital=1, lnum=1 */
}

body {
  font-family: Jupiter Gothic, sans-serif;
  font-variant-numeric: tabular-nums oldstyle-nums;  /* tnum=1, onum=1 */
  font-feature-settings: "hkna", "ital" off;         /* hkna=1, ital=0 */
}

Using the rules defined in section 7, when Jupiter Sans is used for body text,
the combination of font-variant and font-feature-settings will resolve to:

  ss03=1, lnum=1, tnum=1, onum=1, hkna=1, ital=0

The setting for 'ital' in the property overrides the default specified in
the @font-face rule. Since some properties are mutually exclusive, the
OpenType engine will resolve "lining figures on" (i.e. lnum=1), followed by
"old-style figures on" (i.e. onum=1) to be "old-style figures on".

This is an intentionally complicated example and should be treated as an
edge case rather than the common use case.  The point is simply that the
rules for handling complicated cases like this are defined enough to get
good interoperability.  The design goal for specifying font feature
properties is to make the use of font-feature-settings relatively rare but
still possible.

Cheers,

John Daggett

[1] http://www.microsoft.com/typography/otspec/featurelist.htm
Received on Monday, 14 March 2011 03:17:50 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 11 June 2011 00:14:10 GMT