网页图片居中:商品图片的自适应居中的方法

文章简介:图片的自适应居中及兼容性处理。

前几天在做腾讯微博的微卖场的时候,遇到需要做图片居中的需求。也就是说,商品列表中的图片需要居中显示。因为图片是卖家自己把商品图片链接过来,商品图片的大小没有做限制和过滤。所以我们需要做的是,让图片在容器当中水平居中、垂直居中、图片自适应容器大小。图片原图大小和在容器中显示的大小有这样的关系:

假设容器大小为200像素*200像素,图片的宽为x 像素,高为y 像素,则:
当x<=200,y<=200时,图片位于容器中的中间,即水平居中和垂直居中,显示在容器的图片大小为:宽=x,高=y ;
当x>200,y<=200时,显示在容器中的图片大小为:宽=200,高=200y/x ;
当x<=200,y>200时,显示在容器中的图片大小为:宽=200x/y,高=200 ;
当x>200,y>200,且x>y,显示在容器中的图片大小为:宽=200,高=200y/x ;
当x>200,y>200,且x<y,显示在容器中的图片大小为:宽=200x/y,高=200;
当x>200,y>200,且x=y,显示在容器中的图片大小为:宽=200,高=200 ;

为了更好地看到效果,先把图片的原图展示出来,以便和它在列表容器当中做对比。

x<=200,y<=200的图片:

x>200,y<=200的图片:

x<=200,y>200的图片:

x>200,y>200,且x=y的图片:

图片自适应居中适用的场景有商品列表、相册、搜索图片结果列表等。如何使用静态的方法实现这样的效果呢?看了网上的一些方法,加上自己的一些说明,做了几个demo,供大家参考。

使用透明图片,在该图片上设置背景图。

这种方法适用于小图片,即商品图都比容器小,不需要缩放,加载状态图片可以使用这个方法。这个方法的局限性在于,商品图片需要在服务器端过滤,或者先等比例缩小,再在浏览器端显示。

1

<div
class="wrap_1"><a
href=""><img
style="background-image:url(100_100.jpg)"
src="wrap_loading.png"
alt=""
width="200"
height="200"></a></div>

1
2
3

/* 图片的背景图方式 */
.wrap_1
{ width:200px; height:200px; border:1px
solid
red; }
.wrap_1
img { display:block; background-repeat:no-repeat; background-position:center; }

查看demo

设置display为table-cell

在img外设置两层div,最外层div的样式设置为display:table-cell。因为IE6、7中对table-cell不支持,所以针对IE6、7,设置了position来实现居中。在IE8中,如果图片本身的宽比容器的宽大,则容器宽度会被撑开,这里使用针对IE8的width为200px处理。

1

<div
class="wrap_2_outer"><div
class="wrap_2_inner"><a
href=""><img
src="100_100.jpg"
alt=""
></a></div></div>

1
2
3
4

/* table-cell方式 */
.wrap_2_outer { border:1px
solid
red; width:200px; height:200px; display:table-cell; font-size:0; text-align:center; vertical-align:middle; *position:relative;padding:0; overflow:hidden; }
.wrap_2_inner { text-align:center; vertical-align:middle; width:200px\9; *width:auto;font-size:0; *position:absolute;*top:50%;*left:50%;}
.wrap_2_inner img { max-height:200px; max-width:200px; *position:relative;*bottom:50%;*right:50%;margin:0
auto;}

查看demo

用与图片并列的一个空标签

设置了空标签的高,使得与它并列的。

1

<div
class="wrap_3"><a
href=""><img
src="100_100.jpg"
alt=""
></a><i></i></div>

1
2
3
4

/* 空标签 */
.wrap_3
{ width:200px; height:200px; overflow:hidden; text-align:center; font-size:0; border:1px
solid
red; }
.wrap_3
i { display:inline-block; width:0; height:100%; overflow:hidden; margin-left:-1px; font-size:0; line-height:0; vertical-align:middle; }
.wrap_3
img { vertical-align:middle; max-height:200px; max-width:200px; }

查看demo

设置行高line-height

对图片容器设置行高为容器的高。

1

<div
class="wrap_4"> <img
src="400_300.jpg"
alt=""
> </div>

1
2
3

/* 设置行高 */
.wrap_4
{ width:200px; height:200px; text-align:center; border:1px
solid
red; font-family: arial; line-height:198px; font-size:0; _font-size:180px; }
.wrap_4
img { display:inline-block; vertical-align:middle; max-height:200px; max-width:200px; }

查看demo

以上实现的效果为:

IE6的杯具

对于图片的自适应,使用max-width和max-height。冷酷无情的现实就是IE6及以下不支持max-width和max-height。以上用于修复IE6中max-height,max-width的表达式_width、_height,在运行时还存在小问题。用不同的图片试了一下,对于宽和高至少一个值小于或等于200的图片,能够完美地展示,但是若宽和高两者都大于200,则会出现一些小问题。

若_width和_height两者一起使用,x>200,y>200,且x>y的图片,会显示理想的状态。x>200,y>200,且x<y的图片,会显示为200*200的大小,但是没有按比例缩放:(。

若_width、_height单独使用,则能够使对应的图片显示为理想状态。如仅使用_width,能对横图起作用,对竖图不起作用。

反之,如仅使用_height,能对竖图起作用,对横图不起作用。

结论是,_width和_height都写上,这样做有95%完美了。另外对CSS表达式的性能做优化,可以加上这句zoom: expression(function(el){el.style.zoom = “1″; alert(el.tagName);}(this));。

注:图片来源于网络。

时间: 2024-10-28 02:21:59

网页图片居中:商品图片的自适应居中的方法的相关文章

CSS网页制作技巧:图片的自适应居中和兼容处理

文章简介:图片的自适应居中及兼容性处理. 前几天在做腾讯微博的微卖场的时候,遇到需要做图片居中的需求.也就是说,商品列表中的图片需要居中显示.因为图片是卖家自己把商品图片链接过来,商品图片的大小没有做限制和过滤.所以我们需要做的是,让图片在容器当中水平居中.垂直居中.图片自适应容器大小.图片原图大小和在容器中显示的大小有这样的关系: 假设容器大小为200像素*200像素,图片的宽为x 像素,高为y 像素,则: 当x<=200,y<=200时,图片位于容器中的中间,即水平居中和垂直居中,显示在容

CSS学习笔记:任意大小图片是自适应居中

文章简介:平时笔记. 强制换行:word-warp:block-word; 任意大小图片是自适应居中: css: .wrapperBox{border:1px solid red; width:100px; height:100px; display:table-cell; font-size:0; text-align:center; vertical-align:middle; *position:relative;padding:0; overflow:hidden; } .innerBo

CSS网页制作技巧:背景图片定位

文章简介:三. 背景图片定位决定因素:a. 设置背景图片容器的大小(宽度和高度)b. 首先要定义背景图片(background-image)c. 其次是背景图片是否重复(background-repeat). 一. 网页中添加图片的方式有两种 一种是:通过<img>标签直接插入到html中另一种是:通过css背景属性添加 二. 怎样来判断添加图片方式?? Ø 网页中的装饰性的图片,通过背景图片添加 Ø 用户图片,通过插入形式添加 Ø 按钮,有多个状态的效果图片,通过背景图片添加 三. 背景图片

学习网页技巧:css布局中的居中问题

css|技巧|网页|问题 如何使DIV居中 主要的样式定义如下: body {TEXT-ALIGN: center;}#center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; } 说明: 首先在父级元素定义TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中:对于IE这样设定就已经可以了.但在mozilla中不能居中.解决办法就是在子元素定义时候设定时再加上"MARGIN-RIGHT: auto;MARGIN-LEFT: auto;

PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例_php实例

说起来做这个功能还真是一时好奇.前段时间在做一个淘客网站的时候,想到是否能抓取到淘宝商品的买家秀呢?经过一番折腾发现,淘宝商品用户评价信息是通过Ajax来调取的,通过嗅探网址发现,评论数据的请求接口是: https://rate.tmall.com/list_detail_rate.htm?itemId=524394294771&spuId=341564036&sellerId=100414600&order=3&currentPage=1&append=0&

浮动的div自适应居中显示的js代码

 这篇文章主要介绍了浮动的div自适应居中显示的js代码,有需要的朋友可以参考一下 当div是浮动的时候浏览器窗口发生变化的时候不能居中显示(因为浮动的时候一般设定的有left或者right值)   可以先用jquery获取外围的div随浏览器变化而变化的宽度(加上监听事件)   之后再获取div的宽度 例如:   代码如下: function autoWidth(){        var bW = $(".call_man").width();//外围的div      var p

求助webapp响应式布局 背景图片和普通图片如何自适应?

问题描述 求助webapp响应式布局 背景图片和普通图片如何自适应? 求助webapp响应式布局 背景图片和普通图片如何自适应? 用CSS 如何自适应?因为图片高度和宽度有固定比例 如果就设置width和height为100% 即使图片高清 但碰到不同尺寸设备 图片自动占据全屏 会改变图片比例尺 会影响吧?请问这个问题CSS 怎么解决?谢谢 解决方案 IMG加载的图片width设置为100%,高度会按照width的值自动等比率缩放 背景图片用background-size 属性来控制缩放 div

网页开发-网页图片轮播 图片显示问题

问题描述 网页图片轮播 图片显示问题 我要实现几张图片轮播:功能正常实现了,可是这个图片怎么显示地这么奇怪:半天找不出原因!求大神开发-网页图片轮播 图片显示问题-网页图片轮播代码"> 这个是两张图片...都只显示了各自的一半:我想要的是一整张一整张的显示: 解决方案 官网的正常没有,正常就是你使用有问题,或者自己导入的css重写了插件的css导致的jquery焦点图代码 解决方案二: css 的问题.这类的问题还是调试吧. 解决方案三: 你这是用插件的吧.原因应该是插件里面的css和你自

web前端-网页跑马灯的图片切换特效是如何实现的?

问题描述 网页跑马灯的图片切换特效是如何实现的? 网站里跑马灯图片在切换时的特效是如何用JavaScript实现的,求具体的源代码. 解决方案 用脚本可以做,CSS3也可以做了. 解决方案二: http://www.xwcms.net/js/xxk-hdm/63283.html 解决方案三: <!DOCTYPE> <html> <head> <title> new document </title> <meta name="gen