utility-opentype
Version:
Simple, CSS utility classes for advanced typographic features.
334 lines (290 loc) • 8.82 kB
CSS
/*
Utility OpenType
Simple, CSS utility classes for advanced typographic features.
http://utility-opentype.kennethormandy.com
*/
/* Ligatures */
.liga {
@supports not (font-variant-ligatures: common-ligatures) {
font-feature-settings: "liga";
}
-ms-font-feature-settings: "liga"; /* IE doesn’t support @supports, but `font-feature-settings` isn’t unprefixed, so we’re cool. */
font-variant-ligatures: common-ligatures;
}
.dlig {
@supports not (font-variant-ligatures: discretionary-ligatures) {
font-feature-settings: "dlig";
}
-ms-font-feature-settings: "dlig";
font-variant-ligatures: discretionary-ligatures;
}
/* Caps */
.smcp {
text-transform: uppercase;
@supports not (font-variant-caps: small-caps) {
text-transform: inherit;
font-feature-settings: "onum", "smcp", "c2sc" 0;
}
@supports (font-variant-caps: small-caps) {
text-transform: inherit;
font-variant-caps: small-caps;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
text-transform: lowercase;
}
-ms-font-feature-settings: "lnum", "smcp", "c2sc" 0;
}
.c2sc {
@supports (font-variant-caps: all-small-caps) or (font-feature-settings: "c2sc") {
text-transform: lowercase;
}
@supports not (font-variant-caps: all-small-caps) {
font-feature-settings: "onum", "smcp" 0, "c2sc";
}
text-transform: uppercase;
font-variant-caps: all-small-caps;
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
text-transform: lowercase
}
-ms-font-feature-settings: "smcp" 0, "c2sc";
}
.c2sc.smcp,
.caps {
text-transform: uppercase;
@supports (font-feature-settings: "smcp", "c2sc") { /* This is not valid CSS, but also doesn’t work in Sass when changed. */
@supports not (font-variant-caps: all-small-caps) {
text-transform: inherit;
font-feature-settings: "smcp", "c2sc";
}
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
text-transform: lowercase;
}
-ms-font-feature-settings: "smcp", "c2sc";
font-variant-caps: all-small-caps;
}
.smcp.onum {
@supports not (font-variant-caps: small-caps) {
@supports not (font-variant-numeric: oldstyle-nums) {
font-feature-settings: "onum", "smcp" 1;
}
}
}
.c2sc.onum,
.caps.onum {
@supports not (font-variant-caps: all-small-caps) {
@supports not (font-variant-numeric: oldstyle-nums) {
text-transform: lowercase;
font-feature-settings: "onum", "smcp" 1;
}
}
}
.case {
font-feature-settings: "case";
}
.titl {
@supports not (font-variant-caps: titling-caps) {
font-feature-settings: "titl";
}
-ms-font-feature-settings: "titl";
font-variant-caps: titling-caps;
}
/* Alternates */
.calt {
@supports not (font-variant-ligatures: contextual) {
font-feature-settings: "calt";
}
-ms-font-feature-settings: "calt";
font-variant-ligatures: contextual;
}
.hist {
@supports not (font-variant-alternates: historical-forms) {
font-feature-settings: "hist";
}
-ms-font-feature-settings: "hist";
font-variant-alternates: historical-forms;
}
.swsh,
.swsh-1 { font-feature-settings: "swsh" }
.swsh-2 { font-feature-settings: "swsh" 2 }
.swsh-3 { font-feature-settings: "swsh" 3 }
.salt,
.salt-1 { font-feature-settings: "salt" }
.salt-2 { font-feature-settings: "salt" 2 }
.salt-3 { font-feature-settings: "salt" 3 }
.ss01 { font-feature-settings: "ss01" }
.ss02 { font-feature-settings: "ss02" }
.ss03 { font-feature-settings: "ss03" }
.ss04 { font-feature-settings: "ss04" }
.ss05 { font-feature-settings: "ss05" }
.ss06 { font-feature-settings: "ss06" }
.ss07 { font-feature-settings: "ss07" }
.ss08 { font-feature-settings: "ss08" }
.ss09 { font-feature-settings: "ss09" }
.ss10 { font-feature-settings: "ss10" }
.ss11 { font-feature-settings: "ss11" }
.ss12 { font-feature-settings: "ss12" }
.ss13 { font-feature-settings: "ss13" }
.ss14 { font-feature-settings: "ss14" }
.ss15 { font-feature-settings: "ss15" }
.ss16 { font-feature-settings: "ss16" }
.ss17 { font-feature-settings: "ss17" }
.ss18 { font-feature-settings: "ss18" }
.ss19 { font-feature-settings: "ss19" }
.ss20 { font-feature-settings: "ss20" }
/* Numeric */
.frac {
@supports not (font-variant-numeric: diagonal-fractions) {
font-feature-settings: "frac";
}
-ms-font-feature-settings: "frac";
font-variant-numeric: diagonal-fractions;
}
.afrc {
@supports not (font-variant-numeric: stacked-fractions) {
font-feature-settings: "afrc";
}
-ms-font-feature-settings: "afrc";
font-variant-numeric: stacked-fractions;
}
.ordn {
@supports not (font-variant-numeric: ordinal) {
font-feature-settings: "ordn";
}
-ms-font-feature-settings: "ordn";
font-variant-numeric: ordinal;
}
.sups {
@supports not (font-variant-position: sup) {
font-feature-settings: "sups";
@supports (font-feature-settings: "sups") {
font-size: 1em;
vertical-align: baseline;
}
/* Since Safari lies and says it supports `font-feature-settings`, fix fallback subscript */
@supports (overflow: -webkit-marquee) and (justify-content: inherit) {
vertical-align: super;
}
}
font-variant-position: super;
}
.subs,
.sinf {
@supports not (font-variant-position: sub) {
font-feature-settings: "subs";
@supports (font-feature-settings: "subs") {
font-size: 1em;
vertical-align: baseline;
}
/* Since Safari lies and says it supports `font-feature-settings`, fix fallback subscript */
@supports (overflow: -webkit-marquee) and (justify-content: inherit) {
vertical-align: sub;
font-size: smaller;
}
}
font-size: inherit;
font-variant-position: sub;
}
.sinf {
@supports (font-feature-settings: "sinf") {
font-variant-position: normal;
font-feature-settings: "sinf";
vertical-align: baseline;
}
/* Since Safari lies and says it supports `font-feature-settings`, fix fallback subscript */
@supports (overflow: -webkit-marquee) and (justify-content: inherit) {
vertical-align: sub;
font-size: smaller;
}
}
.lnum {
@supports not (font-variant-numeric: lining-nums) {
font-feature-settings: "lnum", "onum" 0;
}
font-variant-numeric: lining-nums;
}
.onum {
@supports not (font-variant-numeric: oldstyle-nums) {
font-feature-settings: "lnum" 0, "onum";
}
font-variant-numeric: oldstyle-nums;
}
.pnum {
@supports not (font-variant-numeric: proportional-nums) {
font-feature-settings: "pnum", "tnum" 0;
}
font-variant-numeric: proportional-nums;
}
.tnum {
@supports not (font-variant-numeric: tabular-nums) {
font-feature-settings: "pnum" 0, "tnum";
}
font-variant-numeric: tabular-nums;
}
/* High-level property cascade fallback, inherit doesn’t work */
.lnum.pnum {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "lnum", "onum" 0, "pnum", "tnum" 0;
}
-ms-font-feature-settings: "lnum", "onum" 0, "pnum", "tnum" 0;
}
.lnum.tnum {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "lnum", "onum" 0, "pnum" 0, "tnum";
}
-ms-font-feature-settings: "lnum", "onum" 0, "pnum" 0, "tnum";
}
.onum.pnum {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "lnum" 0, "onum", "pnum", "tnum" 0;
}
-ms-font-feature-settings: "lnum" 0, "onum", "pnum", "tnum" 0;
}
.onum.tnum {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "lnum" 0, "onum", "pnum" 0, "tnum";
}
-ms-font-feature-settings: "lnum" 0, "onum", "pnum" 0, "tnum";
}
.onum.zero {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "onum", "zero";
}
-ms-font-feature-settings: "onum", "zero";
}
.onum.tnum.zero {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "onum", "zero", "tnum";
}
-ms-font-feature-settings: "onum", "zero", "tnum";
}
.onum.pnum.zero {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "onum", "zero", "pnum";
}
-ms-font-feature-settings: "onum", "zero", "pnum";
}
.lnum.zero {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "lnum", "zero";
}
-ms-font-feature-settings: "lnum", "zero";
}
.lnum.tnum.zero {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "lnum", "zero", "tnum";
}
-ms-font-feature-settings: "lnum", "zero", "tnum";
}
.lnum.pnum.zero {
@supports not (font-feature-settings: "onum" inherit) {
font-feature-settings: "lnum", "zero", "pnum";
}
-ms-font-feature-settings: "lnum", "zero", "pnum";
}
.zero {
@supports not (font-variant-numeric: slashed-zero) {
font-feature-settings: "zero";
}
font-variant-numeric: slashed-zero;
}