Effet de soulignement

Résumé Support

Dans ce tutoriel je vous propose de découvrir comment réaliser un effet de soulignement animé en CSS.

Première approche : pseudo-élément

La première approche consiste à utiliser un pseudo élément et d'animer la propriété transform pour faire évoluer la valeur scaleX().

a { position: relative; } a::after { content: ''; transform-origin: 0 0; transform: scaleX(0); position: absolute; bottom: 0; left: 0; right: 0; height: .4em; background: #78ab4e; z-index: -1; opacity: 0.8; transition: transform .3s; } a:hover::after { transform: scaleX(1); }

Ce qui donne le rendu que l'on cherche à obtenir.

En revanche cela ne permet pas de gérer le cas d'un texte multiligne vu que le pseudo élément va se placer par rapport à la boîte composée par la dernière ligne :

Approche via un background

Une autre solution consiste à utiliser la propriété background via un dégradé linéaire pour ne créer qu'une bordure. Il suffit ensuite d'animer le background-size pour créer l'effet de soulignement progressif.

a { text-decoration: none; background: linear-gradient(to top, rgba(255, 0, 0, 0.5) 0%, rgba(255, 0, 0, 0.5) 10%, transparent 10.01%) no-repeat left bottom / 0 100%; transition: background-size .5s; } a:hover { background-size: 100% 100%; }