Diseño de botones con fondo corredizo en HTML y CSS

- 👤 Andrés Cruz

🇺🇸 In english

Diseño de botones con fondo corredizo en HTML y CSS

El diseño de botones en HTML y CSS va mucho más allá de “poner un color y un hover”. Un botón bien diseñado guía al usuario, comunica acción y mejora la experiencia de uso. Con el tiempo me he dado cuenta de que, con muy pocas propiedades CSS bien entendidas, se pueden crear botones modernos, animados y reutilizables sin depender de librerías ni JavaScript.

En esta guía te voy a mostrar cómo diseñar botones atractivos usando solo HTML y CSS, especificamente un tipo de diseño como lo es, el que tiene fondo corredizo entre otros ejemplos; desde la base hasta animaciones más avanzadas como fondos animados con box-shadow.

Los botones son un elemento fundamental en cualquier sistema y los mismos permiten realizar distintas acciones; también son un icono de personalización en cada sistema; en CSS es fácil crear un botón con mucho estilo sin necesidad de agregar muchas líneas de código o ser un experto en CSS.

Qué hace que un botón esté bien diseñado en HTML y CSS

Un botón no es solo un elemento visual. Es un punto de interacción clave.

El botón como elemento de interacción

Un buen botón debe:

  • Ser reconocible como clickable
  • Tener contraste suficiente
  • Responder visualmente al hover y al clic
  • Mantener coherencia con el diseño general

En mi caso, muchos de los problemas que tuve al principio no eran técnicos, sino de diseño: botones demasiado planos, animaciones exageradas o efectos que no aportaban nada a la usabilidad.

Diseño visual vs comportamiento

El diseño visual atrae, pero el comportamiento convence. Estados como hover, active y focus son tan importantes como el color o la tipografía.

Errores comunes

  • Usar animaciones demasiado lentas
  • No definir estado focus
  • Depender de JavaScript para efectos simples
  • Sobrecargar el botón con sombras innecesarias
 
En esta entrada veremos como crear unos fantásticos botones con fondo corredizo como el siguiente:
Mi botón con animación

Lo primero que definiremos será una serie de CSS básico para dar un poco de estilo a nuestro botón: tamaño, forma, posición, color de fondo, formato para la letra y un sombra interna al borde empleando la propiedad box-shadow:

.boton_fondo_corredizo_base {
    color: #FFF;
    background: #0BF;
    padding: 20px;
    margin: 25px auto;
    font-family: 'OpenSansBold', sans-serif;
    font-size: 14px;
    font-weight: bold;
    letter-spacing: 1px;
    text-transform: uppercase;
    display: block;
    text-align: center;
    cursor: pointer;
    width: 300px;
    box-shadow: inset 0 0 0 0 #0BF;
    transition: all ease 0.8s;
}

La propiedad box-shadow para las sombras internas

Haciendo un pequeño paréntesis; veremos como funciona la propiedad box-shadow que como se ha comentado a un inicio de esta entrada es una propiedad fundamental para este ejercicio; su sintaxis es la siguiente:

Sintaxis de la propiedad box-shadow en nuestro ejercicio

box-shadow: inset offset-x offset-y blur-radius spread-radius color
  • inset: Este valor indica que la sombra aparecerá dentro del contenedor y no fuera de ella.
  • offset-x y offset-y: Indican el desplazamiento de la sombra en el eje horizontal y vertical respectivamente.
  • blur-radius Indica el grado de difuminación que para nuestro ejemplo es cero en todos los casos.
  • spread-radius Permite aumentar o reducir el tamaño de la sombra; en nuestro ejemplo siempre es cero.
  • color: Determina el color de la sombra en su representación hexadecimal o cualquier otra soportada por CSS.

Como podemos ver, la propiedad box-shadow además de poder emplearse para realizar las típicas sombras a las que estamos acostumbrados:

Mi botón
.boton_sombra {
    box-shadow: 0 0 10px 2px #F00;
}

También es empleada para generar "sombras internas" o dentro del contenedor como las siguientes empleando el valor inset:

Mi botón
.boton_sombra_interna {
    box-shadow: inset 0 0 10px 2px #F00;
}

Pero si decidimos no agregar el difuminado a la sombra cuyo estado lo maneja el valor inset:

Mi botón
.boton_sombra_sindifuminado {
    box-shadow: inset 0 0 0 7px #F00;
}

Queda como si definiríamos un fondo de color al botón.

¿Porqué emplear la propiedad box-shadow en lugar de background?

Sencillamente porque podemos "jugar" con el desplazamiento del color del fondo o definir por donde queremos empezar a pintar el color empleando los desplazamientos a través de las animaciones o transiciones y los valores offset-x y offset-y.

La clave está en el control:

  • Puedes animar direcciones
  • Puedes “pintar” desde un lado concreto
  • No necesitas pseudo-elementos extra

Retornando a la creación de los botones con fondo corredizo

Ya explicado el funcionamiento de la propiedad box-shadow nos resultará más sencillo entender cómo se puede cambiar un fondo de color determinado a través de la propiedad box-shadow; por ejemplo, si quisiéramos aplicar un cambio de color del fondo dando el efecto de arriba a abajo a través de las transiciones en CSS:

Mi botón
.example .boton_fondo_corredizo_arriba:hover {
    box-shadow: inset 0 70px 0 0 #08B;
}

Abajo a arriba:

Mi botón
.example .boton_fondo_corredizo_abajo:hover {
    box-shadow: inset 0 -70px 0 0 #08B;
}

Derecha a izquierda:

Mi botón
.example .boton_fondo_corredizo_derecha:hover {
    box-shadow: inset -340px 0 0 0 #08B;
}

Izquierda a derecha:

Mi botón
.example .boton_fondo_corredizo_izquierda:hover {
    box-shadow: inset 340px 0 0 0 #08B;
}

Efecto de cerrado:

Mi botón
.example .boton_fondo_corredizo_abajo:hover {
    box-shadow: inset 0 -70px 0 0 #08B;
}

Diagonales:

Mi botón
.example .boton_fondo_corredizo_abajo:hover {
    box-shadow: inset 340px 50px 0 0 #08B;
}
Mi botón
.example .boton_fondo_corredizo_diagonal1:hover {
    box-shadow: inset -340px 50px 0 0 #08B;
}
Mi botón
.example .boton_fondo_corredizo_diagonal2:hover {
    box-shadow: inset -340px -50px 0 0 #08B;
}
Mi botón
.example .boton_fondo_corredizo_diagonal3:hover {
    box-shadow: inset 340px -50px 0 0 #08B;
}
Mi botón
.example .boton_fondo_corredizo_diagonal4:hover {
    box-shadow: inset 340px -50px 0 0 #08B;
}

Diseño de botones CSS sin JavaScript: ventajas y rendimiento

Usar solo CSS tiene beneficios claros:

  • Mejor rendimiento
  • Menos complejidad
  • Más fácil mantenimiento
  • Animaciones más fluidas

En proyectos reales, evito JavaScript para botones salvo que sea estrictamente necesario. Para efectos visuales, CSS suele ser más que suficiente.

Accesibilidad y usabilidad en el diseño de botones web

  • Un botón bonito que no se puede usar bien es un problema.
  • Contraste y legibilidad
    • Asegúrate de que el texto siempre sea legible, incluso durante la animación.
  • Estado focus:
  • .boton:focus {
     outline: 2px solid #000;
    }
  • Animaciones responsables
    • Evita duraciones excesivas y efectos que distraigan. Un buen diseño acompaña, no molesta.

Ejemplos de botones CSS reutilizables y personalizables

Una vez tienes el sistema montado:

  • Cambiar colores es trivial
  • Ajustar tamaños no rompe la animación
  • Puedes reutilizar la misma clase base

Preguntas frecuentes sobre diseño de botones en HTML y CSS

  • ¿Cómo crear botones atractivos solo con CSS?
    • Entendiendo bien propiedades como box-shadow, transition y los estados del botón.
  • ¿Es mejor usar box-shadow o background para animaciones?
    • Para fondos animados direccionales, box-shadow ofrece más control.
  • ¿Afectan estas animaciones al rendimiento?
    • No, siempre que se usen con moderación y sin recalcular layouts.
  • ¿Necesito JavaScript para botones animados?
    • En la mayoría de los casos, no.

Conclusión

El diseño de botones en HTML y CSS no depende de frameworks ni de código complejo. Entendiendo bien unas pocas propiedades puedes crear botones modernos, animados y usables. En mi caso, descubrir que box-shadow podía usarse como fondo animado cambió por completo mi forma de diseñarlos.

Un menu nunca esta demás, un menu móvil debe estar presente en el desarrollo moderno, aprende a cómo crear un botón o menú tipo hamburguesa animado con CSS y un poco de HTML.

Acepto recibir anuncios de interes sobre este Blog.

Aprende diseño de botones en HTML y CSS con ejemplos reales, animaciones CSS y efectos hover sin JavaScript. Guía práctica y reutilizable.

| 👤 Andrés Cruz

🇺🇸 In english