用纯CSS3绘制的网站图标
作者:大伟 来源:大伟的博客 发布时间:2010-03-28 13:51:00
在Google Reader上看到网友分享的一个链接,真的发现自己已经out了。上面的这张图,是纯CSS实现的,没有背景图、没有Javascript代码,更让我惊讶的是,它的html代码居然是如此的漂亮,没有一丝丝的代码冗余:
Facebook
Twitter
RSS
Flickr
Delicious
LinkedIn
Google
Orkut
Technorati
NetVibes
作者的原文在这里,作者的Demo在这里,完整的CSS文件在这里,为了能看到如图所示的效果,请使用Firefox或Google Chrome等支持css3的浏览器。
让我们来重现一下他的制作过程:
基本框架的实现。
每个图标大小width:64px;height:64px;间距20px;将a标签设置为display:block;在加上css3的圆角、文字阴影属性,详细css如下:
.cssicon {width:500px;overflow:hidden;margin:0 auto;margin-top:100px;}.cssicon ul{list-style:none;padding:0;margin:0;font:0.875em/1 Arial, sans-serif;}.cssicon li{float:left;overflow:hidden;margin:20px 20px 0 0;}.cssicon ul li a {display:block;width:64px;height:64px;overflow:hidden;border:1px solid silver;line-height:64px;text-decoration:none;/* css3 */text-shadow:0 -1px 0 rgba(0,0,0,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}
此时的效果在这里。
巧用文字效果
我们看facebook图标的实现。代码如下:
.cssicon ul li a {display:block;width:64px;height:64px;overflow:hidden;border:1px solid transparent;line-height:64px;text-decoration:none;/*将上面li a定义中的border属性修改为border:1px solid transparent*/.cssicon ul li a:hover,.cssicon ul li a:focus,.cssicon ul li a:active { opacity:0.8;border-color:#000;}/*增加hover效果*/.facebook a {border-color:#3c5a98;text-transform:lowercase;text-indent:34px;letter-spacing:10px; font-weight:bold; font-size:64px;line-height:66px;color:#fff;background:#3c5a98; /* css3 */ -moz-box-shadow:0 0 4px rgba(0,0,0,0.4);-webkit-box-shadow:0 0 4px rgba(0,0,0,0.4);box-shadow:0 0 4px rgba(0,0,0,0.4);}
首先用font-size调整到一个合适的字体大小,然后巧妙地应用text-indent属性,将首字母f摆到了合适的位置,最后用letter-spacing属性拉开了第二个字母与首字母之间的距离,由于父级设置了overflow:hidden属性,超出的字母就消失了。后面的twitter、google、LinkedIn都是同样的手法,只是增加了css3中关于背景颜色的线性渐变属性linear-gradient。
此时的效果在这里。
巧妙应用:after和:before伪类补充图标内容
比如Flickr的图标,两个圆圈就是使用:before和:after伪类加进去的。代码如下:
.cssicon .flickr a {position:relative;border-color:#d2d2d2;text-indent:-9000px;font-size:108px;font-weight:bold; color:#fff;background:#fff;/* css3 *//* NOTE: box-shadow is not currently in any CSS3 module. It may be reappear in a different form altogether */-moz-box-shadow:0 0 4px rgba(0,0,0,0.4);-webkit-box-shadow:0 0 4px rgba(0,0,0,0.4); box-shadow:0 0 4px rgba(0,0,0,0.4); /* standards version last *//* NOTE: webkit gradient implementation is not as per spec */background:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#d2d2d2));background:-moz-linear-gradient(top, #fff, #d2d2d2);background:linear-gradient(top, #fff, #d2d2d2); /* standards version last */}/* create blue circle */.cssicon .flickr a:before {content:"\00a0";position:absolute;top:50%;left:30%; width:20px; height:20px;margin:-10px 0 0 -10px;background:#085ec5;border:1px solid #003c84;/* css3 */-moz-border-radius: 20px;-webkit-border-radius: 20px;border-radius: 20px; /* standards version last *//* NOTE: webkit gradient implementation is not as per spec */background:-webkit-gradient(linear, left top, left bottom, from(#005cc6), to(#003d83));background:-moz-linear-gradient(top, #005cc6, #003d83);background:linear-gradient(top, #005cc6, #003d83); /* standards version last */}/* create pink circle */.cssicon .flickr a:after { content:"\00a0";position:absolute;top:50%;right:30%;width:20px;height:20px; margin:-10px -10px 0 0;border:1px solid #ba0060;background:#fd1e93;/* css3 */-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px; /* standards version last *//* NOTE: webkit gradient implementation is not as per spec */background:-webkit-gradient(linear, left top, left bottom, from(#fd1e93), to(#cb026c));background:-moz-linear-gradient(top, #fd1e93, #cb026c);background:linear-gradient(top, #fd1e93, #cb026c); /* standards version last */}
首先,为了配合:before和:after增加的内容的定位,a标签增加了position:relative属性,a:after和a:before都增加了position:absolute属性。因为是纯图像型的,此时的文字已经没有用处了,所以直接使用text-indent:-9000px将文本内容扔到了九霄云外。最后:before和:after中的content属性的值”0a0″其实就是个空格,没啥意义的。使用width:20px;height:20px;再配合border-radius:20px就画出了一个小圆,加上背景颜色的线性过渡,两个小圆就出来了。此时的效果在这里。
猜你喜欢
- 从AspJpeg1.8 版本开始,AspJpeg 提供了比 PrintText 更为灵活的文本绘图方法PrintTextEx,PrintTe
- 5月20日,微软正式提供了Windows XP下可用的雅黑字体下载,雅黑字体是一款近乎完美的字体,解决了宋体小文字无法辩认的问
- 本讲的内容是使用ASP的ActiveX Server Components(组件),说实话下面的内置组件我们用的很少。一、 Browser
- 今天我们继续向大家介绍一款翻页效果的制作。当鼠标移动到链接上时,翻页的链接区除了有悬停效果,还会放大。这样的效果具有很强烈的效果。大家适当美
- 哪的资料都不如官方资料权威。今天总算从MSDN中择出了ASP编码问题的解决方案。下面是MSDN中的一段话。Setting @CODEPAGE
- 随着WEB标准在国内的不断普及,结构表现行为分离、模块化、语义化、优雅退化等概念也成为考核一名前端人员对WEB标准理解的重要条目,其中,由于
- ISNULL 使用指定的替换值替换 NULL。 &nb
- 1、XML 是什么?XML仅仅是一种数据存放格式,这种格式是一种文本(虽然XML规范中也提供了存放二进制数据的解决方案)。事实上有很多文本格
- 当你在IE中点击一个Realplayer连接时,系统会自动启动Realplayer软件,不仅占用系统内存,而且在上网时Realplayer容
- Gtalk 软件的最下方有个很好又很实用的功能,就是 Gmail 邮件提醒功能。会定时更新你 Gmail 中未读新邮件的数量。试想
- 这段时间在处理SQL server 2000 SP4补丁打不上的问题上花了不少时间,回头想想应该总结一下:系统说明:dell1800服务器,
- 本文列出了HTML4标签的默认样式列表,对网页设计者来说这个应该很有用。原文来自:W3C (http://www.w3.org/TR/CSS
- 由于特定需求,最近实验室需要远程连接外地的sql server 2000服务器,最开始怎么连也连不上,出现了很多问题,但是在今天上午,借用实
- 代码如下:declare @Q_ID uniqueidentifier set @Q_ID = dbo.uf_GetParamValueBy
- 随着CSS3越来越热,CSS3动画也逐渐受到大家的关注。这次有幸修改淘宝网全站页头,小小地应用了下(详见http://www.taobao.
- 一、何谓ASP缓存/为什么要缓存当你的web站点采用asp技术建立的初期,可能感觉到的是asp * 页技术带来的便利性,以及随意修改性、自如
- 最近没事,写了个在项目经常要取城市或省份名的方法,所以改成了一个类.方便以后调用//****************************
- 对于使用虚拟主机的站长朋友,我们可能不知道该服务器是否安装了某种我们需要的组件。这时我们可以使用下面的代码来判断。该函数功能:检查是否存在系
- Access保留字&变量名列表,建表时应避免使用这些词汇和符号。Access 2002/2003-A &nbs
- It's well-known.Microsoft SQL Server 7.0增加了一个语句top,可以限制返回的记录数。但是在使