Animación de subrayado de enlace CSS puro

Una de las ventajas de crear mi sitio web personal desde cero en lugar de usar un tema listo es que empiezo con la configuración predeterminada del navegador y gradualmente agrego mis propios colores. Intento evitar que el sitio se hinche, pero la personalización es algo importante. Necesitamos encontrar un compromiso entre las páginas espartanas de Hacker News y Craigslist por un lado y la congestión del viejo MySpace por el otro.

De alguna manera me encontré con un sitio web con subrayados animados y elegantes para enlaces, y quería darme cuenta del efecto. Pero es importante para mí usar CSS puro, porque en aras de cosas tan frívolas, no vale la pena agregar JavaScript, lo que puede causar problemas con el rendimiento o la usabilidad de la interfaz (ver secuestro de la barra de desplazamiento ).

Así es como se ve el efecto ahora:


Implementación


Dibujar líneas debajo del texto es un tema sorprendentemente complejo . Todo depende de qué tan lejos esté listo para desviarse del estándar y qué detalles le preocupan (por ejemplo, pasar por elementos remotos de letras ).

Exploré dos enfoques . Ambos, en esencia, eliminan la decoración de texto estándar y agregan un borde simulado usando pseudoelementos . Este borde es animado por transiciones CSS . Desafortunadamente, estas soluciones tienen un inconveniente: no funcionan normalmente si el enlace cubre más de una línea. El subrayado aparece solo en la primera línea.


Al final, encontré el CodePen de Shaw , desprovisto de este defecto, y cambié el efecto a mi gusto.


Aquí está el código relevante. Puedes jugar con él en 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; } 

Consideremos esta solución con más detalle.

Primero, apague la text-decoration estándar.

Tendremos que usar una imagen de fondo porque puede cubrir varias líneas. Aunque puede tomar una imagen real, es solo una línea, por lo que utilizamos un degradado lineal que generará una imagen para nosotros. Por lo general, se usa para crear un degradado entre dos colores diferentes, pero necesitamos que el subrayado sea del mismo color que el enlace, por lo que usamos currentColor tanto para el comienzo como para el final del degradado. currentColor le dice al navegador que use el color del elemento de la propiedad color .

Use la posición de fondo para colocar la imagen en la esquina inferior izquierda. Un valor de 0% corresponde a una posición horizontal, y 100% corresponde a una posición vertical.

Desactive la repetición de fondo para evitar múltiples instancias de la imagen.

Usando el tamaño de fondo, especifique el ancho cero y la altura de dos píxeles. Ancho cero significa que el subrayado aparece solo al pasar el ratón; de lo contrario, la imagen no es visible.

Establezca la transición para que se ajuste al fondo, de modo que cualquier cambio de propiedad tome 0.3 segundos.

Cuando pasa el cursor sobre un enlace, cambiamos el ancho de la imagen en un 100% , creando un subrayado completo, y la transition proporciona animación.

Eso es todo! Estoy muy satisfecho con la brevedad del código. Si desea agregar algo similar a su sitio, siéntase libre de tomar esta implementación o ver algunos otros efectos de subrayado animados .

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


All Articles