屏幕居中(DIV/CSS) 的几种方法(转)
1.利用table特性,在width and height all set 100%的时候,可以把容器嵌套在td内形成绝对居中,此时的被嵌套容器可为绝对或者相对大小。(非标准)注意不能加声明!
如是在标准模式下要加样式body,html{height:100%;padding:0;margin:0;}
<tablewidth="100%" height="100%" border="0"align="center" cellpadding="0" cellspacing="0">
<tr>
<tdstyle="text-align:center;">
<tablewidth="200" height="50" border="0" cellpadding="0" cellspacing="0" bgcolor="#ef1122">
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
2.利用负边距方法,绝对定位使容器相对屏幕绝对居中,此时的被嵌套容器只能为绝对大小。(标准)根据margin负值和topleft的比例控制,实现随屏幕绝对居中,容器大小改变需要重新调整margin top left的参数:
<divstyle="background:#f00; width:740px; height:340px; left:50%; margin:-170px 0 0 -370px; position:absolute; top:50%;">
</div>
3.老外给出的另类方法,巧妙利用display:inline-block;IE6.0测试通过。(标准)
注意1.height:100%是关键:2.edge与container没有嵌套关系:
这应该算是IE的一个bug,个人对display:inline-block理解有限。edge可以看作一个填充,container现在是一个上下居中的对象,加了背景色能看的更清楚,当然你也可以在container内添加任何绝对或者相对大小容器。但问题在于span只是一个内联元素,在内部添加块级元素是不标准的逻辑。
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>">
<htmlxmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>">
<head>
<metahttp-equiv="Content-Type" content="text/html; charset=gb2312" /><BR>
<title>无标题文档</title>
<styletype="text/css">
<!--body{ margin:0; height:100%;}
#edge{ width:0; height:100%; display:inline-block; vertical-align:middle;}#container { text-align:center; width:100%; display:inline-block; vertical-align:middle;}-->
</style>
</head>
<body>
<!--required for xhtml1.1 validation only -->
<spanid="edge"></span><span id="container">
<divstyle="width:200px; height:50px; background:#f00; line-height:50px;">仅IE6.0环境下实现</div>
</span>
</body>
</html>
4.CSS行为expression_r_r控制实现,不过expression_r_r为IE独有,并且耗资源严重,尤其在大量使用的时候。(标准)
注意关键定义,不要以为height:100%在IE内是没用的:
实时获取屏幕高宽值,分别减去容器高宽值再除以2,得到准确坐标绝对定位:
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>">
<htmlxmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title><styletype="text/css">
<!--html,body{ height:100%;}--></style>
</head>
<body>
<divstyle="background:#f00; position:absolute; left:expression_r_r((body.clientWidth-50)/2); top:expression_r_r((body.clientHeight-50)/2);width:50px;;height:50px;"></div>
</body>
</html>
5.FF1.5测试通过,绝对定位,边距为比例,此时容器高宽始终为viewport的50%相对大小(标准):
<divstyle="position:absolute; top:0; right:0; bottom:0; left:0; width:50%; height:50%; margin:auto; background:#f00; color:white; line-height:20px; text-align:center;">FF1.5测试通过</div>
6.FF1.5测试通过,绝对定位,直接定位上下左右,强制边局实现容器相对大小(标准):
代码:略
7.ff1.5IE5 IE6通过测试
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<htmlxmlns="//www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Verticalcentering in valid CSS</title>
<styletype="text/css">
body{padding: 0; margin: 0; font-size: 75%;
<table
<tr>
<td
<table
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
2.利用负边距方法,绝对定位使容器相对屏幕绝对居中,此时的被嵌套容器只能为绝对大小。(标准)根据margin负值和top
<div
</div>
3.老外给出的另类方法,巧妙利用display:inline-block;IE6.0测试通过。(标准)
注意1.height:100%是关键:2.edge与container没有嵌套关系:
这应该算是IE的一个bug,个人对display:inline-block理解有限。edge可以看作一个填充,container现在是一个上下居中的对象,加了背景色能看的更清楚,当然你也可以在container内添加任何绝对或者相对大小容器。但问题在于span只是一个内联元素,在内部添加块级元素是不标准的逻辑。
<!DOCTYPE
<html
<head>
<meta
<title>无标题文档</title>
<style
<!--body
#edge
</style>
</head>
<body>
<!--
<span
<div
</span>
</body>
</html>
4.CSS行为expression_r_r控制实现,不过expression_r_r为IE独有,并且耗资源严重,尤其在大量使用的时候。(标准)
注意关键定义,不要以为height:100%在IE内是没用的:
实时获取屏幕高宽值,分别减去容器高宽值再除以2,得到准确坐标绝对定位:
<!DOCTYPE
<html
<title>无标题文档</title><style
<!--html,body
</head>
<body>
<div
</body>
</html>
5.FF1.5测试通过,绝对定位,边距为比例,此时容器高宽始终为viewport的50%相对大小(标准):
<div
6.FF1.5测试通过,绝对定位,直接定位上下左右,强制边局实现容器相对大小(标准):
代码:略
7.ff1.5
<!DOCTYPE
<html
<head>
<meta
<title>Vertical
<style
body