网站字体渲染过程



前言

我们知道同一种字体在不同浏览器上的表现有可能是不同的,除了浏览器,还有哪些导致表现不同的因素呢?不同系统下字形的渲染也是不一样的,根本原因是什么呢?我们希望各浏览器下字体排版一致,实现的话有完美的方案吗?

带着这些问题我们来看看字体渲染的过程:

解码

了解解码之前,我们稍微先简单回顾下编码的一些知识,常见的名词有:ASCII 、GB2312、Big5、Unicode、UTF-8,它们之前有什么区别或联系呢?简单来说,起初美国国家标准协会ANSI制定了一个标准,规定了常用字符的集合以及每个字符对应的编号,这就是ASCII字符集(Character Set),也称ASCII码,当计算机慢慢发展,人们发现之前的128个的字符不能满足需求了,于是便在原基础上进行扩展,GB2312、Big5等都属于扩展后的编码方式,再后来呢,为了实现在一份文档中可以正确显示所有类型的字符,于是Unicode字符集诞生了,而UTF-8是Unicode的实现方式之一,
与之相似的还有UTF-16和UTF-32。

回顾了编码,我们再来看解码,浏览器收到网页内容后,首先需要把这些内容转化为可阅读的文本,上面我们也提到了,不同国家或语言会使用不同的编码方式,那怎么去判断编码方式呢,方法有下面这些(优先匹配前面的规则,如果没有,则按顺序往下匹配):

  1. Web 服务器返回的 HTTP 头中的 Content-Type: text/html; charset=“”的编码
  2. 网页本身 meta header 中的 charset 部分
  3. 浏览器菜单里一般允许用户强制指定编码
  4. 部分浏览器 (比如 Firefox) 可以选择编码自动检测功能,使用基于统计的方法判断未定编码。

分段

编码方式确定后,网页的内容就被转化为Unicode字符了,分段的过程就是将文本分为由不同语言组成的小段.

选择字体

下面我们来谈谈字体,字体的分类大致有下面这些:
1. 点阵字体(Bitmap Fonts)
2. 轮廓字体(Outline Font)
2-1. PostScript字体
2-2. TrueType字体
2-3. OpenType字体
3.笔画字体(Stroke-based font)
4.METAFONT

如何理解点阵字体和轮廓字体的区别呢,其实它们的表现和图片格式中的png8和png24的的区别很类似,点阵字体都是实色,没有过渡色,边缘锐利,而轮廓字体有过渡色,边缘也比较平滑。很多人把“宋体”(simsun)当作点阵字体,其实不是,它和“微软雅黑”(microsoft yahei)一样,都属于轮廓字体,只不多12px~17px的宋体内置了点阵信息而已。

如果按照字形来分的话,字体又可以分为:

  • 衬线(serif)
  • 非衬线(sans-serif)
  • 等宽字体(monospace )
  • 书写体(cursive)
  • 梦幻体(fantasy)

注:其中“serif”表示”字脚”、“装饰”的意思,而“sans”来源于法语,是“无”的意思。

常见的衬线有下面这些,字形的末端都会有“脚”:

常见的非衬线有:

而系统所包含哪些字体跟什么有关呢?当我们想用一种字体,但不确认这个字体是否是系统已有的,怎么去确认呢?

首先系统所包含字体不只和系统预装的字体有关,还和系统上安装哪些软件有关,微软操作系统下,详细的系统和一些软件包含的字体可以查看这个索引:Microsoft
typography
,Mac系统可以查看这个索引:List
of typefaces included with OS X

再让我们回到网页中,CSS里如果font-family未设置中文字体时,我们知道是根据浏览器默认的字体来显示,找到浏览器对应的设置,你也可以手动修改这些。

1
p{font:12px/24px Tahoma;}
2
p{font:12px/24px Arial;}

以上两种写法按照前面我们所说的规则来说,在同一个系统和浏览器中匹配的是唯一的字体,那么它们的显示还会有区别吗?看看下面Windows系统下部分浏览器的测试结果:

仔细看,你会发现IE6,IE8,Chrome,Firefox下文字底部不在同一水平线上的。所以由此得知:英文字体不会影响中文的字形,但会影响其位置。可是…为什么会影响位置呢?我们再来看下网页中的文字的位置到底是怎么被控制的:

默认的规则是:用行高(line-height)减去内容区(content area)的高度所得到的值一分为二,各放在内容区的上面和下面,但不同浏览器的渲染不同,并且结合上面的测试结果,就算内容区的位置是相同的,文字在内容区的位置还可能不同。
而影响文字在内容区的位置的因素有下面几个,也就是说这也不是统一的。

  • 字体类型
  • 排版引擎
  • 浏览器

排版引擎

总的来说,Mac OS X用户使用CoreText渲染引擎,Windows7 和Windows Vista用户使用DirectWrite 或 GDI,而Windows XP则使用GDI.
对比图片来看看它们之间的区别,其中上图为FacitWeb字体,下图为 Minion Pro字体。



Core Text 渲染引擎



DirectWrite渲染引擎



GDI渲染引擎,开启ClearType



GDI渲染引擎,标准抗锯齿(Standard antialiasing)



GDI渲染引擎,无抗锯齿(no antialiasing)

注:iOS和Mac的渲染引擎一样,但采用的是灰度渲染,默认情况下亚像素抗锯齿是关闭的,但可以通知设置开启。

所以不同系统因为渲染引擎的不同,导致文字在细节上也表现不同,在这里顺便说下微软和苹果两家公司对于字体表现的不同风格,苹果公司更专注于还原字形设计的本来面貌,使字形更优雅、平滑。而微软则更倾向字体的清晰,可读性。

浏览器

确认了排版引擎,我们再来看看浏览器,浏览器会有布局引擎,它来决定是怎样用html结构,css样式表来你渲染网页。布局引擎和网站外观表现是息息相关的,但是对于字形渲染,绝大部分还是由操作系统的文本渲染引擎来控制的,这就很好的解释了为什么同样的浏览器,在不同的操作系统下有不同的字形表现,见下图:



Windows下各浏览器所使用的渲染模式。

光栅化

当确定了编码、字体类型、排版引擎、浏览器后,就要进行光栅化过程了,光栅化是将文字从一个向量表示(比如一个TrueType字体)转化到光栅或者位图表示的过程。在这个过程中往往涉及到一些抗锯齿技术来使得屏幕上的字体更加平滑易读,这也经常会涉及到”字体微调(font hinting)”技术。

总结

现在再回过头来说说研究字体渲染的初衷,细节控对于不同浏览器像素级统一有时候要求是很极致,研究的目的是想做出一套方法来实现它们的统一。可现在我们知道,这和字体类型、系统排版引擎、浏览器都有关系,并且排版引擎有多种,这里还没有加上Linux,Android系统,浏览器就更不用说了,如果再加上移动端,就更复杂了。所以完美的方案是近乎没有的,就算写一大堆的hack。

如果再跳出来看这个问题,我们真的一定需要让不同浏览器在字体渲染方面的表现完美一致吗,其实普通的用户不是专门测试人员,不会打开所有浏览器对比区别,所以细微的差别对普通用户来说几乎是无法感知的,是的,我这里说的是“细微”,但是如果差别比较离谱,这些导致表现不同的原因都不会成为借口。

注:头图来自 http://www.gettyimages.cn/

参考资料:

时间: 2024-08-02 23:52:06

网站字体渲染过程的相关文章

网页字体全知道:网站字体渲染过程

文章描述:我们知道同一种字体在不同浏览器上的表现有可能是不同的,除了浏览器,还有哪些导致表现不同的因素呢?不同系统下字形的渲染也是不一样的,根本原因是什么呢?我们希望各浏览器下字体排版一致,实现的话有完美的方案吗? 前言 我们知道同一种字体在不同浏览器上的表现有可能是不同的,除了浏览器,还有哪些导致表现不同的因素呢?不同系统下字形的渲染也是不一样的,根本原因是什么呢?我们希望各浏览器下字体排版一致,实现的话有完美的方案吗? 带着这些问题我们来看看字体渲染的过程: 解码 了解解码之前,我们稍微先简

网站设计:切割字体制作过程

  网站设计之切割字体制作过程   一.新建文档,500*300,填充颜色f4f4f4,新建图层,选择椭圆选取工具,画出选区,填充黑到透明渐变 二.滤镜--模糊--高斯模糊,图层不透明度:50% 三.选择文字工具,输入wangqi,填充渐变颜色和斜面浮雕 四.制作文字阴影:新建图层,椭圆工具,选择适当的选区,填充黑色,滤镜--模糊--高斯模糊, 五.滤镜--模糊--动感模糊,复制图层,给每个字加阴影 六.回到文字图形,删除格式化,选择多边形选取工具,选择适当的选区,Ctrl+Shift+J 七.

浏览器渲染过程与性能优化

大家都知道万维网的应用层使用了 HTTP 协议,并且用浏览器作为入口访问网络上的资源.用户在使用浏览器访问一个网站时需要先通过 HTTP 协议向服务器发送请求,之后服务器返回 HTML 文件与响应信息.这时,浏览器会根据 HTML 文件来进行解析与渲染(该阶段还包括向服务器请求非内联的 CSS 文件与 JavaScript 文件或者其他资源),最终再将页面呈现在用户面前. 现在知道了网页的渲染都是由浏览器完成的,那么如果一个网站的页面加载速度太慢会导致用户体验不够友好,本文通过详解浏览器渲染页面

Seo完整过程即网站优化完整过程

做seo也有半年时间了,浅谈一下这半年所优化的项目的一些总结.今天给大家说的就是一个完整网站的优化过程,即seo完整过程.高手就请略过吧,希望该文章对新手有所帮助吧! 1.第一步 了解网站.制作诊断方案 当我们接到一个要优化的网站时候或者自己公司网站,首先对网站要进行一个全面的了解,包括网站的收录量.排名.反向链接数等.然后根据网站的存在的问题等制定一个完整的诊断方案. 2.竞争对手.方案的制定 我们制定了诊断方案后,然后就是对网站的关键字和竞争对手的研究.我们可以通过研究竞争对手的情况,了解一

医疗网站的优化过程10个需要注意的地方

大家都知道,医疗网站的竞争性很大的行业,这就看网站优化能力的强弱了.根据小编的经验来看,医疗网站的优化有十个小诀窍,这些诀窍或许可以帮助seo把网站的综合排名上升.还有就是针对医疗网站的编辑也需要一定医学知识,就算是不知道ct成像原理,最起码也要知道膀胱和尿路系统有关系,这样即便进行编辑整理的时候,不至于闹出"女生的前列腺"这样的差错.言归正传,现在咱们就聊一聊关于医疗网站的优化过程中10个需要注意的地方. 第一:一般的医疗网站都是一个站具有多个病种,例如妇科救护有不孕,附件炎,乳腺炎

Windows 7中的字体渲染

显示方面,在Vista的基础上,微软对Windows 7进行了多方面的改进,包括全新的任务栏.一些新的UI元素.新的驱动模型WDDM1.1等等.当然,也包括字体. ClearType ClearType是微软在Vista中引入的字体渲染方式.由于用户80%的时间几乎都要花在阅读上,微软特别看重用户在字体方面的体验,而ClearType得出现正是为了通过特殊的渲染方式给予LCD和CRT显示器以出色的显示效果的. PS:在Vista下,经常有人会问,字体发虚怎么办?其实只要右键 - 个性化 - 颜色

浏览器字体渲染的秘密

  说到web性能,前端工程师很自然地反应是yahoo的30+条优化规则.这些规则可以将网页加载从原来的几秒甚至十几秒较少到3s甚至1s以内.当一个完整界面展现在用户眼前时,内容就通过不同的字体.图片以及多媒体传达给用户.使用户在1s内看到网页和使用户留在网页上几分钟甚至几十分钟同样重要.字体作为内容承载信息的重要部分,若使用不"适当"的字体或者字体由于渲染等缘故对用户不友好,则会(有可能)造成不必要的用户流失.本文介绍浏览器的字体渲染,希望还未接触字体渲染的同事能通过本文对字体渲染有

Win8.1系统英文字体渲染不正常的解决办法

  小编为大家整理了一下关于Win8.1系统英文字体渲染不正常的解决办法. 目前解决方法只能替换回Win8的字体,方法如下: 1.下载Win8的宋体:Win8字体下载 2.打开字体文件点击安装 3.倒入注册表文件:注册表文件下载 4.重启电脑

Ubuntu字体渲染的设定

Font hinting/hintstyle:字体微调,中文字体的hinting制作非常麻烦,所以微米黑的中文就是没hinting,微软雅黑有. autohint:没hinting的字体能开hinting就是autohint的功劳,但效果嘛,毕竟是http://www.aliyun.com/zixun/aggregation/18860.html">自动处理,非人力,有好有坏,自己看. subpixel rendering:次像素渲染. Anti-aliasing:简称AA,抗锯齿,俗称