Encontrei uma maneira de fazer um contêiner div ocupar pelo menos a altura total de uma página, definindo min-height: 100%;
. No entanto, quando adiciono uma div aninhada e definida height: 100%;
, ela não se estende à altura do contêiner. Existe uma maneira de consertar isso?
html, body {
height: 100%;
margin: 0;
}
#containment {
min-height: 100%;
background: pink;
}
#containment-shadow-left {
height: 100%;
background: aqua;
}
<div id="containment">
<div id="containment-shadow-left">
Hello World!
</div>
</div>
display:flex
eflex-direction:column
e dar à criançaflex:1
.Respostas:
Este é um bug relatado pelo webkit (chrome / safari). Filhos de pais com altura mínima não podem herdar a propriedade height: https://bugs.webkit.org/show_bug.cgi?id=26559
Aparentemente, o Firefox também é afetado (não é possível testar no IE no momento)
Solução possível:
O erro não aparece quando o elemento interno tem posicionamento absoluto.
Veja http://jsfiddle.net/xrebB/
Editar em 10 de abril de 2014
Como atualmente estou trabalhando em um projeto para o qual realmente preciso de contêineres pai
min-height
e elementos filho que herdam a altura do contêiner, fiz mais algumas pesquisas.Primeiro: não tenho mais tanta certeza se o comportamento atual do navegador é realmente um bug. As especificações do CSS2.1 dizem:
Se eu colocar uma altura mínima no meu contêiner, não especificarei explicitamente sua altura; portanto, meu elemento deve ter uma
auto
altura. E é exatamente isso que o Webkit - e todos os outros navegadores - fazem.Segundo, a solução alternativa que encontrei:
Se eu definir meu elemento contêiner
display:table
comheight:inherit
ele, ele age exatamente da mesma maneira que se eu dessemin-height
100%. E - mais importante - se eu definir o elemento filho,display:table-cell
ele herdará perfeitamente a altura do elemento do contêiner - seja 100% ou mais.CSS completo:
A marcação:
Veja http://jsfiddle.net/xrebB/54/ .
fonte
Adicionar
height: 1px
ao contêiner pai. Funciona no Chrome, FF, Safari.fonte
height: 1px;
não substituirá a altura mínima. Muito pelo contrário. Esta é a melhor solução aqui ... demo: jsbin.com/mosaboyo/1/editheight: 1px;
funciona stackoverflow.com/questions/2341821/height100-vs-min-height100min-height
. Por exemplo, se houver texto suficiente, ele transbordará. Veja jsbin.com/vuyapitizo/1pensei em compartilhar isso, pois não vi isso em lugar nenhum, e é o que costumava consertar minha solução.
SOLUÇÃO :
min-height: inherit;
Eu tinha um pai com uma altura mínima especificada e precisava que um filho também tivesse essa altura.
Dessa forma, a criança agora atua como altura 100% da altura mínima.
Espero que algumas pessoas achem isso útil :)
fonte
min-height
. Quando a altura dos pais é maior, o filho não se expande.Isso foi adicionado em um comentário por @jackocnr, mas eu perdi. Para navegadores modernos, acho que essa é a melhor abordagem.
Faz com que o elemento interno encha todo o contêiner se ele for muito pequeno, mas expande a altura do contêiner se for muito grande.
fonte
A solução de Kushagra Gour funciona (pelo menos no Chrome e no IE) e resolve o problema original sem a necessidade de usar
display: table;
edisplay: table-cell;
. Veja plunker: http://plnkr.co/edit/ULEgY1FDCsk8yiRTfOWUA configuração
min-height: 100%; height: 1px;
na div externa faz com que sua altura real seja de pelo menos 100%, conforme necessário. Também permite que a div interna herde corretamente a altura.fonte
Além das respostas existentes, também há unidades de janela de exibição
vh
para usar. Snippet simples abaixo. É claro que também pode ser usado juntocalc()
, por exemplo,min-height: calc(100vh - 200px);
quando o cabeçalho e o rodapé da página têm200px
altura juntos.fonte
Eu não acredito que isso seja um bug nos navegadores. Todos se comportam da mesma maneira - ou seja, quando você para de especificar alturas explícitas, min-height é basicamente um "último passo".
Parece ser exatamente como a especificação do CSS 2.1 sugere: http://www.w3.org/TR/CSS2/visudet.html#the-height-property
Portanto, como o
min-height
pai não possui umheight
conjunto de propriedades explícito , o padrão é automático.Existem algumas maneiras de contornar isso, possivelmente usando
display: table-cell
estilos mais recentes, como o flexbox, se isso for possível para os navegadores do seu público-alvo. Você também pode subverter isso em determinadas situações usando as propriedadestop
ebottom
em um elemento interno absolutamente posicionado, o que fornece 100% de altura sem especificar isso.fonte
Embora
display: flex;
tenha sido sugerido aqui, considere usardisplay: grid;
agora que é amplamente suportado . Por padrão, o único filho de uma grade preencherá inteiramente seu pai.fonte
Para os googlers:
Essa solução alternativa para jquery faz com que #containment obtenha uma altura automaticamente (por, height: auto) e, em seguida, obtenha a altura real atribuída como um valor de pixel.
fonte
A melhor maneira de conseguir isso hoje em dia é usar
display: flex;
. No entanto, você pode ter um problema ao tentar oferecer suporte ao IE11. De acordo com https://caniuse.com usando flexbox:Solução compatível com Internet Explorer
A solução é usar
display: table;
no pai edisplay: table-row;
no filho, ambosheight: 100%;
como substitutosmin-height: 100%;
.A maioria das soluções listadas aqui usam
display:
table
,table-row
e / outable-cell
, mas eles não replicar o mesmo comportamentomin-height: 100%;
, que é:height
propriedade);min-height
;Ao usar esta solução, o comportamento é o mesmo e a propriedade
min-height
não é necessária, o que permite contornar o bug.Explicação
A razão pela qual funciona é porque, diferentemente da maioria dos elementos, os elementos que usam
display:
table
etable-row
sempre serão tão altos quanto seu conteúdo. Isso faz com que suasheight
propriedades se comportem de maneira semelhante amin-height
.Solução em ação
fonte
Outra solução JS, que é fácil e pode ser usada para evitar uma solução não-fácil apenas de CSS ou de marcação / hacky extra.
W / jQuery:
Diretiva angular:
Para ser usado assim:
fonte
Isso geralmente funciona para mim: