摘要: 在NexT
主题中,默认是使用Font Awesome
图标库的,它已经包含了大部分的图标,可以自定义显示的颜色,而且有些图标也支持动态效果,但是有一些需要用到的图标就不在可用之列了,这个时候就可以引入阿里矢量图标库(iconfont
)来添加自己所需要的图标,本文将介绍如何使用Font Awesome
图标库,以及如何引入和使用阿里矢量图标库(iconfont)。
1.Font Awesome
图标库 1.1Font Awesome
图标库的介绍 Font Awesome
其实是一种字体,它提供可缩放矢量图标,不需要JavaScript
支持,可以被定制大小、颜色、阴影以及任何可以用CSS的样式。它有两种版本,一种是Free
的免费版本,一种是Pro
的收费版本,收费版本的图标图标自然是比免费版本的要多喽,不过免费版的大部分就够用了,实在不行,还可以使用另一种图标库。
名称
网址
开源项目仓库
https://github.com/FortAwesome/Font-Awesome
官网网址
https://fontawesome.com/
在NexT
主题中已经自动安装并引用了相关的文件,这里便不再重复说明如何安装该图标库。
yaml [blogRoot]/themes/next/_vendors.yml 1 2 3 4 5 6 fontawesome: name: '@fortawesome/fontawesome-free' version: 5.15 .3 file: css/all.min.css alias: font-awesome integrity: sha256-2H3fkXt6FEmrReK448mDVGKb3WW2ZZw35gI7vqHOE4Y=
1.2Font Awesome
图标库的使用 1.2.1基础应用
html 1 2 <i class ="fas fa-camera" > </i >
示例:
html 1 2 <span class ="fas fa-camera" > </span >
示例:
html 1 2 3 4 5 <span style ="font-size: 1em; color: #DA70D6;" > <i class ="fas fa-camera" > </i > </span > <span style ="font-size: 16px; color: #8A2BE2;" > <i class ="fas fa-camera" > </i > </span > <span style ="font-size: 1rem;" > <span style ="color: #00BFFF;" > <i class ="fas fa-camera" > </i > </span > </span >
示例:
html 1 2 3 <i class ="fas fa-camera" style ="font-size: 1em; color: #DA70D6;" > </i > <i class ="fas fa-camera" style ="font-size: 16px; color: #8A2BE2;" > </i > <i class ="fas fa-camera" style ="font-size: 1rem; color: #00BFFF;" > </i >
示例:
图标的大小除了可以直接添加样式来改变之外,还可以在引用的时候改变,这就方便了在不修改主题源码的情况下改变主题中显示的图标的大小,这中样式下,可以指定基准字体的大小,来确定图标的相对大小,当然也可以不指定,这样将采取默认的方式。
Class Size
fa-xs .75em
fa-sm .875em
fa-lg 1.33em
fa-2x 2em
fa-3x 3em
fa-4x 4em
fa-5x 5em
fa-6x 6em
fa-7x 7em
fa-8x 8em
fa-9x 9em
fa-10x 10em
html 1 2 3 4 5 6 7 8 <i class ="fas fa-camera fa-xs" > </i > <i class ="fas fa-camera fa-sm" > </i > <i class ="fas fa-camera fa-lg" > </i > <i class ="fas fa-camera fa-2x" > </i > <i class ="fas fa-camera fa-3x" > </i > <i class ="fas fa-camera fa-5x" > </i > <i class ="fas fa-camera fa-7x" > </i > <i class ="fas fa-camera fa-10x" > </i >
html 1 2 3 4 5 6 7 8 9 10 <div style ="font-size: 0.5rem;" > <i class ="fas fa-camera fa-xs" > </i > <i class ="fas fa-camera fa-sm" > </i > <i class ="fas fa-camera fa-lg" > </i > <i class ="fas fa-camera fa-2x" > </i > <i class ="fas fa-camera fa-3x" > </i > <i class ="fas fa-camera fa-5x" > </i > <i class ="fas fa-camera fa-7x" > </i > <i class ="fas fa-camera fa-10x" > </i > </div >
html 1 2 3 4 5 6 7 8 9 10 <div style ="font-size: 20px;" > <i class ="fas fa-camera fa-xs" > </i > <i class ="fas fa-camera fa-sm" > </i > <i class ="fas fa-camera fa-lg" > </i > <i class ="fas fa-camera fa-2x" > </i > <i class ="fas fa-camera fa-3x" > </i > <i class ="fas fa-camera fa-5x" > </i > <i class ="fas fa-camera fa-7x" > </i > <i class ="fas fa-camera fa-10x" > </i > </div >
1.2.1进阶应用 这里的进阶应用中不写基础应用中可用样式,但是可以在基础应用的条件下增加进阶应用的这些样式,两者可以并存。
Class Rotation Amount
fa-rotate-90 90°
fa-rotate-180 180°
fa-rotate-270 270°
fa-flip-horizontal mirrors icon horizontally
fa-flip-vertical mirrors icon vertically
fa-flip-both mirrors icon vertically and horizontally (requires 5.7.0 or greater)
Rotating Icons Rotating+Flipping html 1 2 3 4 5 6 7 8 9 <div class ="fa-3x" > <i class ="fas fa-snowboarding" > </i > <i class ="fas fa-snowboarding fa-rotate-90" > </i > <i class ="fas fa-snowboarding fa-rotate-180" > </i > <i class ="fas fa-snowboarding fa-rotate-270" > </i > <i class ="fas fa-snowboarding fa-flip-horizontal" > </i > <i class ="fas fa-snowboarding fa-flip-vertical" > </i > <i class ="fas fa-snowboarding fa-flip-both" > </i > </div >
html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <div class ="fa-3x" > <span class ="fa-rotate-90" style ="display: inline-block;" > <i class ="fas fa-snowboarding fa-flip-horizontal" > </i > </span > <span class ="fa-flip-horizontal" style ="display: inline-block;" > <i class ="fas fa-snowboarding fa-rotate-90" > </i > </span > <span class ="fa-flip-vertical" style ="display: inline-block;" > <i class ="fas fa-snowboarding fa-rotate-270" > </i > </span > <span class ="fa-rotate-270" style ="display: inline-block;" > <i class ="fas fa-snowboarding fa-flip-vertical" > </i > </span > <span class ="fa-flip-both" style ="display: inline-block;" > <i class ="fas fa-snowboarding fa-rotate-by" style ="--fa-rotate-angle: 45deg;" > </i > </span > <span class ="fa-rotate-by" style ="display: inline-block; --fa-rotate-angle: 45deg;" > <i class ="fas fa-snowboarding fa-flip-both" > </i > </span > </div >
html 1 2 <i class ="fas fa-bullhorn fa-spin" style ="color: #FF1493;font-size: 1.3rem" > </i > <i class ="fas fa-fan fa-spin" style ="color: #FF1493;font-size: 1.3rem" > </i >
示例:
2.iconfont
阿里矢量图标库 阿里矢量图标库中的图标较为丰富,有许多Font Awesome
没有的图标,也含有许多的多色图标,下边就介绍如何在NexT
中使用该图标库。
首先去官网进行注册:阿里巴巴矢量图标库 ,也可以使用自己的Github
账号直接登录。
进入首页之后选择菜单栏的【图标库】,然后按下图箭头所指进行自己想要图标的添加,这样会把自己的这些图标添加到购物车。
挑选完图标后,点击界面右上角的购物车图标,此时会在右侧弹出如下界面,然后按箭头添加到项目即可,若还未创建项目,则可按照提示进行项目创建,或者自己提前创建好项目,此处不再提示如何创建项目。
添加自己选择的图标到项目之后,可以到【我的项目】界面,如下图所示,该图标库有三种引用方式,分别是Unicode
、Font class
和Symbol
,选择自己想用的引用方式,点击下方的【点此生成 】即可生成相应的引用方式,另外要注意的是,不管哪种引用方式,在新增或者删除图标的时候,引用代码都需要进行更新 ,相应的站点中的相应文件内容也需要更新。
unicode
是字体在网页端最原始的应用方式,特点是:
兼容性最好,支持ie6+
,及所有现代浏览器。
支持按字体的方式去动态调整图标大小,颜色等等。
但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
注意:新版iconfont
支持多色图标,这些多色图标在unicode
模式下将不能使用,如果有需求建议使用symbol
的引用方式
unicode
使用步骤如下:
第一步:拷贝自己项目下面生成的font-face
,并添加到样式文件
我这里是自己新建了一个单独的iconfont.styl
文件来存放阿里矢量图标库的样式代码,并在[blogRoot]/source/_data/styles.styl
进行引用。
stylus [blogRoot]/source/_data/iconfont.styl 1 2 3 4 5 6 7 @font-face {font-family : 'iconfont' ; src : url('iconfont.eot' ); src : url('iconfont.eot?#iefix' ) format('embedded-opentype' ), url('iconfont.woff' ) format('woff' ), url('iconfont.ttf' ) format('truetype' ), url('iconfont.svg#iconfont') format('svg'); }
第二步:在iconfont.styl
文件中定义使用iconfont的样式
stylus [blogRoot]/source/_data/iconfont.styl 1 2 3 4 5 6 7 .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; }
html 1 <i class ="iconfont" > 3 </i >
效果如下图:
font-class
是unicode
使用方式的一种变种,主要是解决unicode
书写不直观,语意不明确的问题。
与unicode
使用方式相比,具有如下特点:
兼容性良好,支持ie8+
,及所有现代浏览器。
相比于unicode
语意明确,书写更直观。可以很容易分辨这个icon是什么。
因为使用class
来定义图标,所以当要替换图标时,只需要修改class
里面的unicode
引用。
不过因为本质上还是使用的字体,所以多色图标还是不支持的。
font-class
使用步骤如下:
第一步:拷贝自己项目下面生成的font-face
,并添加到样式文件
项目中的该种引用方式生成的代码是一个css
链接格式,这样的话在styl
文件中怎么引用都没有成功,所以就按下边的方法在模板渲染文件中直接加载这个样式文件啦。
nunjuck [blogRoot]/source/_data/head.njk 1 <link href="http://at.alicdn.com/t/font_8d5l8fzk5b87iudi.css" rel="stylesheet" type="text/css"/>
不过呢,我这里是自己新建了一个单独的iconfont.styl
文件来存放阿里矢量图标库的样式代码,所以我就将链接中的样式文件给复制下来,并在[blogRoot]/source/_data/styles.styl
进行引用,具体代码可以查看自己项目中相应链接中的内容。
第二步:挑选相应图标并获取类名,应用于页面html 1 <i class ="iconfont icon-xxx" > </i >
示例:
Symbol
是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 这种用法其实是做了一个svg
的集合,与前面两种相比具有如下特点:
支持多色图标了,不再受单色限制。
通过一些技巧,支持像字体那样,通过font-size
,color
来调整样式。
兼容性较差,支持 ie9+
,及现代浏览器。
浏览器渲染svg
的性能一般,还不如png
。
Symbol
使用步骤如下:
第一步:拷贝项目下面生成的symbol
代码并在相应文件引用
由于该种方式生成的是一种脚本文件,所以可以在布局模板文件的注入文件custom-Scripts.njk
进行引用使用。
nunjuck [blogRoot]/source/_data/custom-Scripts.njk 1 <script src="//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js"></script>
我这里是自己新建了一个单独的iconfont.styl
文件来存放阿里矢量图标库的样式代码,并在[blogRoot]/source/_data/styles.styl
进行引用。
1 2 3 4 5 6 .icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; }
html 1 2 3 <svg class ="icon" aria-hidden ="true" > <use xlink:href ="#icon-xxx" > </use > </svg >
效果如下图,可以发现该种引用方式可以直接显示多色图标:
对于我来说,还是选择了font-class
这种方式,因为这种方式跟Font Awesome
是兼容的,不想修改源码的话,这个应该是最方便替换Font Awesome
图标的,但是有些地方替换后大小可能与之前不符,在样式里对相应的地方进行修改就可以啦,似乎黑白配色跟NexT
才更加相符,我不是很追求图标的颜色多样,方便使用就可以啦,哈哈(ฅ>ω<*ฅ)。