揭秘CSS(第 1 版)
3.1.1 字体系列
阅读(

概述

CSS选择器

字体和文本

字体

CSS规范清楚的认识到,字体选择是一个常见而且很重要的特性,所以设置字体的属性就是样式表中最常见的用途之一。

字体相关的属性在CSS1就已经定义,CSS3又新增了font-stretch 和 font-size-adjust 这两个属性。

人们早已认识到字体选择很重要,并在CSS2就支持可下载字体,也定义了 @font-face 相关属性,但是并没有得到浏览器的广泛支持。直到CSS3,浏览器才开始支持 @font-face,使设计师可以在网页中使用自己喜欢的任意字体。

字体系列

在CSS中,通过 font-family属性来指定文本所使用的字体系列。语法格式为:

font-family: [<family-name> | <generic-family>] #

其中,family-name为字体系列的名称;generic-family为通用字体系列的名称。也就是说,font-family属性的值既可以是具体的字体系列的名称,也可以是通用字体系列的名称。

CSS定义了 5 种通用字体系列,分别是serif、sans-serif、cursive、fantasy、monospace,font-family属性可用使用其中的任何一种。如果希望文档使用一种通用字体系列中的某个字体,但并不关心是哪一种具体的字体,使用通用字体系列就比较合适。如:

body  {
	font-family: sans-serif;
}

这样,浏览器就会从 sans-serif 字体系列中选择一种字体,并将它应用到 body 元素。由于 font-family属性具有继承性,这种字体将会应用到 body 元素中的所有元素,除非有一种更特殊的选择器将其覆盖。

选择字体时,要尽量选择能够引人注目(特别是标题),并且容易阅读的字体。当然,设计师也可以选择使用特定的字体。假如设计师希望所有 h1 标题都使用 Georgia 字体,可以使用以下声明:

h1  {
	font-family: Georgia;
}

这会使浏览器对所有 h1 标题都使用 Georgia 字体。当然,这个规则是假设访问者的计算机上已经安装了该字体。并且,设计师总是希望使用任何想要的字体,遗憾的是,如果访问者的计算机上没有安装该字体,浏览器便会使用默认字体来显示 h1 标题。

不过,不必万念俱灰,通过结合特定字体和通用字体系列,可以创建与你预想相同的文档。可以使用以下规则,告诉浏览器使用 Georgia 字体(如果可用),如果 Georgia 字体不可用,就使用另外一种 serif 字体:

h1  {
	font-family: Georgia, serif;
}

这时,如果访问者的计算机上没有安装Georgia字体,但安装了 Times 字体,浏览器就会使用 Times。尽管 Times 与 Georgia 并不完全匹配,但至少足够接近。

 出于这个原因,强烈建议在所有 font-family 规则中,都提供一个通用字体系列。这样一来,就提供了一条后路。

如果你对字体很熟悉,也可以在 font-family属性中指定想要的字体,并按优先顺序依次排列,中间用逗号分隔。如:

body {
	font-family: Arial, SimSun, Helvetica, sans-serif;
}

浏览器会根据这个列表,按顺序查找这些字体,如果访问者的计算机上安装了第一种字体,就可以正确显示。如果没有安装第一种字体,就自动切换到第二种、第三种字体,以此类推。如果所有字体都没有找到,就会从 sans-serif 字体系列中选择一种可用的字体。

利用这个特性,还可以实现英文和中文使用不同字体的效果。通常的做法是,把英文字体写在前面,中文字体写在后面。如:

p {
  font-family:  Arial, 'Microsoft YaHei';   /* Arial,微软雅黑 */
}

这样,浏览器会优先使用 Arial 字体显示文本,由于中文字符不识别 Arial 字体,就会在后面的字体中继续查找,找到 Microsoft YaHei 字体后,便对中文应用该字体,这样,就达到了中文和英文使用不同字体的效果。

在指定字体时,如果字体名称中包含空格或中文或其他特殊字符,则要把整个字体名称用放在引号中,可以使用单引号,也可以使用双引号。并且,字体名称不区分大小写。

对于中文,有三种指定字体的方法:一种是直接使用中文字体名称,一种是使用英文字体名称,一种是使用字体的 unicode 码。但是,在CSS文档中定义字体时,如果直接书写中文,经常会出现乱码,或者在某些浏览器下字体不生效。一个常用的解决办法,是把中文字体名称转换为对应的英文字体名称或unicode 码。如,宋体的英文字体名称为 SimSun、unicode 码为 \5B8B\4F53,则可以写成:

p {
  font-family: SimSun;
}

也可以写成:

p {
  font-family: "\5B8B\4F53";
}

上述两种写法是等价的,可以自行选择。为了方便查阅,几种常用字体的中文名称、英文名称、unicode码的对照关系见表 3‑1。

表 3-1 常见字体对照表
中文名称 英文名称 unicode
新细明体PMingLiU\65B0\7EC6\660E\4F53
细明体MingLiU\7EC6\660E\4F53
标楷体DFKai-SB\6807 \6977\4F53
黑体SimHei\9ED1\4F53
宋体SimSun\5B8B\4F53
新宋体NSimSun\65B0\5B8B\4F53
仿宋FangSong\4EFF\5B8B
楷体KaiTi\6977\4F53
仿宋_GB23122FangSong_GB2312\4EFF\5B8B_GB2312
楷体_GB2312KaiTi_GB2312\6977\4F53_GB2312
微软正黑体Microsoft JhengHei\5FAE\x8F6F\6B63\9ED1\4F53
微软雅黑Microsoft YaHei\5FAE\8F6F\96C5\9ED1
华文细黑STXihei\534E\6587\7EC6\9ED1
华文黑体STHeiti\534E\6587\9ED1\4F53
华文楷体STKaiti\534E\6587\6977\4F53
华文宋体STSong\534E\6587\5B8B\4F53
华文仿宋STFangsong\534E\6587\4EFF\5B8B
丽黑ProLiHei Pro Medium\4E3D\9ED1 Pro
丽宋ProLiSong Pro Light\4E3D\5B8B Pro
标楷体BiauKai\6807\6977\4F53
隶书LiSu\96B6\4E66
幼圆YouYuan\5E7C\5706
华文细黑STXihei\534E\6587\7EC6\9ED1
华文楷体STKaiti\534E\6587\6977\4F53
华文宋体STSong\534E\6587\5B8B\4F53
华文中宋STZhongsong\534E\6587\4E2D\5B8B
华文仿宋STFangsong\534E\6587\4EFF \5B8B
方正舒体FZShuTi\65B9\6B63\8212\4F53
方正姚体FZYaoti\65B9 \6B63\59DA\4F53
华文彩云STCaiyun\534E\6587\5F69\4E91
华文琥珀STHupo\534E\6587\7425\73C0
华文隶书STLiti\534E\6587\96B6\4E66
华文行楷STXingkai\534E\6587\884C\6977
华文新魏STXinwei\534E\6587\65B0\9B4F

虽然CSS提供了备选字体的机制,但是,在CSS3之前,所有的字体都只能是Web安全字体(即预先安装在主流个人计算机操作系统中的字体的子集)。直到CSS3中@font-face的出现,这个问题才彻底得到解决。

说明:

虽然 font-family属性具有继承性,但有几个元素不会继承父元素的字体设置,其中有表单的select、textarea 和input 元素。不过,可以强制它们继承父元素的字体设置。代码如下:

input, select, textarea { 
  font-family: inherit; 
}

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

如果本教程对您帮助很大,请随意打赏。您的支持,将鼓励我写出更好的教程!

← 键盘方向键翻页 →
返回顶部 手机访问 关注微信 返回底部

扫码访问歪脖网

随时随地,想看就看

关注歪脖网微信

分享 web 知识、交流 web 经验