优府网首页
站点地图
登陆
注册 点击进入优府网RSS订阅中心
当前位置:首页 >科技 > IT > 正文

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

发布者:杨丽蓉                  
    在制作网站过程中,一定会有兼容性,在一些浏览器中设置一些属性是不起作用的。所以我们一定要注意这些东东。(太原做网站)    需要做图片居中的需求。也就是说,商品列表中的图片需要居中显示。因为图片是卖家自己把商品图片链接过来,商品图片的大小没有做限制和过滤。所以我们需要做的…

    在制作网站过程中,一定会有兼容性,在一些浏览器中设置一些属性是不起作用的。所以我们一定要注意这些东东。(太原做网站)

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

假设容器大小为200像素*200像素,图片的宽为像素,高为像素,则:

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,供大家参考。

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

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

<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>

        /* 图片的背景图方式 */

                 .wrap_1 { width:200px; height:200px; border:1px solid red; }

                 .wrap_1 img { display:block; background-repeat:no-repeat; background-position:center; }

        

查看demo

设置displaytable-cell

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

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

/* 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:200px9; *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

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

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

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

/* 空标签 */

.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

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

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

/* 设置行高 */

.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-widthmax-height。冷酷无情的现实就是IE6及以下不支持max-widthmax-height。以上 用于修复IE6max-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 Expression的性能做优化,做了详尽的分析供大家参考。针对IE6加上_width: expression(function(el){el.style.width = el.offsetWidth > 200 ? ’200px’ : el.offsetWidth + ‘px’;counter(’2′);}(this));这句。(网站建设)

 

标签:网站制作 网站建设 太原做网站 2012年12月03日 10:47    [查看原文]   
最新评论 我要评论(0)
本周排行
推荐信息
资讯 国内 军事 体育 足球 篮球 娱乐 电影 音乐 财经 金融 能源 科技 数码 IT 女人 情感 职场
旅游 周边 出境 美食 家常 健康 房产 装修 二手 汽车 购车 养车 动漫 动画 漫画 文化 教育 图片
关于优府网 联系方式网站地图服务条款
版权所有 2008-2012 优府网 Copyright 2007-2012 uninf.com All rights reserved.
增值电信业务经营许可证广播电视节目制作许可证 固定刊物许可证