Animation de soulignement de lien CSS pur

L'un des avantages de créer mon site Web à partir de zéro au lieu d'utiliser un thème prêt à l'emploi est que je commence avec les paramètres de navigateur par défaut et que j'ajoute progressivement mes propres couleurs. J'essaie d'empêcher le site de gonfler, mais la personnalisation est une chose importante. Nous devons trouver un compromis entre les pages Spartan de Hacker News et Craigslist d'une part et la congestion de l' ancien MySpace d'autre part.

D'une manière ou d'une autre, je suis tombé sur un site Web avec des soulignements animés de fantaisie pour les liens, et je voulais réaliser l'effet. Mais il est important pour moi d'utiliser du CSS pur, car pour des choses aussi frivoles, cela ne vaut pas la peine d'ajouter JavaScript, ce qui peut causer des problèmes avec les performances ou la convivialité de l'interface (voir détournement de la barre de défilement ).

Voici à quoi ressemble l'effet maintenant:


Implémentation


Dessiner des lignes sous le texte est un sujet étonnamment complexe . Tout dépend de la distance à laquelle vous êtes prêt à s'écarter de la norme et des détails qui vous inquiètent (par exemple, en passant par des éléments de lettres distants ).

J'ai exploré deux approches . Les deux suppriment essentiellement la décoration de texte standard et ajoutent une bordure simulée à l'aide de pseudo-éléments . Cette bordure est ensuite animée par des transitions CSS . Malheureusement, ces solutions ont un inconvénient: elles ne fonctionnent pas normalement si le lien couvre plus d'une ligne. Le soulignement n'apparaît que sur la première ligne.


Au final, j'ai trouvé le CodePen de Shaw dépourvu de ce défaut et j'ai changé l'effet à mon goût.


Voici le code pertinent. Vous pouvez jouer avec lui sur repl.it.

a { text-decoration: none; background-image: linear-gradient(currentColor, currentColor); background-position: 0% 100%; background-repeat: no-repeat; background-size: 0% 2px; transition: background-size .3s; } a:hover { background-size: 100% 2px; } 

Examinons cette solution plus en détail.

Tout d'abord, désactivez la text-decoration standard.

Nous devrons utiliser une image de fond car elle peut couvrir plusieurs lignes. Bien que vous puissiez prendre une vraie photo, ce n’est qu’une ligne, nous utilisons donc un dégradé linéaire qui va générer une image pour nous. Habituellement, il est utilisé pour créer un dégradé entre deux couleurs différentes, mais nous avons besoin que le soulignement soit de la même couleur que le lien, nous utilisons donc currentColor pour le début et la fin du dégradé. currentColor indique au navigateur d'utiliser la couleur de l'élément de la propriété color .

Utilisez la position d' arrière-plan pour placer l'image dans le coin inférieur gauche. Une valeur de 0% correspond à une position horizontale et 100% correspond à une position verticale.

Désactivez la répétition en arrière-plan pour empêcher plusieurs instances de l'image.

À l'aide de la taille d'arrière-plan, spécifiez une largeur et une hauteur nulles de deux pixels. La largeur nulle signifie que le soulignement n'apparaît qu'en survol, sinon l'image n'est pas visible.

Définissez la transition pour l'adapter à l'arrière-plan, de sorte que tout changement de propriété prenne 0.3 seconde.

Lorsque vous survolez un lien, nous modifions la largeur de l'image de 100% , créant un soulignement complet et la transition fournit une animation.

C'est tout! Je suis très satisfait de la brièveté du code. Si vous souhaitez ajouter quelque chose de similaire à votre site, n'hésitez pas à prendre cette implémentation ou à voir d'autres effets de soulignement animés .

Source: https://habr.com/ru/post/fr434574/


All Articles