CSS字体处理中最复杂的部分是字体系列(font-family)匹配和字体加粗(font-weight)匹配,其次是字体大小(font-size)的计算。

一、 字体系列

相同的字体可能有很多不同的称呼。例如,你可能对字体Times很熟悉,不过,Times实际上是多种变形的一个组合,包括TimesRegular、TimesBold、TimesItalic、TimesOblique、TimesBoldOblique等等。Times的每种变形都是一个具体的字体风格,而我们通常认为Times是所有这些变形的一个组合。换句话说,Times实际上是一个字体系列(font family),而不只是单个的字体,尽管我们大多数人都认为字体就是某一种字体。

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

Serif字体

这些字体成比例,而且有上下短线。如果字体中的所有字符根据其不同大小有不同的宽度,则称该字体是成比例的。例如,小写的i和小写的m的宽度就不同。上下短线是每个字符笔划末端的装饰。如下图所示:

Serif.png
Sans-serif字体

这些字体是成比例的,而且没有上线短线。sans-serif字体的例子包括Helvetica、Geneva、Arial和Univers。

image.png
Monospace字体

Monospace字体不是成比例的,每个字符的宽度都完全相同,所以小写的i与小写的m有相同的宽度。这些字体可能有上下短线,也可能没有。如果一个字体的字符宽度完全相同,则归类为monospace字体,而不论是否有上下短线。monospace字体的例子包括Courier、Courier New和Andale Mono。

Fantasy字体

这些字体无法用任何特征来定义,只有一点是确定的,那就是我们无法很容易地将其划归为任何一种其他的字体系列当中。这样的字体包括Western、Woodblock和Klingon。

二、几种常见都中文字体

宋体

宋体是最常见都中文字体,如果没有指定字体,操作系统往往选择它来渲染。

微软雅黑

微软雅黑的美观度和清晰度都较好,可以作为网页都首选字体。它在Mac平台对应字体是华文细黑(STXihei)。
但是,Windows XP没有预装这种字体,这时可以选择黑体替代。不过黑体比较粗,不应用于字号较小都文字。

仿宋

这种字体是衬线体,比宋体都装饰性更强。如果字号太小,会影响清晰度,所以只有在字号大于14px的情况下,才可以考虑这种字体。
它在Mac平台的对应的字体是“华文仿宋(STFangsong)”。

楷体

楷体也是衬线体,装饰性与仿宋体接近,但宽度更大,笔划更清楚一些。这种字体也应该在大于14px的情况下使用。
它在Mac平台的对应字体是“华文楷体(STKaiti)”

三、 字体的使用规则

使用通用字体系列

如果你希望文档使用一种sans-serif字体,但是并不关心是哪一种具体字体,以下就是一个合适的声明
body { font-family: sans-serif; }

指定字体系列

建议在所有font-family规则中都提供一个通用字体系列。这样在用户代理无法提供与规则匹配都特定字体时,就可以选择一个候选字体。这种候补策略很有帮助,因为在一个跨平台环境中,将无法知道谁安装了什么字体。
h1 { font-family: Georgia, serif; }
由于中文字体一般都包含英文字母,中文字体中所包含的英文字母会代替指定的英文字体,所以应优先指定英文字体,然后再指定中文字体,因为一般来说中文字体的英文字母不太优美。

image.png

为了保证兼容性,中文字体的中文名称和英文名称,应该都写入font-family

使用引号

只有当一个字体名中有一个或多个空格(如New York),或者如果字体名称包括#$之类当符号,才需要在font-family声明中加引号。

如果没有引号,尽管规则当余下部分还会得到处理,但用户代理有可能忽略这个特定但字体名。
p { font-family: 'New Century Schoolbook', Times, serif; }

如果将一个通用名用引号引起,用户代理就会认为你需要的是一个与此同名的特定字体,而不是一个通用字体系列

四、大型网站上的字体实践

知乎选择的字体
font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif
谷歌香港
font-family: arial,sans-serif
苹果官方网站(中国)
font-family: "SF Pro SC","SF Pro Text","SF Pro Icons","PingFang SC","Helvetica Neue","Helvetica","Arial",sans-serif;

技巧:

1.标示加粗字体的方法很多,例如,名为Zurich的字体系列有很多变形,如Zurich Bold、Zurich Black、 Zurich Light 和Zurich Regular,这些变形都使用相同的基本字体,但是每个变形都有不同的加粗。
如果你希望一个文档

h1 { font-family: 'Zurich Bold', sans-serif; }
h2 { font-family: 'Zurich Black', sans-serif; }
h3, p { font-family: Zurich, sans-serif; }

只有当所有人都安装了这些字体时,样式表才能起作用,但更可能的情况是,大多数人都没有安装所有这些字体。更有意义的做法是为整个文档指定一个字体系列,然后为不同元素指定不同的加粗。

加粗如何起作用

字体指定了9级:100~900

2.

由于每个人的审美不一样,钟爱的字体也会有所有不同,这里给出我个人的常用写法:

font-family: "HelveticaNeue",Helvetica,Arial, "PingFangSC", "HiraginoSansGB", "HeitiSC", "MicrosoftYaHei", "WenQuanYiMicroHei",sans-serif;

以及

font-family:"Open Sans", Arial, sans-serif;

另外推荐两个github上的关于中文字体和排版的项目:

Fonts.css -- 跨平台中文字体解决方案

typo.css -- 中文网页重设与排版:一致化浏览器排版效果

参考资料

《CSS权威指南(第三版)》
中文字体网页开发指南
了解web中的字体之初体验
在Web内容中使用系统字体

网页字体Serif和Sans-serif的区别及浏览器字体的设置
CSS Font知识整理总结

作者:瓦斯程序媛
链接:https://www.jianshu.com/p/73c2e93feb68

CSS | 字体系列的更多相关文章

  1. CSS 字体(font)实例

    CSS 字体(font)实例CSS 字体属性定义文本的字体系列.大小.加粗.风格(如斜体)和变形(如小型大写字母).CSS 字体系列在 CSS 中,有两种不同类型的字体系列名称: 通用字体系列 - 拥 ...

  2. CSS字体

    字体系列 [1]5种通用字体系列:拥有相似外观的字体系列 serif字体:字体成比例,且有上下短线,包括Times\Georgia\New century Schoolbook sans-serif字 ...

  3. Web前端新人笔记之CSS字体

    本章内容是阅读CSS权威指南的一个小积累和随笔.新人必看,老鸟也可查看并指出不足指出以便后人阅读更好地理解.O(∩_∩)O谢谢!!!设置字体属性时样式变的最常见的用途之一:不过,尽管字体选择很重要,但 ...

  4. CSS字体属性 font属性

    CSS的所有字体属性: ·-·  font 在一个声明中设置所有的字体属性 ·-·  font-family 指定文本的字体系列 ·-·  font-size 指定文本的字体大小  (属性值是整数字, ...

  5. CSS字体属性

    CSS字体属性 CSS Fonts(字体)属性拥有定义字体系列.大小.粗细和文字样式(如斜体) 字体系列 <style type="text/css"> div{ fo ...

  6. HTML和CSS 入门系列(二):文字、表单、表格、浮动、定位、框架布局、SEO

    上一篇:HTML和CSS 入门系列(一):超链接.选择器.颜色.盒模式.DIV布局.图片 一.文字 1.1 属性 1.2 字体样式:font-family 1.3 字体大小:font-size 1.4 ...

  7. CSS:CSS 字体

    ylbtech-CSS:CSS 字体 1.返回顶部 1. CSS 字体 CSS字体属性定义字体,加粗,大小,文字样式. serif和sans-serif字体之间的区别  在计算机屏幕上,sans-se ...

  8. 3.CSS字体属性

    CSS Fonts(字体)属性用定义字体系列,大小粗细,和文字样式(如斜体) 3.1字体系列 CSS使用font-family属性定义文本字体系列 p { font-family:'微软雅黑' ;} ...

  9. CSS字体属性与文本属性

    CSS字体属性与文本属性 1. 字体属性 1.1 字体系列font-family p { font-family: "Microsoft Yahei";/*微软雅黑*/ } /*当 ...

随机推荐

  1. [伯努利数] poj 1707 Sum of powers

    题目链接: http://poj.org/problem?id=1707 Language: Default Sum of powers Time Limit: 1000MS   Memory Lim ...

  2. 空类的sizeof,有一个虚函数的类的sizeof

    今天面试,忽然被问到这个题目,查了一下果然有欸. #include <iostream> using namespace std; class A { }; class B { publi ...

  3. Hibernate4教程五:事务和并发

    Hibernate本身没有事务的实现 Hibernate 直接使用 JDBC 连接和 JTA 资源,不添加任何附加锁定行为.也就是说你在Hibernate里面使用的事务要么是JDBC的事务,要么是JT ...

  4. spring 事物(一)—— 事物详解

    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 事务的特性 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么 ...

  5. 力扣——candy (分糖果) python实现

    题目描述: 中文: 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. ...

  6. 你(可能)不知道的 web api

    转自奇舞周刊 简介 作为前端er,我们的工作与web是分不开的,随着HTML5的日益壮大,浏览器自带的webapi也随着增多.本篇文章主要选取了几个有趣且有用的webapi进行介绍,分别介绍其用法.用 ...

  7. python3 实现简单ftp服务功能(客户端)

    转载请注明出处! 可执行的命令: lspwdcd put rm get mkdir 上传下载,显示进度百分比以及平均上传下载速度 客户端 main代码: #Author by Andy #_*_ co ...

  8. MyBatis注解开发-@Insert和@InsertProvider(@Select、@SelectProvider雷同)

    @Insert和@InsertProvider都是用来在实体类的Mapper类里注解保存方法的SQL语句.不同的是,@Insert是直接配置SQL语句,而@InsertProvider则是通过SQL工 ...

  9. 搭建ELK和EFK

    公司突然发下任务让我搭建elk和efk,于是做完之后写入了博客,生产环境下,亲测可用哦 搭建ELK 一共两台服务器,一个节点(logstash) 主服务器上 修改最大链接和最大打开的文件 1.临时修改 ...

  10. 【leetcode】987. Vertical Order Traversal of a Binary Tree

    题目如下: Given a binary tree, return the vertical order traversal of its nodes values. For each node at ...