L'idée ici est de créer l'apparence d'un diaporama sans le carrousel. En d'autres termes, nous faisons une série d'images la diapositive de gauche à droite et répétons une fois la fin des images atteinte. L'astuce est que nous utilisons une seule image de fond avec des animations CSS pour (…)
L'idée ici est de créer l'apparence d'un diaporama sans le carrousel. En d'autres termes, nous faisons une série d'images la diapositive de gauche à droite et répétons une fois la fin des images atteinte.
L'astuce est que nous utilisons une seule image d'arrière-plan avec des animations CSS pour la déplacer sur l'écran et la répéter lorsque c'est fait. Cela crée l'illusion d'une galerie d'images lorsque nous utilisons vraiment une seule image.
Configurer le HTML
Voici un schéma de la manière dont notre HTML doit être structuré:
![](9679952/infinite_scrolling_background_image_css-tricks_2.jpg.webp)
![](9679952/infinite_scrolling_background_image_css-tricks_2.jpg.webp)
Nous travaillons avec deux éléments: celui que nous appelons .container
qui correspond à la largeur exacte de la fenêtre et un autre que nous appelons .sliding-background
qui se trouve derrière .container
et le déborde. Essentiellement, nous utilisons le .container
comme masque pour masquer toute la largeur de la .sliding-background
pendant qu'elle défile sur l'écran.
Cela signifie que nous n'avons besoin que de créer deux éléments dans le balisage HTML:
Positionnement des éléments
Allons-y et ajoutons du CSS qui positionnera correctement nos deux éléments.
.container ( overflow: hidden; ) .sliding-background ( height: 500px; width: 5076px; )
Notre .container
utilise la overflow
propriété qui masquera tout ce qui est visuellement contenu à l'extérieur. Pensez-y comme un recadrage sur une photo. Il peut y avoir des choses supplémentaires à l'extérieur du conteneur, mais le conteneur nous empêche de le voir.
C'est là que notre .sliding-background
entre en jeu. Il est défini sur une largeur ridicule qui déborderait la plupart des fenêtres. Et c'est le truc: ça devrait être quelque chose qui déborderait du conteneur. Dans ce cas, nous utilisons une 5076px
largeur choisie quelque peu arbitrairement qui devrait dépasser la plupart des fenêtres de navigateur.
Création de l'image d'arrière-plan
Nous avons besoin d'une image si nous créons l'illusion d'une galerie de diaporamas, non? C'est notre prochain ordre du jour.
Rappelez-vous comment nous avons mentionné que la 5076px
largeur quelque peu arbitrairement choisie pour le fond coulissant? Eh bien, c'est arbitraire, mais intentionnel dans le sens où il est bien divisible par 3, ce qui correspond au timing d'une boucle d'une minute, qui reviendra un peu plus tard. Cela signifie que la toile de notre image d'arrière-plan est 5076 / 3
ou 1692px
. En fin de compte, notre arrière-plan se répétera un total de trois fois en une minute dans une boucle infinie. Math pour la victoire!
La 500px
hauteur est vraiment arbitraire. Cela peut être ce que vous voulez et à condition que ce soit également la taille réelle du fichier image d'arrière-plan.
Le fichier Photoshop utilisé pour créer l'image d'arrière-plan de la démo au début de ce chapitre est disponible au téléchargement si vous recherchez un point de départ.
Une fois l'image enregistrée (et optimisée!), Voici ce que nous utiliserons comme image de fond dans le CSS:
.sliding-background ( background: url("… path/to/image") repeat-x; height: 500px; width: 5076px; /* The image width times 3 */ )
Génial! Cela nous donne l'image gigantesque qui déborde du conteneur et peut maintenant être utilisée pour faire défiler l'écran à l'infini.
Animation de l'arrière-plan
Très bien, faisons bouger cette chose. Nous voulons qu'il aille de gauche à droite dans une boucle qui se répète encore et encore pour créer un effet transparent que l'image continue pour toujours.
Tout d'abord, définissons l'animation CSS:
@keyframes .slide ( 0%( transform: translate3d(0, 0, 0); ) 100%( transform: translate3d(-1692px, 0, 0); /* The image width */ ) )
Nous utilisons la transform
propriété pour positionner l'image de gauche sur le bord gauche du conteneur lorsque l'animation commence, comme ceci:
![](9679952/infinite_scrolling_background_image_css-tricks_3.jpg.webp)
![](9679952/infinite_scrolling_background_image_css-tricks_3.jpg.webp)
Au moment où l'animation sera terminée, elle aura transformé la position négativement (de gauche à droite) d'une quantité correspondant à la largeur exacte de notre image. Et, étant donné que la .sliding-background
largeur est trois fois la largeur de l'image réelle, l'image se répète trois fois entre 0% et 100% avant de recommencer.
Remarque: la raison pour laquelle nous utilisons un
du tout, plutôt que d'animer background-position
sur le principal
, c'est pour que l'on puisse utiliser un animé transform
pour faire le mouvement, ce qui est beaucoup plus performant.
OK, arrondissons les choses en appelant notre slide
animation sur la .sliding-background
classe:
.sliding-background ( background: url("… path/to/image") repeat-x; height: 560px; width: 5076px; animation: slide 60s linear infinite; )
La animation
propriété indique à l ' .sliding-background
d'utiliser l' slide
animation et de l'exécuter pendant une minute à la fois dans une boucle linéaire et infinie.
Mettre tous ensemble
.container ( overflow: hidden; ) .sliding-background ( background: url("… path/to/image") repeat-x; height: 560px; width: 5076px; animation: slide 60s linear infinite; ) @keyframes slide( 0%( transform: translate3d(0, 0, 0); ) 100%( transform: translate3d(-1692px, 0, 0); ) )