正如您所提到的,position: fixed
将相对于视口而不是页面本身定位页脚。因此,我们必须保持元素正常流动,并以某种方式将其定位到页面底部。
有几种方法可以实现这一目标,当时已经在野外进行了讨论。
例如:
粘性页脚
在这个答案中,我会使用Ryan Fait 的方法,因为它简单易懂,并且可以满足您的需求(页眉和页脚都有固定高度的情况)。
考虑以下结构:
<div id="content"> <!-- content goes here. It may (not) include the header --> </div>
<div id="footer">Footer</div>
需要以下步骤:
设置下一步所需height
的<html>
和<body>
元素。100%
我们需要做的最重要的事情是确保#content
足够高以将#footer
页面向下推。因此我们给出的#content
a min-height
。100%
到目前为止,#content
已经占据100%
了视口的高度,因此我们应该将页脚向上拉到页面底部。为了做到这一点,我们可以给#content
一个负margin-bottom
等价于页脚的height
。另外为了确保页脚出现在内容的顶部,我们应该position
使用页脚relative
。演示在这里。
可以看出,当#content
它的内容增长时,一些内容在页脚后面。我们可以通过在末尾附加一个间隔元素#content
或使用padding-bottom
和2的组合来避免这种情况,IE8也应该支持它。box-sizing: border-box
4.1 添加垫片
示例在这里
<div id="content">
<!-- content goes here -->
<div class="spacer"></div>
</div>
<div id="footer">Footer</div>
.spacer, #footer { height: 100px; }
4.2padding-bottom
和的结合box-sizing
更新示例
#content {
min-height: 100%;
margin-bottom: -100px; /* Equivalent to footer's height */
padding-bottom: 100px; /* Equivalent to footer's height */
box-sizing: border-box;
}
(请注意,由于简洁,供应商前缀被省略)
添加标题
如果标题应保持正常流程,您可以简单地将其添加到#content
如下:(
示例此处)
<div id="content">
<div id="header">Header</div>
...
但是如果要绝对定位3,我们需要将#content
元素的内容下推以防止重叠。
因此,同样,我们可以在#content
( Example Here ) 的开头添加一个分隔符:
<div id="header">Header</div>
<div id="content">
<div class="header-spacer"></div>
<!-- content goes here -->
<div class="footer-spacer"></div>
</div>
<div id="footer">Footer</div>
或者使用和的组合padding-top
如下box-sizing
:
<div id="header">Header</div>
<div id="content"> <!-- content goes here. --> </div>
<div id="footer">Footer</div>
#content {
min-height: 100%;
margin-bottom: -100px; /* Equivalent to footer's height */
padding-top : 50px; /* Equivalent to header's height */
padding-bottom: 100px; /* Equivalent to footer's height */
box-sizing: border-box;
}
更新示例 (请注意,由于简洁,供应商前缀被省略)
最后但并非不重要!
如今,所有主要的现代网络浏览器都支持box-sizing: border-box
声明(包括 IE8)。但是,如果您正在寻找具有更广泛浏览器支持的传统方式,请坚持使用间隔元素。
1. 这是min-height: 100%
在元素上工作所必需的#content
(因为百分比值是相对于由height
建立的框的包含块的<body>
)。还<html>
应该有一个明确height
的height: 100%
工作<body>
。
2.box-sizing: border-box
让UAs计算盒子的width
/ height
,包括填充和边框。
3.根据规范,绝对定位元素是具有position
ofabsolute
或的元素fixed
。