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

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

前言

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

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

解码

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

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

Web 服务器返回的 HTTP 头中的 Content-Type: text/html; charset=“”的编码
网页本身 meta header 中的 charset 部分
浏览器菜单里一般允许用户强制指定编码
部分浏览器 (比如 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未设置中文字体时,我们知道是根据浏览器默认的字体来显示,找到浏览器对应的设置,你也可以手动修改这些。

p{font:12px/24px Tahoma;}

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。

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

时间: 2024-12-31 01:53:43

网页字体全知道:网站字体渲染过程的相关文章

32个使用 Google 网页字体的优秀网站案例

如今,网页设计师非常注重网页字体的运用,为了能让网站有更好的可读性和更强的吸引力,他们需要更漂亮的字体.Google网页字体(Google Web Fonts)为设计师们提供了几百种免费开源的字体,只需要在网页中加入一小段代码就可以在你的网页中现实漂亮的字体.今天这篇文章就向大家展示32个使用Google网页字体的优秀网站案例. 1. Shopify 使用的字体: Open Sans 2. Creep Fest 使用的字体: Homemade Apple, Copse 3. Icon Bits

为什么网页在手机上显示的字体很小?

问题描述 为什么网页在手机上显示的字体很小? 将网页的宽度设为1280后,虽然网页的内容刚好显示在手机上, 全是字体即非常小,这样什么原因,如何调整啊 而设置font的大家好像不起作用. 解决方案 目前手机屏幕的分辨率达到1920×1080.完全可以显示通常网页了.这时,通过手机浏览网页,满屏显示页面上的字体就很小. 为了解决手机的浏览,通常二种办法: 1.放大字体,手工放大后,网页自动适应宽度.这对网页和要求比较高了. 2.多数网站,为了方便手机用户浏览网页,建立一个手机版网页,自动转换或手工

网站字体有多重要?它帮网站提高了38%的流量!

  多年前,麻省理工学院的研究人员已经证实字体影响我们的感受:差的字体使人无意识的反感,好的字体使我们感到高兴.如果字体能够影响我们的情绪,那同样会影响用户体验. 几周前,我决定探究字体对用户体验的影响究竟有多大.通过一系列的对比测试,仅仅在改变字体的情况下,我的网站流量提高了38%. 在开始详细讲述我的测试前,先解释下为什么字体对用户阅读有如此大的影响. 字体影响读者的情绪 字体通过两种方式影响我们的情绪. 认知偏见 首先,我们会自然而然的赋予某些字体及字体形式一定的内涵.好比我们对身边事物的

解决网页中使用自定义中文字体的方法

英文字体自定义 中文字体自定义 上面的两个图片例子,展示了自定义字体在网页里面的应用,这里不是浏览器的字体,也不是客户电脑里安装的字体,也不是图片或其他方式,而且是以文字的方式显示,这样做的好处是有的,最简单的好看啊,再比如可以方便修改,重要的是利于SEO优化.好处不多讲,先讲讲如何实现. 首先,要准备字体,要使用字体的三种文件格式,确保能在主流浏览器中都能正常显示该字体. 下面是几种主流浏览器对于字体格式的支持情况: .TTF或.OTF,适用于Firefox 3.5.Safari.Opera

FONTREACH收录百万网站字体使用情况

  想知道Facebook.Twitter.Google都在使用哪些字体?想知道目前最流行的网页字体?一个酷站直接搞定!今天介绍的FontReach不仅可以快速查询某个网站用的字体,而且还列出了最热门的网页字体排行榜(猜猜世界第一是哪个),帮你把握字体趋势! 网页字体(Web fonts)发展历史可以回溯到 CSS2 规范的 @font-face 属性,这是一种让网页字体有更多变化的技术,即使计算机没有安装对应的字体档案,也能透过浏览器加载让系统支持更多显示字符.网页字体已被大量使用到现今的网络

网页设计中六个字体实用工具

  网页设计师往往会欣赏美丽的字体!很多时候在处理某些项目或者干脆冲浪各地,他们遇到某些字体被这样视觉上的吸引力,他们得到好奇,想知道关于以供将来参考的特殊字体.这种好奇心导致知道更多的不可抗拒.那里肯定有是一个答案,至于哪个字体是问题. 好吧,如果你感到沮丧,同时确定您欣赏大量的字体,然后我们有解决方案,以帮助你走出这一切.为了帮助您识别字体的聪明的方式,我们已经列出下来的在线工具,以确定字体的最快的方式在这里.这些令人惊讶的工具让你喜欢的字体类型,字体大小,RGB颜色值,字体,行的高度,重量

html5-手机网页开发,如何设置字体,使得任意一种手机调试,字体大小都一样

问题描述 手机网页开发,如何设置字体,使得任意一种手机调试,字体大小都一样 我在设置的时候,试了设置百分比,还有设置像素, 两者都不行,是什么原因,有什么解决办法 解决方案 这个很难做到,手机上浏览器不同,内置的字体文件不同,分辨率和缩放比例不同. 除非你用图片代替文字. 解决方案二: 你可以试试em,例如16px就设置为1em试试 解决方案三: 可以试试设置em 只要不要使用px就可以

网页设计中常用英文字体

CSS中对文字的控制在以往的文章中有过不少的介绍,但关于字体的还没有.今天向大家介绍一些英文字体,希望在今后的字体设置中,对您的编码有所帮助. Arial Arial是一套随同多套微软应用软件所分发的无衬线体TrueType字型.虽然比例及字重(weight)和Helvetica极之相近,但 Arial其实是Monotype Grotesque系列的变种.设计Arial时考虑到会在电脑上面使用,在字体及字距上都作了一些细微的调整和变动,以增加它在电脑屏幕上不同分辨率下的可读性. Helvetic

让网页显示的字体更美观 IE字体设置

对于经常使用 iPhone 或者 iPad 的用户而言,会发现在 Safari 浏览器上浏览相同的网页,网页显示的字体要比 IE 显示的字体漂亮. 这个是在于 iPhone 或者 iPad 上的 Safari 浏览器会强制忽略网页上的字体设置,将字体强制以"黑体"显示. "黑体"指的是字体的线条皆同粗同细,至于"宋体"的笔画则有粗细变化,而且一般是横画比竖画细,横画末端变粗.不过在 Windows 7 系统中已经内置了"微软雅黑&quo