Pourquoi le débordement-y est-il requis pour un effet de parallaxe CSS ?
I have created a barebones parallax demo. This works fine, as you can see if you run the snippet below. However, it stops working if I remove the following CSS rule:
main {
overflow-y: auto;
}
Pourquoi est-il nécessaire d'inclure une règle pour une barre de défilement verticale, alors qu'il n'est pas nécessaire de faire défiler verticalement ?
body {
margin: 0;
}
main {
width:100vw;
height:100vh;
perspective: 2px;
/* overflow-y MUST be set to a certain value for parallax to work
* WORKS:
* + auto
* + hidden
* + overlay
* + scroll
* FAILS:
* - clip
* - inherit
* - initial
* - revert
* - unset
* - visible
*/
overflow-y: auto;
}
div {
position: absolute;
top: 0;
width: 99vw;
height: 100%;
}
div:nth-child(1) {
left: 0;
background-color: #900;
}
div:nth-child(2) {
left: 49.5vw;
background: rgba(0,192,0,0.5);
height: 80%;
top: 10%;
transform: translateZ(1px) scale(0.5);
z-index: 1;
}
div:nth-child(3) {
left: 99vw;
background-color: #009;
}
<body>
<main>
<div></div
><div></div
><div></div>
</main>
</body>
Solution du problème
Pourquoi est-il nécessaire d'inclure une règle pour une barre de défilement verticale, alors qu'il n'est pas nécessaire de faire défiler verticalement ?
Vous devez faire défiler verticalement mais vous devez faire défiler main
l'écran et non l'écran. Il y a un petit piège ici car la suppression du défilement du main
fera apparaître le défilement par défaut de l'écran et vous pensez que les deux sont identiques mais non. Nous devons faire défiler le principal car la perspective y est définie.
Réduisez légèrement la largeur/hauteur et vous comprendrez mieux. maintenant, si vous supprimez/ajoutez un débordement, vous verrez que c'est différent
body {
margin: 0;
}
main {
width: 90vw;
height: 90vh;
perspective: 2px;
overflow-y: auto;
}
div {
position: absolute;
top: 0;
width: 99vw;
height: 100%;
}
div:nth-child(1) {
left: 0;
background-color: #900;
}
div:nth-child(2) {
left: 49.5vw;
background: rgba(0, 192, 0, 0.5);
height: 80%;
top: 10%;
transform: translateZ(1px) scale(0.5);
z-index: 1;
}
div:nth-child(3) {
left: 99vw;
background-color: #009;
}
<main>
<div></div>
<div></div>
<div></div>
</main>
Commentaires
Enregistrer un commentaire