Com o seguinte HTML
eCSS
.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>
O interior div
ocupa toda a parte superior do recipiente conforme desejado. Se eu adicionar algum outro conteúdo de fluxo ao contêiner, como:
.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>
Em seguida, o contêiner rola conforme desejado, no entanto, o elemento posicionado absolutamente não está mais ancorado ao fundo do contêiner, mas para no fundo visível inicial do contêiner. Minha pergunta é; existe alguma maneira de ter o elemento posicionado absolutamente ser a altura de rolagem completa de seu contêiner sem usar JS
?
top: 0;
lo, ele simplesmente não funcionará mais.innerHeight
, isso será difícil. Infelizmenteposition:fixed
não funciona dentro do contêiner porque está fora do fluxo, então essa 'solução alternativa' também não funcionaria :(Respostas:
Você precisa quebrar o texto em um
div
elemento e incluir o elemento posicionado absolutamente dentro dele.Css:
Definir a posição do div interno
relative
faz com que os elementos de posição absolutamente dentro dele baseiem sua posição e altura nele em vez de no.container
div, que tem uma altura fixa. Sem o interno, relativamente posicionadodiv
, o.full-height
div sempre calculará suas dimensões e posição com base em.container
.Exibir trecho de código
http://jsfiddle.net/M5cTN/
fonte
fill-height
elemento está claramente rolando com o conteúdo, o OP não o queria ancorado? (Ao mudar o fundo azul para uma imagem de fundo, você pode ver o que quero dizer quando digo que não está ancorado jsfiddle.net/M5cTN/82 )position: fixed;
vai resolver seu problema. Como exemplo, analise minha implementação de uma sobreposição de área de mensagem fixa (preenchida de forma programática):E no HTML
Quando
#data
fica mais longo que a#mess
tela, mantém sua posição na tela, enquanto#data
rola abaixo dela.fonte
transform: translate3d(0,0,0);
no pai fará composition: fixed
que se torne parente do pai. Fonte coderwall.com/p/2wzj-a/…Portanto, gaiour está certo, mas se você está procurando um item de altura total que não rola com o conteúdo, mas é na verdade a altura do contêiner, aqui está a correção. Tenha um pai com uma altura que causa estouro, um contêiner de conteúdo que tem 100% de altura
overflow: scroll
e um irmão pode ser posicionado de acordo com o tamanho do pai, não o tamanho do elemento de rolagem. Aqui está o violino: http://jsfiddle.net/M5cTN/196/e o código relevante:
html:
css:
fonte
Corri para essa situação e criar um div extra foi impraticável. Acabei definindo o
full-height
div paraheight: 10000%; overflow: hidden;
Claramente não é a solução mais limpa, mas funciona muito rápido.
fonte