Agregar multiples transformaciones a la vez
.elemento{ transform: translateX(50px) rotate(30deg) scale(1.2); }
Las transiciones en CSS te permiten suavizar los cambios visuales entre estados, evitando que el cambio de color, tamaño o posición se sienta abrupto cuando un usuario interactúa con un botón u otro elemento. Aprenderás a animar propiedades como background-color, transform y a controlar la velocidad con funciones de tiempo como linear, ease y ease-in-out, ideales para quienes ya dominan los estilos base de CSS y quieren mejorar la experiencia de interacción.
¿Cómo se crea una transición de color en un botón con CSS?
La idea es que cuando pases el cursor sobre un botón, el color de fondo cambie de forma fluida en lugar de saltar de golpe. Para lograrlo, defines la propiedad transition sobre el estado base del botón, no sobre el :hover.
En el botón base aplicas estilos generales: un padding de 12px arriba y abajo y 24px a los lados, un font-size de 16px o 1rem, eliminas el borde por defecto, agregas cursor: pointer y un background-color azul #3498db con texto blanco para contraste.
Luego defines la transición sobre la propiedad que va a cambiar:
css .button--color { transition: background-color 0.3s ease; } .button--color:hover { background-color: #E74C3C; }
¿Dónde se coloca la propiedad transition, en el estado base o en el hover? Siempre en el estado base del elemento. La transición describe cómo se anima el cambio, mientras que el
:hoversolo dispara el nuevo valor [03:15].
¿Cómo hacer que un botón crezca al pasar el cursor?
Para animar el tamaño usas la propiedad transform junto con scale. Esto te permite agrandar el botón sin afectar el flujo del documento, porque transform no recalcula el espacio que ocupa el elemento.
La estructura es la misma que con el color: defines la transición sobre transform en el estado base y aplicas la transformación en el :hover.
css .button--size { transition: transform 0.3s ease; } .button--size:hover { transform: scale(1.1); }
El valor 1.1 significa que el botón crecerá un 10% respecto a su tamaño original. Es un cambio sutil que se percibe como una respuesta visual elegante a la interacción [05:20].
¿Por qué no puedo combinar dos transform en el mismo selector?
Cuando intentas aplicar varias transformaciones, surge una limitación importante: un mismo elemento no puede tener dos declaraciones transform separadas activas al mismo tiempo. La segunda pisa a la primera por la cascada de CSS.
La solución es agruparlas en una sola declaración:
css transform: translateY(-5px) scale(1.1);
Usando las herramientas del inspector del navegador puedes activar manualmente el estado :hover y verificar qué reglas se están aplicando o tachando, lo que te ayuda a depurar este tipo de conflictos [08:45].
¿Cómo combinar varias transiciones en un solo botón?
Cuando quieres animar más de una propiedad a la vez (color, posición, sombra y escala), usas transition: all para que la transición aplique a cualquier propiedad que cambie en el estado interactivo.
css .button--all { transition: all 0.3s ease; } .button--all:hover { background-color: #2ECC71; box-shadow: 0 5px 15px rgba(0,0,0,0.3); transform: scale(1.1); }
La box-shadow con valores 0 5px 15px rgba(0,0,0,0.3) aporta el efecto de elevación, simulando que el botón flota sobre la superficie cuando el cursor está encima. Combinado con el cambio de color verde y el escalado, el botón se siente vivo y reactivo [10:30].
¿Qué hace transition: all en CSS? Aplica la animación a todas las propiedades que cambien entre estados, en lugar de listar cada una. Es útil cuando hay múltiples cambios simultáneos.
¿Qué diferencia hay entre linear, ease y ease-in-out?
Las funciones de tiempo definen cómo se distribuye la velocidad durante la transición. No es lo mismo un movimiento mecánico que uno que imita la aceleración natural de un objeto físico.
Para probarlas, puedes crear tres cajas con la misma clase .box y aplicar una función de tiempo distinta a cada una:
css .timing-linear { transition: transform 1s linear; } .timing-ease { transition: transform 1s ease; } .timing-ease-in-out { transition: transform 1s ease-in-out; } .box:hover { transform: translateX(200px); }
Cada caja se desplaza 200px hacia la derecha al hacer :hover, pero la sensación del movimiento cambia según la función elegida. Cuando los tiempos son cortos la diferencia es sutil, así que si quieres notar el contraste mejor, sube la duración a 1 o 2 segundos [15:50].
¿Cómo se aplica un hover compartido a varios elementos?
Si varios elementos comparten una clase como .box, defines un único selector .box:hover con la transformación común. Cada elemento mantiene su propia función de tiempo gracias a sus clases específicas, pero todos reaccionan al mismo gesto del usuario.
Este patrón es útil cuando construyes galerías, tarjetas o grupos de botones donde quieres consistencia en el comportamiento pero variedad en el ritmo de la animación.
¿Cuál de estas funciones de tiempo se siente mejor en tus proyectos? Cuéntame en los comentarios qué transiciones has implementado y qué efecto buscabas lograr.
Las transiciones en CSS te permiten suavizar los cambios visuales entre estados, evitando que el cambio de color, tamaño o posición se sienta abrupto cuando un usuario interactúa con un botón u otro elemento. Aprenderás a animar propiedades como background-color, transform y a controlar la velocidad con funciones de tiempo como linear, ease y ease-in-out, ideales para quienes ya dominan los estilos base de CSS y quieren mejorar la experiencia de interacción.
La idea es que cuando pases el cursor sobre un botón, el color de fondo cambie de forma fluida en lugar de saltar de golpe. Para lograrlo, defines la propiedad transition sobre el estado base del botón, no sobre el :hover.
En el botón base aplicas estilos generales: un padding de 12px arriba y abajo y 24px a los lados, un font-size de 16px o 1rem, eliminas el borde por defecto, agregas cursor: pointer y un background-color azul #3498db con texto blanco para contraste.
Luego defines la transición sobre la propiedad que va a cambiar:
css .button--color { transition: background-color 0.3s ease; } .button--color:hover { background-color: #E74C3C; }
¿Dónde se coloca la propiedad transition, en el estado base o en el hover? Siempre en el estado base del elemento. La transición describe cómo se anima el cambio, mientras que el
:hoversolo dispara el nuevo valor [03:15].
Para animar el tamaño usas la propiedad transform junto con scale. Esto te permite agrandar el botón sin afectar el flujo del documento, porque transform no recalcula el espacio que ocupa el elemento.
La estructura es la misma que con el color: defines la transición sobre transform en el estado base y aplicas la transformación en el :hover.
css .button--size { transition: transform 0.3s ease; } .button--size:hover { transform: scale(1.1); }
El valor 1.1 significa que el botón crecerá un 10% respecto a su tamaño original. Es un cambio sutil que se percibe como una respuesta visual elegante a la interacción [05:20].
Cuando intentas aplicar varias transformaciones, surge una limitación importante: un mismo elemento no puede tener dos declaraciones transform separadas activas al mismo tiempo. La segunda pisa a la primera por la cascada de CSS.
La solución es agruparlas en una sola declaración:
css transform: translateY(-5px) scale(1.1);
Usando las herramientas del inspector del navegador puedes activar manualmente el estado :hover y verificar qué reglas se están aplicando o tachando, lo que te ayuda a depurar este tipo de conflictos [08:45].
Cuando quieres animar más de una propiedad a la vez (color, posición, sombra y escala), usas transition: all para que la transición aplique a cualquier propiedad que cambie en el estado interactivo.
css .button--all { transition: all 0.3s ease; } .button--all:hover { background-color: #2ECC71; box-shadow: 0 5px 15px rgba(0,0,0,0.3); transform: scale(1.1); }
La box-shadow con valores 0 5px 15px rgba(0,0,0,0.3) aporta el efecto de elevación, simulando que el botón flota sobre la superficie cuando el cursor está encima. Combinado con el cambio de color verde y el escalado, el botón se siente vivo y reactivo [10:30].
¿Qué hace transition: all en CSS? Aplica la animación a todas las propiedades que cambien entre estados, en lugar de listar cada una. Es útil cuando hay múltiples cambios simultáneos.
Las funciones de tiempo definen cómo se distribuye la velocidad durante la transición. No es lo mismo un movimiento mecánico que uno que imita la aceleración natural de un objeto físico.
Para probarlas, puedes crear tres cajas con la misma clase .box y aplicar una función de tiempo distinta a cada una:
css .timing-linear { transition: transform 1s linear; } .timing-ease { transition: transform 1s ease; } .timing-ease-in-out { transition: transform 1s ease-in-out; } .box:hover { transform: translateX(200px); }
Cada caja se desplaza 200px hacia la derecha al hacer :hover, pero la sensación del movimiento cambia según la función elegida. Cuando los tiempos son cortos la diferencia es sutil, así que si quieres notar el contraste mejor, sube la duración a 1 o 2 segundos [15:50].
Si varios elementos comparten una clase como .box, defines un único selector .box:hover con la transformación común. Cada elemento mantiene su propia función de tiempo gracias a sus clases específicas, pero todos reaccionan al mismo gesto del usuario.
Este patrón es útil cuando construyes galerías, tarjetas o grupos de botones donde quieres consistencia en el comportamiento pero variedad en el ritmo de la animación.
¿Cuál de estas funciones de tiempo se siente mejor en tus proyectos? Cuéntame en los comentarios qué transiciones has implementado y qué efecto buscabas lograr.
Agregar multiples transformaciones a la vez
.elemento{ transform: translateX(50px) rotate(30deg) scale(1.2); }
Encontré este gráfico que nos muestra de forma más visual la velocidad de las 'Timing Functions'
También estuve investigando y descubrí en la documentación de MDN que puedes personalizar tú mismo cómo quieres que se comporte la animación asignando las velocidades por parámetros a linear
Aquí se ve un ejemplo:

Les dejo el link:
de esta forma transform: translateY(-5px) scale(1.1); se aplican ambas transformaciones
Si quisiéramos agregar mas de una transformación, las podemos concatenar en la misma línea de manera que se puedan ejecutar sin que una anule la anterior. De la siguiente manera.
transform: scale(1.1) translateY(-5px);
Es increible lo que uno puede hacer con IA ahora
¿Es posible hacer que un botón flote?
¡Totalmente! Para lograr ese efecto táctil de flotación cuando el usuario pasa el cursor, necesitas combinar dos propiedades clave: transform y box-shadow. Primero, utilizas transform: translateY(-5px); para desplazar el botón ligeramente hacia arriba en el eje Y. Al mismo tiempo, agregas un box-shadow suave y difuminado en la parte inferior. La magia ocurre porque, al subir el elemento y proyectar una sombra más amplia por debajo, el cerebro humano interpreta inmediatamente que el botón se ha despegado del fondo, acercándose a la pantalla. Si a esto le sumas una transición suave de unos 0.3s, el resultado es un botón interactivo que invita a ser presionado. Esta técnica de microinteracción es un pilar fundamental del diseño moderno, ya que mejora drásticamente la retroalimentación visual sin requerir JavaScript.
Excelente curso.