Transiciones
Clase 29 de 32 • Curso de CSS
Resumen
Las transiciones en CSS mejoran la experiencia visual: suavizan cambios de color, tamaño y posición sin brusquedades. Aquí verás cómo aplicar transition a botones y cajas, cómo combinar cambios con transform y cómo controlar la velocidad con linear, ease y ease-in-out. Además, se muestra un caso de depuración frecuente con la cascada y múltiples transform.
¿Por qué usar transiciones en CSS?
Las transiciones hacen que los cambios se sientan suaves y naturales. Evitan saltos abruptos al pasar el hover y aportan claridad visual.
- Suavizar color de fondo con background-color en 0.3s.
- Escalar elementos con transform: scale para dar feedback.
- Mover en el eje X con translateX y controlar el tiempo.
- Acompañar el movimiento con box-shadow para dar profundidad.
¿Qué estilos base necesitas en los botones?
Primero se definen estilos base para separación y legibilidad. Usa display: flex, gap y margin-bottom.
/* Contenedor de botones */
.buttons {
display: flex;
gap: 12px;
margin-bottom: 40px;
}
/* Botón base */
.button {
padding: 12px 24px;
font-size: 16px; /* o 1rem */
cursor: pointer;
background: #3498DB;
color: #fff;
border: 0;
}
¿Cómo aplicar transiciones en botones con hover?
La clave está en declarar la propiedad a animar, la duración y la función de aceleración. Así, el cambio no se ve brusco.
¿Cómo suavizar el cambio de color?
Para que el color de fondo cambie de forma fluida con hover, anima background-color.
/* Transición del color de fondo */
.button-color {
transition: background-color 0.3s ease;
}
.button-color:hover {
background-color: #E74C3C; /* rojo suave */
}
¿Cómo hacer que el botón crezca?
Si buscas un efecto de crecimiento, anima transform con scale.
/* Transición de tamaño */
.button-size {
transition: transform 0.3s ease;
}
.button-size:hover {
transform: scale(1.1);
}
¿Cómo combinar color, sombra y escala en un botón?
Cuando un mismo elemento cambia varias propiedades, puedes usar all
para cubrirlas. Evita declarar múltiples transform separados.
/* Botón con varios cambios al hover */
.button-all {
transition: all 0.3s ease;
}
.button-all:hover {
background-color: #2ECC71; /* verde */
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
transform: scale(1.1); /* se decidió escalar y no trasladar */
}
¿Cómo depurar conflictos con transform y la cascada?
- No declares dos reglas de transform en el mismo selector al mismo tiempo: una pisará a la otra.
- Si necesitas combinar, usa un solo transform: por ejemplo,
transform: translateY(-5px) scale(1.1);
. - Usa las herramientas del navegador: fuerza el hover en el inspector y revisa qué reglas están activas.
¿Cómo controlar el timing con linear, ease y ease-in-out?
El tiempo y la aceleración definen la sensación del movimiento. Con transform y transition puedes mover una caja 200px a la derecha y ver cómo varía la velocidad según linear, ease y ease-in-out.
/* Contenedor de ejemplos de timing */
.timing-container {
display: flex;
gap: 20px;
margin-bottom: 40px;
}
/* Caja base */
.box {
width: 100px;
height: 100px;
background: #9B59B6; /* morado */
color: #fff;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
/* Variantes de timing */
.timing-linear { transition: transform 1s linear; }
.timing-ease { transition: transform 1s ease; }
.timing-ease-in-out { transition: transform 1s ease-in-out; }
/* Disparador común */
.box:hover { transform: translateX(200px); }
- linear: velocidad uniforme todo el tiempo.
- ease: aceleración natural, empieza lento y acelera.
- ease-in-out: suave al inicio y al final, rápido en medio.
Consejos rápidos: - Define claramente la propiedad: background-color o transform, según el efecto. - Ajusta la duración: 0.3s para hover en UI se siente fluido. - Usa box-shadow para reforzar la sensación de elevación. - Evita conflictos: un único transform por selector al final de la cascada.
¿Te gustaría ver más variantes con cubic-bezier o combinar scale y translate en un solo transform? Cuéntalo en los comentarios y comparte qué efectos aplicarías en tus botones o tarjetas.