像素完美(Pixel Perfection)、分辨率無關(Resolution Independent)和多平臺體驗一致性是設計師們的追求。 可訪問性(Accessability)、加載性能和重構靈活性是前端工程師們關心的主題。css
當下互聯網設備「風起雲涌」,顯示分辨率「層出不窮」,爲 Web 建立者們帶來愈來愈多的難題。html
響應式設計(Responsive Design)做爲「救世主」的身份,已經在 Web 界佈道了好幾年,絲絕不亞於當年的「Ajax」先生。其核心就是:針對不一樣設備和應用場景,做出合理性的適應。狹義地看,就是 Web page 在不一樣分辨率下藉助 media qurey 來調整頁面佈局和內容顯示,三個關鍵詞是:Fluid grids, Flexible images, Media queries.前端
其中 Flexible images 是最爲棘手的地方。由於前面提到,如今的設備多樣化,不一樣分辨率和不一樣 PPI 給圖片自適應帶來了空前複雜度。目前尚未一套完美的解決方案來應對,W3C那邊還在擬定 Responsive Images 和 Picture Element 的相關標準。但在這以前你須要採起多管齊下的方式,針對媒體元素不一樣的使用場景,制定不一樣的自git
適應策略。目前主要有三種主流方式:github
max-width: 100% 來自適應容器
同一張圖片,在不一樣容器裏,自動適應到容器的大小。存在的問題是,大尺寸圖片在小尺寸屏幕下的帶寬浪費和加載速度慢。web
多版本圖片更換chrome
使用矢量化圖形,包括瀏覽器
這一期咱們主要來說講 icon fonts 的應用。安全
利用字體工具把咱們平時 Web 上用的圖形圖標(icons)轉換成 web fonts,就成了 icon fonts,它能夠藉助 CSS 的 @font-face 嵌入到網頁裏,用以顯示 icons。由於字體是矢量化圖形,它天生具備「分辨率無關」的特性,在任何分辨率和PPI下面,均可以作到完美縮放,不會像傳統位圖,如:png,jpeg,放大後有鋸齒或模糊現象。前端工程師
注:上圖是 Apple 記念 Mac 發佈30週年網站截圖,網頁內大量運用了 icon fonts 來塑造不一樣年代發佈的產品,這類 iOS 7 引入的線條風格圖標,使用 icon fonts 來表現最合適不過了。
除了「分辨率無關」這個最大的優勢以外,icon fonts 還具備:
固然 icon fonts 也有它的不足:
因此 icon fonts 也並非一套完美的響應式圖片的解決方案,當它適宜你的應用場景時,好比:
那麼 icon fonts 是一個令設計師和前端工程師都心花盛開的方案。
icon fonts 的製做主要有兩條思路:
在icon fonts 自動生成器沒有誕生之初,你們只能依靠字體編輯軟件來完成icon fonts 的製做,簡單介紹一下手動製做的流程。
而後把 icon 一個一個導入到字體編輯工具,轉換成 glyphs 進行編輯,設置對應的 unicode 編碼。經常使用字體工具備:
完成glyphs 編輯後,從字體工具導出 OTF 字體文件,而後利用 Font Squirrel 生成器來生成 web fonts 支持的格式。
手動製做 icon fonts 須要具有必定字體設計的知識,若有興趣可做嘗試。而自動生成工具用起來就傻瓜和省心多了。
咱們「風車」去年末進行了一次改版,其中一項就是把原來位圖圖標所有轉換成 icon fonts,當時採用的是阿里巴巴提供的免費在線工具 iconfont.cn。
Iconfont.cn是由阿里巴巴UX部門推出的矢量圖標管理網站,也是國內首家推廣Webfont形式圖標的平臺。網站涵蓋了1000多個經常使用圖標並還在持續更新中,Iconfont平臺爲用戶提供在線圖標搜索、圖標分撿下載、在線儲存、矢量格式轉換、我的圖標庫管理及項目圖標管理等基礎功能。
「風車」應用內的圖標有兩個來源: 一些從開源圖標庫拿來,一些是設計師本身製做。接下來詳細介紹一下,咱們是如何利用 iconfont.cn 這個在線工具生成了這 56 個圖標的 icon fonts。
參照 iconfont.cn 提供的圖標製做模版,在Illustrator 畫布的16x16網格內,參考基線、上升部、降低部來調整圖標大小和位置。
調整矢量圖標須要注意幾點:
而後從Illustrator 保存爲SVG文件,使用默認的SVG設置便可。
你能夠拖動一個或多個SVG圖標到iconfont.cn 的上傳表單,完成上傳後會提示設置名稱和tag,點擊「完成上傳」開始生成icon fonts 。生成完成後,你能夠點擊要下載的圖標加入購物車,而後「下載至本地」。
(點擊圖像放大)
解壓剛下載的文件包,除了EOT、SVG、TTF、WOFF四種 web fonts 字體外,還有個 demo.html 展現全部 icons 及其對應的字體編碼。之因此有4種字體格式,是考慮到不一樣瀏覽器不一樣平臺對字體格式的支持不同,具體看下面 CSS 裏的註解。
複製4個字體文件到 assets 或 fonts 目錄下,而後在 CSS 文件加入 @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#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"; }
如今你能夠這樣顯示一個鈴鐺圖標:
<i class="icon-bell"></i>
下圖就是咱們「風車」應用 icon fonts 的實例。
(點擊圖像放大)
前面提到, icon fonts 在移動端的兼容性稍微差一點,有幾個問題:
瀏覽器根本不支持
舉例 Opera mini,在移動設備和帶寬比較落後的地方,用戶量仍是很大的,若是你的網站訪問數據裏這類瀏覽器流量不可忽視,那麼你就須要額外處理 icon fonts 的向下兼容,好比 js 嗅探後用雪碧圖(CSS spirtes)替代。
各平臺 icon fonts 的兼容狀況,參見這張網友測試聚集的表格。
unicode 衝突問題
通常狀況下,icon fonts 生成器會使用 PUA(Private Unicode Area)這個安全區域的字符編碼(code point)。PUA 是專門預留「私用」的 unicode 區間, 通常會用 U+E000..U+F8FF 這個 BMP 區間裏預留的 PUA code point.
好比: 這個Apple 平臺特有的字符,就是用 U+F8FF 這個code point 來對應的,在其它平臺就看不到那個字符。
阿里巴巴的 iconfont.cn 沒有遵循這個最佳實踐,用得的是 CJK 編碼區間(U+3432),因此當你瀏覽器加載字體出問題時,會還原成一些奇怪的中文文字,這對讀屏軟件也很是不友好。好在它的管理後臺,能夠手動的編輯這個 code point。
另外,若是發現有 icon 顯示不出來,或被替換成了其它字符,那麼更換一下 code point 可能能夠快速的解決。
關於如何應用 icon fonts 到原生的 iOS/Android App 中去,iconfont.cn 上面有具體的教程,能夠查看一下。
相似 iconfont.cn 這類在線生成工具備不少,就再也不一一詳細介紹,最著名的還有:
這些工具基本功能相似,但有少量功能差異,像 icomoon 還支持字體的連字(Ligatures)功能。經過設置 「bell」爲鈴鐺圖標的連字,當你在文本中寫 「bell」時自動轉換成鈴鐺圖標。像 fontfello是開源軟件,意味着更加靈活和定製的可能性。
若是你對使用英文軟件徹底沒有障礙,我強烈建議使用 icomoon,體驗和功能都很是強大。固然做爲國內的同行,仍是要支持一下 iconfont.cn。