Exploración de los efectos creativos de desplazamiento de CSS para enlaces en línea
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!
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 |
}
|
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.



- 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
backgroundusamosbox-shadowporque 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.



- 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 latransiciónpara animar el pseudo elemento. - También hacemos la
transicióndel 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.



- Comenzamos de nuevo con la
posición: relativa;en el elemento padre porque trabajaremos con un pseudo elemento. - Diseñamos el
::beforecon algunas reglas básicas, incluyendo unborder-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
:hoverusamostransform-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.



- Comienza con la habitual
posición: relativo;estilo en el padre. - Define estilos básicos para los pseudo elementos
::beforey::after. - Nuestro elemento
::beforeserá el subrayado. - El elemento
::aftermantendrá el texto que establecimos en el atributodata-replace=""(que coincidirá con el texto del enlace). Configuramos esto concontenido: attr(data-replace);. - Empujamos el elemento
::aftera la derecha usandotransform: translate3d();(para aprovechar la aceleración de hardware). - También necesitamos hacerlo invisible, lo que hacemos con un
desbordamiento: oculto;en combinación con lapantalla: bloque en línea;en el padre. - En
:hovermovemos el elemento::afterde 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::aftertransiciones, 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.



- 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
::beforeal desplazarse utilizando un margen negativo y expresando el ancho comocalc(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.



- 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!



