El shorthand transition y buenas prácticas
En la lección anterior usaste las cuatro sub-propiedades por separado. El shorthand transition las combina en un solo valor — más compacto, más fácil de leer cuando el equipo ya conoce el orden.
El shorthand: orden de los valores
.boton {
/* property duration timing-function delay */
transition: opacity 0.3s ease-in-out 0s;
}
El orden estándar es: propiedad → duración → timing-function → delay. Si se omite el delay, se asume 0s. Si se omite el timing-function, se asume ease.
Forma mínima — la más común en la práctica:
.boton {
transition: opacity 0.3s ease-in-out;
/* delay omitido → 0s por defecto */
}
Múltiples propiedades: se separan con coma, cada una con sus propios valores:
.tarjeta {
transition:
background-color 0.2s ease-in-out,
transform 0.3s ease-out;
}
La cicatriz pedagógica: ¿dónde va la transition?
Este es el error más común:
/* ✅ CORRECTO: transition en el estado normal → aplica al entrar Y al salir del hover */
.boton {
opacity: 1;
transition: opacity 0.3s ease-in-out;
}
.boton:hover { opacity: 0.7; }
/* ❌ ERROR: transition en :hover → solo anima al entrar; al salir el cambio es instantáneo */
.boton { opacity: 1; }
.boton:hover {
opacity: 0.7;
transition: opacity 0.3s ease-in-out; /* ← no aplica al volver al estado normal */
}
La versión incorrecta “parece funcionar” al pasar el mouse — el hover se suaviza. Pero al sacar el mouse el elemento vuelve de golpe, sin transición. La transition en el estado normal garantiza que el navegador suavice el cambio en ambas direcciones.
¿Por qué no validar el shorthand directamente?
El motor lee el valor computado de transition con getComputedStyle — y ese valor es imprevisible: según el navegador, puede aparecer expandido con defaults añadidos o en un formato distinto al que escribiste. Lo que sí es estable es el valor computado de cada sub-propiedad (transition-property, transition-duration, etc.).
Por eso los checks de esta lección validan las sub-props que el shorthand establece, no el shorthand en sí. Es la misma verificación; solo que confiable.
Buenas prácticas: propiedades eficientes
No todas las propiedades tienen el mismo costo al animarse. El navegador tiene un pipeline de render con tres etapas: layout → paint → composite.
| Propiedad animada | Etapa que dispara | Costo |
|---|---|---|
opacity | Solo composite | Bajo — sin layout ni repaint |
transform | Solo composite | Bajo — sin layout ni repaint |
color, background-color | Repaint | Medio |
width, height, top, left | Layout completo | Alto — puede generar jank |
Regla práctica: para transiciones de hover en UI, usá opacity y transform. Evitá transicionar width, height, margin o top/left — fuerzan al navegador a recalcular el layout completo en cada frame.
transform (que ya conocés de CAT-24) mueve y escala elementos sin sacarlos del flujo y sin triggear layout — es la propiedad ideal para efectos de hover de elevación, escala o desplazamiento.
Nota de accesibilidad: prefers-reduced-motion
Algunos usuarios configuran su sistema operativo para reducir el movimiento (por epilepsia fotosensible, mareos o preferencia personal). CSS permite respetar esa preferencia:
@media (prefers-reduced-motion: reduce) {
.tarjeta { transition: none; }
}
No es el foco de este módulo, pero es la práctica responsable cuando se usan transiciones en producción. Referencia: MDN — prefers-reduced-motion.
Nota sobre el motor: el validador lee las sub-propiedades de
transitionen el estado de reposo. Eltransform: translateY(-6px)del:hovery el efecto de elevación visual solo se pueden comprobar en el preview pasando el mouse sobre la tarjeta.
Tu turno: agregá transition: transform 0.25s ease-out a .tarjeta y transform: translateY(-6px) a .tarjeta:hover. Pasá el mouse en el preview para ver la tarjeta elevándose.
Cerrás el recorrido
Con esta lección completás 29/29 módulos del recorrido — los cuatro bloques:
- Bloque I (HTML): semántica, estructura, formularios, tablas.
- Bloque II (CSS Fundamentos): selectores, cascada, box model, display, unidades, colores, tipografía, overflow.
- Bloque III (Layout moderno): flujo normal, positioning, Flexbox, Grid.
- Bloque IV (Hábitos modernos): responsive, custom properties, transitions.
Lo que sigue — animaciones con @keyframes, JavaScript, frameworks CSS — es la continuación natural. Tenés la base para aprenderlo por tu cuenta.
Tarjeta con shorthand y buenas prácticas
Tenés una tarjeta (`.tarjeta`). Usando el shorthand `transition`, hacé que al hacer hover la tarjeta se eleve suavemente con `transform: translateY(-6px)`. Requisitos exactos: 1. Escribí `transition: transform 0.25s ease-out` en el estado normal de `.tarjeta`. _(El shorthand establece las sub-propiedades que los checks van a validar.)_ 2. En `.tarjeta:hover`, escribí `transform: translateY(-6px)`. _(El hover no lo valida el motor — lo observás en el preview pasando el mouse.)_ ¿Por qué `transform`? Animarla no dispara layout ni repaint — es la propiedad más eficiente para mover elementos en hover.
Preview
En la referencia
En esta página