CSS Font知识整理总结
1、什么是字体
字体是文字的外在形式,就是文字的风格,是文字的外衣。比如行书、楷书、草书,都是一种字体。同样一个字每个人写起来都会有差异,可以说每个人都有一套潜在的字体库。对于web页面来说,字体就是计算机上存储的一套文字显示方式。通过对文字进行一些特殊处理(比如末端加强)来提高不同环境中文字的可读性。
比如同样大小的文字,在不同字体下的可读性是不同的。

一般来讲,一款字库的诞生,要经过字体设计师的创意设计、字体制作人员一笔一划的制作、修改,技术开发人员对字符进行编码、添加程序指令、装库、开发安装程序,测试人员对字库进行校对、软件测试、兼容性测试,生产部门对字库进行最终产品化和包装上市等几个环节。通常情况下文字跟字体库是一对多的关系,所以对于多语言支持的web页面,要求设计师在选用字体时不能光考虑一种语言的情况。
2、font-family
关于font-family的介绍大多数只是说明他可以设置文本中的字体名称序列。其实font-family真正的作用是将一系列近似的字体按照优先级顺序组成一个列表,浏览器从第一项开始依次查找,找到第一种可用的字体来显示文字。
font-family: Times New Roman,"open-sans","幼圆",sans-serif
当浏览器显示一个字符时,会首先从Times New Roman中寻找这个字符,如果找到就用Times New Roman字体来显示这个字符。如果没找到就去open-sans中寻找,如果找到就用该字体显示字符,没找到就会依次寻找下去,如果在通用字体库sans-serif中也没有找到就会用一个缺字符代替(通常是小方框)。
<p style='font-family: Times New Roman,"open-sans","幼圆",sans-serif'>
<span>时间就是金钱</span><span>Time is money.</span>
</p>
比如上面这段代码,对于汉字部分浏览器会先去Times New Roman中查找,没有找到,接着再去open-sans中查找,仍然没有找到,继续到“幼圆”中寻找,幼圆中可以找到对应字符则用该字体来显示。对于英文部分可以在Times New Roman中寻找则会用该字体来显示。

font-family中有时候字体加引号有时候不加引号。区别在于对字体名称中空格的处理不同。不加引号时,忽略字体左右两端的空白字符,单词之间的空白字符被解释为一个空白字符。比如font-family: Times New Roman , sans-serif。被解释为font-family:Times New Roman,sans-serif。加引号时,需要保留引号内的所有空格。比如font-family:"Times New Roman",sans-serif。浏览器会去寻找“Times New Roman”这个字体。
3、通用字体族
w3c建议在定义字体是最后以一个类别结尾,例如sans-serif,来保证不同操作系统下网页都能够正确显示。常见的字体族为serif(衬线字体)、sans-serif(非衬线字体),可以简单理解为在所有字体都是失效的情况下,浏览器从字体族中选择一种字体来显示。
一种字体族代表了拥有某类特性的多种字体,字体族中字体的选择完全有浏览器决定。设计者给出的字体应该尽可能覆盖所有系统,而不应该依赖字体族。字体族一定要放到font-family的最后一位。
serif 衬线字体,通常是指使用末端加强原则的字体,通过在文字末端加入细小变化来改变小号文字的可读性。

上述字体都是衬线字体,文字的末端使用了衬线。陈贤字体具有较高的可读性,通常用于以大段文字作为表现形式的作品如报纸、书籍等。常见的衬线字体有Georgia, Garamond, Times New Roman, 中文的宋体等等。
sans-serif非衬线字体,衬线字体以外的所有字体都成为非衬线字体。非衬线字体的线条比较均匀,通常在艺术字、标题中的使用较多。

由于非衬线字体字条比较均匀,所以在小号文字下的可读性不如衬线字体。常见的非衬线字体有Trebuchet MS, Tahoma, Verdana, Arial, Helvetica, 中文的幼圆、隶书等等。
综上所述,衬线字体适合小号文字的显示,如果使用非衬线字体要保证font-size足够大,以确保正文内容的可读性。11px下的英文推荐使用衬线字体,对于中文,无论如何都不推荐11px下显示。
4、@font-face
@font-face是链接服务器上的字体的一种方式,就像制定图片链接一样,浏览器会根据这条指令把对应字体下载到本地缓存,用它去修饰文本。

<identifier>:字体名称
<url>:此值指的是你自定义的字体的存放路径,可以是相对路径也可以是绝路径
<string>:此值指的是你自定义的字体的格式,主要用来帮助浏览器识别,其值主要有以下几种类型:truetype, opentype,Web Open Font Format, embedded-opentype, svg等
<font>:定义字体相关样式,符合该样式设定的文本会使用该字体显示。
truetype(.ttf)、opentype(.otf)这两种格式在绝大多数浏览器上都能正常工作。Web Open Font Format(.woff)是Web字体中最佳格式,他是一个开放的TrueType/OpenType的压缩版本,同时也支持元数据包的分离。Embedded Open Type(.eot)为IE的私有字体格式。svg(.svg)字体是基于SVG字体渲染的一种格式。下表中列出了这些格式的浏览器兼容性。

@font-face{
font-family: 'open-sans';
src: url('./open-sans/OpenSans-Regular.eot'); /* IE9+ */
src: url('./open-sans/OpenSans-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('./open-sans/OpenSans-Regular.woff') format('woff'), /* chrome、firefox */
url('./open-sans/OpenSans-Regular.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('./open-sans/OpenSans-Regular.svg#fontname') format('svg'); /* iOS 4.1- */
}
@font-face{
font-family: 'open-sans';
src: url('./open-sans/OpenSans-Bold.eot'); /* IE9+ */
src: url('./open-sans/OpenSans-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('./open-sans/OpenSans-Bold.woff') format('woff'), /* chrome、firefox */
url('./open-sans/OpenSans-Bold.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('./open-sans/OpenSans-Bold.svg#fontname') format('svg'); /* iOS 4.1- */
font-weight:bold;
}
<p style='font-family: open-sans,sans-serif'>
<span>时间就是金钱</span><span>Time is money.</span>
</p>
<p style='font-family: open-sans,sans-serif;font-weight:bold;'>
<span>时间就是金钱</span><span>Time is money.</span>
</p>

上述代码中两次@font-face命令定义了一个字体族,在普通情况下使用OpenSans-Regular字体,粗体时使用OpenSans-Bold字体。这也印证了我们上文所说,对于字体族中的字体由浏览器根据当前设置自动选择。
如果要使用@font-face通常需要做一些优化工作,比如有的字体库太大就需要只保留网页中用到的文字,对于中文字体更是如此,这时候字蛛(FontSpider)工具可以来帮助我们;对于进一步优化,可以将字体文件以base64编码方式嵌入到css文件中来减少一次http请求,小米主页就是采用这种方式(这里和这里)。

对于字体库的压缩可以使用这款工具。
参考文章:
CSS Font知识整理总结的更多相关文章
- 前端CSS部分知识整理
1.如何清除图片下方出现几像素的空白间隙? /*方法1:*/ img{display:block;} 方法2: /*img{vertical-align:top;}*/ 2.如何让文本垂直对齐文本输入 ...
- CCS Font 知识整理总结
总是搞不懂 CCS 中如何正确的使用字体,这下明白了. 1.什么是 font-face font-face 顾名思义,就是文字的脸.字体是文字的外在形式,就是文字的风格,是文字的外衣.比如行书.楷书. ...
- 〖前端开发〗HTML/CSS基础知识学习笔记
经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> & ...
- css基本知识框架图
css基本知识框架:(一:基本知识缩影.二基本知识框架图) 1.css样式表的基本概念 2.样式表基本类型-----1.内嵌样式 2.内联样式3.链入外部样式表4.导入外部样式 3.样式表配置方法 4 ...
- css基本知识框架(转)
css基本知识框架: 1.css样式表的基本概念 2.样式表基本类型-----1.内嵌样式 2.内联样式3.链入外部样式表4.导入外部?式 3.样式表配置方法 4.字体属性----1.font-fam ...
- css基本知识
WANGJUN59451 css基本知识 1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HT ...
- CSS 基本知识
1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HTML 元素,是能够真正做到网页表现与结构分离的 ...
- CSS 基本知识梳理-续
CSS 基本知识 1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HTML 元素,是能够真正做到网 ...
- 【前端词典】几个有益的 CSS 小知识
今天偷个懒,不长篇大论,分享几个你可能不知道的 CSS 小知识. 样式的顺序 CSS 代码: HTML 代码: 记得之前这是一道比较火的 CSS 考题,当时好像是有不少的人答错(30% 以上) ...
随机推荐
- My安卓知识5--百度地图api的使用,周边信息检索
虽然查了很多资料,但是这个问题还是解决不了,不知道为什么检索城市内的相关信息能用,检索周边信息语句就是用不了.代码如下,第一段是检索保定市内的加油站,第二段是检索周边的加油站.centerToMyLo ...
- ASP.NET MVC+Entity Framework 访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...
- Ubuntu 16 安装odoo10 实录
安装Ubuntu 16,省略 安装时,默认用户名为 odoo ubuntu 16开始 使用 systemd 管理服务,但是systemd 兼容 sysv init 脚本 下载 odoo源码 从 htt ...
- dp、px、dpi、ppi
概念: dpi(Dots Per Inch):每英寸上的点数,最初用于衡量打印物上每英寸的点数密度,打印机在一英寸内打多少个点.DPI值越小越不精细. ppi(Pixels Per Inch):每英寸 ...
- jsp jsp指令
JSP 由HTML和java语句拼接而成的文本,后缀名为.jsp 1.Jsp翻译成servlet:先翻译,Tomcat将翻译后的文件放置在安装目录下(所有JSP页面本质上就是Servlet程序) 2. ...
- MMS源码中异步处理简析
1,信息数据的查询,删除使用AsycnQueryHandler处理 AsycnQueryHandler继承了Handler public abstract class AsyncQueryHandle ...
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- Cracking-- 17.13 将二叉树转换成双向链表
在书的105页 使用中根遍历的思想 left 之后 为 root 之后 为 right 则对左子树来说 left->right = root; root->left = left; 对右子 ...
- 【笔记】memorymanagement-whitepaper-150215
3 GC概念 Gc的职责: 1) 分配内存 2) 保证被引用的对象驻留内存 3) 对象不可达后将其占用内存回收 被引用对象被称为 “存活对象”. 不再被引用的对象称为“垃圾对象”. 找到垃圾对象 ...
- String、StringBuffer、StringBuilder的一些小经验……
一说String.StringBuffer和StringBuilder,想必大家都很熟悉,这三者经常在我们的面试题中出现,我也是看到了关于这三个的经典面试题,才触动了我之前工作中的一些经历,故而根据我 ...