Attivazione di animazioni e transizioni CSS
Le animazioni CSS consentono agli elementi web di passare da una configurazione di stile CSS all'altra. Il browser può avviare animazioni definite al caricamento, ma le animazioni CSS attivate da eventi si basano sull'aggiunta e sulla rimozione di classi. AMP supporta entrambi i tipi di animazione.
L'uso di oggetti CSS è preferibile in caso di animazioni più piccole e limitate che non richiedono temporizzazioni precise.
Definizione di CSS e fotogrammi chiave
Le definizioni CSS possono essere inserite in AMP nei seguenti modi:
- All'interno di tag
<style amp-custom>
contenuti nell'intestazione del documento. Tali elementi sono limitati a 20.000 byte. - Stili inline. Ogni istanza di uno stile inline ha un limite di 1.000 byte. Gli stili inline sono conteggiati nel limite di 20.000 byte definito per i componenti
<style amp-custom>
. - All'interno di tag
<style amp-keyframes>
contenuti nell'intestazione del documento. Tali elementi sono limitati a 500.000 byte e soggetti alle restrizioni delle proprietà dei fotogrammi principali.
Per mantenere le pagine agili e veloci, AMP applica un limite di 75.000 byte agli elementi CSS nel tag <amp style-custom>
. Sebbene sia possibile utilizzarli per definire gli stili di animazione, il limite di 500.000 byte all'interno del tag <amp style-keyframes>
consente animazioni più ricche che non porteranno via preziose risorse di stile nella definizione del sito.
Per mantenere gli annunci agili e veloci, AMP applica un limite di 20.000 byte agli elementi CSS nel tag <amp style-custom>
. Sebbene sia possibile utilizzarli per definire gli stili di animazione, il limite di 500.000 byte all'interno del tag <amp style-keyframes>
consente animazioni più ricche che non porteranno via preziose risorse di stile nella definizione del sito.
<style amp-custom>
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation: mymove 5s infinite;
}
</style>
</head>
<body>
<div></div>
<style amp-keyframes>
@keyframes mymove {
0% {transform: translatey(0px);}
25% {transform: translatey(200px);}
75% {transform: translatey(50px);}
100% {transform: translatey(100px);}
}
</style>
</body>
Aggiunta, rimozione e attivazione/disattivazione di classi
L'azione AMP toggleClass
consente l'aggiunta e la rimozione di classi da elementi definiti.
elementName.toggleClass(class="className")
Puoi attivare o disattivare una classe sullo stesso elemento con cui desideri che gli utenti interagiscano, ad esempio un menu animato per la scelta di hamburger.
<div
id="hamburger"
tabindex="1"
role="button"
on="tap:hamburger.toggleClass(class='close')"
></div>
L'azione toggleClass
può essere applicata anche ad altri elementi e permette di passare da una classe all'altra aggiungendo l'attributo force
.
<button
on="tap:magicBox.toggleClass(class='invisible', force=true),magicBox.toggleClass(class='visible', force=false)"
>
Disappear
</button>
<button
on="tap:magicBox.toggleClass(class='visible', force=true),magicBox.toggleClass(class='invisible', force=false)"
>
Reappear
</button>
Se è necessario rimuovere una classe ed impedirne altre applicazioni, occorre aggiungere l'attributo force
con un valore false
. Se è necessario aggiungere una classe ed impedirne la rimozione, occorre aggiungere l'attributo force
con un valore true
.
Animazioni con elementi CSS e stati
Si possono aggiungere e rimuovere tutte le classi CSS con stati che occorre, utilizzando amp-bind
.
<head>
<script
async
custom-element="amp-bind"
src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"
></script>
<style amp-custom>
div {
height: 100px;
width: 100px;
margin: 1em;
background-color: green;
margin-left: 100px;
transition: 2s;
}
.visible {
opacity: 1;
}
.invisible {
opacity: 0;
}
.left {
transform: translatex(-50px);
}
.right {
transform: translatex(50px);
}
button {
margin-top: 1rem;
margin-left: 1rem;
}
</style>
</head>
<body>
<amp-state id="magicBox">
<script type="application/json">
{
"visibleBox": {
"className": "visible"
},
"invisibleBox": {
"className": "invisible"
},
"moveLeft": {
"className": "left"
},
"moveRight": {
"className": "right"
}
}
</script>
</amp-state>
<div [class]="magicBox[animateBox].className"></div>
<button on="tap:AMP.setState({animateBox: 'invisibleBox'})">Disappear</button>
<button on="tap:AMP.setState({animateBox: 'visibleBox'})">Reappear</button>
<button on="tap:AMP.setState({animateBox: 'moveLeft'})">Move Left</button>
<button on="tap:AMP.setState({animateBox: 'moveRight'})">Move Right</button>
</body>
Per pefinire più animazioni di classe, occorre aggiungere dapprima un elenco delle classi CSS all'interno del tag <style amp-custom>
nella sezione head
del documento:
.visible {
opacity: 1;
}
.invisible {
opacity: 0;
}
.left {
transform: translatex(-50px);
}
.right {
transform: translatex(50px);
}
Quindi occorre abbinare ogni classe a uno stato:
<amp-state id="magicBox">
<script type="application/json">
{
"visibleBox": {
"className": "visible"
},
"invisibleBox": {
"className": "invisible"
},
"moveLeft": {
"className": "left"
},
"moveRight": {
"className": "right"
}
}
</script>
</amp-state>
E collegare l'elemento con le classi:
<div [class]="magicBox[animateBox].className"></div>
Gli stati sono cambiati da azioni o eventi AMP collegati. L'esempio seguente cambia lo stato a seguito dell'interazione utente:
<button on="tap:AMP.setState({animateBox: 'invisibleBox'})">Disappear</button>
<button on="tap:AMP.setState({animateBox: 'visibleBox'})">Reappear</button>
<button on="tap:AMP.setState({animateBox: 'moveLeft'})">Move Left</button>
<button on="tap:AMP.setState({animateBox: 'moveRight'})">Move Right</button>
L'uso di amp-bind
in questo modo imposta esplicitamente la classe su quella definita. Non sarà necessario indicare la rimozione di altre classi.