CSS实现鼠标移动图片放大效果

发布日期:2010-08-12 作者:mi52.com 人气:

现在在含有图片较多的页面上,我们会以缩略图的形式展示图片,当用户将鼠标移动到缩略图上时,我们就会按原图大小显示出来。这种应用已经很普遍,尤其在商品展示和用户头像场景中。

写之前发现网上的都不是很理想,兼容性一般。再看了《超越CSS》之后,觉得上面的想法不错,这次和大家分享一下。大致思路就是:通过绝对定位把缩略图图排列好,然后通过css的hover伪类属性来实现图片尺寸放大。具体如下:

demo文件下载点这里

CSS文件如下:

  1. <style type="text/css" title="">
  2. body{width:320px;margin:0 auto;padding:20px;background:#000;color:#000;}
  3. #main-content{border:5px solid #7bc809;padding:5px;background:#fff ;}
  4. ul{ margin:0;padding:0;list-style:none;padding-bottom:300px; /*padding给图片撑开空间*/} li{display:inline;}
  5. li a{position:relative;}
  6. li a:hover{position:relative;color:#000;z-index:1000;}
  7. /*此处要有border:none属性,否则IE6下面无法显示出来,是IE6伪类的BUG*/
  8. li a img{width:100px;height:100px;border:none;position:absolute;}
  9. /*使用绝对定位让图片固定,从而脱离页面流*/
  10. li a:hover img{
  11. position:absolute;left:-10px;top:-50px;width:240px;height:240px;padding:5px;background:#fff;border:2px solid #000;z-index:1000;}
  12. /*注意这里的z-index显示设置,否则会有重叠*/
  13. li#pic-01 a img{top:0;left:0;}
  14. li#pic-02 a img{top:0;left:100px;}
  15. li#pic-03 a img{top:0;left:200px;}
  16. li#pic-04 a img{top:100px;left:0;}
  17. li#pic-05 a img{top:100px;left:100px;}
  18. li#pic-06 a img{top:100px;left:200px;}
  19. li#pic-07 a img{top:200px;left:0px;}
  20. li#pic-08 a img{top:200px;left:100px;}
  21. li#pic-09 a img{top:200px;left:200px;}/*定位图片的排布*/
  22. </style>

Html文件如下:

  1. <div id="main-content">
  2. <ul>
  3.     <li id="pic-01"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/01.jpg" alt="" /></a></li>
  4.     <li id="pic-02"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/02.jpg" alt="" /></a></li>
  5.     <li id="pic-03"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/03.jpg" alt="" /></a></li>
  6.     <li id="pic-04"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/04.jpg" alt="" /></a></li>
  7.     <li id="pic-05"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/05.jpg" alt="" /></a></li>
  8.     <li id="pic-06"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/06.jpg" alt="" /></a></li>
  9.     <li id="pic-07"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/07.jpg" alt="" /></a></li>
  10.     <li id="pic-08"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/08.jpg" alt="" /></a></li>
  11.     <li id="pic-09"><a href="#"><img src="http://ued.alipay.com/wp-content/uploads/2008/10/09.jpg" alt="" /></a></li>
  12. </ul>
  13. </div>

鼠标移上去之后实现了图片放大,其中要注意的是IE6的hover属性,

IE6处理CSS伪类:hover存在一个Bug.就是一旦 a与 a:hover 的CSS属性是一样的,也就是说a:hover中没有任何样式的改变,hover状态就不会被触发。但是只要在a:hover增加某些特定的属性变化,本例中是“border:none;”,就可以触发这个事件了。这里的特定属性有:direction/text-align/text-indent/float/overflow/position,但是font属性无效。

好了,这样我们就可以实现兼容性很好的鼠标触发图片放大效果,而且是纯CSS实现。不过有同事说这样的效率未必好,建议用两组图片,只有用户触发了某一张小图时候再载入大图,这在缩略图很多的时候可以尝试,具体做法不再阐述。

也许有人说这里的缩略图排列一定要用绝对定位么?答案是不一定。一种方法是用传统的ul,li依靠浮动排列,然后去掉a的样式定义,直接在a:hover上加载。这样还可以避免了IE6的hover的Bug,但是在做demo的时候发现之后会出现:只要鼠标移动上去之后动一下,原来的缩略图就出现跳动。
希望大家一起来讨论,还有哪些问题和改进的建议。

本文来自:http://ued.alipay.com/?p=117

返回顶部

拨打电话
首页