Священный грааль с высотой 100%

Я пытаюсь сделать макет css, который выглядит как

enter image description here

Термин CSS для этого типа макета известен как "святой грааль", я думаю. Проблема, с которой я сталкиваюсь, заключается в том, что когда я использую макеты и решения, которые я нахожу в Интернете, я не заставляю их работать должным образом, как я хочу. Я пытаюсь сделать страницу, которая, независимо от содержимого, будет иметь нижний колонтитул внизу браузера и столбцы, простирающиеся до него. До сих пор я видел только страницы, на которых нижний колонтитул помещался там, где заканчивается контент, результатом чего является нижнее поле под нижним колонтитулом.

Если бы кто-нибудь мог помочь мне в этом, было бы очень полезно!

Ответ 1

В 2017 году вы можете добиться этого изящного и простого изложения с помощью flexbox:

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
header {
  flex: 0 0 100px;
  background-color: #C14F4F;
}
main {
  flex: 1;
  display: flex;
  background-color: #699EBD;
}
footer {
  flex: 0 0 40px;
  background-color: #C14F4F;
}
.left, .right {
  flex: 0 2 150px;
  background-color: #C28282;
}
.middle {
  flex:1 1 300px;
}
<header></header>
<main>
  <div class="left"></div>
  <div class="middle"></div>
  <div class="right"></div>
</main>
<footer></footer>

Ответ 2

См. этот метод для верхнего/нижнего уровня и просто вставьте в него боковые панели. Даже работает в IE6: p

Ответ 3

Это 2019 год, а как насчет сетки?

.sidebar {
    grid-area: sidebar;
    background-color: #b98583;
}

.sidebar2 {
    grid-area: sidebar2;
    background-color: #b98583;
}

.content {
    grid-area: content;
    background-color: #749dba;
}

.header {
    grid-area: header;
    background-color: #b45653;
    height: 30px;
}

.footer {
    grid-area: footer;
    background-color: #b45653;
    height: 30px;
}

.wrapper {
    display: grid;
    grid-template-areas:
    "header   header header"
    "sidebar  content sidebar2"
    "footer   footer footer";
    grid-template-columns: 20% 2fr 20%;
    grid-template-rows: auto 1fr auto;
    min-height: 100vh;
}

.box {
    color: #fff;
    font-size: 80%; 
    text-align: center;
}
<div class="wrapper">
  <div class="box header">header</div>
  <div class="box sidebar">left</div>
  <div class="box sidebar2">right</div>
  <div class="box content">middle</div>
  <div class="box footer">footer</div>
</div>

Ответ 4

Это, по-видимому, в основном делает то, что вам нужно. http://www.savio.no/examples/three-column-layout-6.asp Он использует столбец высотой 100% высоты в дополнение к трем.

Ответ 5

Для двух боковых панелей используйте следующее:

padding-bottom:9999px;
margin-bottom:-9999px;

Это создает "невидимое" содержимое, которое позволяет боковым сторонам растягиваться до конца (а отрицательное поле "нормализует" размеры боковой панели, чтобы вычисления, выполняемые на боковой панели, все еще имели смысл).