CSS - высота 100% с верхним и нижним колонтитулом
Я пытаюсь создать страницу с заголовком, основным div, который растягивается до 100% вертикального ландшафта (минус верхний и нижний колонтитул) и нижний колонтитул. Как этот рис:
![enter image description here]()
Я могу заставить заголовок и главный div работать. Вот так:
<div id="wrapper">
<div class="header_div">HEADER</div>
<div class="main_div">MAIN</div>
<div class="footer_div">FOOTER</div>
</div>
С помощью этого CSS:
html {
height: 100%;
}
body {
margin: 0;
padding: 0;
height: 100%;
}
.header_div{
height: 40px;
width: 100%;
background-color: #000000;
}
.main_div{
margin-bottom:40px;
margin-top:40px;
position:absolute;
top:0px;
left:0px;
right:0px;
bottom:0px;
background-color: red;
}
.footer_div{
position: relative;
height: 40px;
width: 100%;
background-color: blue;
}
Таким образом, главный div запускает 40px сверху, чтобы учесть заголовок, а затем останавливает 40px снизу до учетной записи нижнего колонтитула. Это хорошо работает, но я не могу получить нижний колонтитул ниже основного div. То, как сейчас, с position: relative
, помещает нижний колонтитул поверх главного div. Если я использую position:absolute
, он помещает его под основным div.
Я уверен, что просто делаю это неправильно, потому что CSS - это не мое дело.
Любая помощь по этому поводу была бы большой.
Спасибо
Ответы
Ответ 1
Использование CSS3 Flexbox:
/*QuickReset*/*{margin:0;box-sizing:border-box;}
body { /* body - or any parent wrapper */
display: flex;
flex-direction: column;
min-height: 100vh;
}
main {
flex: 1;
}
<header>HEADER</header>
<main>MAIN</main>
<footer>FOOTER</footer>
Ответ 2
Используйте функцию css calc().
С помощью этого метода вам не нужно определять положение элементов
Вот демон
HTML:
<header>Header</header>
<main>Main</main>
<footer>Footer</footer>
CSS
html, body {
height: 100%
}
body {
color: #FFF;
padding: 0;
margin: 0;
}
header {
background-color: #000;
height: 100px;
}
main {
background-color: #AAA;
height: calc(100% - 150px);
}
footer {
background-color: #000;
height: 50px;
}
Ответ 3
Вот простой способ. Попробуйте этот jsfiddle: http://jsfiddle.net/PejHr/
HTML:
<div id="top"></div>
<div id="main">
<div id="inner"></div>
</div>
<div id="bottom"></div>
CSS
#main {
width: 100%;
height: 100%;
position: absolute;
left: 0px;
top: 0px;
padding: 50px 0px
}
#inner {
width: 100%;
height: 100%;
background: #f0f;
}
#top, #bottom {
width: 100%;
height: 50px;
background: #333;
position: absolute;
top: 0px;
left: 0px;
}
#bottom {
bottom: 0px;
}