CSS中实现DIV容器水平居中行之有效的办法

开发 前端
在Web标准中的页面布局是使用DIV配合CSS来实现的,这其中最常用到的就是使整个页面水平居中的效果,这里向大家描述一下实现DIV容器水平居中的方法。

本文向大家描述一下实现DIV容器水平居中的方法,在Web标准中的页面布局是使用DIV配合CSS来实现的,其中最常用到的就是使整个页面水平居中的效果,这是在页面布局中基本,也是最应该首先掌握的知识,这里和大家分享一下。

DIV CSS教程:实现DIV容器水平居中的方法

在Web标准中的页面布局是使用DIV配合CSS来实现的。这其中最常用到的就是使整个页面水平居中的效果,这是在页面布局中基本,也是最应该首先掌握的知识。不过,还是经常会有人问到这个问题,在这里我简单总结一下使用DIV和CSS实现页面水平居中的方法:

一、margin:auto0与text-aligh:center

  在现代浏览器(如InternetExplorer7、Firefox、Opera等)现代浏览器实现水平居中的方法很简单,只要设定到左右两侧的空白为自动即可。意即:

ExampleSourceCode

  1. #wrap{margin:0auto;}  
  2.  

  上面这段代码的意思是说使wrap这个DIV到左右两侧的距离自动设置,上下为0(可以为任意)。请在现代浏览器(如InternetExplorer7、Firefox、Opera等)中运行现在的代码:

SourceCodetoRun

  1. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <title>52CSS.comtitle> 
  5. <metahttp-equivmetahttp-equiv="Content-Type"
  6. content="text/html;charset=UTF-8"/> 
  7. <styletypestyletype="text/css"> 
  8. DIV#wrap{  
  9.  width:760px;  
  10.  margin:0auto;  
  11.  border:1pxsolid#333;  
  12.  background-color:#ccc;  
  13. }  
  14. style> 
  15. head> 
  16.  
  17. <body> 
  18. <DIVidDIVid="wrap"> 
  19.  

 在Firefox等现代浏览器设定页面元素的水平居中,只要指定margin:0auto;即可

  1. <pre> 
  2. DIV#wrap{  
  3.  width:760px;  
  4.  margin:0auto;/*这里的0可以任意值*/  
  5.  border:1pxsolid#ccc;  
  6.  background-color:#999;  
  7. }  
  8. pre> 
  9. DIV> 
  10. body> 
  11. html> 
  12.  

 [可先修改部分代码再运行查看效果]

  上面的效果很好。但是这在InternetExplorer6及改正的版本中是不起作用的,不过幸好它有自己的解决办法。在InternetExplorer中text-align属性是可继承的,即在父元素中设置后在子元素中就默认具有了该属性。因此我们可以在body标签中设置text-align属性值为center,这样页面内所有的元素都会自动居中,同时我们还要加一个hook把页面中的文字变成我们习惯的阅读方式——居左对齐。因此我们要如此来写代码:

ExampleSourceCode

  1. body{text-align:center;}  
  2. #wrap{text-align:left;}  
  3.  

  这样在InternetExplorer中我们就轻松实现了DIV的居中对齐。因此要在所有的浏览器中显示居中的效果,我们就可以这样写我们的代码:

ExampleSourceCode

  1. body{text-align:center;}  
  2. #wrap{text-align:left;  
  3. margin:0auto;  
  4. }  
  5.  

 SourceCodetoRun 

  1. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <title>52CSS.comtitle> 
  5. <metahttp-equivmetahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/> 
  6. <styletypestyletype="text/css"> 
  7. body{text-align:center;}  
  8. DIV#wrap{  
  9.  text-align:left;  
  10.  width:760px;  
  11.  margin:0auto;  
  12.  border:1pxsolid#333;  
  13.  background-color:#ccc;  
  14. }  
  15. style> 
  16. head> 
  17.  
  18. <body> 
  19. <DIVidDIVid="wrap"> 
  20.  

在Firefox等现代浏览器设定页面元素的水平居中,只要指定margin:0auto;即可
 

  1. <pre> 
  2. DIV#wrap{  
  3.  width:760px;  
  4.  margin:0auto;/*这里的0可以任意值*/  
  5.  border:1pxsolid#ccc;  
  6.  background-color:#999;  
  7. }  

 在InternetExplorer6及以下的版本中我们还要做以下的设置: 

  1.  body{text-align:center;}  
  2.  
  3.  DIV#wrap{  
  4.  text-align:left;  
  5.  }  
  6. pre> 
  7. DIV> 
  8. body> 
  9. html> 
  10.  

 [可先修改部分代码再运行查看效果]

  不过这里有一个前提,就是设置居中的元素要有固定的宽度,比如这里我们设定了为760像素。#p#

二、相对定位与负的边距

  对于wrap进行相对定位,然后使用负的边距抵消偏移量。这种方法比较简单还很容易实现:

ExampleSourceCode 

  1. #wrap{  
  2. position:relative;  
  3. width:760px;  
  4. left:50%;  
  5. margin-left:-380px  
  6. }  
  7.  

  这段代码的意思是,设置wrap的定位是相对于其父元素body标签的,然后将其左边框移动到页面的正中间(也就是left:50%含意);***我们再从中间位置向左偏移回一半的距离来,这样就实现了水平居中了。

SourceCodetoRun 

  1. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <title>52CSS.comtitle> 
  5. <metahttp-equivmetahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/> 
  6. <styletypestyletype="text/css"> 
  7. DIV#wrap{  
  8.  position:relative;  
  9.  width:760px;  
  10.  left:50%;  
  11.  margin-left:-380px;  
  12.  border:1pxsolid#333;  
  13.  background-color:#ccc;  
  14. }  
  15. style> 
  16. head> 
  17.  
  18. <body> 
  19. <DIVidDIVid="wrap"> 
  20.  

在所有浏览器中都有效的方法: 

  1. <pre> 
  2. DIV#wrap{  
  3.  position:relative;  
  4.  width:760px;  
  5.  left:50%;  
  6.  margin-left:-380px;  
  7.  border:1pxsolid#333;  
  8.  background-color:#ccc;  
  9. }  
  10. pre> 
  11. DIV> 
  12. body> 
  13. html> 
  14.  

 [可先修改部分代码再运行查看效果]
  同样,在设定水平居中前你需要设定一个固定的宽度。

◆究竟选择哪个方法?

  上面两个方法究竟选择哪种方法好呢?在***种方法中貌似使用了Hack技术,其实并没有,它是中规中矩的Web标准写法,完全符合规范,因此,两个种方法中完全可以随便的选取其中的任一种进行使用,他们不存在CSShack的问题。#p#

三、其它的居中方式

  上面所说的都是设定了具体宽度的情况下水平居中的实现。有时候我们想做一个弹性布局,或者当一个元素处于一个容器中时我们只想让它居中并不想设定一个具体的宽度。其实这并不是真正的居中布局,就像对一个100%长度的元素来说,你说它是居中对齐还是居左对齐呢?所以所有不高宽度的居中都不是真正的居中。这样的设计我们是使用的像元素的padding来设置的,实际中我们是改变了父元素的容器大小:
如我们希望wrap元素长度随窗口而改变,同时又维持居中,我们就可以这样写:

ExampleSourceCode

  1. body{  
  2. padding:10px150px;  
  3. }  
  4.  

  这里,我们只需要保持父元素左右两侧的填充是相等的就可以了。

SourceCodetoRun 

  1. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <title>52CSS.comtitle> 
  5. <metahttp-equivmetahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/> 
  6. <styletypestyletype="text/css"> 
  7. body{  
  8.  padding:10px150px;  
  9. }  
  10. DIV#wrap{  
  11.  border:1pxsolid#333;  
  12.  background-color:#ccc;  
  13. }  
  14. style> 
  15. head> 
  16.  
  17. <body> 
  18. <DIVidDIVid="wrap"> 
  19.  

 一种随浏览器窗口大小而改变的具有弹性的居中布局: 

  1. <pre> 
  2. body{  
  3.  padding:10px150px;  
  4. }  
  5.  
  6. 这里,我们只需要保持父元素左右两侧的填充是相等的就可以了。  
  7. pre> 
  8. DIV> 
  9. body> 
  10. html> 
  11.  

   当然这只是“貌似居中”,不过却常常很有用处。
 

【编辑推荐】

  1. CSS中实现DIV容器垂直居中方法揭秘
  2. CSS布局中float和position属性使用技巧
  3. 四种方法轻松实现CSS隔行换色
  4. CSS Sprites对CSS布局的意义及优缺点
  5. CSS布局中display:inline-block属性用法详解

 

 

责任编辑:佚名 来源: 52css.com
相关推荐

2010-08-26 09:27:07

CSS居中

2010-09-15 12:32:23

DIV页面

2010-08-30 11:22:24

DIVCSS

2010-08-23 10:04:48

CSS浮动

2010-08-18 16:10:35

IE6CSS

2010-09-10 13:24:21

DIV表格

2010-08-06 09:28:53

Flex页面跳转

2010-07-06 11:44:49

UML活动图

2010-07-23 16:10:34

Perl用户函数

2010-05-25 14:42:58

删除SVN版本信息

2010-07-06 13:11:50

Visio画UML图

2010-07-29 10:09:09

Flex数据库

2010-06-30 17:06:32

UML用例图

2010-09-09 10:15:35

DIVCSS

2010-08-18 14:32:07

IE6IE7IE8

2010-09-02 13:03:38

CSS垂直居中

2010-03-23 16:41:17

云计算

2015-03-16 11:16:59

生物识别身份验证数据中心

2015-03-03 09:13:22

2010-07-06 13:20:57

Visio画UML用例
点赞
收藏

51CTO技术栈公众号