Impossible de trouver la solution pour cela. Fondamentalement, ce que j'essaie de réaliser, c'est d'avoir un élément avec le position: sticky
apparaît avec une barre de défilement s'il y a plus de contenu que la hauteur du navigateur.
Je ne veux pas utiliser position: fixed
car cela ajoutera une douleur supplémentaire dans le cou.
Voici l'exemple de la façon dont je m'attendrais à ce que cela fonctionne:
.placeholder {
height: 200vh;
width: 50%;
float: right;
}
.child {
position: fixed;
top: 0;
bottom: 0;
height: 100%;
overflow-y: auto;
}
<div class="parent">
<div class="placeholder"></div>
<div class="child">
some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br /> some long text
<br />
</div>
</div>
Voici un exemple avec le position: sticky
où le overflow
ne fait rien:
.placeholder {
height: 200vh;
width: 50%;
float: right;
}
.child {
position: sticky;
top: 0;
bottom: 0;
height: 100%;
overflow-y: auto;
}
<div class="parent">
<div class="placeholder"></div>
<div class="child">
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
some long text <br />
</div>
</div>
Toute explication/solution appréciée.
Assurez-vous d'utiliser Firefox lors des tests
Il est important de comprendre que les éléments sticky
sont d'abord traités comme un élément relative
et puis un fixed
élément (voir MDN ). Par conséquent, vous devez d'abord le regarder comme un élément relatif. Si vous donnez une hauteur de 100% à un élément relatif, alors rien ne se passe vraiment à moins que son élément parent ait une hauteur définie.
Si vous voulez que votre élément collant ait également une barre de défilement, vous devez lui donner une hauteur significative. Je suggère d'utiliser la hauteur de la fenêtre d'affichage:
.child {
position: sticky;
top: 0;
bottom: 0;
height: 50vh;
overflow-y: auto;
}
Pour mémoire - le "caractère collant" ne semble pas fonctionner comme prévu dans FF ou Safari en termes d'élément devenant fixed
pendant le défilement. Je ne me préoccupe pas de cela - je me concentre uniquement sur la question du débordement.