Avec ce qui suit HTML
etCSS
.container {
position: relative;
border: solid 1px red;
height: 256px;
width: 256px;
overflow: auto;
}
.full-height {
position: absolute;
top: 0;
left: 0;
right: 128px;
bottom: 0;
background: blue;
}
<div class="container">
<div class="full-height">
</div>
</div>
L'intérieur div
occupe toute la tête du récipient comme souhaité. Si j'ajoute maintenant un autre contenu, un flux, au conteneur tel que:
.container {
position: relative;
border: solid 1px red;
height: 256px;
width: 256px;
overflow: auto;
}
.full-height {
position: absolute;
top: 0;
left: 0;
right: 128px;
bottom: 0;
background: blue;
}
<div class="container">
<div class="full-height">
</div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur mollitia maxime facere quae cumque perferendis cum atque quia repellendus rerum eaque quod quibusdam incidunt blanditiis possimus temporibus reiciendis deserunt sequi eveniet necessitatibus
maiores quas assumenda voluptate qui odio laboriosam totam repudiandae? Doloremque dignissimos voluptatibus eveniet rem quasi minus ex cumque esse culpa cupiditate cum architecto! Facilis deleniti unde suscipit minima obcaecati vero ea soluta odio cupiditate
placeat vitae nesciunt quis alias dolorum nemo sint facere. Deleniti itaque incidunt eligendi qui nemo corporis ducimus beatae consequatur est iusto dolorum consequuntur vero debitis saepe voluptatem impedit sint ea numquam quia voluptate quidem.
</div>
Ensuite, le conteneur défile comme souhaité, cependant l'élément positionné de manière absolue n'est plus ancré au fond du conteneur mais s'arrête au fond visible initial du conteneur. Ma question est; y a-t-il un moyen d'avoir l'élément positionné de manière absolue à la hauteur de défilement complète de son conteneur sans utiliser JS
?
top: 0;
cela ne fonctionne tout simplement plus.innerHeight
, ce sera difficile. Malheureusement,position:fixed
ne fonctionne pas à l'intérieur du conteneur car il est hors du flux, donc cette `` solution de contournement '' ne fonctionnera pas également :(Réponses:
Vous devez envelopper le texte dans un
div
élément et inclure l'élément absolument positionné à l'intérieur.Css:
Définir la position de la div interne sur
relative
fait que les éléments de position absolue à l'intérieur de celui-ci basent leur position et leur hauteur sur elle plutôt que sur la.container
div, qui a une hauteur fixe. Sans l'intérieur, relativement positionnédiv
, le.full-height
div calculera toujours ses dimensions et sa position en fonction de.container
.Afficher l'extrait de code
http://jsfiddle.net/M5cTN/
la source
fill-height
élément défile clairement avec le contenu, le PO ne voulait-il pas qu'il soit ancré? (En changeant le fond bleu en une image d'arrière-plan, vous pouvez voir ce que je veux dire quand je dis que ce n'est pas ancré jsfiddle.net/M5cTN/82 )position: fixed;
résoudra votre problème. À titre d'exemple, passez en revue ma mise en œuvre d'une superposition de zone de message fixe (remplie par programme):Et dans le HTML
Quand
#data
devient plus long que l'écran,#mess
garde sa position sur l'écran, tout en#data
défilant en dessous.la source
transform: translate3d(0,0,0);
sur le parent feraposition: fixed
devenir relatif au parent. Source coderwall.com/p/2wzj-a/…Donc gaiour a raison, mais si vous recherchez un élément pleine hauteur qui ne défile pas avec le contenu, mais qui est en fait la hauteur du conteneur, voici le correctif. Avoir un parent avec une hauteur qui provoque un débordement, un conteneur de contenu qui a une hauteur de 100% et
overflow: scroll
, et un frère peuvent alors être positionnés en fonction de la taille du parent, pas de la taille de l'élément de défilement. Voici le violon: http://jsfiddle.net/M5cTN/196/et le code correspondant:
html:
css:
la source
Je suis tombé sur cette situation et créer un div supplémentaire n'était pas pratique. J'ai fini par configurer le
full-height
div surheight: 10000%; overflow: hidden;
Ce n'est clairement pas la solution la plus propre, mais cela fonctionne très vite.
la source