在還原設計圖的時候,不免會碰到一些樣式圖片的引用。如何來對這些圖片作優化呢?本文簡單的梳理了一下目前幾種比較經常使用的使用方式。
注:
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"; }