CSS 居中 - 非常有趣!
Russ Weakley
08-Nov-03
你如何使用CSS将页面上的容器居中呢? 主要有两种方法可以做到,这取决于您的页面布局是流动(它会随着浏览器窗口大小的变化而相应变化)的还是固定宽度的。
流动布局的居中
在容器的每一个边使用margins对流动布局居中是很容易的。 margins可以被设置为em,pixel或者百分比。
div#container
{
margin-left: 10%;
margin-right: 10%;
}
固定宽度布局的居中
从理论上说,你应该能够使auto margins作用于容器的左右两边,并且这个容器应该在页面上居中。
W3C 的 Visual formatting model 陈述到:"如果 'margin-left' 和 'margin-right' 都设置为 'auto', 则它们的值是相等的. 相对于容器的边缘,这使得元素能够水平居中。
因此, 使用以下规则能够使容器居中:
div#container
{
margin-left: auto;
margin-right: auto;
width: 50em;
}
然而,一些浏览器并不能用这种方法使容器居中,因为它们忽略auto margins。这些浏览器包括:
- NN4 (Mac and Win)
- Win/IE4
- Win/IE5
- Win/IE5.5
- Win/IE6 (when in quirks-mode)
通过添加两条简单规则,以上除了NN4的所有浏览器中,这个问题可以被解决。
1. 使body居中
尽管这些浏览器忽略了auto margins,它们仍然遵循“text-align: center”。如果这被应用于body,那么容器将会正确的居中。因此,要添加一条新规则。
body
{
text-align: center;
}
div#container
{
margin-left: auto;
margin-right: auto;
width: 50em;
}
2. 重新设置text-align
这条新规则唯一的问题是目前在页面中的所有内容全部居中了。要解决这个问题,在容器的规则集中要添加这样一条声明-"text-align: left"。最终的css代码如下:
body
{
text-align: center;
}
div#container
{
margin-left: auto;
margin-right: auto;
width: 50em;
text-align: left;
}
观察结果
在第一个示例页中,可以看到使用了auto margins将容器居中,但并没有对body元素使用居中。
在第二个示例页中,可以看到使用了auto margins将容器居中,并且也对body元素使用了居中,对容器使用了“text-align: left”。

