1. Web Design
  2. HTML/CSS
  3. HTML Templates

Exploración de los efectos creativos de desplazamiento de CSS para enlaces en línea

Scroll to top

Spanish (Español) translation by Xiomara Reynoso (you can also view the original English article)

En este tutorial estamos hablando de los efectos de desplazamiento de CSS. ¡Y no cualquier efecto de desplazamiento tampoco! Vamos a crear algunas alternativas mucho más interesantes a los efectos de enlace en línea estándar que todos hemos estado usando durante años.

Demostraciones de Creative Link Hover

He creado una demostración rápida para mostrar todos estos efectos de enlace; una serie de elementos de lista ordenados con CSS Grid, y en cada uno colocaré un enlace en línea que se puede diseñar. ¡Echa un vistazo a cada uno, siéntete libre de bifurcar la demostración y ve qué puedes hacer con ellos!

Please accept marketing cookies to load this content.

Efectos de desplazamiento de vínculo en línea CSS

¡Echa un vistazo al video o sigue leyendo para obtener más explicaciones!

Estilos globales

Para todas estas demostraciones, primero establecí algunos estilos y variables globales para los elementos a:

1
/* Variables */
2
:root {
3
  --link-1: #D65472;
4
  --link-2: #37C5F0;
5
  --link-3: gold;
6
  --text: #18272F;
7
  --counter: #30B67D;
8
}
9
10
/* Reset */
11
a {
12
	text-decoration: none;
13
	color: var(--text);
14
	font-weight: 700;
15
	vertical-align: top;
16
}
He agregado una identificación a cada enlace para poder dirigirme a todos ellos fácilmente.

Efecto de desplazamiento 1: Sombra de cuadro de fondo

Este efecto deslizará una sombra de cuadro de fondo a través del enlace en línea, cambiando el color del texto del enlace a medida que lo hace.

hover effect 1hover effect 1hover effect 1
  • Comenzamos agregando un poco de relleno alrededor del enlace, luego para evitar que ese relleno altera el flujo del texto, agregamos un margen negativo del mismo valor.
  • En lugar de usar la propiedad de background usamos box-shadow porque podemos hacer la transición.
1
#style-1 {
2
  padding: 0 0.25rem;
3
  margin: 0 -0.25rem;
4
  box-shadow: inset 0 0 0 0 var(--link-1);
5
  transition: color 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
6
  color: var(--link-1);
7
}
8
#style-1:hover {
9
  color: white;
10
  box-shadow: inset 100px 0 0 0 var(--link-1);
11
}

Efecto de desplazamiento 2: Subrayado animado

Nuestro segundo efecto añade un subrayado, pero lo anima desde la mitad del texto hacia afuera para un dinamismo extra.

hover effect 2hover effect 2hover effect 2
  • Lo primero que hay que hacer es darle al ancla una posición: relativa; porque usaremos pseudo elementos que queremos posicionar en él.
  • Usamos el pseudo elemento ::antes que colocamos arriba: 100%; para que se coloque a lo largo de la parte inferior del enlace.
  • Utilizamos transform: scaleX(); y la transición para animar el pseudo elemento.
  • También hacemos la transición del color del enlace, para que coincida con la animación de subrayado.
1
#style-2 {
2
  position: relative;
3
  transition: color 0.3s ease-in-out;
4
}
5
#style-2::before {
6
  content: "";
7
  position: absolute;
8
  top: 100%;
9
  width: 100%;
10
  height: 3px;
11
  background-color: var(--link-1);
12
  transform: scaleX(0);
13
  transition: transform 0.3s ease-in-out;
14
}
15
#style-2:hover {
16
  color: var(--link-1);
17
}
18
#style-2:hover::before {
19
  transform: scaleX(1);
20
}

Efecto de desplazamiento 3: Pasar subrayado

Cuando pases el cursor sobre este enlace, verás el subrayado animado desde la izquierda y luego desaparecerá a la derecha.

hover effect 3hover effect 3hover effect 3
  • Comenzamos de nuevo con la posición: relativa; en el elemento padre porque trabajaremos con un pseudo elemento.
  • Diseñamos el ::before con algunas reglas básicas, incluyendo un border-radius: 4px; solo para darle un aspecto un poco más suave.
  • Usaremos la misma idea de transformación de transición que la demostración anterior (transform: scaleX(0);) pero cambiaremos los orígenes de la transformación.
  • Así que comenzamos por establecer el transform-origin: right; en el elemento ::before.
  • Luego, en el :hover usamos transform-origin: left;.
1
#style-3 {
2
  position: relative;
3
}
4
#style-3::before {
5
  content: "";
6
  position: absolute;
7
  width: 100%;
8
  height: 4px;
9
  border-radius: 4px;
10
  background-color: var(--text);
11
  bottom: 0;
12
  left: 0;
13
  transform-origin: right;
14
  transform: scaleX(0);
15
  transition: transform 0.3s ease-in-out;
16
}
17
#style-3:hover::before {
18
  transform-origin: left;
19
  transform: scaleX(1);
20
}

Efecto de desplazamiento 4: Reemplazar texto

Este efecto de desplazamiento es el más complejo y el primero por el que cambiaremos el marcado. Reemplazaremos el texto del enlace con lo que almacenemos en un data-attribute en el enlace.

hover effect 4hover effect 4hover effect 4
  • Comienza con la habitual posición: relativo; estilo en el padre.
  • Define estilos básicos para los pseudo elementos ::before y ::after.
  • Nuestro elemento ::before será el subrayado.
  • El elemento ::after mantendrá el texto que establecimos en el atributo data-replace="" (que coincidirá con el texto del enlace). Configuramos esto con contenido: attr(data-replace);.
  • Empujamos el elemento ::after a la derecha usando transform: translate3d(); (para aprovechar la aceleración de hardware).
  • También necesitamos hacerlo invisible, lo que hacemos con un desbordamiento: oculto; en combinación con la pantalla: bloque en línea; en el padre.
  • En :hover movemos el elemento ::after de nuevo a su posición.
  • Ajustamos el enlace de texto en un <span> elemento, que luego hacemos la transición fuera del enlace como el elemento ::after transiciones, y viceversa.
1
#style-4 {
2
  overflow: hidden;
3
  position: relative;
4
  display: inline-block;
5
}
6
#style-4::before, #style-4::after {
7
  content: "";
8
  position: absolute;
9
  width: 100%;
10
  left: 0;
11
}
12
#style-4::before {
13
  background-color: var(--link-1);
14
  height: 2px;
15
  bottom: 0;
16
  transform-origin: 100% 50%;
17
  transform: scaleX(0);
18
  transition: transform 0.3s cubic-bezier(0.76, 0, 0.24, 1);
19
}
20
#style-4:hover::before {
21
  transform-origin: 0% 50%;
22
  transform: scaleX(1);
23
}
24
#style-4::after {
25
  content: attr(data-replace);
26
  height: 100%;
27
  top: 0;
28
  transform-origin: 100% 50%;
29
  transform: translate3d(200%, 0, 0);
30
  transition: transform 0.3s cubic-bezier(0.76, 0, 0.24, 1);
31
  color: var(--link-1);
32
}
33
#style-4:hover::after {
34
  transform: translate3d(0, 0, 0);
35
}
36
#style-4 span {
37
  display: inline-block;
38
  transition: transform 0.3s cubic-bezier(0.76, 0, 0.24, 1);
39
}
40
#style-4:hover span {
41
  transform: translate3d(-200%, 0, 0);
42
}

Efecto de desplazamiento 5: Varias propiedades

Hagamos las cosas un poco más simples de nuevo. En este ejemplo se utiliza un puñado de propiedades diferentes para dar un efecto de fondo de desplazamiento creciente.

hover effect 5hover effect 5hover effect 5
  • Comienza con los estilos de configuración habituales que necesitamos para manipular pseudo elementos.
  • Establecer un índice z: -1; para enviar el bloque detrás del texto del enlace.
  • Desplaza el elemento ::before al desplazarse utilizando un margen negativo y expresando el ancho como calc(100% + 10px);
1
#style-5 {
2
  position: relative;
3
  font-weight: bold;
4
}
5
#style-5::before {
6
  content: "";
7
  background-color: var(--link-3);
8
  position: absolute;
9
  left: 0.5rem;
10
  bottom: 5px;
11
  width: 100%;
12
  height: 8px;
13
  z-index: -1;
14
  transition: all 0.3s ease-in-out;
15
}
16
#style-5:hover::before {
17
  left: -5px;
18
  bottom: 0;
19
  height: 100%;
20
  width: calc(100% + 10px);
21
}

Efecto de desplazamiento 6: Degradado multilínea

Los efectos hasta ahora funcionan bien cuando los enlaces en línea se encuentran en una línea, pero ¿qué pasa si el enlace se extiende a través de varias líneas? Hagamos una obra de teatro con un efecto que funcione en ese escenario.

hover effect 6hover effect 6hover effect 6
  • Usa un enlace largo para ver mejor el efecto de este.
  • Aplicamos un degradado de fondo para el borde inferior.
  • Se ve así: imagen de fondo: gradiente lineal (blanco 50%, var(--link-2) 50%); y nos da un fondo que es mitad blanco, mitad azul para empezar.
  • Luego usamos un tamaño de fondo: automático 175%; para escalar el gradiente de fondo 175% verticalmente. Esto amplía efectivamente todo el fondo, que está alineado con el borde superior, recortando gran parte del azul en el proceso. De esta manera creamos nuestro subrayado.
  • Al pasar el cursor, colocamos el fondo de modo que se alinee con la parte inferior del enlace.
1
#style-6 {
2
  background-image: linear-gradient(white 50%, var(--link-2) 50%);
3
  background-size: auto 175%;
4
  transition: background 0.3s ease-in-out;
5
}
6
#style-6:hover {
7
  background-position-y: 100%;
8
}

Conclusión

Nada mejor que un buen tutorial práctico ¿eh? Espero que hayas disfrutado creando estos efectos de enlace y desarrollando tus habilidades a medida que progresabas a través de ellos. No olvides que puedes ver el video en la parte superior de la página para obtener una explicación más visual de estos efectos flotantes. ¡Gracias por ver/leer!