学习笔记 CSS权威指南 第5章 字体

337 阅读7分钟

学习笔记 CSS权威指南 第5章 字体

5.1 字体族

font face 和 font family

  • 日常中所说的字体,通常包含多个变体,比如宋体有粗体,斜体等...字体是所有变体的统称
  • 而这些变体叫字型font face
  • 组合起来叫字体族font family

5种通用字体族

5.1.1 使用通用字体族<generic-family>

  • 衬线字体: 字形宽度各异,衬线是字符笔画末尾的装饰,比如有的字体i结束的时候会勾起来
  • 无衬线字体: 字形宽度各异,无衬线
  • 等宽字体: 字符横向上所占的空间是一样的
    • 一般用于显示编程代码或表格数据
  • 草书字体: 模仿手写体
  • 奇幻字体: 无法划入以上4种的,

那还不如直接叫其他字体,这个其实是翻译的锅,看了下MDN上面翻译的是具有特殊艺术效果的字体,感觉这个更加贴切,英文本来是fantasy,直译过来就是幻想,所以啊,英语这个东西,不能只背单词

5.1.2 指定字体族<family-name>

  • 提供指定字体 + 通用字体
  • 字体名尽量都加上引号,避免一些考虑不到的情况报错
h1 {
    font-family: '微软雅黑','sans-serif'; // => 正常使用雅黑,没有雅黑的话系统自动选一个无衬线字体
}

5.2 使用@font-face

用户代理见到@font-face中的font-family后,会下载对应链接中的字体文件,然后用它渲染文本.字体图标就是这样实现的

  • 惰性加载: 仅当需要使用指定字型时才下载
    • 但是浏览器并不支持,而是一遇到@font-face就下载
@font-face {
    font-family: 'iconfont';
    src: url("iconfont.otf");
}

5.2.1 必须的描述符

定义字体的全部参数都写在@font-face{}结构中,这些参数称为描述符,大部分和字体属性差不多.

font-family:在使用字体属性时,要定义字体的名字

src:引用字体的路径

  • 可以写多个,类似于css属性写多个,当前面的不支持,就用后面的
  • 受同源策略的限制
  • 可以使用local()加载当前设备上的字体
  • 可以使用format指定字体解析格式
// 定义
@font-face {
    font-family: ranwawa;
    src: local("微软雅黑.otf"),
         url("微软雅黑.otf") format("opentype")
}

// 使用
html {
    font-family: "ranwawa", "sans-serif";
}

万全之策

像下面这样写,才可以兼容所有不同的浏览器

@font-face {
    font-family: "r";
    src: url("ranwawa.eot"); // => ie9
    src: url("ranwawa.eot?#iefix") format("embedded-opentype"), // => ie6到ie8
        url("ranwawa.woff") format("woff"), // => 现代浏览器,即大部分桌面浏览器
        url("ranwawa.ttf") format("truetype"), // => 大多数手机
        url("ranwawa.svg#ranwawa") fromat("svg"), // => 老IOS手机
}

上班后就一直在使用阿里图标库,几乎每个项目都要和上面这几行代码打交道,直到现在才明白他的原理.......

5.2.2 其他字体描述符

font-style: 区分常规,斜体和倾斜体

font-weight: 区分字重

font-stretch: 区分字体宽度

font-variant: 区分字体变体

font-feature-settings: 访问OpenType底层特性

unicode-range: 指定字体中可用的字符范围

  • 这个在大型项目中可以用来尽量延迟或者减少字体请求
  • 默认是全部字符,如果指定中文范围,那么网页上只有英文时,是不会下载字体的

5.2.3 组合描述符

这个就是把上面提到的描述符,每个属性都写下来,写N个@font-face,可以更加精确的控制字体展示效果.目测也只有越大型网站才会有这种变态需求吧,所以暂时不深究了

5.3 字重font-weight

字重越大,字体越黑,越粗.实际上,加粗的字体,会使用一个较粗的字型.

5.3.1 字重的工作方式

字重有100至900共9个关键字,对应字体设计中的9级字重.如果一个字体族中有全部九级字重,那么分别对应100到900.100最细,900最粗.

当然,一个字体基本不可能提供九级字重,所以正常的分配方式如下

  • 如果600未分配,就和500一样
  • 如果500未分配,就和400一样
  • 如果300未分配,就和400一样
  • 如果200未分配,就和300一样

原理就400以下的如果没有就取最近的最粗的,400以上的如果没有,就取最近的最细的

5.3.2 增大字重

在设置bold bolder时,首先计算从父元素继承的字重,再在此基础上增加字重

p { font-weight: normal; } // => normal对应400
p em { font-weight: bolder; } // => 在400上找下一个粗的...这里没看太懂书上说的是700,但实际如果有500的话,不应该是500么

有时候会出现,字重不一样,但是显示效果一样,这是因为字体族中没有不同的字重的字型.

5.3.3 减小字重

这个和增加字重是一样的

5.3.4 font-weight描述符

没啥好说的,就是直接把字重加到字体声明文件里面了

5.4 字号font-size

font-size属性和渲染结果之间的关系,由字体设计者决定.设计字符时要确保所有字符都比em方框小.

font-size的作用是为字体的em方框指定尺寸,所以显示出来的字符不可能完全是指定的大小.

5.4.1 绝对大小

就是一些关键字,没有用过,但可以用来做sass变量命名的参考

xx-small 10px
x-small  12px
small    14px
medium   16px
large    19px
x-large  24px
xx-large 32px

5.4.2 相对大小

这里书上讲的和5.3.1差球不多呀

5.4.3 百分数和em

百分数和em相对于父元素的字号计算.

1em === 100%

5.4.4 字号的继承

不仅绝对值会继承,百分数也会继承

p 12px  => 12px
p em 120% => 14.4px
p em span 1.35em => 19.33px

显示时舍入: 当字号出现小数点时,虽然用户代理显示有小数点,但是在渲染时可能会被舍入

关键字和等宽文本: 就是在等宽文本使用关键字时,可能会出现浏览器兼容问题.即字体显示出来比相像中的要小.

5.4.5 使用长度单位

由于像素设定字号,会在高ppi设备上字体显示的很小,所以不推荐使用像素值设定字号!!!!

看样子我们使用vw来设置字号是明智的选择

5.4.6 自动调整字号

锤子,只有firefox支持.不记笔记了.虽然看上去有点儿高大上

5.5 字形font-style

normal: 常规

italic: 斜体,是一种单独的字型

oblique: 倾斜体,是竖直体的倾斜版本

5.6 字体拉伸font-strech

字体的瘦体和胖体.不过大多数字体都没提供这种变体...所以也没啥卵用

5.7 字距调整font-kerning

字体中定义的,字符之间相对位置的数据.不同的字符组合字距不一样.

  • 这个我们一般不用关于,浏览器都是根据字体数据来的
  • 设置为none的时候,就忽略字距信息
  • 如果有letter-spacing,会放在font-kerning之后计算

5.8 字体变形font-varian

浏览器兼容问题严重,且实操中很少用到,不记笔记了

5.9 字体特性font-featrue-settings

相当于是字体的配置信息,用于从底层控制字体的哪些特性可以使用

  • 不能用在.woff文件上
  • 具体有哪些配置就不深究了,有用得着的时候再回来看看

5.10 字体合成

浏览器支持不好.不记

5.11 font属性

就是简写,感觉有点多,没必要去用简写....

5.12 字体的匹配机制

了解一下即可,太多了不做笔记