Texte✨ Premium

Hover Weight

Transition CSS pure de light à black au survol — poids, espacement et couleur s'animent simultanément, sans une ligne de JavaScript.

CSSHoverWeight

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

Menu principal — Liens de navigation au poids variable — Hover Weight exemple 1

① Menu principal — Liens de navigation au poids variable

QuandDans une navigation primaire (sidebar, header, menu mobile) où les labels sont des mots courts — Accueil, Services, À propos, Contact.
PourquoiLe changement de poids remplace l'habituel soulignement ou changement de couleur par quelque chose de plus expressif : le mot « prend de la place » au survol, rendant l'item actif perceptible même sur un fond très sombre.
RéglagesSurcharger sur les items nav : font-weight 300 → 700 (éviter 900 pour les labels courts — trop compact), letter-spacing 1.5px → 0px, font-size 0.85rem, transition .2s pour un retour vif.
Affiche typographique — Mots-clés de marque en grand format — Hover Weight exemple 2

② Affiche typographique — Mots-clés de marque en grand format

QuandUn écran de présentation de marque, un portfolio ou une page d'accueil centrée sur la typographie, où chaque mot est un concept (DESIGN · MOTION · CRAFT).
PourquoiÀ grande taille (3rem+), l'axe de poids variable est spectaculaire : le passage Light → Black crée un contraste fort qui capte l'œil. Le resserrement du letter-spacing amplifie l'impact visuel.
Réglagesfont-size 3.5rem, font-weight 100 → 900, letter-spacing 10px → -3px, transition .35s, couleur neutre → couleur signature de marque.
Liste de compétences — Tags de services dans un portfolio — Hover Weight exemple 3

③ Liste de compétences — Tags de services dans un portfolio

QuandUne section « Expertises » ou « Services » affichant des domaines (Branding · UX Design · Motion · Développement) que l'utilisateur explore au survol.
PourquoiL'effet discret (survol seul, pas de clic requis) permet une exploration passive. La mise en gras signale implicitement que l'item est sélectionnable ou détaillé, sans alourdir l'interface.
Réglagesfont-size 1.25rem, font-weight 300 → 800, letter-spacing 2px → 0px, gap 8px, color #fff → #a78bfa (violet plus doux pour du texte de corps).

Comment ça marche

L'effet repose entièrement sur la pseudo-classe :hover et la propriété transition CSS. Aucun JavaScript n'est nécessaire : chaque .vf-hover-word déclare transition: font-weight .3s, letter-spacing .3s, color .3s, ce qui permet au navigateur d'interpoler les trois propriétés simultanément dès que le pointeur entre sur l'élément.

La transition de poids de 300 (Light) à 900 (Black) exploite l'axe wght de la police variable Inter. Avec une police statique, font-weight sauterait au seuil le plus proche sans animation ; avec Inter (variable font), le navigateur interpole en continu le long de l'axe de poids pour un rendu fluide.

L'espacement des lettres bascule simultanément de 4px (expansif) à -1px (serré). Ce mouvement compense optiquement le gain de largeur visuelle qu'engendre un poids fort en police variable — resserrer l'espacement rééquilibre l'empreinte perçue du mot. La couleur passe de blanc #fff à violet #8b5cf6, signalant l'état actif sans recourir à un soulignement ou un surlignage.

Les trois propriétés s'animent à la même durée de .3s, créant un mouvement visuel unifié. La structure est réduite à l'essentiel : un conteneur .vf-hover-scene en colonne flex centrée et des <span class="vf-hover-word"> pour chaque mot interactif.

Accessibilité

  • prefers-reduced-motion : absent du code — aucune règle @media (prefers-reduced-motion) n'est présente ; les transitions s'exécutent toujours, y compris pour les utilisateurs ayant activé la réduction de mouvement dans leur OS. À ajouter si l'effet est utilisé sur une grande surface ou de nombreux mots.
  • L'effet repose sur :hover uniquement — aucun état :focus ou :focus-visible n'est stylé dans le code. Les utilisateurs naviguant au clavier ne verront pas le changement de poids. Si l'effet est informatif (et non purement décoratif), ajouter :focus-visible à la règle de survol.
  • Contraste couleur : blanc #fff sur fond sombre #0a0a0f → ratio ≈ 19,8:1 (WCAG AAA). Violet #8b5cf6 sur #0a0a0f → ratio ≈ 4,7:1 (WCAG AA). Les deux états passent le niveau AA.
  • Aucun attribut ARIA n'est présent dans le code de base. Si les mots constituent une navigation ou un menu, les envelopper dans un <nav aria-label="…"> ou une liste <ul> sémantique.
  • L'effet est purement visuel et décoratif dans sa forme de base — pas de modal, pas de focus trap, pas de gestion de focus JavaScript.

Compatibilité navigateur

Nécessite les transitions CSS (universelles) et une police variable pour l'animation fluide du poids. Inter est disponible via Google Fonts ou en local.

Chrome 86+✓ Complet
Firefox 80+✓ Complet
Safari 14+✓ Complet
Edge 86+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Sans police variable chargée, la transition de <code>font-weight</code> saute aux seuils disponibles (300 → 400 → 700 → 900) au lieu d'animer en continu. L'effet reste fonctionnel — le poids change au survol, seule la fluidité d'interpolation est absente. Sans support des transitions CSS (IE 9 et antérieurs), le changement de style est instantané mais toujours visible.

Le code

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

index.html — structure
<div class="vf-hover-scene">
  <span class="vf-hover-word">MOT 1</span>
  <span class="vf-hover-word">MOT 2</span>
  <span class="vf-hover-word">MOT 3</span>
  <!-- Facultatif : -->
  <span class="vf-hover-label">Survolez les mots</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) 300 Poids de départ. 100–300 = très léger, produit un contraste fort avec 900. 400 = régulier, contraste modéré.
font-weight (état :hover) 900 Poids cible au survol. 700 = Bold classique, 900 = Black maximal. Visible uniquement avec une police variable chargée.
letter-spacing (état normal) 4px Espacement initial. Plus il est large, plus le resserrement au survol crée un effet de « compression » dramatique.
letter-spacing (état :hover) -1px Espacement au survol. -1px à -3px serre visuellement le mot lourd ; rester au-dessus de -3px pour la lisibilité.
color (état :hover) #8b5cf6 Couleur du mot au survol. Remplacer par votre couleur accent pour intégrer l'effet à votre design system.
transition .3s Durée des 3 transitions simultanées (poids, espacement, couleur). 0,2s = sec et rapide, 0,5s = lent et fluide.
font-size (sur .vf-hover-word) 2rem Taille de base. Plus la taille est grande, plus l'animation de poids est perceptible. Monter à 4–5rem pour une affiche.
gap (sur .vf-hover-scene) 12px Espacement vertical entre les mots. Augmenter pour aérer, réduire pour une liste serrée.

FAQ

Fluide avec une police variable. Le navigateur interpole en continu le long de l'axe wght de la fonte. Avec une police statique (Google Fonts en mode legacy ou une fonte personnalisée non-variable), la transition saute aux seuils disponibles (400, 700…). Pour garantir la fluidité, charger Inter en version variable : @import url('https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap').
Ajouter la classe vf-hover-word à chaque <a>, <span> ou <li> cible. L'effet ne touche que les éléments portant cette classe. Pour les items de nav plus petits, surcharger font-size et les valeurs de letter-spacing / font-weight via un sélecteur plus spécifique (nav .vf-hover-word).
Oui, si le texte est dans un flux inline continu — le mot élargi décale les mots voisins. En colonne flex centrée (comme dans la démo), chaque mot est sur sa propre ligne et il n'y a aucun shift. Appliquer l'effet à des mots isolés (titres, labels) ou dans un display:flex; flex-direction:column pour éviter le problème.