03 Capítulo 3 · Lección 12

Animation Fill Mode

Redactado por
Author Sebastian V.
Fecha de publicación

24/04/2025

Tiempo de lectura

7 min

Tema

@keyframes

¿Dónde está mi elemento antes y después?

Imagina que animas la aparición de un modal. Le dices al navegador: "en el 0% ten opacidad 0, y en el 100% ten opacidad 1". La animación dura 1 segundo, se ejecuta perfectamente, el modal aparece... y cuando llega al 100%, ¡puf! desaparece instantáneamente, volviendo a su estado original oculto.

Este es uno de los comportamientos más desconcertantes para quienes empiezan con CSS Animations. Por defecto, una animación no altera los estilos reales del elemento; solo los disfraza temporalmente mientras se está ejecutando. animation-fill-mode es la propiedad que usas para indicarle al navegador que esos estilos animados deben persistir fuera del tiempo de la animación.

Los cuatro modos de persistencia

  • none: (Por defecto) Ningún estilo de la animación se aplica antes de que empiece ni después de que termine.
  • forwards: El más usado. Le dice al navegador: "cuando termines la animación, quédate congelado en el último fotograma clave que ejecutaste". Obligatorio para modales que entran, elementos que desaparecen (fade out) y cualquier cosa que no deba resetearse.
  • backwards: Aplica durante el tiempo de espera (delay). Si tu animación tiene un delay de 2s y en el 0% es invisible, backwards fuerza a que el elemento sea invisible durante esos 2s de espera. Sin él, el elemento sería visible 2s y de repente parpadearía a invisible para arrancar la animación.
  • both: Aplica ambos comportamientos. El elemento adopta el estado inicial durante el delay y se queda con el estado final cuando termina. La opción más segura para secuencias de entrada completas.

Una regla de oro para la UI

Si un elemento entra a la pantalla para quedarse (como un menú lateral), necesitas forwards. Si ese elemento entra con retraso como parte de un grupo (staggering), necesitas both. Memorizar esta distinción te ahorrará horas buscando por qué tus componentes parpadean al cargar la página.

Consejo profesional

En la mayoría de los flujos de trabajo profesionales, te encontrarás usando tanto forwards (para efectos interactivos de un solo disparo) como both (para entradas secuenciales estructuradas).

Ejemplo práctico

> _
<div class="fill-mode-demo">
  <p class="label">Las animaciones tienen 1s de delay. Observa antes de empezar y después de terminar.</p>
  <div class="row">
    <span class="row-label">none</span>
    <div class="box fill-none">None</div>
  </div>
  <div class="row">
    <span class="row-label">forwards</span>
    <div class="box fill-forwards">Forwards</div>
  </div>
  <div class="row">
    <span class="row-label">backwards</span>
    <div class="box fill-backwards">Backwards</div>
  </div>
  <div class="row">
    <span class="row-label">both</span>
    <div class="box fill-both">Both</div>
  </div>
</div>
> _
none
None
forwards
Forwards
backwards
Backwards
both
Both

Presta atención al delay inicial: backwards y both inician de color rojo tenue antes de moverse. Al terminar, forwards y both se quedan en su posición de destino de color verde brillante.

Errores comunes

01
Olvidar el fill-mode en botones interactivos Si el botón cambia de escala en hover con una animación y no pones forwards, regresará abruptamente al estado original.
02
Confundir forwards con loops Forwards solo actúa cuando la animación finaliza. En animaciones infinitas, no tiene ningún efecto práctico.

Practica lo aprendido

Observa con atención cómo reaccionan las cajas moradas y rojas al terminar de moverse para entender la persistencia de estilos.

01 Define una animación con un delay de al menos 1 segundo
02 Prueba "forwards" para mantener los estilos finales (100%) permanentemente
03 Prueba "backwards" para que el elemento adopte los estilos iniciales (0%) durante el delay
04 Usa "both" si necesitas aplicar tanto la regla de inicio durante el delay como la regla final al terminar