网页制作实例:图片真正居中的方法


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

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

但是实际中实现的效果并不是很完美,由于各浏览器的解析都各不相同,所以各浏览器都会有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有一个属性来实现这种效果那该多好。如果你也有好的方法,欢迎你来分享。

原文:http://stylechen.com/img-middle.html



相关阅读:
checkbox 复选框不能为空
关于ASP.NET在IIS一些问题经验总结
asp.net(c#)ref,out ,params的区别
双系统计算机怎样卸载其中一个?
Oracle10g新特性——正则表达式
ASP在线创建Word与Excel文档
JavaScript判断窗口是否最小化的代码(跨浏览器)
mssql 两种数据插入方式
php学习 字符串课件
在64位Linux环境下安装Oracle数据库10g
脱离Linux新手十要点
AJAX、AJAX实例及AJAX源代码
Windows XP实现开机自动拨号上网
SQL Server存储过程命名标准
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 再见,自来也最好的结局。 2016年大学生实习生自我鉴定 乌“龙”传奇 市教育提升工程实施情况汇报材料 黄瓜国王的读后感 大学生入党思想汇报(样本) 杨熹文:亲爱的,别让生活太冷清 假货专卖店作文1500字 爱情就像沙漏,心满了,脑子就空了! 随笔记 最纯净的拥抱 痛后还是快乐着 属于我半海的记忆,泪已枉然 初中初一作文700字:《小学生天地》我的良师益友 2015最新购销合同样本 风动心动 正规赠与合同格式下载 突出富民便民两条主线 创建高效务实服务型政府 小学五年级作文550字:春天的校园 每天思考五分钟 那片花海作文200字 我的乐园作文750字 慈爱的奶奶 寂寞红(十六) 感恩父母感恩社会 智者的寓言2 唯一的听众作文1000字 考场上比较抢眼的四法点题之字面重复点题法 可爱的“雪花”作文400字 九一八作文范文 活着的姿态 70寿辰贺词 独一无二的他作文1000字 致赵汀阳 小学四年级作文350字:水中趣事 地球妈妈的心愿作文400字 电梯广告投放合同 关于边晓琳和W晓T的曾经/ 诗下诗人的心声作文800字 同学间的毕业赠言 阿达奇遇记作文900字 写爱 销售暑假实习报告 建军节座谈会主持词 小学四年级作文700字:校园一角 小学六年级作文550字:参观菊花展 初中初二作文800字:讲述我家的奥运成长故事 初中初一作文750字:感人肺腑的生命之歌 中考语文作文七大题型——命题作文作文3000字 天堂是你的大观园

Copyright © 2016 phpStudy |