`
joerong666
  • 浏览: 409941 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

CSS在页面布局中实现div垂直居中的方法总结

阅读更多
CSS在页面布局中实现div垂直居中的方法总结
2008年07月08日 星期二 01:35
在前面的文章中我简单总结了一个“CSS在页面布局中实现div水平居中的方法”,其实水平居中实现还是比较简单的,反而垂直居中有点麻烦,因为我们设计页面的时候往往水平宽度都是固定的。因此我们有必要总结一下在页面布局过程中实现垂直居中的方法。

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的<td>、<th>、<caption>等,而像<div>、<span>这样的元素是没有valign特性的,因此使用vertical-align对它们不起作用。

一、单行垂直居中
    如果一个容器中只有一行文字,对它实现居中相对比较简单,我们只需要设置它的实际高度height和所在行的高度line-height相等即可。如:   

  1. div {   
  2.          height:25px;   
  3.          line-height:25px;   
  4.          overflow:hidden;   
  5. }  
div {
        height:25px;
        line-height:25px;
        overflow:hidden;
 }

这段代码很简,后面使用overflow:hidden的设置是为了防止内容超出容器或者产生自动换行,这样就达不到垂直居中效果了。
点击此处查看运行效果
不过在Internet Explorer 6及以下版本中,这和方法不支持对图片设置垂直居中。

二、多行未知高度文字的垂直居中
    如果一段内容,它的高度是可变的那么我们就可以使用上一节讲到的实现水平居中时使用到的最后一种方法,就是设定Padding,使上下的padding值相同即可。同样的,这也是一种“看起来”的垂直居中方式,它只不过是使文字把<div>完全填充的一种访求而已。可以使用类似下面的代码:

  1. div {   
  2. padding:25px;   
  3. }  
div {
  padding:25px;
 }

这种方法的优点就是它可以在任何浏览器上运行,并且代码很简单,只不过这种方法应用的前提就是容器的高度必须是可伸缩的。
点击此处查看运行效果

三、多行文本固定高度的居中
    在本文的一开始,我们已经说过CSS中的vertical-align属性只会对拥有valign特性的(X)HTML标签起作用,但是在CSS中还有一个display属性能够模拟<table>,所以我们可以使用这个属性来让<div>模拟<table>就可以使用vertical-align了。注意,display:table和display:table-cell的使用方法,前者必须设置在父元素上,后者必须设置在子元素上,因此我们要为需要定位的文本再增加一个<div>元素:

  1. div#wrap {   
  2.     height:400px;   
  3. display:table;   
  4. }   
  5. div#content {   
  6.   vertical-align:middle;   
  7.     display:table-cell;   
  8.    border:1px solid #FF0099;   
  9. background-color:#FFCCFF;   
  10. width:760px;   
  11. }  
div#wrap {
  height:400px;
  display:table;
 }
 div#content {
  vertical-align:middle;
  display:table-cell;
  border:1px solid #FF0099;
  background-color:#FFCCFF;
  width:760px;
 }

点击此处查看运行效果
这个方法应该是很理想了,但是不幸的是Internet Explorer 6 并不能正确地理解display:table和display:table-cell,因此这种方法在Internet Explorer 6及以下的版本中是无效的。嗯,这让人很郁闷!不过我们还其它的办法。

四、在Internet Explorer中的解决方案
    在Internet Explorer 6及以下版本中,在高度的计算上存在着缺陷的。在Internet Explorer 6中对父元素进行定位后,如果再对子元素进行百分比计算时,计算的基础似乎是有继承性的(如果定位的数值是绝对数值没有这个问题,但是使用百分比计算的基础将不再是该元素的高度,而从父元素继承来的定位高度)。例如,我们有下面这样一个(X)HTML代码段:

  1. <div id="wrap">  
  2. <div id="subwrap">  
  3.    <div id="content">  
  4. </div>  
  5. </div>  
  6. lt;/div>  
<div id="wrap">
  <div id="subwrap">
   <div id="content">
  </div>
 </div>
</div>

如果我们对subwrap进行了绝对定位,那么content也会继承了这个这个属性,虽然它不会在页面中马上显示出来,但是如果再对content进行相对定位的时候,你使用的100%分比将不再是content原有的高度。例如,我们设定了subwrap的position为40%,我们如果想使content的上边缘和wrap重合的话就必须设置top:-80%;那么,如果我们设定subwrap的top:50%的话,我们必须使用100%才能使content回到原来的位置上去,但是如果我们把content也设置50%呢?那么它就正好垂直居中了。所以我们可以使用这中方法来实现Internet Explorer 6中的垂直居中:

  1. div#wrap {   
  2.     border:1px solid #FF0099;   
  3. background-color:#FFCCFF;   
  4. width:760px;   
  5.   height:400px;   
  6. position:relative;   
  7. }   
  8. div#subwrap {   
  9.   position:absolute;   
  10.     border:1px solid #000;   
  11.      top:50%;   
  12. }   
  13. div#content {   
  14.     border:1px solid #000;   
  15.     position:relative;   
  16.      top:-50%;   
  17. }  
div#wrap {
  border:1px solid #FF0099;
  background-color:#FFCCFF;
  width:760px;
  height:400px;
  position:relative;
 }
 div#subwrap {
  position:absolute;
  border:1px solid #000;
  top:50%;
 }
 div#content {
  border:1px solid #000;
  position:relative;
  top:-50%;
 }

当然,这段代码只能在Internet Exlporer 6等计算存在问题的浏览器中才会有作用。(不过我不解,我查阅了很多文章,不知道是因为出处相同还是什么原因,似乎很多人都不愿意去解释Internet Exlporer 6中这这个Bug的原理,我也只是了解了一点皮毛,还要再研究)
点击此处查看运行效果

五、完美的解决方案
    那么我们综合上面两种方法就可以得到一个完美的解决方案,不过这要用到CSS hack的知识。对于如果使用CSS Hack来区分浏览器,你可以参考这篇“简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera”

  1. div#wrap {   
  2.     display:table;   
  3.     border:1px solid #FF0099;   
  4. background-color:#FFCCFF;   
  5. width:760px;   
  6.   height:400px;   
  7. _position:relative;   
  8.    overflow:hidden;   
  9. }   
  10. div#subwrap {   
  11.     vertical-align:middle;   
  12.     display:table-cell;   
  13.    _position:absolute;   
  14.     _top:50%;   
  15. }   
  16. div#content {   
  17.    _position:relative;   
  18.     _top:-50%;   
  19. }  
div#wrap {
  display:table;
  border:1px solid #FF0099;
  background-color:#FFCCFF;
  width:760px;
  height:400px;
  _position:relative;
  overflow:hidden;
 }
 div#subwrap {
  vertical-align:middle;
  display:table-cell;
  _position:absolute;
  _top:50%;
 }
 div#content {
  _position:relative;
  _top:-50%;
 }

至此,一个完美的居中方案就产生了。

点击此处查看最终运行效果

p.s. 垂直居中vertical-align的值是middle,而水平居中align的值是center,虽然同是居中但关键字不同。

参考文章:http://www.jakpsatweb.cz/css/css-vertical-center-solution.html

 

分享到:
评论

相关推荐

    CSS网页布局:div垂直居中的各种方法

    在前面的文章中我简单总结了一个“CSS在页面布局中实现div水平居中的方法”,其实水平居中实现还是比较简单的,反而垂直居中有点麻烦,因为我们设计页面的时候往往水平宽度都是固定的。因此我们有必要总结一下在页面...

    DIV+CSS DIV居中布局

    NULL 博文链接:https://javapub.iteye.com/blog/709361

    CSS+DIV布局(满屏自适应三行布局,兼容FF,div垂直居中)

    带DOCTYPE的写法。。 ------------------ CSS+DIV写的,上下固定高度,中间自动适应高度满屏布局的页面~~写了好久的。ie6还有点问题。。。 兼容IE7,IE8,FF,Opera,Safari,谷歌浏览器 ...附送一个 DIV垂直居中的页面~~~

    css3代码属性Flexbox实现内部div上下居中效果

    在布局的传统解决方案中,都是基于盒状模型,依赖display属性、position属性、float属性,这种方式比较传统,对于那些特殊布局来说非常不方便,比如,垂直居中就不容易实现。 尤其是现在移动设备如此多的今天,...

    CSS文本和div垂直居中方法总结

    在样式布局中,我们经常碰到需要将元素居中。通过css实现元素的水平居中较为简单:对文本,只需要对其父级元素设置text-align: center;...因此我们需要通过别的方法去实现元素的垂直居中,下面我总结了几种了常用垂直居

    css教程:DIV垂直居中的办法

    经过今天一翻改进,终于找出了解决DIV垂直居中的办法。 &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;...

    css3代码属性Flexbox实现内部div上下居中效果.zip

    在布局的传统解决方案中,都是基于盒状模型,依赖display属性、position属性、float属性,这种方式比较传统,对于那些特殊布局来说非常不方便,比如,垂直居中就不容易实现。 尤其是现在移动设备如此多的今天,需要...

    精通CSS+DIV网页样式与布局视频教材

    第5章 用CSS设置网页中的背景 5.1 背景颜色 5.1.1 页面背景色 5.1.2 用背景色给页面分块 5.2 背景图片 5.2.1 页面的背景图 5.2.2 背景图的重复 5.2.3 背景图片的位置 5.2.4 固定背景图片 ...

    div+css布局限制图片最大宽度图片水平垂直居中兼容IE6

    div+css布局限制图片最大宽度图片水平垂直居中兼容IE6

    CSS垂直居中网页布局实现的5种方法

    利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择那个正确的方法。我下面说明一下我看到的好的方法和怎么来创建一个好的居中网站。 利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择...

    div+css有实例,易学易懂

    div+css有实例,易学易懂第1 章 Web 标准布局的本质 第8 页 1.1 为什么要建立Web 标准 1.1.1 建立Web 标准的目的 1.1.2 使用Web 标准的好处 1.2 什么是Web 标准 1.3 内容、结构和表现 1.4 两种思考方式 1.5 Web 标准...

    Flexbox制作CSS布局实现水平垂直居中的简单实例

    Flexbox实现一个div元素在body页面中水平垂直居中: XML/HTML Code复制内容到剪贴板 &lt;!DOCTYPE html&gt;  &lt;html lang="en"&gt;  &lt;head&gt;  &lt;meta charset="utf-8"/&gt;  &lt;title&gt;Flexbox...

    面试题(1、 响应式布局如何实现 2、三种方式实现一个 div 水平和垂直方向的居中 3、 数据类型判断 4、 rem 布局原理 5、 Arguments 6、 原型和原型链 )1.doc.pdf

    1、 响应式布局如何实现 2、三种方式实现一个 div 水平和垂直方向的居中 3、 数据类型判断 4、 rem 布局原理 5、 Arguments 6、 原型和原型链

    网页布局 CSS简单实现垂直居中

    英文原文:...经常做的第一件事通常是如何在 CSS 中控制元素水平或者垂直方向上居中,相信这也是很多设计师喜欢做的事情。首先,我们采用绝对定位的方法让元素离开顶部和左部 50% 的距离,然后我们需要设

    CSS 将两个button按钮垂直+水平居中

    参考文章:CSS实现垂直居中的5种方法 具体效果如图: 这个方法使用了一个 position:absolute,有固定宽度和高度的 div。这个 div 被设置为 top:0; bottom:0; 。但是因为它有固定高度,其实并不能和上下都间距为 0,...

    CSS文集

    利用CSS的Expression自定义属性来实现表格的OnMouseOver 特效 需要掌握的八个CSS布局技巧 用css实现链接经过时显示浮动图片背景的效果 自适应大小的CSS圆角盒子 div+css实现Firefox和IE6兼容的垂直居中...

    DIV+CSS中让布局、背景图片、文字内容居中的方法

    在DIV CSS布局的页面里,从布局内容到页面里文章文字居中都是非常重要的,而css来设置居中也是非常简单的。  1、首先介绍使用css属性让整体布局的居中:  设置对象的父级内容居中,这里一个页面的为父级是什么呢?...

    CSS之居中布局的实现方法

    在前端开发中,我们经常会遇到各种上不同场景的关于居中的布局,一般水平居中是相对简单,而 垂直居中与水平垂直则相应要麻烦些。在下来我们对各种场景一一列出解决方案。 水平居中 水平居中相对于其它几中居中排列...

Global site tag (gtag.js) - Google Analytics