Eu tenho um elemento de cabeçalho e um elemento de conteúdo:
#header
#content
Quero que o cabeçalho tenha altura fixa e o conteúdo preencha toda a altura restante disponível na tela, com overflow-y: scroll;
.
Isso é possível sem Javascript?
O truque para isso é especificar 100% de altura nos elementos html e body. Alguns navegadores procuram os elementos pais (html, corpo) para calcular a altura.
<html>
<body>
<div id="Header">
</div>
<div id="Content">
</div>
</body>
</html>
html, body
{
height: 100%;
}
#Header
{
width: 960px;
height: 150px;
}
#Content
{
height: 100%;
width: 960px;
}
esqueça todas as respostas, esta linha de CSS funcionou para mim em 2 segundos:
1vh
= 1% da altura da tela do navegadorfonte
Para escalonamento de layout responsivo, você pode usar:
[atualização de novembro de 2018] Conforme mencionado nos comentários, usar a altura mínima pode evitar problemas em designs reativos
[atualização de abril de 2018] Conforme mencionado nos comentários, em 2011, quando a pergunta foi feita, nem todos os navegadores suportavam as unidades de janela de visualização. As outras respostas foram as soluções da época -
vmax
ainda não é compatível com o IE, então essa pode não ser a melhor solução para todos ainda.fonte
min-height: 100vh
seria muito melhor. Também seria escalonado para designs responsivos.Na verdade, a melhor abordagem é esta:
Isso resolve tudo para mim e me ajuda a controlar meu rodapé e pode ter o rodapé fixo, não importa se a página está sendo rolada para baixo.
Solução Técnica - EDITADA
Historicamente, 'altura' é algo complicado de se moldar, em comparação com 'largura', a mais fácil. Já que o css foca
<body>
para que o estilo funcione. O código acima - demos<html>
e<body>
uma altura. É aqui que a mágica entra em cena - uma vez que temos 'altura mínima' na mesa de jogo, estamos dizendo ao navegador que<body>
é superior<html>
porque<body>
mantém a altura mínima. Este por sua vez, permite<body>
anular<html>
porque<html>
já tinha altura anterior. Em outras palavras, estamos enganando o navegador para "bater"<html>
fora da mesa, para que possamos estilizar de forma independente.fonte
min-height
eheight
?<body>
para que o estilo funcione. Este código: demos<html>
e<body>
uma altura. É aqui que a mágica entra em cena - uma vez que temos 'altura mínima' na mesa de jogo, estamos dizendo ao servidor que<body>
é superior<html>
porque<body>
mantém a altura mínima. Este por sua vez, permite<body>
anular<html>
porque<html>
já tinha altura anterior. Em outras palavras, estamos enganando o servidor para "bater"<html>
fora da mesa, para que possamos estilizar de forma independente.Você pode usar vh na propriedade min-height.
Você pode fazer o seguinte, dependendo de como você está usando as margens ...
fonte
A solução aceita realmente não funcionará. Você notará que o conteúdo
div
será igual à altura de seu paibody
,. Portanto, definir abody
altura100%
como igual à altura da janela do navegador. Digamos que a janela do navegador tenha a768px
altura, ao definir adiv
altura do conteúdo para100%
, adiv
altura de será768px
. Assim, você terminará com o div de cabeçalho150px
e o div de conteúdo768px
. No final, você terá conteúdo150px
abaixo da parte inferior da página. Para outra solução, verifique este link.fonte
Com HTML5, você pode fazer isso:
CSS:
HTML:
fonte
Para mim, o próximo funcionou bem:
Eu envolvi o cabeçalho e o conteúdo em um div
Usei essa referência para preencher a altura com flexbox. O CSS funciona assim:
Para obter mais informações sobre a técnica flexbox, visite a referência
fonte
Você também pode definir o pai como
display: inline
. Vejo http://codepen.io/tommymarshall/pen/cECyHCertifique-se de ter a altura do html e do corpo configurada para 100% também.
fonte
A resposta aceita não funciona. E a resposta com maior votação não responde à pergunta real. Com um cabeçalho de altura de pixel fixa e um preenchimento na exibição restante do navegador, role para owerflow. Aqui está uma solução que realmente funciona, usando posicionamento absoluto. Também suponho que a altura do cabeçalho seja conhecida, pelo som de "cabeçalho fixo" na questão. Eu uso 150px como exemplo aqui:
HTML:
CSS: (adicionando cor de fundo apenas para efeito visual)
Para uma visão mais detalhada de como isso funciona, com conteúdo real dentro do
#Content
, dê uma olhada neste jsfiddle , usando linhas e colunas de bootstrap.fonte
bottom
propriedade certificou-se de que o#Content
permanece preso no final da página. Agradeço por ter dispensado um tempo para explicar isso.Neste caso, quero que meu div de conteúdo principal tenha altura líquida para que a página inteira ocupe 100% da altura do navegador.
height: 100vh;
fonte
Deixe-me adicionar meus 5 centavos aqui e oferecer uma solução clássica:
Isso funcionará em todos os navegadores, sem script, sem flex. Abra o snippet no modo de página inteira e redimensione o navegador: as proporções desejadas são preservadas mesmo no modo de tela inteira.
Nota:
idHeader.height
eidContent.top
são ajustados para incluir a borda e devem ter o mesmo valor se a borda não for usada. Caso contrário, os elementos sairão da janela de visualização, já que a largura calculada não inclui borda, margem e / ou preenchimento.left:0; right:0;
pode ser substituído pelowidth:100%
mesmo motivo, se nenhuma borda for usada.padding-top
e / oupadding-bottom
atributos ao#idOuter
elemento.Para completar minha resposta, aqui está o layout do rodapé:
E aqui está o layout com cabeçalho e rodapé:
fonte
A menos que você precise oferecer suporte ao IE 9 e inferior, eu usaria o flexbox
Você também precisa obter o corpo para preencher a página inteira
fonte
CSS PLaY | cross browser cabeçalho fixo / rodapé / layout de coluna única centralizado
Quadros CSS, versão 2: Exemplo 2, largura especificada | 456 Berea Street
Uma coisa importante é que, embora pareça fácil, haverá um pouco de código feio entrando em seu arquivo CSS para obter um efeito como este. Infelizmente, é realmente a única opção.
fonte
fonte
A melhor solução que encontrei até agora é definir um elemento de rodapé na parte inferior da página e, em seguida, avaliar a diferença entre o deslocamento do rodapé e o elemento que precisamos expandir. por exemplo
O arquivo html
O arquivo css
O arquivo js (usando jquery)
Você também pode querer atualizar a altura do elemento de conteúdo em cada redimensionamento da janela, então ...
fonte
Muito simples:
fonte
Você já tentou algo assim?
CSS:
HTML:
fonte