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中,可以不添加标签,直接使用伪类或伪元素来实现。

demodownload

技巧的好处是什么?

大家会问,这样做能给我们带来什么好处呢?其实好处还是蛮多的:

  1. 节约时间:你不用为每种效果制作图片,然后将图片导出来;
  2. 保持原图片不变:使用这种方法,无需为了不同的效果去改为源图片;
  3. 适应多主题:这种技巧最大的好处就是,我们可以随时根据需要,使用css就能制作出不同的主题效果;
  4. 能工作在任何网站上:这种技巧不受限于网站的类型,而且图片大小不限;
  5. 兼容各浏览器:具有较强的兼容性,连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》一文。

demodownload

如需转载,烦请注明出处:https://www.fedev.cn/css/css-decorative-gallery.html

nike free run 5.0 womens