用纯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就画出了一个小圆,加上背景颜色的线性过渡,两个小圆就出来了。此时的效果在这里。


猜你喜欢
- 实验发现,tensorflow的tensor张量的shape不支持直接作为tf.max_pool的参数,比如下面这种情况(一个错误的示范):
- 一、数组和切片的区别是什么?1.数组数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值
- alt的准确含义是,当照片不存在或者load错误时的提示。但同时img也同时支持alt和title,再有某些浏览器的错误解析,因此经常被误导
- 前言经常看到这种算法可视化的图片,但往往做不到和画图的人心灵相通,所以想自己画一下,本文主要实现归并排序和希尔排序,如果想实现其他算法可参考
- Python 提供了多个图形开发界面的库。Tkinter就是其中之一。 Tkinter 模块(Tk 接口)是 Python 的标准 Tk G
- 在我们人生的路途中,找工作是每个人都会经历的阶段,小编曾经也是苦苦求职大军中的一员。怀着对以后的规划和想象,我们在找工作的时候,会看一些招聘
- PHP mysqli_set_charset()函数设置默认客户端字符集:<?php// 假定数据库用户名:root,密码:12345
- subplot(arg1, arg2, arg3)arg1: 在垂直方向同时画几张图arg2: 在水平方向同时画几张图arg3: 当前命令修
- 在项目中,经常会碰到往数据库中导入大量数据,以便利用sql进行数据分析。在导入数据的过程中会碰到一些需要解决的问题,这里结合导入一个大约4G
- 强大的group by 代码如下:select stdname, isnull(sum( case stdsubject whe
- 本文实例讲述了Python使用装饰器模拟用户登陆验证功能。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#!p
- 安装了pycharm之后有一个新装的python解释器,顶替了之前系统的python那样的话,原来利用pip安装的一些库会无法import.
- python3用到2个库import itertoolsimport metacomm.combinatorics.all_pairs2 a
- 今天研究了一下JS的用setAttribute方法实现一个页面两份样式表的效果,具体方法如下:第一步:在连接样式表的元素里定义一个id,例如
- Python中的penpyxl是一个第三方库,可以处理xlsx格式的Excel文件。pip install openpyxl安装。penpy
- Python 变量类型变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什
- PDOStatement::getColumnMetaPDOStatement::getColumnMeta — 返回结果集中一列的元数据(
- 有时候会用到查询倒数第二条记录 last=HolderChangeHistory.find_by_sql([" &nbs
- python-查找特定名称文件并按序号、文件名分行打印输出第1天第2题1.遍历”Day1-homework”目录下文件;2.找到文件名包含“
- --用SQL多条可以将多条数据组成一棵XML树L一次插入 --将XML树作为varchar参数传入用 --insert xx select