Texte✨ Premium

Variable Font Weight

Animation CSS pure qui fait glisser le grammage d'une police variable de 400 à 900 au survol — aucun script, un seul élément.

CSSHoverVariable Font

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Texte comprend 56 effets, dont 4 gratuits. Découvrir la catégorie →

3 exemples d'usage

Affiche typographique — Des mots qui prennent du volume — Variable Font Weight exemple 1

① Affiche typographique — Des mots qui prennent du volume

QuandSur une page portfolio, un studio de design ou une landing page artistique où la typographie est le premier élément visuel.
PourquoiÀ grande taille (5–8 rem), le glissement continu de 400 à 900 crée une profondeur perceptive sans aucune image — chaque mot survolé devient l'animation.
Réglagesfont-weight initial 200, cible 900, transition: font-weight .5s ease, font-size: 7rem, letter-spacing: -0.05em.
Navigation minimaliste — Liens qui s'affirment au survol — Variable Font Weight exemple 2

② Navigation minimaliste — Liens qui s'affirment au survol

QuandDans une barre de navigation épurée où l'état actif doit rester subtil — sans soulignement ni changement de couleur, uniquement par le grammage.
PourquoiLa variation de grammage remplace le soulignement ou la teinte tout en restant dans le même token typographique — l'effet est discret à 0,2 s, naturel en contexte UI.
Réglagesfont-weight initial 400, cible 700, transition: font-weight .2s, font-size: 1rem.
Chiffre clé en rapport — Un score qui s'intensifie — Variable Font Weight exemple 3

③ Chiffre clé en rapport — Un score qui s'intensifie

QuandSur une slide de présentation ou un tableau de bord où un indicateur fort (NPS, taux de conversion, croissance) doit s'imposer à la lecture — l'utilisateur survole pour en percevoir l'impact.
PourquoiLe glissement de 100 à 900 encode l'intensité de la valeur : un grand chiffre ultraléger qui devient ultra-gras au survol signifie l'impact sans couleur ni animation de compteur.
Réglagesfont-weight initial 100, cible 900, transition: font-weight .5s ease-in-out, font-size: 6rem.

Comment ça marche

L'effet repose entièrement sur CSS : la propriété font-weight de l'élément passe de 400 à 900 au survol grâce à une règle :hover, et la déclaration transition: font-weight .3s fait interpoler cette valeur en continu pendant 300 ms. L'interpolation n'est fluide que si la police chargée est une police variable supportant l'axe wght — Inter, spécifiée ici, couvre les valeurs 100 à 900 sans discontinuité.

Sur une police statique ou un système où Inter n'est pas disponible, le navigateur substitue sans-serif et la transition saute directement au poids le plus proche sans animation progressive. L'effet reste fonctionnel mais perd son glissement. Aucun JavaScript n'est chargé ni exécuté — le champ JS du code est une chaîne vide, l'effet est 100 % feuille de style.

Accessibilité

  • prefers-reduced-motion : absent du code. La transition s'exécute quel que soit le réglage OS — si l'accessibilité vous importe, ajoutez @media (prefers-reduced-motion: reduce) { .text-variable-weight { transition: none } }.
  • L'élément texte (<span>) est un nœud textuel pur, entièrement lu par les lecteurs d'écran — aucun attribut aria n'est nécessaire pour cet effet décoratif.
  • L'effet est uniquement déclenché par :hover ; aucun état :focus-visible n'est défini dans le code. Sur un lien ou un bouton interactif, pensez à ajouter un équivalent clavier.
  • Sur les appareils tactiles, :hover ne se déclenche pas au toucher simple — l'animation reste invisible sans périphérique pointeur.
  • Le contraste texte/fond dépend entièrement du contexte d'intégration — l'effet ne définit ni couleur de texte ni couleur de fond.

Compatibilité navigateur

L'interpolation fluide du grammage requiert une police variable avec l'axe wght et un navigateur supportant les transitions CSS sur font-weight.

Chrome 88+✓ Complet
Firefox 63+✓ Complet
Safari 14+✓ Complet
Edge 88+✓ Complet
Mobile iOS 14+✓ Hover absent
Android Chrome✓ Hover absent

Si Inter n'est pas disponible comme police variable, la transition saute au poids cible sans interpolation — aucune erreur JS, le texte reste lisible.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="demo-preview">
  <span class="demo-text text-variable-weight">Votre texte</span>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
font-weight (état normal) 400 Poids de départ au repos — utilisez 100–300 pour un contraste maximal avec la cible.
font-weight (:hover) 900 Poids cible au survol — toute valeur entière que la police variable supporte (100–900).
transition: font-weight .3s .3s ease Durée et easing de l'animation — .15s pour un pop vif, .6s ease-in-out pour un glissement cinématique.
font-family Inter, sans-serif Police utilisée — doit être une police variable avec l'axe wght (Inter, Roboto Flex, Manrope, Source Sans 3…).
font-size 2.5rem (hérité de .demo-text) Taille du texte — l'effet est d'autant plus lisible qu'il est grand.
letter-spacing -.02em (hérité de .demo-text) Interlettrage — à ajuster si le changement de grammage modifie le rythme optique du texte.

FAQ

Uniquement avec une police variable qui expose l'axe wght. Sur une police statique, le navigateur choisit la graisse la plus proche et la transition saute sans glissement. Inter chargé depuis Google Fonts (ou installé en police système) est variable et interpolera correctement.
Oui — changez les valeurs dans .text-variable-weight { font-weight: 400 } et .text-variable-weight:hover { font-weight: 900 }. Toute paire d'entiers est valide tant que la police les supporte. Exemple : 100 → 800 pour un effet dramatique, 400 → 600 pour une subtilité d'interface.
Enveloppez chaque mot dans son propre <span class="text-variable-weight">. Chaque span est autonome — l'état :hover est individuel et aucune initialisation JS n'est requise.