Rhythm & flow
Learn what’s possible
CSS has powerful typographic features
But not everything translates
Tell me, O muse, of that ingenious hero who travelled far and wide after he had sacked the famous town of Troy. Many cities did he visit, and many were the nations with whose manners and customs he was acquainted; moreover he suffered much by sea while trying to save his own life and bring his men safely home; but do what he might he could not save his men, for they perished through their own sheer folly in eating the cattle of the Sun-god Hyperion; so the god prevented them from ever reaching home. Tell me, too, about all these things, O daughter of Jove, from whatsoever source you may know them.
h2 {
font-size: 1.75rem;
}
p {
font-size: 1rem;
}
@media (min-width: 55em) {
h2 {
font-size: 2.25rem;
}
p {
font-size: 1.25rem;
}
}
p {
font-family: Jost, Helvetica, sans-serif;
font-size: 1rem;
line-height: 1.5;
}
.wf-inactive p {
font-family: Jost, Helvetica, sans-serif;
font-size: 0.975rem;
line-height: 1.495;
}
Tell me, O muse, of that ingenious hero who travelled far and wide after he had sacked the famous town of Troy. Many cities did he visit, and many were the nations with whose manners and customs he was acquainted; moreover he suffered much by sea while trying to save his own life and bring his men safely home; but do what he might he could not save his men, for they perished through their own sheer folly in eating the cattle of the Sun-god Hyperion; so the god prevented them from ever reaching home. Tell me, too, about all these things, O daughter of Jove, from whatsoever source you may know them.
.this-heading {
--heading-color: #212171;
}
.this-heading.changed {
--heading-color: #914141;
}
.this-heading {
--heading-size: 5;
font-size: calc( var(--heading-size) * 1vw );
}
.this-heading {
--heading-size: 5;
font-size: calc( var(--heading-size) * 1vw );
}
.this-heading.changed {
--heading-size: 6;
}
.this-heading {
--heading-weight: 700;
--heading-width: 100;
font-weight: var(--heading-weight);
font-stretch: calc( var(--heading-width) * 1% );
}
.this-heading.thinner {
--heading-weight: 150;
--heading-width: 80;
}
Tell me, O muse, of that ingenious hero who travelled far and wide after he had sacked the famous town of Troy. Many cities did he visit, and many were the nations with whose manners and customs he was acquainted; moreover he suffered much by sea while trying to save his own life and bring his men safely home; but do what he might he could not save his men, for they perished through their own sheer folly in eating the cattle of the Sun-god Hyperion; so the god prevented them from ever reaching home. Tell me, too, about all these things, O daughter of Jove, from whatsoever source you may know them.
Tell me, O muse, of that ingenious hero who travelled far and wide after he had sacked the famous town of Troy.
Many cities did he visit, and many were the nations with whose manners and customs he was acquainted
Moreover he suffered much by sea while trying to save his own life and bring his men safely home
.small-card {
--h3-size: 3;
--p-size: 1.6;
}
.sidebar .small-card {
--h3-size: 2.5;
--p-size: 1.5;
}
You might be asking
.width.super-floof {
font-stretch: 140%;
}
.width.petite-puffle {
font-stretch: 50%;
}
.weight.chonky-boi {
font-weight: 900;
}
.weight.skinny-minnie {
font-weight: 500;
}
.x-height.bubba-bear {
font-variation-settings: 'YTLC' 600;
}
.x-height.lil-bit {
font-variation-settings: 'YTLC' 450;
}
.slant.naptime {
font-style: oblique 12deg;
}
calc( [size-min]em + ( [size-max] - [size-min] ) * ((100vw - [start]em ) / ( [stop] - [start] )));
“Please scale from 2.25em on small screens up to 5em on largest ones, starting at viewport width of 25em and stopping at 75em or larger”
:root {
/* default light mode colors */
--color-bg: #f9f9fd;
--color-text: #414141;
/* initial variable font values */
--text-GRAD: -0.1;
}
@media (prefers-color-scheme: dark) {
--color-text: #f9f9fd;
--color-bg: #414141;
p {
--text-GRAD: 0.25;
letter-spacing: 0.015em;
}
}
:root {
/* default light mode colors */
--color-bg: #f9f9fd;
--color-text: #414141;
/* initial variable font values */
--text-GRAD: -0.1;
}
.contrast {
/* higher contrast colors */
--color-bg: #fafafe;
--color-text: #212121;
}
.contrast p {
--text-GRAD: 0.75;
letter-spacing: 0.005em;
}
.bigtext {
--p-size-min: 1.25;
--p-size-mid: 1.375;
--p-size-max: 1.5;
}
.spacing {
--p-lh-min: 2.2;
--p-lh-mid: 2.4;
--p-lh-max: 2.6;
}
.spacing p {
word-spacing: 0.75em;
}
:root {
/* font stack */
--font-stack: "Roboto Delta", sans-serif;
--font-stack-serif: "Gimlet VF", serif;
}
.theme-alt {
font-family: var(--font-stack-serif);
}
.theme-alt p {
--text-wght: 400;
}
@media screen and (min-width: 25em) {
.theme-alt p {
--text-wght: 375;
}
@media screen and (min-width: 45em) {
.theme-alt p {
--text-wght: 350;
}
}
@media screen and (min-width: 55em) {
.theme-alt p {
--text-wght: 330;
}
}
CSS has powerful typographic features
But not everything translates
Small details increase versatility
Learn what features are available
Use for contrast and UI animation
Reader decides what works for them
Learn the right way, and make it flexible & resilient
Everyone can contribute; it can't rely upon the efforts of a few
Clients are interested when they learn
Designers & developers need to know about them
https://www.monotype.com/fonts/variable-fonts
https://djr.com (contact for info)
https://github.com/indestructible-type/Jost (some assembly required)
https://okaytype.com/typefaces/okay
https://recursive.design
https://github.com/TypeNetwork/Roboto-Delta (use v2)
https://fontofthemonth.club
https://fontofthemonth.club
https://github.com/adobe-fonts/source-serif-pro
https://www.myfonts.com/fonts/linotype/univers-next-variable-set
https://www.marksimonson.com (tell him I sent ya!)
https://github.com/TypeNetwork/Amstelvar
https://github.com/IBM/plex/tree/master/IBM-Plex-Sans-Variable
https://www.type-together.com/portada-font
https://tinyurl.com/css2-announce