響應式網頁字體圖標

響應式設計中主要面對的問題之一是如何縮放圖標來適應用戶界面,不僅僅是針對於物理尺寸,而且還需要根據屏幕的尺寸和每英寸的像素比例來顯示。一般情況之下,都是通過內聯塊元素<img>標籤來添加圖標。另一種常見的技術是依賴於網格圖標和狀態——CSS Sprites,並將其保存爲.gif或.png文件。

然而,更糟糕的是圖片根據響應式內容不斷的放大,對於位圖圖像會產生鋸齒,而且會越明顯。更糟糕的是,CSSSprites(雪碧圖)製作的圖標更無法輕意的縮放。

在固定尺寸之時,圖標看起來很好,但放大,哪怕稍爲放大一點點,邊緣都會有鋸齒,而且看起來模糊。我想這也是很多設計師和開發人員儘量避免在設計中使用圖標的原因,儘管在設計中使用圖標在有限的空間中展示更好的想法,並且能達到令人意想不到的效果。

要創建響應式設計和可縮放的圖標,我建議使用基於網頁字體制作的矢量圖標來替換位圖圖像。使用矢量圖可以無限制的放大,而無需擔心圖像會失真。在本文中,我將向大家介紹網頁字體制作圖標來替換你設計中的位圖圖標,以提高可訪問性,可擴展性,風格各異的圖標。

爲什麼選擇網頁字體

網頁字體的工作原理就像在你的文檔中使用其他文件來創建的設計:你只需要將文件上傳到你的服務器上,那麼你的網頁就可以下載這些文件,讓他們能運行。但是,我們通常認爲網頁字體只是可讀文件,它們用來顯示我們設計中的圖標的丁巴特(dingbat)字符。技巧很簡單,目前所有瀏覽器都支持。使用網頁字體制作圖標具有以下三大優勢:

- 易於渲染:網頁字體圖標可以用HTML文本的任何地方。爲了屏幕閱讀器能讀到和易於搜索引擎,關鍵之處可以使用CSS製作圖標替換文,向用戶隱藏文本。

- 可擴展性:因爲他們使用的是矢量,而不是位圖渲染,圖標可以縮小或放大,儘可能的放大也不會失真。這可以使你根據用戶界面創造出更適合響應式設計中的圖標。

- 易於美化:可以在重新設計圖標的地方使用CSS,而不需要每次爲了更新而重新創建圖像。這也就是說,你可以使用CSS字體等樣式來美化你的圖標,不僅讓這些圖標好看,而且可以隨里根據設計需求的變化來隨機修改。

網頁字體制作的圖標放大也不會失真。

如何用網頁字體制作圖標

網頁字體制作圖標的原理是,通過CSS的content屬性給HTML元素添加圖標對應的字符。然後通過@font-face加載製作圖標的的字體,這樣注入的字符就會變成所需的圖標。首先,你需要製作圖標的網頁圖標字體,然後用特定的ASCII字符(如A,B,C,!,@,#等)或者自定義的Unicode編碼區域來對應不同的圖標。不過在這個圖標區域內,將不能在使用特殊的Unicode字符。一旦你有了你的字體文件——Entypo字體是一個好的開始,你準備好了嗎?

Entypo字體是一個免費的網頁字體。

步驟1:加載字體文件

首先使用CSS的@font-face規則(確保你已將字體文件上傳到了服務器上)定義字體圖標文件的路徑:

  1. @font-face {
  2. font-family: "icons";
  3. src: url("fonts/icons.eot");
  4. src: url("fonts/icons.eot?#iefix") format("embedded-opentype"),
  5. url("fonts/icons.woff") format("woff"),
  6. url("fonts/icons.ttf") format("truetype"),
  7. url("fonts/icons.svg#icons") format("svg");
  8. font-weight: normal;
  9. font-style: normal;
  10. }

確保你的字體來源包括了TrueType, EOT和WOFF字體格式,還需要包括SVG字體格式。雖然SVG正在快速的被WOFF格式替代,但爲了兼容老的iOS設備,還是需要提供的。

有關於如何使用@font-face加載字體,和各種字體所對應的作用,要是您感興趣,可以閱讀《CSS3 @font-face》一文——@大漠。

步驟2:給放置圖標的帶有icon-的標籤容器創建CSS樣式

這個選擇器允許你爲標籤定義了icon-字符串的容器插入圖標:

  1. [class*="icon-"] {
  2. background-image: none;
  3. display: inline;
  4. font-size: 1em;
  5. font-style: normal !important;
  6. font-weight: normal !important;
  7. height: 1em;
  8. overflow: visible;
  9. width: 1em;
  10. }

 [class*="icon-"]是一個屬性選擇器,表達的意思是“只要定義的類名中包含了icon-就會被選擇中”。

我們還需要爲我們的圖標設置字號font-size,寬度width和高度height的大小爲1em。我們使用的是一個相對值,這樣方便於擴展。同時也清除了字體的加粗和斜體樣式,如果你應用了,會使圖標扭曲。

步驟3:通過僞類選擇器創建放置圖標的地方

技巧來了,我們使用CSS的content屬性給僞元素添加字符,然後調用第一步設置的字體:

  1. [class*="icon-"]::before {
  2. content: '+';
  3. display: inline-block;
  4. font-family: "icons", fantasy !important;
  5. line-height: 1;
  6. position: relative;
  7. top: 2px;
  8. -webkit-font-smoothing: antialiased;
  9. font-smoothing: antialiased;
  10. }

這裏將使用content屬性添加了一個默認的字符“+”號,使用::before給標籤前面一個佔位符。此外添加Webkit的font-smoothing屬性,是一個好辦法,可以讓圖標更平滑。不過這個屬性還不是標準屬性,使用的時候需要添加前端-webkit。

步驟4:創建一個選擇器來隱藏圖標標籤中的內容

你可以創建一個hide類,用來隱藏你想隱藏的文本,包括SEO和向後兼容的任何文本。然後在實際使用圖標的標籤上調用這個類名。

  1. .hide {
  2. clip: rect(1px, 1px, 1px, 1px);
  3. height: 0;
  4. opacity: 0;
  5. position: absolute;
  6. visibility: hidden;
  7. width: 0;
  8. }

步驟5:給圖標添加指定字符創建CSS

最終通過CSS選擇器給實際圖標使用指定的字符來替代content中的默認字符+。比如這個示例,使用字母t來製作“twitter”圖標。

  1. .icon-twitter::before { content: "t"; }

理論上你也可以使用::after來代替::before,但理論上帶有文本的圖標,一般圖標都是放在文本的前面。或者你在創建私人的網頁圖標字體,你也可以使用“Unicode”字符,在content屬性中調用你私人的“Unicode”字符生成圖標:

  1. .icon-twitter::before { content: "/eo4o"; }

上面的代碼生成“twitter”圖標是相同的效果,但是,由於某種原因,CSS沒有加載,那麼顯示圖標的地方會顯式成一個空格,而不是顯示“t”字母來替代圖標。

步驟6:添加你的HTML

現在是時候爲顯示圖標添加所需的HTML代碼。

  1. <i class="icon-twitter">
  2. <span class="hide">Twitter</span>
  3. </i>

我在這個例子中使用的是<i>和<span>標籤,在這裏不需要考慮具體的語義,所以他是安全的。這也是通常使用的一種方式。下面我們來看一個典型的例子,頁腳的社交媒體圖標,我們可能會這樣寫HTML代碼:

  1. <div id="footerSocial">
  2. <a href="http://www.twitter.com/"><img src="twitter.png"></a>
  3. </div>

也可以用下面的結構來替代:

  1. <ul id="footerSocial">
  2. <a href="http://www.twitter.com/" class="icon-twitter">
  3. <li class="hide">Twitter</li>
  4. </a>
  5. </ul>

通常大家會認爲上面這樣的結構不合理,用a標籤來嵌套li標籤。我個人更趨向使用下面這樣的結構來替代:

  1. <ul id="footerSocial">
  2. <li>
  3. <a href="http://www.twitter.com/" class="icon-twitter">
  4. <i class="hide">Twitter</i>
  5. </a>
  6. </li>
  7. </ul>

然後根據需求添加需要的樣式。有一件事情,網頁字體這種技術不能製作多顏色的圖標。也就是說這些圖標都將是一種顏色。

有關於使用網頁字體制作多顏色的圖標,並不是無法實現,只是會更爲複雜一些,在互聯網上已經有這方面的教程。比如說Forecast Font就是一個成功的案例,使用字體圖標製作了一套彩色的天氣圖標。相關的教程,如果你感興趣的話可以點擊PoseLab的《Use of @font-face to make icons with different colors》 、nikolaswise的《Three Color, Semantic Icon Fonts》、Tomas Mulder的《How to Create Multi-Colored Icon Fonts for Responsive Web Design》等。nikolaswise還寫了一個示例——@大漠

想玩代碼?請訪問Jason CranfordTeagueCodePen寫的示例Styling Webfont Icons。點擊“CSS”選項卡,然後嘗試修改body選擇器中的font-size屬性值。這圖標可以放大和縮小,而且永遠不會失真。

修飾網頁字體圖標

一旦創建好了,可以使用CSS樣式或者CSS的僞類,如:hover、:active和:focus來修飾網頁字體圖標。還有很多有創意的想法,你也可以通過樣式去修飾你的圖標,這沒有什麼太多的限制。我注意到有一個限制,但還沒有找到更好的解決方案。在::before或::after上使用CSS3 Transition無法正常運行。

查看Jason CranfordTeagueCodePen製作的示例。嘗試在圖標上添加懸停效果或者點擊“CSS”或“HTML”選項卡,查看運行的代碼。

使用IcoMoon製作你自己的或網頁字體圖標

現在,大家又要開始糾結一個問題了“我要怎麼才能獲取圖標的網頁字體或者是製作自定義的圖標網頁字體”。雖然現在有很多地方提供免費和付費的圖標字體,但最好的解決方案還是使用類似IcoMoon這樣的網頁應用程序,可以在線選擇自己需要的圖標,因爲他向大家提供了上千種不同類型的圖標。當然,你也可以在上面使用免費的圖標和付費的圖標。

IcoMoon允許你創建自己獨特的圖標集,甚至你可以創建自己自義的圖標。

是什麼讓IcoMoon成爲製作網樣字體圖標的殺手級的應用呢?那是因爲你可以通過IcoMoon或上傳SVG文件(可以通過Photoshop、Illustrator和其他製作矢量圖的應用軟件製作的圖標導出成SVG文件)創建你自己需要的圖標。

步驟1打開IcoMoon

IcoMoon應用軟件開始要火了。有幾百個圖標可供你選擇或者通過點擊“圖標庫”(拉到頁面最底部有一個More Icon Sets…鏈接),選擇你自己需要的字體圖標文件。你也可以重置圖標的大小,默認是16px。

步驟2A:添加圖標——從提供的列表中選擇

從列表中選擇你需要的圖標。就是這麼簡單,單擊你喜歡的圖標,他們添加到列表中。你會發現,你選擇的圖標他會高亮顯示,圖標邊框變成橙色和背景變成白色。並且頂部菜單欄中會顯示你選中的圖標數量。

步驟2B:添加圖標——編輯現有的圖標

如果圖標只是接近你所需的,那麼你可以使用IcoMoon進行編輯。首先點擊頂部的鉛筆工具(編輯工具),然後點擊你需要編輯的圖標。這個時候圖標也會高亮顯示成藍色背景。點擊你需要的編輯的圖標,將會彈出一個浮窗,讓你編輯圖標,你可以旋轉圖標,調整圖標的位置等。

使用IcoMoon應用編輯你需要的圖標。

步驟2C:添加圖標——製作你自己的圖標

IcoMoon應用可以通過導入SVG文件來創建圖標。OmniGraffle和Adobe Illustrator導出的SVG文件都可以應用。在頂部,點擊“導入圖標(Import Icons)”按鈕,在彈窗中選擇有效的SVG文件。然後你就可以看自定義的圖標。確認這些是你需要的圖標,如果不是,你可以重新選擇新的字體來替代。

創建自己定義圖標的一些有用建議:

  • 描邊程序會忽略,所以有形狀必須填充
  • 所有填充必須連結在一起
  • 只使用一種顏色(最好是黑色),因爲填充將轉換成一個單一的顏色
  • 不要使用奇/偶的填充規則
  • 輸出的圖像爲單一的對象。在Illustrator中,將畫板轉成圖形的邊界。(Object > Artboards > Fit to Artwork Bounds)

步驟3:生成字體文件

在頁面腳部,點擊“font”按鈕。該首先項允許你修改你的字體名稱,創建帶icon-前綴的類名和創建base64編碼,然後將這些數據結合到一個CSS文件之中。

每個圖標都可以調整其對應的字符。只需要點擊當前圖標的位置,鍵入自己需要的字符。理想情況之下,按字母的順序開始構建。既然你知道誰會使用這些圖標,應該花一些時間將給這些圖標定義一些更有意義的名稱。

在你的字體中你可以隨意給圖形調整位置和代碼。

或者你也可以選擇使用Unicode編碼。在左上方,有一個下拉重置編碼。單擊選擇“Private Use Area”。這將重新標識所有的字形和Unicode編碼。一旦,你設置好這些,你可以點擊“Download”按鈕下載文件。

步驟4:在你的網站上添加字體

網站上下載下來的.zip文件,裏面包含了一切使用說明,你可以將這些添加到你的網站上。

提供的CSS示例中,你可以複製和指定這些圖標的具體位置。然而,IcoMoon包括了一個微小的CSS代碼來設置圖標,他採用了大的負margin,並且隱藏了HTML文本和綁定的數據,而不是我們使用的font-size的方法。

結束

使用網頁字體制作圖標並不是一個全新的概念。像IcoMoon這樣的網頁應用真的是一個很好的工具,能幫助你使用字體制作圖標成爲現實。隨着網頁字體制作圖標的日益普及,將會迅速取代CSS Sprites方案,這也讓UI設計師可以加入更多的創意空間。

但是,在Web標準仍然會有一些失蹤。可能使網頁圖標更加有用和有效,W3C標準應該添加icon或iconlable標籤添加到HTML中,這樣讓圖標更具語義化。在此期間,我們不得不更多的先用i或 span標籤。

翻譯原文轉載自:http://www.gbtags.com/gb/site/shirleyqin.htm

英文原文:webstandardssherpa

via W3C

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章