Termes CSS clés employés : transform:translate(), transform:rotate().
Compatibilité navigateurs : IE10+, Firefox16+. Chrome et Safari avec le préfixe -webkit-.
Réaliser un carrousel de photographies présenté en 3D et à défilement continu.
Ce problème n’est en pratique qu’un dérivé du problème précédent. Un élément conteneur
div contient des éléments renfermant eux-mêmes les différentes images.
Chaque face subit une rotation à l’aide de la fonction transform:translate pour être mise
en place correctement, le conteneur se voyant appliquer transform-style:preserve3D afin de pouvoir être manipulé en bloc.
Pour afficher les différentes faces, on applique une rotation au conteneur.
La structure HTML est un élément conteneur div, renfermant un élément div constituant le carrousel
et renfermant le contenu composé d’éléments div contenant les images en nombre variable.
Tout autre contenu pourrait être ajouté à ces éléments.
<div class="conteneur">
<div id="carrousel">
<div><img src=adresseimage1></div>
<div><img src=adresseimage2></div>
…
<div><img src=adresseimagen></div>
</div>
</div>
Le code CSS définit d’abord l’élément conteneur en fixant sa profondeur de fuite.
.conteneur {
margin: 200px;
width: 240px;
height: 240px;
position: relative;
perspective: 1100px;
}
L’élément carrousel est ensuite défini. La fonction transform-style: preserve-3d
garantit qu’il sera traité comme bloc unique, ses enfants partageant son contexte 3D.
#carrousel {
width: 100%;
height: 100%;
position: absolute;
transform-style: preserve-3d;
}
Sont ensuite définies les caractéristiques globales des éléments contenant les photographies
individuelles…
#carrousel div {
display: block;
position: absolute;
width: 200px;
height: 200px;
left: 5px;
top: 10px;
border: 1px solid black;
}
… puis les caractéristiques individuelles de chaque membre du carrousel.
#carrousel div:nth-child(1) {transform: rotateY( 0deg) translateZ(182px);}
#carrousel div:nth-child(2) {transform: rotateY( 60deg) translateZ(182px);}
#carrousel div:nth-child(3) {transform: rotateY(120deg) translateZ(182px);}
#carrousel div:nth-child(4) {transform: rotateY(180deg) translateZ(182px);}
#carrousel div:nth-child(5) {transform: rotateY(240deg) translateZ(182px);}
#carrousel div:nth-child(6) {transform: rotateY(300deg) translateZ(182px);}
Remarquez que, plutôt que d’employer des classes comme dans le cas du cube, nous avons ici
recours à la pseudo-classe nth-child(n). Cette étape est toutefois un peu plus
délicate, car les paramètres à employer dépendent du nombre de photographies ainsi que de
la taille unitaire de chaque photographie.
(taille de l’élément+intervalle/2)/tangente(angle/2)
soit ici (210/2)/tang(60/2)=105/tang(30)=182
En augmentant cette valeur vous augmentez l’écartement visible entre les images.
Il ne reste qu’à définir l’animation… Contrairement à celle du cube, elle n’agit ici que sur le plan horizontal.
#carrousel {
…
animation: tourneCarrousel 25s infinite ease-in-out;
}
/*animation css*/
@keyframes tourneCarrousel {
0% {transform: rotateY( 0deg ) ;}
100% {transform: rotateY( 360deg ) ;}






Comme pour le cube encore, pour obtenir un défilement image par image il faudrait recourir à des boutons et à un script. Pour passer à l’image suivante, on appliquerait simplement transform: rotateY(60deg), et transform: rotateY(-60deg) pour atteindre l’image précédente.
|
|---|