CSS美化图片
很久没有写blog了,不知道是时间太紧的原故还是人懒惰了。今天在webdesignerwall.com看到一篇不错的文章《CSS Decorative Gallery》,文章中介绍了多种不同的方法,用于美化Web页面中的IMG。学得很有意思,其实早在《CSS3制作图片样式》和《jQuery和CSS3给图片制作圆角》中有介绍过怎么美化img,但是今天这篇文章更有意思。我们不仿一起来看看:
如果你阅读了webdesignerwall.com写的文字渐变一文,理解后面的内容就很简单。因为后面的DEMO都采用了同样的原理。这原理很简单就是给元素添加一个额外的标签,比如说<span>,将背景图片放在这个标签上,然后将其当作图片的朦板,遮盖在图片上。这样制作给你带来极大的灵活性,可维护性。当然,如果你不需要兼容IE低版本的话,我们不用增加任何标签也可以制作,就是使用CSS3选择器中的伪类(:before和:after)或者伪元素(::before和::after),同时把放在span标签上的背景图片放在伪元素或伪类上。这是一种新的思路,不过此文并没有运用,我还是按照原作者的思路与大家一起学习其制作方法。
制作原理:
其实原理前面就多了,在此重复一下:添加一个额外标签,充当图片的朦板,然后将图片边框之类背景放在这个标签上。当然在CSS3中,可以不添加标签,直接使用伪类或伪元素来实现。
技巧的好处是什么?
大家会问,这样做能给我们带来什么好处呢?其实好处还是蛮多的:
- 节约时间:你不用为每种效果制作图片,然后将图片导出来;
- 保持原图片不变:使用这种方法,无需为了不同的效果去改为源图片;
- 适应多主题:这种技巧最大的好处就是,我们可以随时根据需要,使用css就能制作出不同的主题效果;
- 能工作在任何网站上:这种技巧不受限于网站的类型,而且图片大小不限;
- 兼容各浏览器:具有较强的兼容性,连IE6这样的低版本都能兼容。
基本结构:
结构是很简单,如:
<div class="photo"> <a href=""> <span></span> <img src="xxx.jpg" alt="" /> </a> </div>
上面的结构我想大家都懂的,不过我还是在多说一下,我们把图片放在一个“div.photo”中,正如前面所说,在这里面添加了一个“span”标签(当然你可以是其他的标签),这个标签主要是充当图片的朦板效果,将图片的边框图片之类放在这个“span”中(以背景图片方式展示)。当然你如果不想添加这个“span”也行,你可以使用“:before”和“::before”之类,只不过这种方法只能在现代浏览器下运行。或者说,你可以使用js来插入这个“span”标签,正如前面的《CSS3制作图片样式》和《jQuery和CSS3给图片制作圆角》所介绍的一样。
朦板图片有着落放置了,接下来就是使用样式,我们这个“span”标签进行绝对定位,并且让其遮盖在原图上,其工作方式,我们以下图来进说简单明了的说明:
IE6下的PNG问题
由于我们的朦板图片采用的格式是PNG24(或者PNG32)的透明图片,这样在IE6下会有一个透明层的BUG,为了解决这个BUG,可以使用iepngfix.htc。使用iepngfix.htc并不复杂,你只需要把“iepngfix.htc”下载到你的项目中,然后在你项目文件的“<head>”中插入以下代码:
<!--[if lt IE 7]> <style type="text/css"> .photo span { behavior: url(iepngfix.htc); } </style> <![endif]-->
除了使用这种方法之外,你也可以使用DD_png的方法(js脚本处理方法)来解决PNG透明问题,详细的您可以参阅《解决IE6的png透明问题》一文。
效果预览:
说了这么多,那真的是不是那么神奇有用呢?我们在具体每个demo化之前,先来看一个DEMO效果:
jQuery插入标签:
对于有代码洁癖的同学来说,他不能容忍在HTML有任何空标签,那么此时,我们要满足这些同学的要求,只好借助JQ来实现:
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ //动态插入图片朦板空标签span $(".photo a").prepend("<span></span>"); }); </script>
DEMO分析
理论上的东西我想大家应该了解的差不多了,接下来,我们来看webdesignerwall.com制作的几个DEMO,这里我分别将其代码扣出,放上来与大家分享,希望对大家有所帮助:
在具体DEMO前,先将其结构放上来,由于我们DEMO中不只一张图片,所以将前面示例的结构换成了列表的形式,后面的DEMO中如无特殊声明,都以下面的结构为基础:
<ul class="gallery"> <li><a href="#"><span></span><img src="images/11.jpg" alt="image" /></a></li> <li><a href="#"><span></span><img src="images/14.jpg" alt="image" /></a></li> <li><a href="#"><span></span><img src="images/4.jpg" alt="image" /></a></li> <li><a href="#"><span></span><img src="images/7.jpg" alt="image" /></a></li> <li><a href="#"><span></span><img src="images/5.jpg" alt="image" /></a></li> <li><a href="#"><span></span><img src="images/6.jpg" alt="image" /></a></li> <li><a href="#"><span></span><img src="images/3.jpg" alt="image" /></a></li> <li><a href="#"><span></span><img src="images/1.jpg" alt="image" /></a></li> </ul>
注:每个DEMO会有细微上的差别,请以相对应的DEMO源文件为标准。
1、Simple Gallery
第一个DEMO是比较简单,我们在span上使用一张(类似于胶带的背景图)“tape.png”,将图片制作成类似于粘贴在墙上的效果:
CSS Code
/*清除浮动*/ .gallery:after, .gallery:before { display: table; content:""; } .gallery:after { clear:both; overflow: hidden; } .gallery { list-style: none; margin: 0; padding: 0; zoom:1; } .gallery li { margin: 10px; padding: 0; float: left; position: relative; width: 180px; height: 130px; } .gallery img { background: #fff; border: solid 1px #ccc; padding: 4px; } /*图片朦板效果*/ .gallery span { width: 77px; height: 27px; display: block; position: absolute; top: -12px; left: 50px; background: url(images/tape.png) no-repeat; } .gallery a { text-decoration: none; }
大家在实际运用中可以根据自己需要进行相对应的调整。这里说一下,其实“tap.png”的效果,如果在CSS3中的话,大家可以直接使用CSS3代码制作实现,如果你有兴趣了解如何制作?可以移步这里!
2、Mini Icons
这个效果和DEMO一是很相似的,只是将span的背景图片换成了小的icon,同时鼠标移到图片上后,ICON也会做一定的变化,这种效果可以说,很多地方可见:
CSS代码
.gallery:after, .gallery:before { display: table; content:""; } .gallery:after { clear:both; overflow: hidden; } .gallery { list-style: none; margin: 0; padding: 0; zoom:1; } .gallery li { margin: 10px; padding: 0; float: left; position: relative; width: 180px; height: 130px; } .gallery img { background: #fff; border: solid 1px #ccc; padding: 4px; } /*ICON容器大小与定位*/ .gallery span { width: 20px; height: 18px; display: block; position: absolute; bottom: 10px; right: 10px; } /*不同类型运用不同的ICON背景图片*/ .gallery .favorite { background: url(images/favorite.gif) no-repeat; } .gallery .photo { background: url(images/photo.gif) no-repeat; } .gallery .video { background: url(images/video.gif) no-repeat; } .gallery a { text-decoration: none; } .gallery a:hover img { border-color: #666; } .gallery a:hover span { background-position: left -22px; }
注:与DEMO一相比,需要在对应的a标签上添加类名,详细以DEMO源文件为标准。
3、Photo With Text
DEMO3与前两上相比,从结构上来说,把“span”标签更换成“em”标签,其实不用更换也能做出下面的效果,另外还在“em”标签中添加了图片对应的标签,并且在这个“em”上制作了一种带有纹理的背景,如下所示:
.gallery:after, .gallery:before { display: table; content:""; } .gallery:after { clear:both; overflow: hidden; } .gallery { list-style: none; margin: 0; padding: 0; zoom:1; } .gallery li { padding: 10px; margin: 0; float: left; position: relative; width: 180px; height: 130px; } .gallery li:hover img { border-color: #000; } .gallery img { background: #fff; border: solid 1px #888; padding: 5px; } /*朦板效果*/ .gallery em { background: #fff url(images/grey-gradient.gif) repeat-y; color: #000; font-style: normal; padding: 2px 10px; display: block; position: absolute; top: 110px; left: 9px; border: 1px solid #999; border-left-color: #888; } .gallery a { text-decoration: none; } .gallery a:hover em { background: #ffdb01 url(images/orange-gradient.gif) repeat-y; border-color: #c25b08; }
4、Popup Text
这个效果大家也有看到过,就是鼠标移到图片上,有一个简单的提示说明文字,如下所示:
CSS 代码:
.gallery:after, .gallery:before { display: table; content:""; } .gallery:after { clear:both; overflow: hidden; } .gallery { list-style: none; margin: 0; padding: 0; zoom:1; } .gallery li { padding: 10px; margin: 0; float: left; position: relative; width: 180px; height: 130px; } .gallery img { background: #fff; border: solid 1px #ccc; padding: 5px; } .gallery li:hover img { border-color: #999; } /*朦板效果,并且默认时隐藏*/ .gallery em { width: 102px; background: url(images/bubble.gif) no-repeat; padding: 3px 0 6px; display: none; position: absolute; top: -2px; left: 50px; font-style: normal; text-align: center; } .gallery a { text-decoration: none; color: #000; } /*鼠标悬浮时,朦板显示*/ .gallery a:hover em { display: block; }
5、Mini Paper Clip
使用一个别针一样的背景图片,制作出图片别在另一个纸张上的效果,与前面demo不同之处,添加了两个标签,其中span上放别针背景,em放描述文字:
CSS代码
.gallery:after, .gallery:before { display: table; content:""; } .gallery:after { clear:both; overflow: hidden; } .gallery { list-style: none; margin: 0; padding: 0; zoom:1; } .gallery li { padding: 10px; margin: 0; float: left; position: relative; width: 180px; height: 130px; } .gallery li:hover img { border-color: #000; } .gallery img { background: #fff; border: solid 1px #ccc; padding: 5px; } /*描述文字定位*/ .gallery em { background: #fff; color: #000; font-style: normal; padding: 2px 8px 0 22px; display: block; position: absolute; top: 20px; left: 5px; border: 1px solid #999; } .gallery a { text-decoration: none; } /*别针朦板效果*/ .gallery span { width: 30px; height: 60px; display: block; position: absolute; top: 7px; left: 9px; background: url(images/paper-clip-mini.png) no-repeat; z-index: 3; }
6、Art Gallery
使用不较大的朦板背景图片,可以给图片添加一些艺术边框效果,如:
CSS 代码
.gallery:after, .gallery:before { display: table; content:""; } .gallery:after { clear:both; overflow: hidden; } .gallery { list-style: none; margin: 0; padding: 0; zoom:1; } .gallery li { margin: 20px; padding: 0; float: left; position: relative; width: 212px; height: 175px; } .gallery a { text-decoration: none; color: #666; } .gallery a:hover { color: #000; text-decoration: underline; } .gallery img { padding: 20px 0 0 21px; } /*艺术相框效果*/ .gallery em { width: 216px; background: url(images/gold-frame.png) no-repeat; display: block; position: absolute; top: -2px; left: -2px; text-align: center; font: 100%/100% Georgia, "Times New Roman", Times, serif; padding-top: 168px; }
使用不同的边框效果,我们可以制作出不一样的DEMO,只要你有创意,什么效果都可以制作出来,为了节省你的时间,我就不全部列出来了,如果你喜欢其他的效果,你就拼命点这里
上面方法采用的是列表形式,可能在您布局之时会碰到同一行末尾的margin-right问题,说得简单点就是末位会掉下去,这里我没有做过多处理,如果你想完美点,可以参考《如何避免重复列末尾的Margin》一文,或者参阅为之为大家总结的《CSS解决方案》中的《项目列表解决方案》。
有关于CSS美化图片就介绍到这里了,这里只是给大家提供一个思路,您可以发挥你的创意,和无限的想像力,制作出各式各样的,具有创意的效果。
特别声明,本文中的图片和代码均来自于webdesignerwall.com的《CSS Decorative Gallery》一文。
如需转载,烦请注明出处:https://www.fedev.cn/css/css-decorative-gallery.html
nike free run 5.0 womens