原创:itsOli  @前端一万小时

本文版权归作者所有,未经授权,请勿转载!

本文节选自“语雀”私有付费专栏「前端一万小时 | 从零基础到轻松就业」

简述字体图标的原理,动手使用 Iconfont 实现一个字体图标的 DEMO。

?上方面试题“参考答案详解”,请点击文末“


前言:作为 Web 页面最基本的组成部分,“文本”的重要性不言而喻。对于“文本”来说,我们需要掌握两个与之相关的属性——“字体属性”和“文本属性”。

  • CSS 字体属性:主要定义“文本”的字体系列、字体大小、字体粗细、风格和变形等;

  • CSS 文本属性:主要定义“文本”的外观——如缩进和水平对齐、垂直对齐、字间隔和字母间隔、文本转换、文本装饰、文本阴影、处理空白符和文本方向等。

本篇,我们先学习“CSS 字体属性”。

1 定义“文本”的字体系列

font-family 属性用于定义“文本”的字体系列。

首先,我们平时所说的“字体”并不只是单个的字体,而是一个“字体系列”。

除了如 Times、Verdana、Helvetica 或 Arial 等各种“特定字体系列”外,CSS 还定义了 5 种“通用字体系列”。

所谓“通用字体系列”是指:拥有相似外观的字体系统组合。理论上,用户安装的任何字体系列往往都会落入到这 5 种通用系列当中(实际工作中的特例除外)。

1.1 5 种通用字体系列

  • Serif 字体(又名“衬线字体”)

  • Sans-serif 字体(又名“无衬线字体”)

  • Monospace 字体 (又名“等宽”字体)

  • Cursive 字体(又名“手写体”)

  • Fantasy 字体(又名“梦幻字体”)

这种字体的特征就是:我们无法很容易地将其归于以上 4 种字体中。它主要被用在图片中,字体看起来很艺术,实际网页上用得不多。

1.2 工作中,怎么指定“字体系列”

假如需求如下:我想对 p 指定字体为 Times 显示,但同时也接受以下的 serif 字体顺序(TimesNR、Georgia、New Century Schoolbook、New York)。

那么往往我们会进行如下代码书写:

p {  font-family: Times, TimesNR, Georgia, 'New Century Schoolbook', 'New York', serif;}

/*?当然,也可以用 Unicode 码来直接表示字体。例如:'\5FAE\8F6F\96C5\9ED1' 就是“微软雅黑”这四个字的 Unicode 码。我们怎么知道一个“字体”的 Unicode 码?我们可以右键检查元素,然后点击 Console,然后输入 escape('黑体'),就可以弹出相应的码。然后把 %u 换成 \。 */

❗️为什么这么写:

  • font-family 属性用于指定文档采用何种“字体系列”;

  • 当我们只对 Web 页面指定一个或几个特定字体时,若按以下代码书写就会出问题:
p {  font-family: Times, TimesNR, Georgia, 'New Century Schoolbook', 'New York';}

由于在一个跨平台的环境下,我们无法保证用户同样也安装了这些特定字体。

如果用户没有安装这几种字体,那么用户的浏览器就会使用一个默认的字体来显示这个 Web。对此,我们 Web 制作者将无法控制显示效果。

但,如果末尾加了一个 serif,则可以告诉用户的浏览器:即使你电脑里没有安装我以上的这些字体,那么也请使用一个你电脑里边安装了的“衬线体”来显示我的 p

  • 注意看规则里边出现了“单引号”:

当一个字体名中有一个或多个空格,或者如果字体名包括 #$ 之类的符号时,我们就必须用单引号把这个字体名引起来,以便浏览器识别。

另外一种情况是,如果你把上文的 5 种“通用字体系列”用单引号引起来,那么浏览器则会认为(或者你本来就想告诉浏览器):你需要一个与这 5 种字体系列同名的“特定字体”而不是“通用字体”。

2 定义“文本”的字体大小

font-size 属性用于定义“文本”的字体大小。

请先阅读文章《CSS 值和单位 》中关于 em、rem 等的讲解。

?在实际工作运用中:
在不考虑 IE8 及以下版本的前提下,我们完全可以一开始就将文档的 font-size 值设置为 10px,这样在之后的计算中就很简单了。所需要的 rem/em 值就是想得到的像素值除以 10,而不是浏览器默认大小的 16。这样我们就可以很轻松地调整 HTML 中我们想调整的不同类型文本的字体大小了。

3 定义“文本”的字体粗细

font-weight 属性用于定义“文本”的字体粗细。

关键字 100 ~ 900 为字体指定了 9 级加粗度。如果一个字体内置了这些加粗级别,那么这些数字就直接映射到预定义的级别,100 对应最细的字体变形,900 对应最粗的字体变形。

但,字体所拥有的字重的数量,实际上很少存在满足有 9 个字重刚好跟 100-900 的 CSS 字重一一对应的情况,通常字体拥有的字重数量为 4 到 6 个。当然,也不必担心,至少 400 和 700 对应的字重是每种字体必备的——数字 400 等价于 normal,而 700 等价于 bold。

实际工作中,我们一般最常用的还是 normal 和 bold 这两个值。用法举例:

h2 {  font-weight: bold;}

如果将元素的加粗设置为 bolder,浏览器会设置比所继承值更粗的一个字体加粗。与之相反,关键词 lighter 则会导致浏览器将加粗度下移而不是上移。

4 定义“文本”的字体风格

font-style 属性用于定义“文本”的字体风格。

有以下几个值:

4.1 italic

如果当前字体的斜体版本可用,那么文本设置为斜体版本;如果不可用,那么浏览器会利用 oblique 状态来模拟 italics。例:

p {  font-style: italic;}

4.2 oblique

将文本设置为斜体字体的模拟版本,也就是将普通文本倾斜的样式应用到文本中。例:

p {  font-style: oblique;}

4.3 normal

将文本设置为普通字体(将存在的斜体关闭)

5 定义“文本”的字体变形

font-variant 用于定义“文本”的字体变形。

对于 font-variant,它只有两个非继承值:默认值 normal 和 small-caps。normal 描述正常文本,small-caps 要求使用“小型大写字母”文本。

6 跳出限制,让“字体”有更多可能——字体图标

@font-face 规则,它允许网页开发者为其网页指定在线字体。通过这种作者自备字体的方式,@font-face 可以消除对用户电脑字体的依赖。

“规则”写法如下:

@font-face {    font-family: "远程字体名称";  src: url(https://);}

以下我们以实际工作中常用的 Iconfont 作说明:

  • 第一步:打开阿里巴巴旗下网站 http://www.iconfont.cn/ ,登录后搜索图标(如:login);

  • 第二步:加入购物车,并储存为项目 test-1;

  • 第三步:在“我的项目”这个界面里,我们着重看 Font class;

  • 第四步:可以按自己需要编辑图标;

  • 第五步:编辑完,“仅保存”后返回项目界面,点击“查看在线链接”;

  • 第六步:复制代码到自己的 HTML 文档;

  • 第七步:在自己的 HTML 引入样式表,并查看结果;

  • 第八步:如此一来,我们就可以像本篇文章一开始介绍的给“文本”加样式一样,来操作这些“字体图标”;

?小总结:

1. 上述这些操作跟 @font-face 有什么关系?

现在我们把之前粘贴过来的代码在网站上打开,看看是个什么东西:

如图所示,结合阿里的工具,我们确实是既简单又方便地用了 @font-face 规则。

2. 字体图标的工作原理是怎样的,为什么可以这样用?

在文章《① HTML 基础》中我们就了解到:

我们在编写 HTML 文档时, 这个标签是必须指定的,这是为了告诉浏览器,你应该用 utf-8 这种 Unicode 来解码。

换句话说,即使我们 HTML 文档里的文字全部直接用 Unicode 码来写也是完全没问题的——Unicode 码,可以认为是世界上任意一种文字的特定编号。

如果这样的话,基于“一个国家的文字,其他国家的人看来就是图标”这个点,那我们制作出来的任意“图标”也是都可以在页面上展示,并像“文字”一样被操作的。

只是一般的字体图标都不是现有的文字,都是一些流出来可扩展的 Unicode 码,换句话说,这些码你可以任意添加东西,但它不是已有的标准。

因此你需要用 @font-face 规则去声明一个字体(如上边及下边的操作说明)。

3. 为什么第三步不操作 Unicode,而操作 Font class ?

那我们操作一次看看有哪里不妥:

我们看到单纯只是把 Unicode 码写在文档中,是不会显示出图标的。我们需要 @font-face 来声明一个下载字体:

复制并粘贴到 HTML 文档中查看效果:

同样都可以出来效果,背后也用的是同样的原理,但我们可以看到上图中, 标签里的 和 都是以 Unicode 码书写的,这种方法将不利于阅读和维护——单纯看代码,我们根本不知道这是个什么东西。


后记:下篇文章我们将接着讨论“文本属性”,在学习到其中的 line-height 后,我们再接着这篇文章引入 font 属性。届时,“CSS 给文本加样式”将完全被我们掌握。

祝好,qdywxs ♥ you!

点击“

arial unicode ms字体_(05)CSS 给文本加样式: 字体属性 | CSS相关推荐

  1. css 下划线_(06)CSS 给文本加样式:② 文本属性 | CSS

    原创:itsOli @前端一万小时本文首发于公众号「前端一万小时」本文版权归作者所有,未经授权,请勿转载!本文节选自"语雀"私有付费专栏「前端一万小时 | 从零基础到轻松就业」 ❗ ...

  2. Solidworks提示字体Arial Unicode MS安装不正确,PDF文件中一个或多个文本字串可能遗失怎么办...

    从以下网站下载Arial Unicode MS字体,WIN7的直接安装即可,XP的放到windows\fonts文件夹内.重启Solidworks即可 http://font.chinaz.com/1 ...

  3. html 改变文本框字体颜色,CSS更改文本框的字体颜色

    我已搜索和搜索,但不能很好地得到这个权利.我在我的网站上有一个文本框,在我的CSS/HTML中,我将它定义为一个类,就像其他任何东西一样,并给它一个背景图像没有问题.我决定我需要改变字体颜色,但不管我 ...

  4. 加载html动画logo,仅CSS实现的加载动画 – Loader.css

    仅CSS实现的加载动画 – Loader.css 4月 13, 2015 评论 (6) Sponsor 当网页的页面大小较大,用户加载可能需要较长的时间,在这些情况下,我们一般会用到(加载)loadi ...

  5. arial unicode ms字体_5个检测商用字体和免费字体合集的网站

    对于做新媒体和设计的小伙伴来说,最恐慌的就是加班.改稿.脱发.没钱...侵权问题了.一个不注意就是律师函警告.正所谓律师函不是不到,只是晚到.所以,皮皮特意为小伙伴们搜集了这5个远离字体侵权的网站,有 ...

  6. wxpython 内嵌字体_【wxPython】wx.font类字体

    构造函数形式为:wx.Font(pointSize,family,style,weight,underline,faceName,encoding) pointSize pointSize是字体的以磅 ...

  7. latex字体_[LaTeX 引擎] XeLaTeX + macOS,通过字体名调用发行版字体

    本文已加入专栏文章目录,归入「基本使用」文章系列. 名词约定 本文所称字体,特指 ttf,otf 和 ttc 格式的字体 本文默认使用 macOS 操作系统,安装了 TeX Live 发行版,执行 x ...

  8. 全字库说文解字字体_【180期】可商用字体大全,无版权纠纷!

    大家好我是万能的向前 今天向前为你精选了 可商用字体最全收集免费,无版权纠纷 每个设计高手都离不开百变的字体,但是,如果审美不到位字库不全,找不到合适的字体,领导.客户就相不中!那就有可能被降薪,糟心 ...

  9. web字体设置成平方字体_探索免费和开放的Web字体

    web字体设置成平方字体 毫无疑问,近年来,开源字体已经改变了网络的面貌. 在2010年之前,您可能会在网络浏览器中看到的唯一字体是Microsoft的通用"网络安全" 核心字体 ...

  10. deepin win10字体_深度系统Win10 1903安装新字体的设置方法

    众所周知,在深度系统Win10专业版中都是自带字体的,使用Win10输入文字时才有文字出来,但Win10系统默认宋体.做设计的朋友需要用其他有文艺气息的字体,那么就要安装字体,下面跟随深度之家小编来看 ...

最新文章

  1. 全球最权威的区块链行业报告
  2. 【ASM 翻译系列第二弹:ASM 12C 版本新特性】
  3. lua学习笔记-HelloWorld
  4. python用变量输出abcd_python中星号变量的几种特殊用法
  5. Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
  6. MonoDroid相关资源
  7. 当INPUT 连续输入是连续触发
  8. Halcon例程详解(植物测量) —— measure_plant.hdev
  9. (二)nodejs循序渐进-nodejs基本类型和循环条件语法篇(基础篇)
  10. [转]CPoint+CSize+CRect学习大纲
  11. NPM是什么?我们该怎么使用呢
  12. .net程序员写业务代码需要注意的地方
  13. 整数数组的最大子数组
  14. 【转载】C++ function、bind和lambda表达式
  15. centos6.9下rpm方式安装mysql后mysql服务无法启动
  16. 一款阿里的知识管理工具
  17. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)
  18. AppiumLibrary 时间控件的选择
  19. compareTo()和compare()的详解和区别
  20. 数论数学:欧拉恒等式的证明

热门文章

  1. 最新小米线刷救砖工具分享+支持全系通用
  2. 浅谈管理软件的功能与作用-—以Nvisual综合布线可视化运维管理平台和进销存管理软件为例
  3. Java Web 前端页面 模板源码
  4. 计算机毕业论文性能测试怎么写,计算机毕业论文撰写技巧
  5. 特征选择算法(机器学习)
  6. Java 二分排序法
  7. linux下分析prn文件,linux专题一之文件描述符、重定向、管道符、tee命令
  8. HFSS - GSM 900 和 DCS 1800 双频PIFA天线的设计与仿真
  9. python获取城市区域边界坐标
  10. Java实现:归并排序