在还原设计图的时候,不免会碰到一些样式图片的引用。如何来对这些图片作优化呢?本文简单的梳理了一下目前几种比较经常使用的使用方式。
注:
1. 有更好的方法的话,欢迎补充。
2. 下文未对性能问题作真实的测试,请保持一颗好奇的心,并告诉咱们css
这是目前使用比较多的方式。也是我我的认为相对最优的一种解决方式。固然,这里的最优指的是特定环境。好比移动客户端,就不必定要这么干。CSS Sprite 是将页面中所使用到的小图片整合到一张大图上去。你们都知道,客户端向服务器发送请求是颇有代价的,特别是在移动端,因此,sprite 的提出是为了减小 http 请求数,从而加快页面加载速度。html
即将图片资源转换为 base64 字符串格式嵌到页面或样式中。这样连图片的请求连接都省了。
如:html5
/** 数据格式 **/ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAE1JREFUKJHV0MEOwCAIA9DW7MP983pymUaweluv8IAABJFUJdWonqEeD0/IwwHK8QatsYlGfIhezM9WOc8jSQAoTvMqTzY1u+Z6449gA9r24D4iZ6wwAAAAAElFTkSuQmCC /** 样式引用 **/ .icon{ width: 30px; height: 30px; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAE1JREFUKJHV0MEOwCAIA9DW7MP983pymUaweluv8IAABJFUJdWonqEeD0/IwwHK8QatsYlGfIhezM9WOc8jSQAoTvMqTzY1u+Z6449gA9r24D4iZ6wwAAAAAElFTkSuQmCC); }
Base64编码 自行百度科普吧。git
综合起来,data URI可使用在
* 图片尺寸很小,使用一条 http 请求有点浪费,如渐变背景框
* 图片在全站大规模使用,且不多被更新的,如 loading 图github
因为移动端设备拥有不一样分辨率,PPI 等引发的问题, 经常须要针对不一样屏幕分辨率来调整优化,如使用 @2x
图片, max-width
限制等。
采用 css @font-face 用来显示 icon 也不失为一种好办法。
由于 icon fonts (字体)是矢量图形,因此不受分辨率的影响,同时能够作到完美缩放;固然,也可以使用在 WEB 端。web
引入字体文件chrome
@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#uxiconfont') format('svg'); /* iOS 4.1- */ }
再定义一个 icon-* 通配咱们全部图标的共有 CSS 样式,跨域
[class^="icon-"], [class*=" icon-"] { display: inline-block; speak: none font-family: "iconfont"; font-size: 16px; line-height: 1; font-style: normal; /** 字体图标出现锯齿的问题: */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
最后是利用 :before 来注入每一个 icon 对应的字体编码浏览器
.icon-bell:before { content: "\003432"; } .icon-search:before { content: "\003433"; }