@font-feature-values
The @font-feature-values CSS at-rule lets you use a common name in the font-variant-alternates property for features activated differently in OpenType. This can help simplify your CSS when using multiple fonts.
The @font-feature-values at-rule may be used either at the top level of your CSS or inside any CSS conditional-group at-rule.
Syntax
Feature value blocks
- @swash
-  Specifies a feature name that will work with the swash()functional notation offont-variant-alternates. A swash feature value definition allows only one value:ident1: 2is valid, butident2: 2 4isn't.
- @annotation
-  Specifies a feature name that will work with the annotation()functional notation offont-variant-alternates. An annotation feature value definition allows only one value:ident1: 2is valid, butident2: 2 4isn't.
- @ornaments
-  Specifies a feature name that will work with the ornaments()functional notation offont-variant-alternates. An ornaments feature value definition allows only one value:ident1: 2is valid, butident2: 2 4isn't.
- @stylistic
-  Specifies a feature name that will work with the stylistic()functional notation offont-variant-alternates. A stylistic feature value definition allows only one value:ident1: 2is valid, butident2: 2 4isn't.
- @styleset
-  Specifies a feature name that will work with the styleset()functional notation offont-variant-alternates. A styleset feature value definition allows an unlimited number of values:ident1: 2 4 12 1maps to the OpenType valuesss02,ss04,ss12, andss01. Note that values higher than99are valid, but don't map to any OpenType values and are ignored.
- @character-variant
-  Specifies a feature name that will work with the character-variant()functional notation offont-variant-alternates. A character-variant feature value definition allows either one or two values:ident1: 3maps tocv03=1, andident2: 2 4maps tocv02=4, butident2: 2 4 5is invalid.
Formal syntax
@font-feature-values <family-name># { <feature-value-block-list> }where
<family-name> = <string> | <custom-ident>+
<feature-value-block-list> = <feature-value-block>+where
<feature-value-block> = <feature-type> '{' <feature-value-declaration-list> '}'where
<feature-type> = @stylistic | @historical-forms | @styleset | @character-variant | @swash | @ornaments | @annotation
<feature-value-declaration-list> = <feature-value-declaration>where
<feature-value-declaration> = <custom-ident>: <integer>+;
Examples
Using @styleset in a @font-feature-values rule
/* At-rule for "nice-style" in Font One */ @font-feature-values Font One { @styleset { nice-style: 12; } } /* At-rule for "nice-style" in Font Two */ @font-feature-values Font Two { @styleset { nice-style: 4; } } … /* Apply the at-rules with a single declaration */ .nice-look { font-variant-alternates: styleset(nice-style); }
Specifications
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
| @font-feature-values | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
| annotation | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
| character-variant | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
| historical-forms | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
| ornaments | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
| styleset | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
| stylistic | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
| swash | No | No | 34 | No | No | 9.1 | No | No | 34 | No | 9.3 | No | 
See also
- The font-variant-alternatesproperty that uses values that this at-rule defines.
    © 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
    https://developer.mozilla.org/en-US/docs/Web/CSS/@font-feature-values