css content 如何自定義生成圖標?

完全css的小白,只是想自己在github上搭建一個博客

一下是我看到的一段css的源代碼,其實就是在分享到為微博的時候的圖標

a#end_cc, a#twitter, a#weibo {

margin: 0 5px;

border-bottom: none; }

a#end_cc:before, a#twitter:before, a#weibo:before {

font-size: 24px;

font-family: "fontello"; }

#end_cc:before {

content: "e7a5"; }

#twitter:before {

content: "f309"; }

#weibo:before {

content: "f33f"; }

其中不太明白的是f309

這些是如何定義的,我在網上找也沒有找到。

在 利用css的content:"?f003"生成的內容,這裡用到的是什麼技術? 里有人提到,就是我想問的。但是我也找了回答給出的鏈接,還是不特明白。

現在我想在這個基礎上自己做一個分享到豆瓣的小圖標。不知道應該怎麼搞?

現在的效果就會是這個樣子的。我要繼續仿照應該怎麼搞?

多謝大家!


這個是webfont

在css裡面,如果想使用某個字體,但是又擔心用戶電腦上沒有,就可以使用font-face屬性從伺服器上引用這組字體。具體怎麼用,搜一下font-face就很清楚了,不多說。

其中不太明白的是f309

這一段css表示:

在節點#twitter前面,插入一段內容("f309")。

這個內容("f309")是一個字元,f309是這個字元的16進位unicode編碼。

不理解可以把 "f309" 改成 "6211" ,然後查看效果。事實上 content:"" content:"6211" 的含義是一樣的。

需要知道,計算機裡面每個字元都有一個unicode編碼,比如「我」的unicode是6211(16進位),而字體文件的作用是規定某個字元應該用什麼形狀來顯示。

unicode字符集裡面,E000 至 F8FF屬於用戶造字區。原本是空的,用戶可以在字體文件裡面隨便定義這些字元的形狀。我們所見的webfont icon,一般就選在這一部分。

(上面這段講得可能不專業,大致知道是這麼一回事就行。)

要使用自定義字元,大致步驟是:

  1. 自己造一個字體文件,把e000所對應的字元形狀畫上新浪的icon,保存為常用字體文件格式。

  2. 在css中使用font-face引用這個字體文件,任意命名(不和已有的重複,比如叫myfonticon)
  3. 需要顯示圖標的地方定義font-family為myfonticon,content屬性設為"e000"。

造字可以用Fontographer 5,參考這篇文章webfont應用系列(二)如何製作圖標字體?

其實網上已經有一大堆免費好用webfont icon,比如:

IcoMoon App

Ionicons: The premium icon font for Ionic Framework

Fontello - icon fonts generator


題主說的問題可以分為幾個小問題:

  1. :before(或:after)是什麼玩意?

答:偽元素(注意,不是偽類)。

它雖然被收錄到css3標準中,但其實主流瀏覽器都已經支持偽元素了,這其中包括了IE8+。

偽元素實際上在html dom中不存在,但會被瀏覽器渲染成html的一個節點,比如題主提到的#twitter:before,就是在#twitter這個標籤里的開始處插入了一個子元素(節點),同理,:after是在該元素的最後插入子元素,它與以下html具有相同的效果:

&
&&&
.....
&

偽元素與一個CSS屬性息息相關,就是content,顧名思義,這是定義偽元素內容的,如:

#twitter:before{
display:inline;
content:"我是個偽元素";
}

相當於:

&
&我是個偽元素&
.....
&

最廣泛的應用大概是這樣的:

剩下的小問題容我吃完飯來說。

==============

2.『f33f』是如何被顯示為圖標的?

答:

這裡用到了WebFont,也就是一種「字體」,這種字體包含了矢量圖標,諸如 『f33f』就是對應矢量圖標的編碼。

你這段代碼並不全,css里應該還包含這段:

@font-face {
font-family: "XXX"; /* 給你的自定義WebFont命名 */
src:url("xxx.eot");
src:url("xxx.eot?#iefix") format("embedded-opentype"),
url("xxx.woff") format("woff"),
url("xxxn.ttf") format("truetype"),
url("xxx.svg#micon") format("svg");
font-weight: normal;
font-style: normal;
...
}

它的好處是不必再使用css spirit切圖了,而且作為矢量圖可以以任意你想要的尺寸顯示,另外,這種方法兼容性很好(ie6 7 可以顯示,前提是你為不同的瀏覽器準備了不同的字體文件格式,如eot、woff、ttf、svg)。

如何製作它?請參見@朱勃 的答案,已經很詳細了,不再贅述。

3.直接將icon的unicode寫在html上不就成了,為什麼還得費勁加偽元素:before呢?

答:

從這段代碼看,你知道"f309"、"f33f"分別代表的是哪些圖標么?

別說你看不出來,即使WebFont的作者也看不出來啊,這些unicode編碼顯然不如html的class或者id語義化。如果在一個大型網站上多處復用這些font icon,那是相當要命的(每用一次就去查一查?),因此,就出現了一種題主展示的解決方案:

HTML:

&&

CSS:

@font-face{
font-family: "MyFont"; /* 給你的自定義WebFont命名 */
src:url("xxx.eot");
src:url("xxx.eot?#iefix") format("embedded-opentype"),
url("xxx.woff") format("woff"),
url("xxxn.ttf") format("truetype"),
url("xxx.svg#micon") format("svg");
font-weight: normal;
font-style: normal;
...
}
.icon{
font-family: "MyFont";
speak:none; /* 無障礙閱讀所需要的,告訴屏幕閱讀器不要讀這個字元 */
font-size:14px;
font-variant:normal;
font-weight:normal;
text-transform: none;
...
}
.icon_open:before{
content:"f001"; /* 相應圖標的編碼 */
...
}

然後你只要在任何你想使用該圖標的地方插入HTML即可:

& &&&Open&
&


用到的是Icon Fonts技術,簡單說就是你看到的圖標實際上是字。

直接提供幾個資源。

兩篇教程:

CSS3 icon font完全指南前端觀察

快速上手製作Icon Font

兩個常用圖標庫:

Iconfont-阿里巴巴矢量圖標庫

Fontello - icon fonts generator


CSS3的font-face 屬性。整個樣式應該有定義這裡。或者從其它伺服器有鏈接這個樣式表來引用這個的樣式。

然後調用的時候。他使用:befor或者:after添加content的方法來使用。你也可以直接拿到頁面上的。

只是用content的方法更方便修改與調用。


我也有這個問題,不過我找到答案了,你說的那個「怎麼知道content里的那個內容是什麼圖標」問題,其實這個是自己生成的,網址為:Icon Font, SVG, PDF amp; PNG Generator,進入這個網址,可以選擇自己想要的圖標,然後生成就可以看見相應圖標的那個數字碼了

,這個就表示音樂這個圖標的數字碼為e910,然後下載下來,定義字體,再在content里寫相應的數字碼就可以了


您的這個問題是關於自定義矢量圖標庫的問題。

技術背景是:

矢量圖標庫文件 (你沒有列出來)

+

CSS偽類生成圖標。比如你這裡列出來的代碼:

#weibo:before {
content: "f33f"; }

"f33f"這類特殊的字元表示特定圖標在矢量圖標庫文件中的編號,當CSS使用偽類生成"f33f"這樣的內容的時候,瀏覽器會自動的從矢量圖標庫文件中獲取特定的樣式,並顯示出來。

Bootstrap 3源碼中有一文件——glyphicon.less。

這個文件其實就是告訴我們如何自己定義自己的圖標庫文件的。

這篇文章分析了glyphicon.less文件,並闡述如何自定義自己的矢量圖標庫。


CSS 中的 content

首先這句放的意思就是說在你定義的地方插入一個字元。至於這樣的寫法是web定義的,你只要按照這種格式來寫就行。元素:before,後面是大括弧。

再說說屬性和要顯示的值( 就是字元) content: "f309"; content 是CSS定義的關鍵字,屬性,」f309「 就是要顯示的字元,是16進位unicode編碼,上面也說了用win下的計算器換算成十進位,效果是一樣的。

字元

,每一個漢字、英文,世界上每一種語言的字或者字母都有一個唯一的編碼,都可以在這裡定義,有個前提就是你的系統或者客戶的系統必須有你定義的字體中包含你定義的字元。有點拗口,舉例來說win系統下,宋體,楷體,和黑體是必裝的字體,你定義這三種字體的字元,所有的win系統都能正確識別,win7以前是這三種,win7以後加入了微軟雅黑。

字元哪裡來?怎麼查看?

以win10系統來說,打開開始菜單,輸入「字元」,就會匹配程序「字元映射表」程序,打開後上方字體下拉框中就會列出你系統中所有已經安裝的字體。蹭的表格,就是你選擇了的字體中所有定義的字元。點擊任意一個,在最底部就會有這個字元的編碼。以Arial來說,點擊「0」,在最下方就會出現:U+ 0030;數字。的字樣,那麼你在web中就可以這樣寫

元素:before {

font-family: "Arial";

content: "030";

}

樓上說的 Font Awesome Icons 其實就是一種字體,可以像其它的字體一樣安裝,你安裝後在 字元映射表中一樣可以查看和選擇

其它的字體中定義的字元以此類推。前提是這個字體通用,你的和你客戶的,潛在客戶的電腦上有這個字體。


在本地新建了一個html文件,用html寫的icon圖標,顯示的是一個小方塊,不清楚原因,求解答

&

&@font-face {

font-family: "iconfont"; /* project id:"190265" */

src: url("//http://at.alicdn.com/t/font_x8naq16ob6gvi.eot");

src: url("//http://at.alicdn.com/t/font_x8naq16ob6gvi.eot?#iefix") format("embedded-opentype"),

url("//http://at.alicdn.com/t/font_x8naq16ob6gvi.woff") format("woff"),

url("//http://at.alicdn.com/t/font_x8naq16ob6gvi.ttf") format("truetype"),

url("//http://at.alicdn.com/t/font_x8naq16ob6gvi.svg#iconfont") format("svg");

}

.iconfont{

font-family:"iconfont" !important;

font-size:16px;font-style:normal;

-webkit-font-smoothing: antialiased;

-webkit-text-stroke-width: 0.2px;

-moz-osx-font-smoothing: grayscale;

}

&

&

&

&

&

&

&


我還是不清楚,如果我要用某個圖標的話,怎麼知道它的編碼?


如何自定義菜單圖標?


Font Awesome Icons


推薦閱讀:

為什麼在美國亞馬遜的頁面用戶賬戶顯示「Your Account」,而中國亞馬遜卻顯示「我的賬戶」?
underscore.js源碼,這個正則表達式是什麼意思?
三大構成是什麼?
為何大部分設計出眾的網站都做不大?
為什麼有的網頁打開圖片是從上到下逐行打開,有的則是先顯示低解析度圖片再逐漸加入細節?

TAG:網頁設計 | 前端開發 | CSS |