Transitions en CSS 3
Les transitions permettent de passer d'un affichage à un autre pour un même objet, d'un contenu à un autre, de façon progressive.
La liste de des éléments auxquels on peut donner un affichage progressif est donnée dans la spécification.
Démonstration
Passer la souris sur l'image ci-dessous et cliquer pour charger l'image en taille réelle.
Syntaxe de la propriété
- transition
-
Forme compacte, voir plus loin.
- transition-property
-
Indique à quelle propriété on fournit une transition. Par défaut all, toutes les propriétés.
Par exemple pour changer la couleur progressivement: -
transition-property:color;
- transition-duration
-
Définit la durée totale du temps de la transition. Par défaut la valeur est 0, il n'y a aucune transition.
Exemple, pour une durée d'une demi-seconde: -
transition-duration:0.5s
- transition-timing-function
-
Définit la forme de la progression dans le temps, avec des accélérations possibles durant la transition.
Cela est représenté par une courbe de bézier avec quatre paires de points dont la paire de départ (0,0) et la paire d'arrivée (1,1) sont implicites.
Les deux paires de coordonnées que l'on donne correspondent à deux points intermédiaires qui orientent la forme de la courbe.
Liste des valeurs possibles:
cubic-bezier(x1, y1, x2, y2): Les valeurs sont des nombres réels allant de 0 à 1.
ease: Par défaut, correspond à cubic-bezier(0.25, 0.1, 0.25, 1.0). Cela donne un départ et une arrivée ralentis.
linear: Une fonction linéraire, que l'on peut exprimer aussi par cubic-bezier(0.0, 0.0, 1.0, 1.0).
ease-in: cubic-bezier(0.42, 0, 1.0, 1.0). Départ ralenti.
ease-out: cubic-bezier(0, 0, 0.58, 1.0). Arrivée ralentie.
ease-in-out: cubic-bezier(0.42, 0, 0.58, 1.0). Départ et arrivée ralentis. - transition-delay
-
Indique à quel moment démarre la transition (par rapport à l'évènement qui la déclenche).
Par exemple pour un délai de réaction d'une seconde: -
transition-delay: 1s;
-
Par défaut le délai est de 0.
Forme compacte
Les quatre propriétés peuvent être réduites à une seule.
On place dans l'ordre: transition-property, transition-duration, transition-timing-function, transition-delay. Pas de virgules pour séparer les valeurs, comme usuel.
transition: all 2s ease 0;
On peut ommettre les dernières valeurs.
Utiliser des listes
On peut avoir une liste de groupes de propriétés séparées par une virgule:
transition: color 0.2s ease 1s, top 2s ease-in 0;
Les propriétés élémentaires comme la forme compacte peuvent comporter des listes séparées par une virgule:
transition-property:color,top;
transition-duraction:1s, 5s;
Les éléments des listes sont associés par leur position dans la liste. Une durée d'une seconde est attribuée à la propriété color, une durée de 5 secondes à la propriété top.
Code de la démonstration
Code HTML :
<div class="demo">
<a href="https://www.xul.fr/images/island.jpg"><img src="images/thumb-newyork.jpg" ></a>
<a href=""><img src="images/thumb-island.jpg"></a>
</div>
Code CSS :
.demo
{
margin-bottom:20px;
position:relative;
width:300px;
height:215px;
overflow:hidden;
}
.demo img
{
float: left;
margin:0;
-webkit-transition: all 0.3s ease-in;
-moz-transition: all 0.3s ease-in;
transition: all 0.3s ease-in;
border:none;
}
.demo a:hover img
{
margin-top:-215px;
}
Explications :
Les balises <a> sont nécessaires pour utiliser la propriété hover sous d'anciens navigateurs (même s'il n'y a pas de transition, cela permet de changer l'image).
Les évènements onMouseOver et onMouseOut ne fonctionnent pas ensemble dans ce cas de figure (j'ai essayé de les utiliser).
Les deux images sont affichées dans le calque mais la seconde est cachée grâce à la propriété overflow:hidden. Quand la souris passe sur le calque, le haut est décalé de la hauteur de la première image ce qui fait apparaître la seconde. Cela fonctionne avec tous les navigateurs, mais l'effet de transition ne s'applique qu'avec les plus récents.
Références