【发布时间】:2017-02-03 03:31:30
【问题描述】:
我一直在咨询很多关于粘性页脚的线程(即使内容很少,页脚也会粘在页面底部),尽管这些变通办法可以解决问题,但我发现它们有点混乱,不要'不明白为什么简单的事情不起作用。
这是我想要做的:
<html>
<body>
<header></header>
<main></main>
<footer></footer>
</body>
</html>
和
html {
height: auto;
min-height: 100%
}
body {
height: 100%;
}
main {
height: calc(100% - 50px - 50px); //container's height - (header height + footer height)
}
header, footer {
height: 50px;
}
我对这段代码的问题是正文不会尊重height: 100% 属性,只会环绕正文内容,而不是扩展到其容器的 100%,即 html。
html 标签工作正常,它的最小高度是视口,如果内容大于视口,它将以height: auto; 扩展。
为什么正文不会扩展到 html 高度的 100%?
我已经尝试了我的代码,如果我将 html 的高度设置为像素值,它会完美运行,主体将扩展为 html 的 100%。但是如果 html 的高度是自动的,它就不会扩展。
我既不能将 html 的高度设置为 100%(即使主体会扩展以填充 html 标签),因为当内容低于视口的 100% 时,html 不会扩展以包含内容,它只会溢出。
我有什么遗漏吗?我怎样才能做到这一点?
编辑:
感谢所有有见地的答案和 cmets!
这是我能想到的最好的方法:
html {
height: 100%;
}
body {
height: 100%;
}
main {
min-height: calc(100% - 50px - 50px); //container's height - (header height + footer height)
}
header, footer {
height: 50px;
}
这样做会使main 的内容在内容长于视口时展开,或者如果内容短于视口则停留在页面底部。
由于我的页眉和页脚具有相对定位,我将它们的高度减去main 最小高度,因此当内容很少时页脚始终适合视口,而不触发滚动条显示。
此方法的唯一缺点是main 会从body 和html 元素溢出(因为它们的height: 100% 是视口的高度,但不会影响页面的呈现方式,并且似乎工作正常。
【问题讨论】:
-
我认为这里的问题是
html元素没有明确的高度,因此body上的height: 100%;规则没有可用作参考的值。虽然我无法真正解释为什么会发生这种情况背后的理论,但您可以have a look here 看到它的实际效果。 -
这正是正在发生的事情。但是我既找不到解释也找不到解决方法。 Myabe 使用 JQuery 动态调整 html 的高度?我不知道。
-
我建议不要为此使用 jQuery;这是不必要的开销,会让你在路上头疼。 CSS 完全有能力为您处理这个问题。还要记住,标记结构对这些点有很大的影响,所以你应该对 er-han 的回答特别感兴趣。
-
我同意,Jquery 是出于绝望而出现在我的脑海中,但我想我可能已经找到了进入这方面的道路,并且会尝试一些事情。
-
您的代码很好,可以在 Edge/Firefox/Chrome 中运行,IE 除外。
calc在 IE 11 中没有得到适当的支持,您可以在这里看到 caniuse.com/#feat=calc 大多数已知问题都与 IE 11 有关。顺便说一句,您需要为 html 设置 height: 100%,并且不需要 min-height。