未知高度的图片垂直居中

图片的宽度和高度是未知的,没有一个固定的尺寸,在这个前提下要使图片在一个固定了宽度和高度的容器中垂直居中,想想感觉还是挺麻烦的,由于最近的项目可能会用到这个方案,所以把一些常用的方法都收集整理了一下。

下图是理想中的效果图,外部容器的宽度和高度是固定的,中间的图片宽度和高度未知,但是图片要始终要相对于外部的容器垂直居中。

但是实际中实现的效果并不是很完美,由于各浏览器的解析都各不相同,所以各浏览器都会有1px-3px的偏差。

方法一 (XHTML 1.0 transitional):

该方法是将外部容器的显示模式设置成display:table,img标签外部再嵌套一个span标签,并设置span的显示模式为display:table-cell,这样就可以很方便的使用vertical-align象表格元素那样对齐了,当然这只是在标准浏览器下,IE6/IE7还得使用定位。

HTML结构部分:


以下为引用的内容:

<div id="box">
    <span><img src="images/demo.jpg" alt=""></span>
</div>

CSS样式部分:


以下为引用的内容:

<style type="text/css">
#box{
width:500px;height:400px;
display:table;
text-align:center;
border:1px solid #d3d3d3;background:#fff;
}
#box span{
display:table-cell;
vertical-align:middle;
}
#box img{
border:1px solid #ccc;
}
</style>
<!--[if lte IE 7]>
<style type="text/css">
#box{
position:relative;
overflow:hidden;
}
#box span{
position:absolute;
left:50%;top:50%;
}
#box img{
position:relative;
left:-50%;top:-50%;
}
</style>
<![endif]-->

方法二 (XHTML 1.0 transitional):

方法二和方法一的实现的原理大同小异,结构也是相同的,方法一用的是条件注释,方法二就用的CSS Hack。

CSS样式部分:


以下为引用的内容:

<style type="text/css">
#box{
width:500px;height:400px;
overflow:hidden;
position:relative;
display:table-cell;
text-align:center;
vertical-align:middle;
border:1px solid #d3d3d3;background:#fff;
}
#box span{
position:static;
*position:absolute; /*针对IE6/7的Hack*/
top:50%; /*针对IE6/7的Hack*/
}
#box img {
position:static;
*position:relative; /*针对IE6/7的Hack*/
top:-50%;left:-50%; /*针对IE6/7的Hack*/
border:1px solid #ccc;
}
</style>

该方法有个弊端,在标准浏览器下由于外部容器#box的显示模式为display:table-cell,所以导致#box无法使用margin属性,并且在IE8下设置边框也无效。

方法三 (XHTML 1.0 strict):

标准浏览器还是将外部容器#box的显示模式设置为display:table-cell,IE6/IE7是利用在img标签的前面插入一对空标签的办法。

HTML结构部分:


以下为引用的内容:

<div id="box"><i></i><img src="images/demo.jpg" alt=""></div>

CSS样式部分:


以下为引用的内容:

<style type="text/css">
#box{
width:500px;height:400px;
display:table-cell;
text-align:center;
vertical-align:middle;
border:1px solid #d3d3d3;background:#fff;
}
#box img{
border:1px solid #ccc;
}
</style>
<!--[if IE]>
<style type="text/css">
#box i {
    display:inline-block;
    height:100%;
    vertical-align:middle
    }
#box img {
    vertical-align:middle
    }
</style>
<![endif]-->

方法三也同样适用XHTML 1.0 transitional。以上方法都是收集于蓝色理想,暂时只对这3个方法比较满意,兼容性方面不错,使用起来的限制也比较小,还有些方法我也都一一测试过,效果都不理想,在各浏览器中的差异比较大。另外司徒正美这里也收集了一些方法。

思考:很多方法都是依赖于将外部容器的显示模式设置成table才能实现垂直居中,也就是div来模拟table,如果CSS有一个属性来实现这种效果那该多好。如果你也有好的方法,欢迎你来分享。

时间: 2024-11-05 18:48:20

未知高度的图片垂直居中的相关文章

换行文字、未知宽高图片垂直居中完美解决方案

原文:换行文字.未知宽高图片垂直居中完美解决方案 垂直居中是一个历史悠久的大问题,要做到兼容所有浏览器少不了要花点时间,网上也流传了很多解决方案,但没发现比我现在用的方案更完美,至少在我的项目是如此. 项目中要用到垂直居中而碰到兼容性问题的,一般都是以下几种情况: 1.换行文字垂直居中 2.图片垂直居中 以上都是在固定宽高的容器里垂直居中,不然的话margin,padding便可实现. 解决垂直居中无非就从几个方面入手,利用行高等于容器高度,模拟表格单元格特性,定位,css3的display:b

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

未知宽高图片垂直居中&amp;amp;&amp;amp;CSS垂直居中总结

http://www.cnblogs.com/dojo-lzz/p/4419596.html DIV    水平垂直居中 <style> #one { width: 500px; height: 300px; background: green; border: 1px solid red; text-align: center; vertical-align: middle; display: table-cell; } #vd { width: 400px; height: 30px; b

Web标准学习:未知高度的非表格垂直对齐

web|web标准 非已知高度的垂直对齐的条件: 表格单元格 行内块(inline-block) 第一个比较好理解,第二个很多人可能会忽略.比如,很多人在图片与文本混排的时候想让图片相对于文本垂直居中除了用IE的私有特性 valign="absmiddle"别无他法.记住,默认下图片就是属于inline-block,你只需简单的img {vertical-align:middle;}即可. 那么,我们进入主题.现在我们由于某些特殊需要两个并排的div想实现垂直居中.如前所述,div非表

CSS图片垂直居中方法整理集合

看到问此问题的很多,所以花点时间整理下,欢迎大家提意见,做补充修改,谢谢!/*lesliezmz整理的方法 2010-01-19*/ 当writing-mode为tb-rl 时,文档流是从上到下,从右到左书写.然后设置text-align: center就可以实现垂直方向上的居中.算是一个小技巧吧. 原帖链接:IE6下用writing-mode实现 未知高度替换元素垂直居中. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional

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

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

CSS解决未知高度垂直居中的问题_CSS/HTML

除特别说明外,本站内容采用创作共用授权署名和非商业用途,请尊重劳动成果. 原文标题:Vertical Centering in CSS 副标题:Yuhu's Definitive Solution with Unknown Height 翻译:forestgan 尽管有CSS的vertical-align特性,但是并不能有效解决未知高度的垂直居中问题(在一个DIV标签里有未知高度的文本或图片的情况下). 标准浏览器如Mozilla, Opera, Safari等.,可将父级元素显示方式设定为TA

转载未知大小的图片在一个已知大小容器中的水平和垂直居中(二)_经验交流

这是一个未知大小的图片在一个已知大小容器中的水平和垂直居中的例子,原文标题:"Centering an image of unknown size in an outer container of known size", 作者:Stu Nicholls form:http://www.cssplay.co.uk/menu/centered.html ,发表日期:15th October 2006. 此文由forestgan于2006-10-17翻译发表,更多文章. 这个水平和垂直居中

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

首先我们来看这样一段HTML:  代码如下 复制代码 <ul> <li> <a href=""><img src="" alt="" /></a> </li> </ul> 类似这样的结构,是我们在实际应用中常遇到的,其中,li的宽和高都是固定的,但图片的宽和高可能是不确定的,例如商城的商品列表. 此时,如果希望图片水平居中,只需要给li应用text-align: