Como criar div para preencher todo o espaço entre o cabeçalho e rodapé div
-
03-07-2019 - |
Pergunta
Eu estou trabalhando em mover-se de usar tabelas para fins de layout de usar divs (sim, sim, o grande debate). Eu tenho 3 divs, um cabeçalho, conteúdo e rodapé. O cabeçalho e rodapé são 50px cada. Como posso obter a div rodapé para permanecer na parte inferior da página, e a div de conteúdo para preencher o espaço entre os dois? Eu não quero codificar a altura divs conteúdo, porque a resolução da tela pode mudar.
Solução
solução Flexbox
Usando o layout flexível que pode conseguir isso permitindo ao mesmo tempo cabeçalho altura natural e rodapé. Tanto o cabeçalho e rodapé vai ficar com a parte superior e inferior da janela, respectivamente (muito parecido com um aplicativo móvel nativo) ea área de conteúdo principal irá preencher o espaço restante, enquanto qualquer estouro verticais serão rolagem dentro dessa área.
HTML
<body>
<header>
...
</header>
<main>
...
</main>
<footer>
...
</footer>
</body>
CSS
html, body {
margin: 0;
height: 100%;
min-height: 100%;
}
body {
display: flex;
flex-direction: column;
}
header,
footer {
flex: none;
}
main {
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
flex: auto;
}
Outras dicas
Para resumir (e este veio a CSS Fixo rodapé link fornecido pelo Traingamer), isto é o que eu usei:
html, body
{
height: 100%;
}
#divHeader
{
height: 100px;
}
#divContent
{
min-height: 100%;
height: auto !important; /*Cause footer to stick to bottom in IE 6*/
height: 100%;
margin: 0 auto -100px; /*Allow for footer height*/
vertical-align:bottom;
}
#divFooter, #divPush
{
height: 100px; /*Push must be same height as Footer */
}
<div id="divContent">
<div id="divHeader">
Header
</div>
Content Text
<div id="divPush"></div>
</div>
<div id="divFooter">
Footer
</div>
Para expandir a Mitchel Sellers resposta, dar o seu conteúdo altura div:. 100% e dar-lhe uma margem de auto
Para uma explicação completa e exemplo, ver Ryan Fait CSS Fixo Rodapé .
Uma vez que você sabe o tamanho (altura) de seu cabeçalho, colocá-lo dentro da div de conteúdo (ou margens de uso).
Posição absoluta vai lhe dar problemas se o seu conteúdo é maior (mais alto) do que a janela.
Uma maneira de fazer isso usando CSS Grid:
index.html
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="main.css" rel="stylesheet">
</head>
<body>
<main>
<header>Header</header>
<section>Content</section>
<footer>Footer</footer>
</main>
</body>
</html>
main.css
body {
margin: 0;
}
main {
height: 100%;
display: grid;
grid-template-rows: 100px auto 100px;
}
section {
height: 100%;
}
Se você está tentando maximizar a altura de sua div conteúdo, no add CSS
altura: 100%;
#footer {
clear: both;
}