Fontes variables
Les polices variables (variable fonts) sont une évolution de la spécification OpenType. Elles permettent d’inclure dans un seul fichier un ensemble d’axes de variation qui permettent de contrôler certaines propriétés du dessin.
Auparavant, l'utilisation de plusieurs styles requerait le chargement de plusieurs fichiers - un pour chaque “variation” : graisse, chasse ou italique. Ces différentes variations d’un dessin de caractère peuvent désormais être contenues dans un seul fichier. Le langage CSS permet de contrôler toutes les variantes contenues dans un seul fichier de police.
Lire l’introduction de Jason Pamental (2019) : An Introduction to Variable Fonts ou parcourir variablefonts.io. Découvrir et jouer avec des fontes variables sur v-fonts.com, axis-praxis ou variable emojis.
Sur variablefonts.dev, Mandy Michael a réuni une collection d’expérimentations et d’exemples autour des fontes variables, notament sur une dimension non abordée ici, les color fonts.
Où trouver des fontes variables
Les outils techniques qui ont permis de rendre variables les fontes ont largement été intégrées aux processus de design des dessinateur⋅ices de caractères (notions de masters, de designspace). Aussi, nombre de fontes sont aujourd’hui produites et diffusées sur ce mode ; voir la liste de fonderies. Google liste les fontes variables et open-source qu’il met à disposition ici.
Qu’y a-t-il dans une fonte variable ?
Quels sont les axes, leurs valeurs ? Wakamaifondue vous apportera toutes les réponses ! (en plus d’apporter une réponse au problème d’héritage…)
Utilisation
Les fontes variables doivent être déclarées dans un fichier CSS grâce à la déclaration @font-face
décrite dans la page webfonts.
Intégration & usage
On peut principalement intégrer des fontes variables à une feuille de style CSS via les formats de fichier ttf
et woff2
.
TTF :(
@font-face {
font-family: "Mutator";
src: url("MutatorSans.ttf") format("truetype-variations");
}
WOFF2 ;)
@font-face {
font-family: 'Commissioner';
src: url('fonts/Commissioner.woff2') format('woff2 supports variations'),
url('fonts/Commissioner.woff2') format('woff2-variations');
font-weight: 100 900;
}
Axes normalisés
Certains axes (stretch
, la chasse, weight
, la graisse ; mais aussi slant, ital et optical-size) sont accessibles via des déclarations dédiées :
@font-face {
font-family: 'Plex Sans';
src: url('IBMPlexSansVar-Roman.woff2') format('woff2-variations');
font-stretch: 85% 100%; /* les valeurs de font-stretch pour Plex Sans varient entre 85% et 100% */
font-weight: 100 700; /* les valeurs de font-weight pour Plex Sans varient entre 100 et 700 */
font-style: normal;
}
<span style="font-weight:135; font-stretch:85%">135 × 85 – </span>
<span style="font-weight:135; font-stretch:100%">135 – </span>
<span style="font-weight:376">376 – </span>
<span style="font-weight:648">648</span>
135 × 85 – 135 – 376 – 648
Axes personnalisés
D’autres axes peuvent être personnalisés par les dessinateurs de caractères. On peut personnaliser leur valeur grâce à la déclaration
font-variation-settings
. NB: on peut également utiliser font-variation-settings
pour les axes prédéfinis, en utilisant leurs “codes” : wght
, wdth
, ital
, slnt
et opsz
.
.cheeesy {
font-family: "Cheee Variable";
font-variation-settings: "temp" 700, "yest" 352, "grvt" 0;
}
Animation
Comme toutes les propriétés CSS exprimées numériquement, on peut animer les variations sur les axes.
p { animation: mutant 5s cubic-bezier(0.25, 1, 0.5, 1) infinite alternate; }
@keyframes mutant {
0% { font-variation-settings: "wdth" 0, "wght" 0 }
25% { font-variation-settings: "wdth" 1000, "wght" 0 }
50% { font-variation-settings: "wdth" 1000, "wght" 1000 }
75% { font-variation-settings: "wdth" 0, "wght" 1000 }
100% { font-variation-settings: "wdth" 0, "wght" 0 }
}
En décomposant un mot lettre par lettre, on peut l’animer ainsi :
.char {
/* La variable CSS --delay utilise la variable CSS --index, définie dans le HTML */
--delay: calc((var(--index) + 1) * 400ms);
animation: caution 4000ms infinite both;
animation-delay: var(--delay);
}
@keyframes caution {
0% { font-variation-settings: 'wght' 100, 'wdth' 85; }
60% { font-variation-settings: 'wght' 700, 'wdth' 100; }
100% { font-variation-settings: 'wght' 100, 'wdth' 85; }
}
<div>
<span class="char" style="--index:0;">C</span>
<span class="char" style="--index:1;">A</span>
<span class="char" style="--index:2;">U</span>
<span class="char" style="--index:3;">T</span>
<span class="char" style="--index:4;">I</span>
<span class="char" style="--index:5;">O</span>
<span class="char" style="--index:6;">N</span>
</div>
Interaction
On peut également rendre la variation dépendante d’une interaction de l’utilisateur, ici la position de la souris vis à vis de la fenêtre.
const yvain = document.querySelector('#yvain');
let width = window.innerWidth;
let height = window.innerHeight;
window.addEventListener('mousemove', function(e){
const wdth = Math.floor(e.pageX * 1000 / width);
const wght = Math.floor(e.pageY * 1000 / height);
// variation style
const variation = ' "wdth" ' + wdth + ', "wght" ' + wght ;
yvain.style.fontVariationSettings = variation;
})
—
Polices utilisées sur cette page : IBM Plex de Mike Abbink, Mutator Sans d’Erik van Blokland et Yvain de Léo Gaullier.