好程式設計師web前端分享主流CSS image比較
好程式設計師
web前端分享
主流
CSS image比較
在還原設計圖的時候,難免會碰到一些樣式圖片的引用。如何來對這些圖片做最佳化呢
?本文簡單的梳理了一下目前幾種比較常用的使用方式。
注:
1. 有更好的方法的話,歡迎補充。
2. 下文未對效能問題做真實的測試,請保持一顆好奇的心,並告訴我們
CSS Sprite
這是目前使用比較多的方式。也是我個人認為相對最優的一種解決方式。當然,這裡的最優指的是特定環境。比如移動客戶端,就不一定要這麼幹。
CSS Sprite 是將頁面中所使用到的小圖片整合到一張大圖上去。大家都知道,客戶端向伺服器傳送請求是很有代價的,特別是在移動端,所以,sprite 的提出是為了減少 http 請求數,從而加快頁面載入速度。
使用方式
先將小圖片整合到一張大圖上
css 引入背景圖片 然後依據圖示的位置使用 background-position 進行定位 使用技巧 切圖的時候就構思拼接好圖片(不然後期抓心撓肺的,當然,善用工具的出門右轉) 排序有序,便於後期維護(個人建議圖示從上到下排列)。有利於 background-position 定位 定位時避免使用 right, bottom 等(後期圖片尺寸變化後就不一定了好不) 合理預留空白位置(空太多檔案變大,太小引起圖示重疊) 優點 減少 http 請求。(這個是最大的優點) 對你存在的圖片一目瞭然(不知道這個算不算,如改進版3.0拿到的圖哪些圖示是之前已存在不需要重新切了的) 缺點 圖片合併定位費時費力(誰用誰知道啊) 其它 github 上有個 grunt 合併 sprite 的元件,可以看看 image data URI
即將圖片資源轉換為
base64 字串格式嵌到頁面或樣式中。這樣連圖片的請求連結都省了。
如:
使用方式
/** 資料格式 **/
1. data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAE1JREFUKJHV0MEOwCAIA9DW7MP983pymUaweluv8IAABJFUJdWonqEeD0/IwwHK8QatsYlGfIhezM9WOc8jSQAoTvMqTzY1u+Z6449gA9r24D4iZ6wwAAAAAElFTkSuQmCC
/** 樣式引用 **/
1. <p><font size="3"> .icon{</font></p>
2. <p><font size="3"> width: 30px; height: 30px;</font></p>
3. <p><font size="3"> background-image:
4. url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAE1JREFUKJHV0MEOwCAIA9DW7MP983pymUaweluv8IAABJFUJdWonqEeD0/IwwHK8QatsYlGfIhezM9WOc8jSQAoTvMqTzY1u+Z6449gA9r24D4iZ6wwAAAAAElFTkSuQmCC);</font></p>
5. <p><font size="3"> }</font></p>
標籤語法:
data : 取得資料協議 image/png : 取得資料的協議名稱(注意這裡也圖片資源也可以使用字型等) base64 : 資料編碼方式 iVBOR... : 編碼後資料
Base64編碼 自行百度科普吧。
優點
減少
HTTP 請求 避免某些檔案跨域 無圖片快取等問題(但是一般 css 也是有快取的好不好) 缺點 相容性 ( IE6,7 不相容, 可以使用 MHTML 來解決 ) 瀏覽器不會快取該圖片(這裡是否是這樣我存有疑惑,因為好像看上去也是第一次載入的時候慢) 增加 css 檔案大小 編碼成本及維護(展示不直觀,目前需手動轉換,我暫時不知道自動替換之類的外掛) 之前有看到過篇測評說效能上比 sprite 微弱一些,一時間找不到連結
綜合起來,
data URI可以使用在
* 圖片尺寸很小,使用一條 http 請求有點浪費,如漸變背景框
* 圖片在全站大規模使用,且很少被更新的,如 loading 圖
線上轉換工具
Encode Data URL image to data URI 更新 github 資源 sus 可轉換 data URI 參考資料 MDN - data URIs icon fonts
由於移動端裝置擁有不同解析度,
PPI 等引起的問題, 常常需要針對不同螢幕解析度來調整最佳化,如使用 @2x 圖片, max-width 限制等。
採用
css @font-face 用來顯示 icon 也不失為一種好辦法。
因為
icon fonts (字型)是向量圖形,所以不受解析度的影響,同時可以做到完美縮放;當然,也可使用在 WEB 端。
優點
檔案小
載入效能好
支援
css 樣式 IE6/7 下也支援 缺點 樣式限制,使用扁平化風格 移動端還存在不相容問題 (相容表,作者不詳) 少量移動裝置和 icon fonts 字元編碼衝突 FF和 IE9 下跨域問題 效能問題 使用方法 製作字型檔案
可以利用字型工具手動製作
也可以利用線上工具自動生成
在
css 中引用,如下
引入字型檔案
@font-face {font-family: 'iconfont';
1. <p><font size="3"> src: url('iconfont.eot'); /* IE9*/</font></p>
2. <p><font size="3"> src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8
3. */</font></p>
4. <p><font size="3"> url('iconfont.woff') format('woff'), /* chrome、firefox */</font></p>
5. <p><font size="3"> url('iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari,
6. Android, iOS 4.2+*/</font></p>
7. <p><font size="3"> url('iconfont.svg#uxiconfont') format('svg'); /* iOS 4.1- */</font></p>
8. <p><font size="3"> }</font></p>
再定義一個
icon-* 通配我們所有圖示的共有 CSS 樣式,
[class^="icon-"], [class*=" icon-"] {
1. <p><font size="3"> display: inline-block;</font></p>
2. <p><font size="3"> speak: none</font></p>
3. <p><font size="3"> font-family: "iconfont";</font></p>
4. <p><font size="3"> font-size: 16px;</font></p>
5. <p><font size="3"> line-height: 1;</font></p>
6. <p><font size="3"> font-style: normal;</font></p>
7. <p><font size="3"> /** 字型圖示出現鋸齒的問題: */</font></p>
8. <p><font size="3"> -webkit-font-smoothing: antialiased;</font></p>
9. <p><font size="3"> -moz-osx-font-smoothing: grayscale;</font></p>
10. <p><font size="3"> }</font></p>
最後是利用
:before 來注入每個 icon 對應的字型編碼
.icon-bell:before {
1. <p><font size="3"> content: "\003432";</font></p>
2. <p><font size="3"> }</font></p>
3. <p><font size="3"> .icon-search:before {</font></p>
4. <p><font size="3"> content: "\003433";</font></p>
5. <p><font size="3"> }</font></p>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2641979/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Web前端分享前端CSS篇程式設計師Web前端CSS
- 好程式設計師web前端教程分享CSS技巧!程式設計師Web前端CSS
- 好程式設計師web前端分享CSS元素型別程式設計師Web前端CSS型別
- 好程式設計師web前端分享CSS基礎篇程式設計師Web前端CSS
- 好程式設計師web前端分享CSS3 漸變程式設計師Web前端CSSS3
- 好程式設計師web前端技術分享css盒模型程式設計師Web前端CSS模型
- 好程式設計師web前端分享css初始化程式碼程式設計師Web前端CSS
- 好程式設計師web前端培訓分享怎樣學好css?程式設計師Web前端CSS
- 好程式設計師web前端教程分享web中CSS絕對定位程式設計師Web前端CSS
- 好程式設計師web前端分享CSS不同元素margin的計算程式設計師Web前端CSS
- 好程式設計師web前端培訓分享CSS定位的教程程式設計師Web前端CSS
- 好程式設計師web前端分享CSS3彈性盒程式設計師Web前端CSSS3
- 好程式設計師web前端分享css常用屬性縮寫程式設計師Web前端CSS
- 好程式設計師web前端培訓分享HTML/CSS部分面試題程式設計師Web前端HTMLCSS面試題
- 好程式設計師web前端分享CSS學習:HSLA顏色模式程式設計師Web前端CSS模式
- 好程式設計師web前端分享CSS屬性組成及作用程式設計師Web前端CSS
- 好程式設計師web前端分享CSS基礎知識之position程式設計師Web前端CSS
- 好程式設計師web前端分享應該怎樣學好web前端?程式設計師Web前端
- 好程式設計師web前端分享web前端入門知識程式設計師Web前端
- 好程式設計師分享Web前端開發工具程式設計師Web前端
- 好程式設計師web前端分享Cookie知識程式設計師Web前端Cookie
- 好程式設計師web前端分享前端 javascript 練習題程式設計師Web前端JavaScript
- 好程式設計師web前端教程分享HTML/CSS部分常見面試題程式設計師Web前端HTMLCSS面試題
- 好程式設計師web前端分享CSS檔案引用的最優方法程式設計師Web前端CSS
- 好程式設計師web前端分享Css3的概念和優勢程式設計師Web前端CSSS3
- 好程式設計師web前端分享12個CSS高階技巧彙總程式設計師Web前端CSS
- 好程式設計師web前端分享CSS Bug、CSS Hack和Filter學習筆記程式設計師Web前端CSSFilter筆記
- 好程式設計師web前端教程分享web前端基礎知識程式設計師Web前端
- 好程式設計師web前端教程分享JavaScript面試題程式設計師Web前端JavaScript面試題
- 好程式設計師分享Web前端效能最佳化程式設計師Web前端
- 好程式設計師web前端分享邏輯運算程式設計師Web前端
- 好程式設計師web前端教程分享js閉包程式設計師Web前端JS
- 好程式設計師分享Web前端知識之HTML程式設計師Web前端HTML
- 好程式設計師web前端分享常見面試題程式設計師Web前端面試題
- 好程式設計師web前端分享HTML 字符集程式設計師Web前端HTML
- 好程式設計師web前端分享HTML基礎篇程式設計師Web前端HTML
- 好程式設計師web前端分享高度自適應程式設計師Web前端
- 好程式設計師web前端教程分享js模板模式程式設計師Web前端JS模式