Я нашел способ для этого работать с помощью flexbox, который имеет почти универсальную поддержку. Похоже, что при установке HTML
равным display: flex; min-height: 100%
, flexbox будет как минимум размером окна просмотра. Body, ребенок flexbox, будет «растягиваться», чтобы соответствовать высоте flexbox. Если содержимое body
выше окна просмотра, это приведет к росту флексбокса html
.
Я до сих пор не знаю, почему min-height: 100%
на body
не работает, так какПри проверке документ HTML явно имеет высоту. Я попытался установить фактическую высоту и получил больше результатов, которые не имеют смысла - например, body
будет таким же высоким, как и окно просмотра, но #Main
не будет таким же высоким, как body
, несмотря на то, что height: 100%
-- как это возможно?
Также не имеет смысла, что фон body
выходит за пределы фактического содержимого самого тела.
Я остановлю свой пост сейчас, потому что есть толькостолько BS, что я могу взять, прежде чем я начну писать всю напыщенную речь о том, насколько ужасен CSS.
html {
min-height: 100%;
display: flex;
margin: 0;
padding: 0;
}
body {
flex-grow: 1;
background: gray;
margin: 0;
padding: 0;
border-bottom: 3px solid red;
}
#Main {
height: 100%;
width: 50%;
margin: 0px auto;
background: white;
}
<div id="Main">
I SHOULD BE AT LEAST AS TALL AS THE VIEWPORT.
<hr>
Let's review:
<br>HTML is min-height: 100% -- it's as least as tall as the viewport.
<br>BODY is min-height: 100% -- it's as least as tall as HTML.
<br>*I* am height: 100% -- WHY AM I NOT TALL
<hr>
Another WTF: the entire background is gray, yet the BODY's bottom doesn't stretch to the bottom.
<hr>
One more thing, when my contents grow, so should the body.
<button onclick="document.getElementById('content').style.display='block';">
Click me to add content.
</button>
<div id="content" style="height: 600px; background: green; display: none;">
big content.
</div>
</div>