rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » html/css

CSS文字垂直居中问题的解决

CSS中怎样设置才能使对象中的文字垂直居中于对象,这个问题也是捆扰很多朋友的难题。现在网上的很多代码都做不到浏览器兼容。我把网上有关的方法整理了一下,做了些改动,完全可以兼容各主流浏览器。
    下面具体说一下在不同情况下垂直居中的方法。
    一、一行文字垂直居中
    看一下下面的代码:
    〈!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN“ “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“〉
    〈html xmlns=“http://www.w3.org/1999/xhtml“〉
    〈head〉
    〈meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“ /〉
    〈title〉垂直居中〈/title〉
    〈script type=“text/javascript“ language=“javascript“〉
    function sel(id) {switch(id) {case “1“:document.getElementById(“sub“).style.lineHeight = “normal“;break;case “2“:document.getElementById(“sub“).style.lineHeight = “20px“;break;case “3“:document.getElementById(“sub“).style.lineHeight = “28px“;break;}}
    〈/script〉
    〈style type=“text/css“〉
    #all {
      width:240px;
      padding:10px;
      font-size:12px;
      color:#FFF;
      background-color:#CCC;
    }
    #sub {
      width:230px;
      padding:0 5px;
      height:20px;
      overflow:hidden;
      background-color:#F90;
    }
    #sel {
      margin-top:5px;
    }
    select {
      width:260px;
    }
    〈/style〉
    〈/head〉
    〈body〉
    〈div id=“all“〉
    〈div id=“sub“〉一行文字垂直居中,此对象高度为20px〈/div〉
    〈/div〉
    〈div id=“sel“〉〈select onchange=“sel(this.value)“〉〈option value=“1“〉默认值,设置行高为:normal〈/option〉〈option value=“2“〉设置行高和对象高度相同:20px〈/option〉〈option value=“3“〉设置行高比对象的高度大:28px〈/option〉〈/select〉〈/div〉
    〈/body〉
    〈/html〉
    方法:line-height:20px。设置相同的行高和对象高度。
    说明:这种设置简单又兼容各种浏览器,支持内联对象。但如果是固定高度的对象,只能显示一行。当有两行文字时,如果不设置“overflow:hidden”会把对象撑开。
    二、多行文字,且高度自适应
    请看下面的代码:
    〈!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN“ “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“〉
    〈html xmlns=“http://www.w3.org/1999/xhtml“〉
    〈head〉
    〈meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“ /〉
    〈title〉垂直居中〈/title〉
    〈script type=“text/javascript“ language=“javascript“〉
    function sel(id) {switch(id) {case “1“:document.getElementById(“sub“).innerHTML = “三行文字垂直居中,设置相同的内上边距padding-top和内下边距padding-bottom就可以。“;break;case “2“:document.getElementById(“sub“).innerHTML = “两行文字垂直居中,设置相同的内上下边距padding-top和padding-bottom就可以。“;break;case “3“:document.getElementById(“sub“).innerHTML = “一行文字垂直居中,内上下边距相同。“;break;}}
    〈/script〉
    〈style type=“text/css“〉
    #all {
      float:left;
      width:240px;
      padding:10px;
      font-size:12px;
      color:#FFF;
      background-color:#CCC;
    }
    #sub {
      float:left;
      width:230px;
      padding:10px 5px;
      background-color:#F90;
    }
    #sel {
      clear:both;
      padding-top:5px;
      width:260px;
    }
    select {
      width:260px;
    }
    〈/style〉
    〈/head〉
    〈body〉
    〈div id=“all“〉
    〈div id=“sub“〉三行文字垂直居中,设置相同的内上边距padding-top和内下边距padding-bottom就可以。〈/div〉
    〈/div〉
    〈div id=“sel“〉〈select onchange=“sel(this.value)“〉〈option value=“1“〉三行文字垂直居中〈/option〉〈option value=“2“〉两行文字垂直居中〈/option〉〈option value=“3“〉一行文字垂直居中〈/option〉〈/select〉〈/div〉
    〈/body〉
    〈/html〉
    方法:padding-top:10px; padding-bottom:10px。设置相同的上下内边距。
    说明:兼容各种浏览器,支持内联对象,同时又支持非文本对象,如img。但有一个缺点就是对象的高度不能固定。
    三、固定高度的多行文字垂直居中
    这种方法比较复杂,我也会详细说明的。下面还是先看代码:
    〈!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN“ “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“〉
    〈html xmlns=“http://www.w3.org/1999/xhtml“〉
    〈head〉
    〈meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“ /〉
    〈title〉垂直居中〈/title〉
    〈style type=“text/css“〉
    p {
      margin:0;
    }
    #a {
      width:200px;
      height:50px;
      font-size:12px;
      background-color:#CCCCCC;
      vertical-align:middle;
      display:table-cell;
      position:relative;
    }
    #a div {
      *position:absolute;
      *top:50%;
    }
    #a div p {
      *position:relative;
      *top:-50%;
    }
    〈/style〉
    〈/head〉
    〈body〉
    〈div id=“a“〉
    〈div〉〈p〉这里具有多行文字,高度是50px这里具有多行文字,高度是50px〈/p〉〈/div〉
    〈/div〉
    〈/body〉
    〈/html〉
    方法:
    (1)vertical-align:middle; display:table-cell。这种方法的意思是:将对象强制转换为Table,vertical-align:middle的作用和表格中的valign=“center“相同。
    本来是很方便的一个属性,但IE不支持这个属性。为了使各浏览器兼容,我们不得不想其他的方法。
    (2)在对象内建立一个子对象,并在子对象内再建立一个子对象或段落。网页中:
    〈div id=“a“〉〈div〉〈p〉这里具有多行文字,高度是50px这里具有多行文字,高度是50px〈/p〉〈/div〉〈/div〉
    CSS中:
    p {margin:0;}:因为在FireFox中默认P是有间距的
    #a {height:50px;position:relative;}:设置高度50,如果要是子对象相对它定位,则要设置position:relative
    #a div {*position:absolute;*top:50%;}:前面加星号“*”只有IE支持,其他浏览器会忽略此设置。position:absolute设置了此子对象的定位为绝对定位,top:50%设置了显示在距顶端50%的位置,即25px(因为上面设置了父对象的高度为50px)。
    #a div p {*position:relative;*top:-50%;}:这段代码只能先理解为向上移动剩下高度的50%。因为top设置了负值,相当于向相反的方向移动。
    说明:支持主流浏览器(在IE6,FireFox2下测试)。
顶一下
(1)
踩一下
(0)