CSS之字體圖標(biāo) icon 的多種實現(xiàn)

什么是icon?讓我們先來看一個例子:
我們以簡書為例子,圖中看到的用圓圈起來的部分都是icon

這個時候你就想問了,這不就是幾張圖片么?
不,它不是圖片,而是文字
什么??這怎么可能是文字,文字怎么會是這樣的?...

icon到底是什么

正如你所看到的,現(xiàn)在市面上大多數(shù)網(wǎng)頁使用的圖標(biāo)都是類似這樣的形式,也有不少icon圖標(biāo)庫可供我們使用
它的實現(xiàn)方式有:

  • image
  • CSS Sprites
  • Icon Font
  • SVG(目前來看,是最完美的)
  • CSS手寫icon(太麻煩,而且自己做往往不好看(這時候你需要一個UI小姐姐的幫助))

為什么說現(xiàn)在大多數(shù)網(wǎng)頁里的圖標(biāo)是文字?

首先我們需要了解:
如何讓頁面展示一個圖標(biāo)呢?我們可以把圖標(biāo)當(dāng)成文字來操作,步驟如下:

  • 在頁面上放入該圖標(biāo)的 unicode 碼 (可以自己創(chuàng)建一個)
  • 讓該元素使用我們自定義的字體
  • 字體對應(yīng)著我們自己創(chuàng)建的字體庫文件
  • 字體庫文件里有關(guān)于該 unicode 碼的外形描述

這里就要說到第一種方法:iconfont(阿里巴巴官方矢量圖標(biāo)庫

下面是具體用法范例,大家可以一試:

<p>&#xe600;</p>
<style>
@font-face {
  font-family: 'iconfont';
  src:url('http://at.alicdn.com/t/font_1475388520_7015634.ttf') format('truetype')
}
                    
p{
  font-family: iconfont;
}  
</style>

或者

<span class="icon-qq"></span>
<style>
@font-face {
  font-family: "hello";
  src: url('//at.alicdn.com/t/font_1475388520_7015634.ttf') format('truetype')
}
.icon-qq:before { font-family:"hello";content: "\e600"; } 
</style>

CSS Sprites

CSS Sprites在國內(nèi)很多人叫css精靈(雪碧圖),是一種網(wǎng)頁圖片應(yīng)用處理方式。它允許你將一個頁面涉及到的所有零星圖片都包含到一張大圖中去,這樣一來,當(dāng)訪問該頁面時,載入的圖片就不會像以前那樣一幅一幅地慢慢顯示出來了。對于當(dāng)前網(wǎng)絡(luò)流行的速度而言,不高于200KB的單張圖片的所需載入時間基本是差不多的,所以無需顧忌這個問題。

加速的關(guān)鍵,不是降低質(zhì)量,而是減少個數(shù)。傳統(tǒng)切圖講究精細,圖片規(guī)格越小越好,重量越小越好,其實規(guī)格大小無所謂,計算機統(tǒng)一都按byte計算??蛻舳嗣匡@示一張圖片都會向服務(wù)器發(fā)送請求。所以,圖片越多請求次數(shù)越多,造成延遲的可能性也就越大。

  • 原理
    CSS Sprites其實就是把網(wǎng)頁中一些背景圖片整合到一張圖片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的組合進行背景定位,background-position可以用數(shù)字精確的定位出背景圖片的位置。

  • 優(yōu)點
    1.利用CSS Sprites能很好地減少網(wǎng)頁的http請求,從而大大的提高頁面的性能,這也是CSS Sprites最大的優(yōu)點,也是其被廣泛傳播和應(yīng)用的主要原因;
    2.CSS Sprites能減少圖片的字節(jié),曾經(jīng)比較過多次3張圖片合并成1張圖片的字節(jié)總是小于這3張圖片的字節(jié)總和。
    3.解決了網(wǎng)頁設(shè)計師在圖片命名上的困擾,只需對一張集合的圖片上命名就可以了,不需要對每一個小元素進行命名,從而提高了網(wǎng)頁的制作效率。
    4.更換風(fēng)格方便,只需要在一張或少張圖片上修改圖片的顏色或樣式,整個網(wǎng)頁的風(fēng)格就可以改變。維護起來更加方便。

  • 缺點
    誠然CSS Sprites是如此的強大,但是也存在一些不可忽視的缺點,如下:
    1.在圖片合并的時候,你要把多張圖片有序的合理的合并成一張圖片,還要留好足夠的空間,防止板塊內(nèi)出現(xiàn)不必要的背景;這些還好,最痛苦的是在寬屏,高分辨率的屏幕下的自適應(yīng)頁面,你的圖片如果不夠?qū)?,很容易出現(xiàn)背景斷裂;
    2.CSS Sprites在開發(fā)的時候比較麻煩,你要通過photoshop或其他工具測量計算每一個背景單元的精確位置,這是針線活,沒什么難度,但是很繁瑣;
    3.CSS Sprites在維護的時候比較麻煩,如果頁面背景有少許改動,一般就要改這張合并的圖片,無需改的地方最好不要動,這樣避免改動更多的css,如果在原來的地方放不下,又只能(最好)往下加圖片,這樣圖片的字節(jié)就增加了,還要改動css。
    4.CSS Sprites非常值得學(xué)習(xí)和應(yīng)用,特別是頁面有一堆icon(圖標(biāo))??傊芏鄷r候大家要權(quán)衡一下利弊,再決定是不是應(yīng)用CSS Sprites。

例子:

.bg_sprite{background-image:url(/整圖地址); background-repeat:no-repeat}

引用該類 .. 然后在元素中逐一定義背景坐標(biāo) .. 以下為關(guān)鍵屬性 ..

#ico1 {width:容器寬度;height:容器高度;background-position:X坐標(biāo) Y坐標(biāo)}
#ico2 {width:容器寬度;height:容器高度;background-position:X坐標(biāo) Y坐標(biāo)}
#ico3 {width:容器寬度;height:容器高度;background-position:X坐標(biāo) Y坐標(biāo)}
.nav {width:容器寬度;height:容器高度;background-position:X坐標(biāo) Y坐標(biāo)}

必須要限定容器大小符合背景圖元素位置 .. 另外 .. XY軸是相對于整張圖片的左上角來算的 .. 所以取值一定要算清楚。

使用 image 實現(xiàn)

  • 注意事項:
    img 的大小設(shè)置
    可以只設(shè)置寬度/高度,圖片會自適應(yīng)縮放
    img 的 vertical-align
  • 請求數(shù)過多
    因為每一個請求都是需要花時間去建立的,HTTP 1.1 時代,客戶端(瀏覽器)是慢的,但如果升級到了 HTTP 2,100個請求跟1個請求是差不了多少的
    在服務(wù)器端(server),比如是用 php、java 實現(xiàn)的后端,請求過多,一般會導(dǎo)致線程過多,或大或小都會產(chǎn)生一定的壓力
    另外,請求過多,對網(wǎng)站流量也會有一定的影響,流量要要花錢的

CSS手寫icon

  • CSS 能畫圓,能畫方,為什么不能畫 icon?
  • 參考網(wǎng)站:CSS ICON
  • 兼容性:IE支持不太好,比如border-radius IE8-不支持

SVG

  • svg 可以作為圖像的地址直接傳入:<\img src="svg">,但是這樣依然會造成請求數(shù)過多* 還可以使用 SVG "sprites"
  • google:npm svg sprites,看排名靠前的,比如 svg-sprite
  • 它是以標(biāo)簽的形式來組織所有的圖片的,移動端首選* 優(yōu)點:可以方便的修改 icon 的大小、顏色,縮放沒有鋸齒
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,172評論 3 119
  • 明天就是兒童節(jié)了,很多人都再曬童年的照片了吧,想想我小時候作為瘦子界一顆冉冉升起的新星,但是后來有人跟我說,...
    肖鯤閱讀 299評論 0 0
  • 想念你 湛藍的天空 那里的呼吸是那樣清新 想念你 故鄉(xiāng)的云 每一朵都活成了我想要的模樣 想念你 翠綠的山脈 我...
    江小昨閱讀 213評論 1 2
  • 在工作中有時往往會碰到耍小聰明的人,他們會把自己的工作交給別人來做,又讓自己看起來很忙,卻不知道這種表現(xiàn)往往時間長...
    青島金獅DDM劉婷婷閱讀 238評論 0 0
  • 星耀小學(xué)四年五班吳圻親子共讀國學(xué)經(jīng)典閱讀《我要對自己負責(zé)》我堅持、我讀書、我收獲、我快樂……
    昊圻閱讀 176評論 0 0

友情鏈接更多精彩內(nèi)容