Proprietà animation-fill-mode

La proprietà animation-fill-mode imposta in quale posizione si fermano le animazioni dopo la fine. Per impostazione predefinita l'animazione ritorna al valore iniziale e questo potrebbe non sembrare molto bello.

Sintassi

cssselettore {
  animation-fill-mode: backwards | forwards | both | none;
}

Valori

Valore Descrizione
none Se è impostato un ritardo dell'animazione - durante il tempo di ritardo l'elemento rimarrà al suo posto, e poi salterà al fotogramma 0%. Dopo la fine dell'animazione l'elemento non rimarrà nello stato in cui si è fermato, ma salterà allo stato iniziale.
backwards Forza l'elemento a muoversi dopo il caricamento della pagina verso il fotogramma 0%, anche se è impostato un ritardo animation-delay, e a rimanere lì, finché non inizia l'animazione. Dopo la fine dell'animazione l'elemento non rimarrà nello stato in cui si è fermato, ma salterà allo stato iniziale.
forwards Indica al browser che dopo la fine dell'animazione l'elemento rimarrà nello stato in cui si è fermato.
both Include backwards e forwards - dopo il caricamento della pagina l'elemento si imposterà sul fotogramma 0%, e dopo la fine dell'animazione l'elemento rimarrà dove si è fermato.

Valore predefinito: none.

Esempio . Valore none

In questo esempio margin-left è impostato al valore 300px per l'elemento, e per il primo fotogramma dell'animazione - a 0px. Poiché non c'è ritardo animation-delay, l'elemento dopo il caricamento della pagina si posizionerà a 0px, e non a 300px. Inoltre l'animazione dopo la fine salterà al valore iniziale:

html<div id="elem"></div>
css@keyframes move {
  from {
    margin-left: 0;
  }
  to {
    margin-left: 400px;
  }
}

#elem {
  margin-left: 300px;
  animation-fill-mode: none;
  animation-delay: 0s;
  animation-duration: 3s;
  animation-name: move;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  border: 1px solid black;
  width: 50px;
  height: 50px;
}

Результат:

Esempio . Valore none

In questo esempio margin-left è impostato al valore 300px per l'elemento, e per il primo fotogramma dell'animazione - a 0px. Inoltre per l'elemento è impostato un ritardo animation-delay di 3 secondi, quindi l'elemento dopo il caricamento della pagina si posizionerà a 300px, e non a 0px, e rimarrà lì per 3 secondi dopo l'inizio dell'animazione e poi salterà a 0px - e l'animazione inizierà da lì. Inoltre, l'animazione dopo la fine salterà al valore iniziale:

html<div id="elem"></div>
css@keyframes move {
  from {
    margin-left: 0;
  }
  to {
    margin-left: 400px;
  }
}

#elem {
  margin-left: 300px;
  animation-fill-mode: none;
  animation-delay: 0s;
  animation-duration: 3s;
  animation-name: move;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  border: 1px solid black;
  width: 50px;
  height: 50px;
}

Результат:

Esempio . Valore backwards

In questo esempio margin-left è impostato al valore 300px per l'elemento, e per il primo fotogramma dell'animazione - a 0px. Inoltre per l'elemento è impostato animation-fill-mode al valore backwards, quindi l'elemento dopo il caricamento della pagina si posizionerà a 0px, e non a 300px, come avveniva per animation-fill-mode al valore none. Inoltre, l'animazione dopo la fine salterà al valore iniziale:

html<div id="elem"></div>
css@keyframes move {
  from {
    margin-left: 0;
  }
  to {
    margin-left: 400px;
  }
}

#elem {
  margin-left: 300px;
  animation-fill-mode: backwards;
  animation-delay: 0s;
  animation-duration: 3s;
  animation-name: move;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  border: 1px solid black;
  width: 50px;
  height: 50px;
}

Результат:

Esempio . Valore none e numero di ripetizioni uguale a 1

In questo esempio margin-left è impostato al valore 300px per l'elemento, e per il primo fotogramma dell'animazione - a 0px. Inoltre per l'elemento è impostato un ritardo animation-delay di 3 secondi, quindi l'elemento dopo il caricamento della pagina si posizionerà a 300px, e non a 0px, e rimarrà lì per 3 secondi dopo l'inizio dell'animazione e poi salterà a 0px - e l'animazione inizierà da lì. Poiché animation-fill-mode è impostato al valore none, dopo la riproduzione dell'animazione l'elemento tornerà al valore iniziale:

html<div id="elem"></div>
css@keyframes move {
  from {
    margin-left: 0;
  }
  to {
    margin-left: 400px;
  }
}

#elem {
  margin-left: 300px;
  animation-fill-mode: none;
  animation-delay: 3s;
  animation-duration: 3s;
  animation-name: move;
  animation-iteration-count: 1;
  animation-timing-function: linear;
  border: 1px solid black;
  width: 50px;
  height: 50px;
}

Результат:

Esempio . Valore forwards e numero di ripetizioni uguale a 1

In questo esempio animation-fill-mode è impostato al valore forwards, e il numero di ripetizioni dell'animazione - a 1. Dopo la riproduzione dell'animazione l'elemento rimarrà nella posizione in cui è finita l'animazione, e non salterà al punto di partenza.

Inoltre, margin-left è impostato al valore 300px per l'elemento, e per il primo fotogramma dell'animazione - a 0px. Inoltre per l'elemento è impostato un ritardo animation-delay di 3 secondi, quindi l'elemento dopo il caricamento della pagina si posizionerà a 300px, e non a 0px, e rimarrà lì per 3 secondi dopo l'inizio dell'animazione, e poi salterà a 0px - e l'animazione inizierà da lì:

html<div id="elem"></div>
css@keyframes move {
  from {
    margin-left: 0;
  }
  to {
    margin-left: 400px;
  }
}

#elem {
  margin-left: 300px;
  animation-fill-mode: forwards;
  animation-delay: 3s;
  animation-duration: 3s;
  animation-name: move;
  animation-iteration-count: 1;
  animation-timing-function: linear;
  border: 1px solid black;
  width: 50px;
  height: 50px;
}

Результат:

Esempio . Valore both e numero di ripetizioni uguale a 1

In questo esempio animation-fill-mode è impostato al valore both, e il numero di ripetizioni dell'animazione - a 1. Dopo il caricamento della pagina l'elemento si posizionerà nel primo fotogramma dell'animazione (a 0px, e non a 300px), e dopo la riproduzione dell'animazione l'elemento rimarrà nella posizione in cui è finita l'animazione, e non salterà al punto di partenza:

html<div id="elem"></div>
css@keyframes move {
  from {
    margin-left: 0;
  }
  to {
    margin-left: 400px;
  }
}

#elem {
  margin-left: 300px;
  animation-fill-mode: both;
  animation-delay: 3s;
  animation-duration: 3s;
  animation-name: move;
  animation-iteration-count: 1;
  animation-timing-function: linear;
  border: 1px solid black;
  width: 50px;
  height: 50px;
}

Результат:

Vedi anche

  • la proprietà animation-name,
    che imposta il nome dell'animazione
  • la proprietà animation-duration,
    che imposta la durata dell'animazione
  • la proprietà animation-delay,
    che imposta il ritardo prima dell'esecuzione dell'animazione
  • la proprietà animation-timing-function,
    che imposta la velocità di esecuzione dell'animazione
  • la proprietà animation-iteration-count,
    che imposta il numero di iterazioni dell'animazione
  • la proprietà animation-direction,
    che imposta la direzione dell'animazione
  • la proprietà animation-play-state,
    che permette di mettere in pausa l'animazione
  • la proprietà animation,
    che rappresenta una forma abbreviata per le animazioni
  • il comando @keyframes,
    che imposta i fotogrammi chiave dell'animazione
  • le transizioni fluide transition, che rappresentano un'animazione al passaggio del mouse sull'elemento