CSS未知高度元素垂直居中问题解决方法

首先我们来看这样一段HTML:

 代码如下 复制代码

<ul>
<li>
<a href=""><img src="" alt="" /></a>
</li>
</ul>

类似这样的结构,是我们在实际应用中常遇到的,其中,li的宽和高都是固定的,但图片的宽和高可能是不确定的,例如商城的商品列表。

此时,如果希望图片水平居中,只需要给li应用text-align: center;即可,但如果需要图片垂直居中就不那么容易了。

网上有许多方法可以实现不固定高度元素垂直居中,例如:背景法、添加标签法,但这类破坏HTML结构的方法都是我不想要的,最后采用了淘宝的方法。

 代码如下 复制代码

li a {
width: 160px;
height: 160px;
padding: 2px;
background-color: #fafafa;
border: 1px solid #ececec;
margin: 0 auto;
display: table-cell;
*display: inline-block;
*font-size: 140px;
*font-family: Arial;
vertical-align: middle;
}
li img {
vertical-align: middle;
}

关键代码为:

li a {
display: table-cell;
*display: inline-block;
*font-size: 140px;
*font-family: Arial;
vertical-align: middle;
}
li img {
vertical-align: middle;
}

我不是很情愿使用hack,但实在没办法,使用hack总比在HTML中添加额外元素要好得多,所以个人觉得这是目前我所知的最好的解决方法。

这里需要注意font-size的值,是根据li的高度除以1.14得来的,具体为什么淘宝工程师也不知道。

另外,如果图片的高度的是固定的,那么可以使用绝对定位加负外边距实现。

补充:

 代码如下 复制代码

CSS* { margin:0; padding:0; list-style:none;  }  #vertical_box { width:100%; display:table; border:1px red solid; height:400px; /*针对IE的hack*/ *position:relative; } #vertical_box_sub { display: table-cell; vertical-align: middle; /*针对IE的hack*/ *position:absolute; *top:50%; } #vertical_box_container { font-family:"宋体"; border:1px green solid;/*针对IE的hack*/ *position:relative; *top:-50%; margin:0 auto; width:200px; }

HTML
<div id="vertical_box">   
<div id="vertical_box_sub">       
<div id="vertical_box_container">           
<p>我是居中的文字</p>           
<p>我居中</p>           
<p>你也居中</p>           
<img src="W3Markup.jpg" border=0 alt="" title="">       
</div>   
</div></div>

有上面1和2我们看到对多数浏览器text-align:center;只对img(默认inline-block)生效,而margin:auto只对div(默认block)生效,那这次我们试着将img设置为block,将div设置为inline-block再进行测试看看。
代码如下

 代码如下 复制代码
<!DOCTYPE>
<html >
<head>
<title>居中测试</title>
<style type="text/css">
.container{ width:200px; height:120px; border:1px solid Green;}
.box{ width:120px; height:90px; border:1px solid Green; display:inline-block;}
.h-align-div{ text-align:center;}
.h-align-img{ margin:auto auto; display:block;}
</style>
</head>
<body>
<div class="container h-align-div">
<div class="box"></div>
</div>
<div class="container">
<img class="h-align-img" width="120px" height="90px" src="#" alt="" />
</div>
</body>
</html>

兼容性如下:
div: IE7 IE8 IE9 FireFox Chrome Safari Opera
img: IE7 IE8 IE9 FireFox Chrome Safari Opera
由上面的结果可以看出,text-align:center;和margin:auto主要是看元素的display属性。

时间: 2024-08-01 06:34:36

CSS未知高度元素垂直居中问题解决方法的相关文章

Css未知高度图片垂直居中实例

方法一: 该方法是将外部容器的显示模式设置成display:table,img标签外部再嵌套一个span标签,并设置span的显示模式为display:table-cell,这样就可以很方便的使用vertical-align象表格元素那样对齐了,当然这只是在标准浏览器下,IE6/IE7还得使用定位. HTML结构部分:  代码如下 复制代码 <div id="box">         <span><img src="images/demo.jp

CSS中未知高度水平垂直居中实例

关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题 关于 CSS 的未知高度水平垂直居中问题

CSS实现定位元素居中的方法

  绝对定位元素的居中实现 如果要问如何CSS实现绝对定位元素的居中效果,很多人心里已经有答案了. 兼容性不错的主流用法是: CSS Code复制内容到剪贴板 .element { width: 600px; height: 400px; position: absolute; left: 50%; top: 50%; margin-top: -200px; /* 高度的一半 */ margin-left: -300px; /* 宽度的一半 */ } 但,这种方法有一个很明显的不足,就是需要提前

CSS网页制作技巧:ul的li高度不兼容问题解决方法

文章简介:ul中的li的高度在IE6.IE7.IE8.FF下不兼容问题的解决办法. 在页面中有时候使用ul li列表时ie6.ie7.ie8.FF的高度会不一样(其中ie6与ie7高度一样,ie8与FF高度一样),设置高后使用 overflow:hidden;也无济于事,这个问题一直困扰着我,以至于我后来只能使用DIV来做列表,但是这样只能说是对付上的,但没从实际上解决这个问题. 后来在网上找到了一个方法,在li样式上加上vertical-align:bottom便解决了,但原因还是不理解,希望

css float 高度自适应无效解决方法

怎么解决这个问题呢?经发现可以采用overflow来解决!方法是在父元素加上如下代码即可: overflow:auto;zoom:1; "overflow:auto;"是让高度自适应,"zoom:1;"是为了兼容IE6,也可以用"height:1%;"来解决.  代码如下 复制代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h

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-

xhtml+css网页制作中常见问题解决方法_经验交流

无论是谁,在制作页面的过程都是会碰到这样或者那样的问题,出了问题就肯定要解决.解决问题的前提是要知道问题出在什么地方,对于新手来说不一定一看到问题就知道问题出在哪里.比如在IE6中"多了一只猪"的问题,对于一些问题需要更多的经验交流分享吸收后才能更好的成长. 在网络中我想大家都有提过问题,需要别人解答的时候,但往往是你的一个问题却得不到任何人给你的解答,或者说是完全被无视了.对于这个时候的你,是不是在想"难道是因为我这个问题太简单了,他们都不想回答""他们

css实现未知尺寸元素水平垂直居中的方法

1.table表格 <table><tbody> <tr> <td>水平垂直居中的随意内容</td> <td>水平垂直居中的随意内容</td>-类似这样的, 垂直居中对其来说,也是非常简单的事.table cells 的 vertical-align:middle 就可以直接解决.所以实现起也来只要这样一行代码: td{ vertical-align:middle; } 2.display:table-cell实现  代码

CSS解决未知高度的DIV垂直居中

css|解决 原文标题:Vertical Centering in CSS副标题:Yuhu's Definitive Solution with Unknown Height 尽管有CSS的vertical-align特性,但是并不能有效解决未知高度的垂直居中问题(在一个DIV标签里有未知高度的文本或图片的情况下). 标准浏览器如Mozilla, Opera, Safari等.,可将父级元素显示方式设定为TABLE(display: table;) ,内部子元素定为table-cell (dis