cssdiv垂直居中怎么设置(CSS设置DIV垂直居中的N种方法 兼容IE浏览器)
cssdiv垂直居中怎么设置
CSS设置DIV垂直居中的N种方法 兼容IE浏览器在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的<td>、<th>、<caption>等,而像<li>、<span>这样的元素是没有valign特性的,因此使用vertical-align对它们不起作用。
Tips: 完美解决方案在文末!
一、单行垂直居中
如果一个容器中只有一行文字,对它实现居中相对比较简单,我们只需要设置它的实际高度height和所在行的高度line-height相等即可。
如:
- li {
- height:25px;
- line-height:25px;
- overflow:hidden;
- }
这段代码很简,后面使用overflow:hidden的设置是为了防止内容超出容器或者产生自动换行,这样就达不到垂直居中效果了。
- <html>
- <head>
- <title> 单行文字实现垂直居中 </title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style type="text/css">
- body { font-size:12px;font-family:tahoma;}
- li {
- height:25px;
- line-height:25px;
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- }
- </style>
- </head>
- <body>
- <li>现在我们要使这段文字垂直居中显示!</li>
- </body>
- </html>
二、多行未知高度文字的垂直居中
如果一段内容,它的高度是可变的那么我们就可以使用上一节讲到的实现水平居中时使用到的最后一种方法,就是设定Padding,使上下的padding值相同即可。同样的,这也是一种“看起来”的垂直居中方式,它只不过是使文字把<li>完全填充的一种访求而已。可以使用类似下面的代码:
- li {
- padding:25px;
- }
这种方法的优点就是它可以在任何浏览器上运行,并且代码很简单,只不过这种方法应用的前提就是容器的高度必须是可伸缩的。
- <html>
- <head>
- <title> 多行文字实现垂直居中 </title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style type="text/css">
- body { font-size:12px;font-family:tahoma;}
- li {
- padding:25px;
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- }
- </style>
- </head>
- <body>
- <li><br> <pre>现在我们要使这段文字垂直居中显示!
- </pre><br> </li>
- </body>
- </html>
三、多行文本固定高度的居中
在本文的一开始,我们已经说过CSS中的vertical-align属性只会对拥有valign特性的(X)HTML标签起作用,但是在CSS中还有一个display属性能够模拟<table>,所以我们可以使用这个属性来让<li>模拟<table>就可以使用vertical-align了。注意,display:table和display:table-cell的使用方法,前者必须设置在父元素上,后者必须设置在子元素上,因此我们要为需要定位的文本再增加一个<li>元素:
- li#wrap {
- height:400px;
- display:table;
- }
- li#content {
- vertical-align:middle;
- display:table-cell;
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- }
- <html>
- <head>
- <title> 多行文字实现垂直居中 </title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style type="text/css">
- body { font-size:12px;font-family:tahoma;}
- li#wrap {
- height:400px;
- display:table;
- }
- li#content {
- vertical-align:middle;
- display:table-cell;
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- }
- </style>
- </head>
- <body>
- <li id="wrap">
- <li id="content"><br>
- <pre><br>现在我们要使这段文字垂直居中显示!
- li#wrap {
- height:400px;
- display:table;
- }
- li#content {
- vertical-align:middle;
- display:table-cell;
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- }
- </pre><br> </li>
- </li>
- </body>
- </html>
这个方法应该是很理想了,但是不幸的是Internet Explorer 6 并不能正确地理解display:table和display:table-cell,因此这种方法在Internet Explorer 6及以下的版本中是无效的。嗯,这让人很郁闷!不过我们还其它的办法。
四、在Internet Explorer中的解决方案
在Internet Explorer 6及以下版本中,在高度的计算上存在着缺陷的。在Internet Explorer 6中对父元素进行定位后,如果再对子元素进行百分比计算时,计算的基础似乎是有继承性的(如果定位的数值是绝对数值没有这个问题,但是使用百分比计算的基础将不再是该元素的高度,而从父元素继承来的定位高度)。
例如,我们有下面这样一个(X)HTML代码段:
- <li id="wrap">
- <li id="subwrap">
- <li id="content">
- </li>
- </li>
- </li>
如果我们对subwrap进行了绝对定位,那么content也会继承了这个这个属性,虽然它不会在页面中马上显示出来,但是如果再对content进行相对定位的时候,你使用的100%分比将不再是content原有的高度。例如,我们设定了subwrap的position为40%,我们如果想使content的上边缘和wrap重合的话就必须设置top:-80%;那么,如果我们设定subwrap的top:50%的话,我们必须使用100%才能使content回到原来的位置上去,但是如果我们把content也设置50%呢?那么它就正好垂直居中了。所以我们可以使用这中方法来实现Internet Explorer 6中的垂直居中:
- li#wrap {
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- height:400px;
- position:relative;
- }
- li#subwrap {
- position:absolute;
- border:1px solid #000;
- top:50%;
- }
- li#content {
- border:1px solid #000;
- position:relative;
- top:-50%;
- }
当然,这段代码只能在Internet Exlporer 6等计算存在问题的浏览器中才会有作用。(不过我不解,我查阅了很多文章,不知道是因为出处相同还是什么原因,似乎很多人都不愿意去解释Internet Exlporer 6中这这个Bug的原理,我也只是了解了一点皮毛,还要再研究)
- <html>
- <head>
- <title> 多行文字实现垂直居中 </title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style type="text/css">
- body { font-size:12px;font-family:tahoma;}
- li#wrap {
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- height:400px;
- position:relative;
- }
- li#subwrap {
- position:absolute;
- top:50%;
- }
- li#content {
- position:relative;
- top:-50%;
- }
- </style>
- </head>
- <body>
- <li id="wrap">
- <li id="subwrap">
- <li id="content"><pre>现在我们要使这段文字垂直居中显示!
- li#wrap {
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- height:500px;
- position:relative;
- }
- li#subwrap {
- position:absolute;
- border:1px solid #000;
- top:50%;
- }
- li#content {
- border:1px solid #000;
- position:relative;
- top:-50%;
- }<br> </pre>
- </li>
- </li>
- </li>
- </body>
- </html>
五、完美的解决方案
那么我们综合上面两种方法就可以得到一个完美的解决方案,不过这要用到CSS hack的知识。
- li#wrap {
- display:table;
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- height:400px;
- _position:relative;
- overflow:hidden;
- }
- li#subwrap {
- vertical-align:middle;
- display:table-cell;
- _position:absolute;
- _top:50%;
- }
- li#content {
- _position:relative;
- _top:-50%;
- }
至此,一个完美的居中方案就产生了。
- <html>
- <head>
- <title> 多行文字实现垂直居中 </title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style type="text/css">
- body { font-size:12px;font-family:tahoma;}
- li#wrap {
- display:table;
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- height:400px;
- _position:relative;
- overflow:hidden;
- }
- li#subwrap {
- vertical-align:middle;
- display:table-cell;
- _position:absolute;
- _top:50%;
- }
- li#content {
- _position:relative;
- _top:-50%;
- }
- </style>
- </head>
- <body>
- <li id="wrap">
- <li id="subwrap">
- <li id="content"><br>
- <pre>现在我们要使这段文字垂直居中显示!
- li#wrap {
- border:1px solid #FF0099;
- background-color:#FFCCFF;
- width:760px;
- height:500px;
- position:relative;
- }
- li#subwrap {
- position:absolute;
- border:1px solid #000;
- top:50%;
- }
- li#content {
- border:1px solid #000;
- position:relative;
- top:-50%;
- }<br> </pre>
- </li>
- </li>
- </li>
- </body>
- </html>
PS:垂直居中vertical-align的值是middle,而水平居中align的值是center,虽然同是居中但关键字不同。
六、实测可以完美实现各种浏览器兼容的居中方案
下面这段代码经过实测,可以完美兼容IE7以上的IE浏览器,其它标准浏览器如火狐、谷歌等也没有问题。
说明:尽管有CSS的vertical-align特性,但是并不能有效解决未知高度的垂直居中问题(在一个li标签里有未知高度的文本或图片的情况下)。标准浏览器如Mozilla, Opera, Safari等.,可将父级元素显示方式设定为TABLE(display: table;) ,内部子元素定为table-cell (display: table-cell),通过vertical-align特性使其垂直居中,但非标准浏览器是不支持的。非标准浏览器只能在子元素里设距顶部50%,里面再套个元素距顶部-50% 来抵消。
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>水平垂直居中</title>
- <style type="text/css">
- body {padding: 0; margin: 0;}
- body,html{height: 100%;}
- #outer {height: 100%; overflow: hidden; position: relative;width: 100%;}
- #outer[id] {display: table; position: static;}
- #middle {position: absolute; top: 50%;} /* for explorer only*/
- #middle[id] {display: table-cell; vertical-align: middle; position: static;}
- #inner {position: relative; top: -50%;margin: 0 auto;} /* for explorer only */
- li.greenBorder {width:500px;height:584px;background:#333;}
- *+html #outer[id]{position: relative;}
- *+html #middle[id]{position: absolute; }
- </style>
- </head>
- <body>
- <li id="outer">
- <li id="middle">
- <li id="inner" class="greenBorder">
- </li>
- </li>
- </li>
- </body>
- </html>
以上CSS代码的优点是没有hacks,采用了IE不支持的CSS2选择器#value[id]。
CSS2选择器#value[id]相当于选择器#value,但是Internet Explorer不支持这种类型的选择器。同样地.value[class],相当于.value,这些只有标准浏览器能读懂。
测试:Firefox1.5、Opera9.0、IE6.0、IE5.0通过。上面的代码不支持IE7,还需要在最下面加二句:
*+html #outer[id]{position: relative;}
*+html #middle[id]{position: absolute; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
- css3伸缩布局及使用方法(利用CSS3的flexbox实现水平垂直居中与三列等高布局)
- css如何让图片居中
- 小程序canvas不显示(小程序canvas中文字设置居中锚点)
- html5div怎样居中(HTML5+CSS设置浮动却没有动反而在中间且错行的问题)
- css如何让浮动元素水平居中
- div内容水平垂直居中的方法(不定宽高的文字在div中垂直居中实现方法)
- css图片设置垂直居中(CSS居中实例之大小不固定的图片居中方法)
- css怎么样让banner不动(CSS banner图响应式居中显示的方法)
- css垂直居中16个方法(css实现元素垂直居中的常用方法总结)
- JS让打开的窗口居中
- css垂直居中
- 让文字居中代码是多少(如何使定义了高度和宽度的< a >里的文字垂直居中实现代码)
- css垂直左右居中的方式(css常用元素水平垂直居中方案)
- html怎么引入sass(利用CSS的Sass预处理器框架来制作居中效果)
- 块级元素水平垂直居中
- html怎么使用css居中(HTML+CSS实现单列布局水平居中布局)
- 巅峰时期被爆床照,曾被选国民最讨厌女星,IU不为人知的黑历史(巅峰时期被爆床照)
- 每天1万吨牛奶倒进下水道,美国大萧条一幕重现(每天1万吨牛奶倒进下水道)
- 如何看待美国数十万加仑牛奶倒下水道 历史又重演了(如何看待美国数十万加仑牛奶倒下水道)
- 历史惊人的相似,美国80万加仑牛奶倒入下水道,意味着什么(历史惊人的相似)
- 美国数十万加仑牛奶倒进下水道,世界会重演1929年的大萧条吗(美国数十万加仑牛奶倒进下水道)
- 美国数十万加仑牛奶倒入下水道,贫民区食不果腹,历史再次重演(美国数十万加仑牛奶倒入下水道)
热门推荐
- DIV+CSS网页布局时常犯的几个错误
- oracle中varchar2(byte)、varchar2(char)、nvarchar2()区别
- idea的tomcat怎么关闭(解决Idea的tomcat启动报多个listener的错误问题)
- 虚拟云服务器如何安装宝塔(云服务器宝塔面板的安装图文教程详解)
- html如何设置图片高度和宽度(HTML如何让IMG自动适应DIV容器大小的实现方法)
- 自己搭建域名解析服务器(apache 二级域名解析实现方法)
- sqlserver追加主键(sqlserver主键自增的实现示例)
- iis7如何创建ftp(在win7系统下IIS搭建FTP服务器图文教程介绍)
- mysqljoin默认是什么(mysql-joins具体用法说明)
- mysql的7种索引(浅入浅出 MySQL 索引)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9