无图片字体icon
W3C 仍然在对 CSS3 规范进行开发。不过,现代浏览器已经实现了相当多的 CSS3 属性。CSS3也从前几年的初试探到如今的广泛应用。最近折腾这方面的东西其实挺多,但一直懒于写blog,也经常会出现一些知识点重复去查询,一些知识点难以及时分享与讨论。ADT团队在不断的成长与壮大中,于是鞭策自己尽量多的习惯去记录,也为了知识更好的分享与积累吧。
现在来看,应该大家都接触过css3的自定义字体(@font-face),也应该知道各个浏览器都支持(包括IE6),只是各自对字体文件的格式的支持不一样。
为什么要将icon做成字体?
- 字体文件小,一般在20K左右吧(icon图片各种尺寸大小以及各种图标多)
- 容易编辑和维护,可用css直接对字体控制大小和颜色(图片的话修改一个也许是修改好几个尺寸)
- 透明完全兼容IE6(图片透明度兼容不好)
- 移动端分辨率多,字体icon不会出现失真等问题(移动端分辨率多,各种尺寸多,或者大图压缩浪费资源。)
怎样才能将icon变成字体?
- 将设计稿中的icon(要有矢量路径,位图没法转化)完美还原成字体
- 用字体编辑软件,比如FontCreator、FontLab等
- PSD–>eps–>FontLab(这里用FontLab为例),也就是将PSD转换为illustrator的eps格式,然后再将某个字符复制到FontLab中。
实际举个例子吧
- 打开设计稿psd,将内容保存为photoshop eps格式
- 在illustrator中打开保存的eps文件,取消分组,然后点选icon,复制。
- 打开FontLab,随便打开一款字体文件,这里用tahoma.ttf为例:
- 双击或全选某个字符,删除原有的图形,粘贴刚复制的icon对象。生成字体文件就可以了。
- 查看字体对应字符,在该字体上右键查看属性(快捷键Alt+Enter),查看该字体对应的字符:
可以看到字体对应的字符是odieresis,unicode编码是00F6。而实际字体图像已经变成“+”了。
字体格式的浏览器支持: 先使用font-face声明字体:
@font-face { font-family: "iconfont"; src: url('iconfont.eot'); /* IE9*/ src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('iconfont.woff') format('woff'), /* chrome、firefox */ url('iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/ url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */}
注:以上来自于:iconfont.cn以及webfonts.info 注:woff是最新的web开放字体格式(web open font format),w3c推荐,主要优势是针对浏览器进行优化,字体文件小。
然后,在icon元素上使用该字体就好了:
.iconfont { font-family:"iconfont" !important; font-size:16px; font-style:normal; -webkit-font-smoothing: antialiased; -webkit-text-stroke-width: 0.2px; -moz-osx-font-smoothing: grayscale;}.icon-liebiao:before { content: "e600"; }
到此我们就基本能算大功告成了。 IE9以前只支持eot格式,所以需要将ttf转换为eot先。 可以使用微软官方的WEFT软件,也可以使用一些在线工具: http://www.kirsle.net/wizards/ttf2eot.cgi 在线转ttf为eot格式; http://www.fontsquirrel.com/fontface/generator强大的在线转ttf为eot、woff等字体格式 另外,eot文件必须添加域名白名单才可以使用,推荐使用CreateMyEOT:
最后是字体文件跨域问题: 这个是在实际项目中出现的问题,找了几种方式。有些是要服务器上去配置,前端能解决的,目前我是用很强盗的形式, 把这个存在跨域问题的文件,转成base64编码,比如ttf文件,只需要找一下转成base64的就行。
例如我这个把文件往上面一拖,把这段编码copy到css文件就行。(注:此工具是同事as3long制作。特此感谢。)
总结: iconfont已经很强大了,轮子是否需要继续创造,就看团队了。 css3很强大,html5标准也终于完工,未来的路很长,人很累,所以先吃饱再说。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 「influxDB 原理与实践(一)」安装部署,实现基础的添加删除查询功能
- 「influxDB 原理与实践(二)」详解influxDB的写入与查询
- Nginx系列:https配置
- 笛卡尔积、等值连接、自然连接、外连接一文看懂
- nginx系列:常用利用shell统计日志
- Nginx系列:图片过滤处理
- Nginx系列:几款负载均衡第三方插件的安装与使用
- 「高并发通信框架Netty4 源码解读(三)」NIO缓冲区Buffer详解
- UML类图符号:各种关系说明以及举例
- 「高并发通信框架Netty4 源码解读(四)」NIO缓冲区之字节缓冲区ByteBuffer详解
- 「influxDB 原理与实践(三)」连续查询
- 为什么使用OPA而不是原生的Pod安全策略?
- 浅入浅出 Java ConcurrentHashMap
- 「高并发通信框架Netty4 源码解读(五)」NIO通道Channel详解
- 图解一致性哈希算法,全网(小区局域网)最通俗易懂