`
guoyiqi
  • 浏览: 1002187 次
社区版块
存档分类
最新评论

未知高度的图片垂直居中(转自:http://stylechen.com/img-middle.html)

 
阅读更多

图片的宽度和高度是未知的,没有固定的尺寸,在这个前提下要使图片在一个固定了宽度和高度的容器中垂直居中。最近的在做的项目就有这个需求,所以先把一些常用的方法都收集整理了一下。

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

理想的图片垂直居中效果图

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

方法一:

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

HTML结构部分:

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

CSS样式部分:

01 <style type="text/css">
02 #box{
03 width:500px;height:400px;
04 display:table;
05 text-align:center;
06 border:1px solid #d3d3d3;background:#fff;
07 }
08 #box span{
09 display:table-cell;
10 vertical-align:middle;
11 }
12 #box img{
13 border:1px solid #ccc;
14 }
15 </style>
16 <!--[iflte IE 7]>
17 <style type="text/css">
18 #box{
19 position:relative;
20 overflow:hidden;
21 }
22 #box span{
23 position:absolute;
24 left:50%;top:50%;
25 }
26 #box img{
27 position:relative;
28 left:-50%;top:-50%;
29 }
30 </style>
31 <![endif]-->

方法二:

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

CSS样式部分:

01 <style type="text/css">
02 #box{
03 width:500px;height:400px;
04 overflow:hidden;
05 position:relative;
06 display:table-cell;
07 text-align:center;
08 vertical-align:middle;
09 border:1px solid #d3d3d3;background:#fff;
10 }
11 #box span{
12 position:static;
13 *position:absolute;/*针对IE6/7的Hack*/
14 top:50%;/*针对IE6/7的Hack*/
15 }
16 #box img {
17 position:static;
18 *position:relative;/*针对IE6/7的Hack*/
19 top:-50%;left:-50%;/*针对IE6/7的Hack*/
20 border:1px solid #ccc;
21 }
22 </style>

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

方法三:

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

HTML结构部分:

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

CSS样式部分:

01 <style type="text/css">
02 #box{
03 width:500px;height:400px;
04 display:table-cell;
05 text-align:center;
06 vertical-align:middle;
07 border:1px solid #d3d3d3;background:#fff;
08 }
09 #box img{
10 border:1px solid #ccc;
11 }
12 </style>
13 <!--[ifIE]>
14 <style type="text/css">
15 #box i {
16 display:inline-block;
17 height:100%;
18 vertical-align:middle
19 }
20 #box img {
21 vertical-align:middle
22 }
23 </style>
24 <![endif]-->

方法四:

在img标签外包裹一个p标签,标准浏览器利用p标签的伪类属性:before来实现,IE6/IE7使用了CSS表达式来实现兼容。

HTML结构部分:

1 <div id="box">
2 <p><img src="images/demo.jpg"alt=""/></p>
3 </div>

CSS样式部分:

01 #box{
02 width:500px;height:400px;
03 text-align:center;
04 border:1px solid #d3d3d3;background:#fff;
05 }
06 #box p{
07 width:500px;height:400px;
08 line-height:400px;/* 行高等于高度 */
09 }
10
11 /* 兼容标准浏览器 */
12 #box p:before{
13 content:".";/* 具体的值与垂直居中无关,尽可能的节省字符 */
14 margin-left:-5px; font-size:10px;/* 修复居中的小BUG */
15 visibility:hidden;/*设置成隐藏元素*/
16 }
17
18 #box p img{
19 *margin-top:expression((400 -this.height )/2);/* CSS表达式用来兼容IE6/IE7 */
20 vertical-align:middle;
21 border:1px solid #ccc;
22 }

使用:beforr这个方法对于标准浏览器来说比较给力,也没发现有副作用,但是对于IE6/IE7,如果对性能要求较高的话CSS表达式的方法要慎用。

方法五:

该方法针对IE6/IE7,将图片外部容器的字体大小设置成高度的0.873倍就可以实现居中,标准浏览器还是使用上面的方法来实现兼容,并且结构也是比较优雅。

HTML结构部分:

1 <div id="box">
2 <img src="images/demo.jpg"alt=""/>
3 </div>

CSS样式部分:

01 #box{
02 width:500px;height:400px;
03 text-align:center;
04 border:1px solid #d3d3d3;background:#fff;
05
06 /* 兼容标准浏览器 */
07 display: table-cell;
08 vertical-align:middle;
09
10 /* 兼容IE6/IE7 */
11 *display:block;
12 *font-size:349px;/* 字体大小约为容器高度的0.873倍 400*0.873 = 349 */
13 *font-family:Arial;/* 防止非utf-8引起的hack失效问题,如gbk编码 */
14 }
15
16 #box img{
17 vertical-align:middle;
18 }

设置字体大小的方法感觉比较怪异,也没有看到一个合理的解释,只知道图片元素有一些不同于其他元素的特性,但是对于IE6/IE7来说,这个方法还是比较给力的。

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

原载于:雨夜带刀's Blog
本文链接:http://stylechen.com/img-middle.html
如需转载请以链接形式注明原载或原文地址并转告本博。
分享到:
评论

相关推荐

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

    ### CSS解决未知高度的DIV垂直居中 #### 知识点概述 在Web开发中,实现元素的垂直居中是一项常见的需求。对于已知高度的元素来说,这相对容易实现。但对于那些高度未知或者动态变化的元素,尤其是嵌套在另一个未知...

    开源数据集.pdf

    - **Caltech101/Caltech256**:分别包含101类和256类物体的图片。 - **地址**:[http://www.vision.caltech.edu/Image_Datasets/Caltech101/](http://www.vision.caltech.edu/Image_Datasets/Caltech101/) 和 ...

    CSS让图片垂直居中和底端对齐的代码

    CSS使图片垂直居中的代码: &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;html xmlns=...

    独品挂机锁V1.3(小巧美观的挂机锁,可使用图片挂机,设置透明度)

    1、当你坐着等待某个程序执行任务,你可以全透明或半透明挂机,然后靠着椅子上小睡一会,时不时撑开眼睛看看进度,身边其他同事也动不了你的电脑。...演示地址:http://bbs.dupinsoft.com/thread-354-1-1.html

    css设置未知尺寸图片的水平和垂直居中

    在网页设计中,让未知尺寸的图片在容器中水平和垂直居中是一项常见的需求。这涉及到CSS布局和响应式设计的技巧。以下将详细介绍如何实现这一目标。 首先,我们需要理解CSS中的盒模型和定位概念。在CSS中,元素的...

    Foxit Reader 3.0

    3. 标注控制完善:标注可以进行居中对齐,包括水平居中、垂直居中和水平垂直居中,涵盖各类标注类型。 4. 工具栏更新:全新布局和自定义工具栏功能提供更人性化的界面。 5. 权限控制强化:在受保护的PDF文件中,...

    JQUERY图片自动垂直居中水平居中-支持IE678910/chrome/firefox/opera

    明锋工作室整理常用资料。本次资料是一个自动居中插件,只要设定div长度和高度,其中的图片会自动铺满容器并且自动居中。很简单好用。并且该自动居中插件支持IE6、IE7、IE8、IE9、IE10、CHROME、FIREFOX、OPERA。

    DIV未知高度的垂直居中代码.rar

    标题中的“DIV未知高度的垂直居中代码”指的是在网页设计中如何使一个具有未知高度的元素在页面上实现垂直居中的技术。在Web开发中,这是一项常见的需求,尤其是在响应式设计中,当内容高度不确定时,仍然希望元素...

    网页图片垂直居中

    要使图片垂直居中,可以创建一个包含图片的容器,并设置以下样式: ```css .container { display: flex; justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */ } ``` 2. **CSS Grid**...

    图片水平垂直居中

    在网页设计中,让图片水平垂直居中是一个常见的需求,特别是在构建响应式布局或需要保持元素在不同屏幕尺寸下居中的场景。本文将详细介绍如何使用简洁的代码来实现这一目标,适用于各种现代浏览器。 首先,我们可以...

    DIV+CSS 图片垂直居中效果

    在网页设计中,"DIV+CSS 图片垂直居中效果"是一个常见的布局需求,它涉及到CSS的盒模型、定位和Flexbox或Grid等现代布局技术。以下是对这一主题的详细阐述: 1. **基础概念** - **DIV**:HTML中的`&lt;div&gt;`元素是一...

    后台登录页面

    在这个场景中,"后台登录页面"的描述提到了两个关键设计元素:背景图片的自动缩放以及登录表单的垂直和水平居中显示。 首先,让我们从HTML开始。HTML(HyperText Markup Language)是用于创建网页结构的语言。为了...

    垂直居中布局 Vertical-aligned 应用测试:兼容IE6/8/FF

    创建一个内联表格,将内容放在单元格中,设置`valign="middle"`即可实现垂直居中。 2. **绝对定位(Absolute Positioning)**: 使用绝对定位,结合`top`和`bottom`属性配合使用`margin: auto`。不过,这种方法...

    css图片垂直居中方法

    在网页设计中,让图片垂直居中是一项常见的需求,它能...通过阅读提供的文本文件"图片垂直居中2.txt、图片垂直居中3.txt、图片垂直居中1.txt、图片垂直居中4.txt",你可以找到更多示例和解释,深入了解每种方法的细节。

    html中对文本实现垂直居中的方法

    在探讨HTML中文本垂直居中的方法时,我们深入解析了三种不同的策略,这些策略涵盖了从简单的单行文本到复杂的多行未知高度或固定高度文本的处理。每种方法都有其独特之处,适用于不同场景下的需求。 ### 单行垂直...

    对未知高度的图片设置垂直居中的方法详解

    本文将详细介绍几种不同浏览器下实现未知高度图片垂直居中的方法,并特别关注在IE浏览器中的表现。由于IE浏览器的兼容性问题,可能需要针对不同版本的IE采取特定的解决办法。 首先,对于标准浏览器,可以通过将外部...

    CSS实现完美垂直居中 - 蓝色理想

    在网页设计中,CSS(Cascading Style Sheets)布局是一个重要的方面,而垂直居中问题则是许多开发者在创建响应式和动态网页时常常遇到的挑战。"CSS实现完美垂直居中"这一主题深入探讨了如何利用CSS技术使元素在容器...

    图片垂直居中

    在网页设计中,让图片垂直居中是一项常见的需求,尤其在布局多样性和响应式设计日益重要的今天。"图片垂直居中"是一个关于CSS布局技术的知识点,它涉及到多种方法,适用于不同的场景。以下是对这个主题的详细解释: ...

    图层中图片垂直水平居中

    以上就是实现图层中图片垂直水平居中的几种常见CSS方法。根据实际项目需求和浏览器兼容性,选择合适的方法。在实践过程中,还可以结合媒体查询(media queries)来确保在不同屏幕尺寸下仍能保持良好的居中效果。

Global site tag (gtag.js) - Google Analytics