Eu tenho um layout com duas colunas - uma esquerda div
e uma direita div
.
O lado direito div
está cinza background-color
e eu preciso que ele se expanda verticalmente, dependendo da altura da janela do navegador do usuário. Neste momento, background-color
termina no último conteúdo div
.
Eu tentei height:100%
, min-height:100%;
etc.
height
propriedade com valores percentuais: stackoverflow.com/a/31728799/3597276Respostas:
Existem algumas unidades de medida CSS 3 chamadas:
Comprimentos de porcentagem de viewport (ou relativos à viewport)
O que são comprimentos de porcentagem de viewport?
A partir da recomendação de candidato W3 vinculada acima:
Essas unidades são
vh
(altura da viewport),vw
(largura da viewport),vmin
(comprimento mínimo da viewport) evmax
(comprimento máximo da viewport).Como isso pode ser usado para fazer um divisor preencher a altura do navegador?
Para esta pergunta, podemos usar
vh
:1vh
é igual a 1% da altura da janela de visualização. Ou seja,100vh
é igual à altura da janela do navegador, independentemente de onde o elemento esteja situado na árvore DOM:HTML
CSS
Isso é literalmente tudo o que é necessário. Aqui está um exemplo JSFiddle disso em uso.
Quais navegadores suportam essas novas unidades?
Atualmente, isso é suportado em todos os principais navegadores atualizados, além do Opera Mini. Confira Posso usar ... para obter mais suporte.
Como isso pode ser usado com várias colunas?
No caso da pergunta em questão, apresentando um divisor esquerdo e um direito, aqui está um exemplo do JSFiddle mostrando um layout de duas colunas envolvendo ambos
vh
evw
.Qual é a
100vh
diferença100%
?Veja este layout, por exemplo:
A
p
tag aqui é definida como 100% de altura, mas como a sua contémdiv
200 pixels de altura, 100% de 200 pixels se tornam 200 pixels, e não 100% dabody
altura. Em100vh
vez disso, usar significa que ap
tag terá 100% de alturabody
independentemente dadiv
altura. Dê uma olhada neste JSFiddle que o acompanha para ver facilmente a diferença!fonte
min-height:100vh
parece contornar isso.Se você deseja definir a altura de um
<div>
ou de qualquer elemento, também deve definir a altura de<body>
e<html>
para 100%. Então você pode definir a altura do elemento com 100% :)Aqui está um exemplo:
fonte
html { height: 100%*number of blocks; }
,body { height: 100%;}
,#div { height: 100%/number of blocks; }
. Então se você tem 3 seções, seráhtml { height: 300%; } body { height: 100%; } #div { height: 33.3% }
Se você conseguir posicionar absolutamente seus elementos,
faria isso.
fonte
position:relative
e sua altura não é 100% da janela de visualização. Ele ajustará a parte superior e inferior do próximo ancestral relativo ou absoluto.Você pode usar a unidade view-port em CSS:
HTML:
CSS:
fonte
* { box-sizing: border-box; }
para impedir que isso aconteça.Você pode usar
vh
neste caso, que é relativo a 1% da altura da janela de visualização ...Isso significa que, se você quiser cobrir a altura, basta usar
100vh
.Olhe a imagem abaixo que eu desenho para você aqui:
Experimente o snippet que criei para você, como abaixo:
fonte
paddings/margins
Todas as outras soluções, incluindo a mais votada,
vh
ficam abaixo do ideal quando comparadas ao modelo flexível solução de .Com o advento do modelo flexível de CSS , resolver o problema de 100% de altura se torna muito, muito fácil: use
height: 100%; display: flex
no pai eflex: 1
filho. Eles ocupam automaticamente todo o espaço disponível em seu contêiner.Observe como são simples a marcação e o CSS. Sem hacks de mesa ou qualquer coisa.
O modelo flex é suportado por todos os principais navegadores , bem como pelo IE11 +.
Saiba mais sobre o modelo flexível aqui.
fonte
overflow-y: auto;
possível evitar que "os recipientes excedam a altura do corpo original".Você não menciona alguns detalhes importantes, como:
Aqui está uma possibilidade:
Existem muitas variações, dependendo de quais colunas precisam ser corrigidas e quais são líquidas. Você também pode fazer isso com posicionamento absoluto, mas geralmente encontrei melhores resultados (principalmente em termos de navegador cruzado) usando flutuadores.
fonte
Isto é o que funcionou para mim:
Use em
position:fixed
vez deposition:absolute
, dessa forma, mesmo se você rolar para baixo, a divisão será expandida até o final da tela.fonte
Aqui está uma correção para a altura.
No seu uso de CSS:
Para navegadores que não suportam
vh-units
, use modernizr.Adicione este script (para adicionar detecção
vh-units
)Finalmente, use esta função para adicionar a altura da janela de visualização
#your-object
se o navegador não suportarvh-units
:fonte
100%
funciona de maneira diferente para largura e altura.Quando você especifica
width: 100%
, significa "ocupar 100% da largura disponível do elemento pai ou da largura da janela".Quando você especifica
height: 100%
, significa apenas "ocupar 100% da altura disponível do elemento pai". Isso significa que, se você não especificar uma altura em um elemento de nível superior, a altura de todos os filhos será uma0
ou a altura do pai, e é por isso que você precisa definir o elemento superior para ter umamin-height
altura da janela.Eu sempre especifico que o corpo tem uma altura mínima de 100vh e facilita o posicionamento e os cálculos,
fonte
Adicione
min-height: 100%
e não especifique uma altura (ou coloque-a no modo automático). Ele fez o trabalho totalmente para mim:fonte
100vw === 100% da largura da viewport.
100vh === 100% da altura da viewport.
Se você deseja definir o
div
largura ou a altura 100% do tamanho da janela do navegador, use:Para largura:
100vw
Para altura:
100vh
Ou se você deseja definir um tamanho menor, use a
calc
função CSS . Exemplo:fonte
Existem vários métodos disponíveis para definir a altura de
<div>
100%.Método (A):
Método (B) usando vh:
Método (c) usando caixa flexível:
fonte
Isso funcionou para mim:
Retirado desta página .
fonte
A maneira mais simples é fazer assim.
fonte
Tentar definir
height:100%
emhtml
&body
E se você quiser 2 div height same use ou defina a
display:flex
propriedade do elemento pai .fonte
Mesmo com todas as respostas aqui, fiquei surpreso ao descobrir que ninguém realmente resolveu o problema. Se eu usei
100vh
height
/min-height
, o layout foi interrompido quando o conteúdo era maior que uma página. Se eu usasse100%
height
/min-height
, o layout foi interrompido quando o conteúdo era menor que a altura da página.A solução que encontrei, que resolveu os dois casos, foi combinar as duas principais respostas:
fonte
Basta usar a unidade "vh" em vez de "px", o que significa altura da porta de visualização.
fonte
Os elementos de bloco consomem toda a largura do pai, por padrão.
É assim que eles atendem aos requisitos de design, que devem ser empilhados verticalmente.
Esse comportamento, no entanto, não se estende à altura.
Por padrão, a maioria dos elementos tem a altura de seu conteúdo (
height: auto
).Ao contrário da largura, você precisa especificar uma altura se desejar espaço extra.
Portanto, lembre-se destas duas coisas:
fonte
Aqui está algo que não é exatamente como o que você tinha nas respostas anteriores, mas pode ser útil para alguns:
https://jsfiddle.net/newdark/qyxkk558/10/
fonte
Use CSS FlexBox
O Flexbox é um ajuste perfeito para esse tipo de problema. Embora seja conhecido principalmente por dispor o conteúdo na direção horizontal, o Flexbox realmente funciona tão bem quanto para problemas de layout vertical. Tudo o que você precisa fazer é agrupar as seções verticais em um contêiner flexível e escolher quais deseja expandir. Eles ocupam automaticamente todo o espaço disponível em seu contêiner.
fonte
Uma das opções está usando a tabela CSS. Possui excelente suporte ao navegador e funciona até no Internet Explorer 8.
Exemplo JSFiddle
fonte
Tente isto - testado:
Edição: atualização 2020:
Você pode usar
vh
agora:fonte
Você pode usar
display: flex
eheight: 100vh
fonte
Você precisa fazer duas coisas, uma é definir a altura para 100%, o que você já fez. Segundo, defina a posição como absoluta. Isso deve fazer o truque.
Fonte
fonte
vh
vez disso.vh
se você planeja usar o design responsivo em dispositivos móveis.Experimente o seguinte CSS:
fonte
Na verdade, o que funcionou melhor para mim foi usar a
vh
propriedade.No meu aplicativo React, eu queria que o div correspondesse à página alta mesmo quando redimensionado. Eu tentei
height: 100%;
,overflow-y: auto;
mas nenhum deles funcionou ao configurá-height:(your percent)vh;
lo como pretendido.Nota: se você estiver usando preenchimento, cantos arredondados, etc., certifique-se de subtrair esses valores da
vh
porcentagem da sua propriedade, ou adicione uma altura extra e faça aparecer as barras de rolagem. Aqui está minha amostra:fonte
box-sizing: border-box;
supere isso, significa que o tamanho da borda também é levado em consideração ao calcular o tamanho (largura e altura) do elemento.fonte
Se você usa o
position: absolute;
jQuery, pode usarfonte
HTML
CSS
fonte
widht
(perto do final)