@font-face - Directive CSS
Résumé des caractéristiques de la directive @font-face
Description de la directive @font-face.
@font-face est une directive du langage CSS. Son rôle est de fournir au navigateur Web toutes
les informations nécessaires au téléchargement des polices personnalisées utilisées sur la page.
Il est donc maintenant possible d'utiliser des polices spéciales ou fantaisie, tout en étant certain que la restitution sera fidèle.
Les formats de polices reconnus par tous les navigateurs sont :
TTF(TrueTypeFont).OTF(OpenTypeFont).WOFF(WebOpenFontFormat).
D'autres formats de polices sont également reconnus, mais par certains navigateurs seulement :
WOFF2(WebOpenFontFormat version 2).SVG(ScalableVectorGraphics).EOT(EmbeddedOpenType).
Voici un exemple de syntaxe :
@font-face {
font-family: 'nom de la police';
src: url('chemin/fichier.ttf');
}
Cette police peut ensuite être utilisée comme n'importe quelle police standard :
font-family:'nom de la police';
Il est possible de définir les attributs de base de la police fournie. Attention ! On ne modifie pas la police mais on déclare que, dans le fichier fourni, les caractères ont tel ou tel attribut. Par exemple on déclare que le fichier correspond à une police en caractères gras. Dans ce cas, il est nécessaire de disposer de plusieurs fichiers pour une même police : la version en caractères standard, la version en caractères gras, etc.
Exemple :
@font-face {
font-family:'Ma Police';
src:url('chemin/police-regular.ttf');
}
@font-face {
font-family:'Ma Police';
src:url('chemin/police-bold.ttf');
font-weight:bold;
}
@font-face {
font-family:'Ma Police';
src:url('chemin/police-italic.ttf');
font-style:italic;
}
Syntaxes de la directive @font-face.
Voici la syntaxe complète de @font-face. Les syntaxes détaillées sont commentées dans la suite.
Les descripteurs font-family et src sont obligatoires. Les autres sont optionnels mais nécessaires dans de nombreux cas.
@font-face {
font-family: 'Ma Police';
src: url('chemin/police.ttf') format('truetype');
font-size: 12px;
font-stretch: normal;
font-style: normal;
font-variant: normal;
font-weight: normal;
font-feature-settings: normal;
font-variation-settings: normal;
size-adjust: 75%;
ascent-override: normal;
descent-override: normal;
line-gap-override: normal;
superscript-position-override: normal;
subscript-position-override: normal;
superscript-size-override: normal;
subscript-size-override: normal;
font-display: swap;
unicode-range: U+00-FF;
}
Syntaxes du descripteur font-family.
- @font-face { ... font-family: 'Police Démo'; ... }
font-familyest obligatoire dans toute directive@font-face. La syntaxe est très simple et ne propose pas de variantes.
font-familydéclare le nom qui sera donné à cette police téléchargée. Celui qui sera utilisé plus tard avec la propriété du même nom (font-family). Il n'est pas nécessaire que ce nom soit le vrai nom de la police (celui qui est défini dans le fichier de la police). Si ce nom entre en conflit avec celui d'une police existante sur l'ordinateur, la police existante est remplacée par cette nouvelle police. Ce fonctionnement garanti que la police affiché sera toujours celle qui est prévue, même si, sur certaines machines, une autre police du même nom est installée.Lorsque plusieurs variantes stylistiques existent dans des fichiers séparés pour une même police, il est nécessaire de charger tous ou plusieurs de ces fichiers. Il faut autant de directives
@font-face, qui auront toutes le même nom déclaré pourfont-family.
Syntaxes pour le descripteur src.
src
src est obligatoire dans chaque déclaration @font-face. Description des paramètres :
urlest un chemin vers un fichier de police.formatest un format de police, commetruetype,woff, etc.techest une technologie, commeincremental-range,color-COLRv1, etc.
Plusieurs technologies peuvent être spécifiées, séparées par des virgules.localest le nom d'une police locale. Dans ce cas il n'y a pas téléchargement de fichier.
- @font-face { ... src: url(...); ... }
srcindique le chemin et le nom du fichier de police à utiliser. Le chemin peut être absolu ou relatif.Dans le cas d'un chemin absolu, il faut savoir que le fichier de police doit être situé sur le même domaine que la page web qui l'utilise. En effet les restrictions d'origine s'appliquent également aux polices de caractères (SOP). Bien sûr un serveur peut contourner cette restriction en le déclaration dans les en-tête http. C'est ce que fait le serveur
Google Fonts, ce qui dispense d'héberger les fichiers de police sur son propre serveur.Si le chemin est indiqué en relatif, ce sera par rapport à l'emplacement du fichier où se trouve la déclaration
@font-face. - @font-face { ... src: url(...) format('truetype'); ... }
L'indication du format est optionnelle. S'il est précisé, le format peut être l'une des valeurs suivantes, entre apostrophes ou guillemets :
collection: fichier contenant plusieurs polices.truetype: polices TTF.opentype: polices TTF ou OTF.woff: polices WOFF.woff2: polices WOFF.svg: polices SVG. ✗embedded-opentype: polices EOT.
- @font-face { ... src: url(...) tech(t1, t2...); ... }
Cette syntaxe permet de spécifier une ou plusieurs fonctionnalités techniques associées à la police. Si plusieurs sont spécifiées entre les parenthèses de la fonction
tech, elles seront séparées par des virgules.variationspalettesincremental-patchincremental-rangeincremental-autofeatures-opentypefeatures-aatfeatures-graphitecolor-COLRv0color-COLRv1color-SVGcolor-sbixcolor-CBDT
- @font-face { ... src: url(...) format(...), url(...), local('police'); ... }
Dans cet exemple plusieurs sources ont été définies pour le téléchargement du fichier de police. Les groupes (url format ) sont séparés par des virgules. L'indication du format est optionnelle. Le navigateur traitent les sources dans l'ordre où elles sont écrites, jusqu'à ce que l'un des fichiers soit disponible et correct.
La fonction
local()introduit la possibilité d'utiliser une police locale, déjà existante sur la machine de l'utilisateur. Les polices génériques (serif,monospace, etc.) ne sont pas admises aveclocal().
Syntaxes pour le descripteur font-size.
font-size
length1etlength2sont deux valeurs numériques suivies d'une des unités de dimension des caractères, la plupart du temps une unité plus spécifique à la taille des caractères, mais toutes les unités de dimension sont acceptées.
- @font-face { ... font-size: auto; ... }
La police déclarée par cette directive
@font-facepeut être utilisée pout toutes les tailles de caractères. - @font-face { ... font-size: 12px; ... }
La police déclarée par cette directive
@font-facene peut être utilisée que pour la taille spécifiée. - @font-face { ... font-size: 12px 18px; ... }
La police déclarée par cette directive
@font-facepeut être utilisée pour toutes les tailles de caractères comprises entre ces deux valeurs.
Syntaxes pour le descripteur size-adjust.
- @font-face { ... size-adjust: 75%; ... }
Le pourcentage indiqué est une valeur positive.
Ce descripteur permet d'homogénéiser les caractéristiques des polices : le pourcentage indiqué est appliqué à toutes les dimensions des caractères, sauf la taille proprement dite. Les largeurs de caractères, l'avance, etc. sont donc modifiées, ainsi que les unités qui en découlent :
ex,ch, etc. Par contre, les unités liées directement de la taille des caractères ne sont pas changées :em,rem, etc.
Syntaxes pour les attributs stylistiques.
Tous ces descripteurs ont une syntaxe comparable
- @font-face { ... font-width: normal; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; ... }
Ces descripteurs stylistiques décrivent la police. Ils ne modifient en rien les caractères comme le feraient les propriétés du même nom, mais déclarent simplement que, dans ce fichier, les caractères ont telle ou telle caractéristique (par exemple ils sont en gras, ou en italique).
Les valeurs possibles sont à peu près les mêmes que celles des propriétés du même nom.
font-widthetfont-stretchsont synonymes. Les valeurs possibles sontnormal,expanded,condensed, etc. Voir la propriétéfont-stretch, qui gère l'étirement ou la compression des caractères.- Pour
font-style, les valeurs possibles sontnormal,italic,oblique, etc. Voir la propriétéfont-style, qui gère l'inclinaison des caractères. - Pour
font-variant, de nombreuses valeurs sont possibles :normal,small-caps, etc. Reportez-vous à la propriétéfont-variant, qui gère la casse des caractères. - Pour
font-weight, les valeurs correspondent aux épaisseurs de graisse :normal,bold, de100à900. Les valeurs relativeslighteretboldern'ont pas de sens ici avec le descripteur. Reportez-vous à la propriétéfont-weight, qui gère la graisse des caractères.
Lorsque les valeurs sont numériques, deux valeurs peuvent être indiquées. Elles correspondent alors à un minimum et un maximum.
Par exemple,font-weight:300 500;signifie que ce fichier de police peut générer des caractères dans une graisse allant de300à500.
Syntaxes pour font-display.
font-display décrit comment les navigateurs doivent gérer le temps de chargement de la police et/ou la non disponibilité de celle-ci.
Faut-il afficher le texte dans une police de remplacement ? Au bout de combien de temps ? Etc.
Reportes-vous à cette page pour une description détaillée de font-display.
Syntaxes pour font-feature-settings
Reportez-vous à la propriété font-feature-settings pour connaître les valeurs possibles pour ce descripteur.
Syntaxes pour font-variation-settings
Reportez-vous à la propriété font-variation-settings pour connaître les valeurs possibles pour ce descripteur.
Syntaxes pour ascent-override, descent-override et line-gap-override.
- @font-face { ... ascent-override:normal; descent-override:normal; line-gap-override:normal; ... }
Ces trois descripteurs définissent respectivement la hauteur des caractères au dessus de la ligne de base, la hauteur de ces caractères en dessous de la ligne de base, et l'interligne de la police de caractères. La valeur spécifiée peut être
normal, ou un pourcentage.
Dans le cas d'une écriture suivant l'axe vertical, un deuxième pourcentage peut être indiqué.
Syntaxes pour la gestion des indices et exposants.
- @font-face { ... superscript-position-override:normal; subscript-position-override:normal; superscript-size-override:normal; subscript-size-override:normal; ... }
Ces quatre descripteurs définissent la position et la taille des exposants et des indices. Les valeurs acceptées sont
normal,from-font, ou bien un pourcentage.
Un deuxième pourcentage peut être indiqué, il sera utilisé pour les textes en écriture verticale.
Syntaxes pour unicode-range
Le descripteur unicode-range définit la plage des codes UTF inclus dans le fichier de police. Le jeu de caractères Unicode est très vaste
(plus de 65000 caractères) et la plupart des polices ne proposent pas tous les caractères. unicode-range évite les chargements de fichier inutiles :
le navigateur est censé vérifier que le caractère dont il a besoin existe bien dans le fichier de la police.
Certains fichiers de police sont d'ailleurs segmentés : un fichier pour les caractères latins, un autre pour les symboles mathématiques, un autre pour les caractères
grecs, etc. Si unicode-range est correctement renseigné, le navigateur peut décider quel fichier lui est nécessaire et ne télécharger que celui-ci.
- @font-face { ... unicode-range: U+0000-00FF; ... }
La lettre
Usuivie de+et de deux nombres hexadécimaux séparés par un tiret. Cette notation indique que la police propose tous les caractères dont le code hexadécimal est compris entre0000et00FF.Les nombres hexadécimaux ne doivent pas comporter plus de six digits.
- unicode-range: U+00??;
Le caractère
?replace un digit hexadécimal. Cette notation est donc équivalente à la précédente et désigne une plage de codes entre0000et00FF. - unicode-range: U+0000-00FF, U+0130-0140;
Plusieurs plages de caractères peuvent être énumérées, séparées par des virgules.
Exemples d'utilisation de la directive @font-face.
(1) Police Kleymissky par Gluk.
Compatibilité des navigateurs avec la directive @font-face.
La directive @font-face en elle même est bien reconnue par tous les navigateurs actuels.
Cependant le support des polices SVG laisse encore à désirer.
@font-face qui permet de télécharger des polices de caractères.font-size-adjust pour la directive @font-face.woff2 et son téléchargement avec la directive @font-face.woff2 et son téléchargement avec la directive @font-face.SVG et son téléchargement avec la directive @font-face.@font-facesize-adjustWOFF
WOFF2
SVG
Navigateurs sur ordinateurs :
Navigateurs sur mobiles :
Navigateurs obsolètes ou marginaux :

Internet Explorer

KaiOS Browser

Opéra Mobile

Chrome

Edge

Opéra

Safari

Safari sur IOS

Androïd Brower

Chrome pour Androïd

Firefox pour Androïd

Samsung Internet

Firefox

Baidu Browser

QQ Browser

UC Browser pour Androïd

Opéra mini
Évolution de la directive @font-face.
-
Module CSS - Polices de caractères - Niveau 3
Première définition de la descriptive@font-face.21 Juillet 1997Document de travail.03 Octobre 2013Candidat à la recommandation.14 Août 2018Proposé à la recommandation.20 Septembre 2018Recommandation. -
Module CSS - Polices de caractères - Niveau 4
Introduction du descripteurfont-displaypour contrôler la restitution pendant le temps de téléchargement des polices.11 Juillet 2017Document de travail. -
Module CSS - Polices de caractères - Niveau 5
Pas de modification concernant cette directive.29 Juin 2021Document de travail.
Voir aussi, au sujet des polices de caractères.
La directive @font-face est décrite dans la spécification "Module CSS - Polices de caractères" (CSS Fonts Module).
Ces autres définitions sont également présentées dans ce même module.
Propriétés :
em, ex, etc.Fonctions :
Directives :
Descripteurs :
@font-face. Définit la hauteur des caractères au dessus de la ligne de base.@font-face. Définit la hauteur des caractères au dessous de la ligne de base.@font-face. Détermine le comportement du navigateur face aux polices de caractères longues à charger.@font-face. Définit l'interligne de la police.@font-face. Définit la plage des codes de caractères à télécharger dans une police.


