17.再探究字體的渲染規(guī)則及 fallback 機制

字體是如何渲染的

具體的可以看看這篇文章:瀏覽器如何渲染文本,截取部分關(guān)鍵信息如下:

解碼

  1. Web 服務(wù)器返回的 HTTP 頭中的 Content-Type: text/html; charset= 信息,這一般有最高的優(yōu)先級;
  2. 網(wǎng)頁本身 meta header 中的 Content-Type 信息的 charset 部分,對于 HTTP 頭未指定編碼或者本地文件,一般是這么判斷;
  3. 假如前兩條都沒有找到,瀏覽器菜單里一般允許用戶強制指定編碼;

分段

編碼確定后,網(wǎng)頁就被解碼成了 Unicode 字符流。因為我們得到的文本可能是很多種語言混雜的,里面可能有中文、有英文,它們可能要用不同的字體顯示;

為了統(tǒng)一處理所有這些復(fù)雜的情況,我們要將文本分為由不同語言組成的小段,在有的文本布局引擎里,這個步驟稱為“itemize”,分解后的文本段常被稱作“text run”,但是具體劃分的規(guī)則可能根據(jù)不同的引擎有所區(qū)別。

字體匹配

分段之后,則要根據(jù)設(shè)置的不同 font-family 對每一段文字進行字體匹配。這里遵循字體的 fallback 機制。

fallback 機制:在操作系統(tǒng)介面和網(wǎng)頁等現(xiàn)代排版環(huán)境下,如果指定用字體?A?來顯示某字符?x?但該字體并不支持這個字符(甚至該字體當(dāng)前不可用),排版引擎通常不會直接放棄,它會根據(jù)一個預(yù)先記好的列表來嘗試尋找能顯示字符?x?的字體,如果找到字體?B?能行,那就用字體?B?來顯示字符?x。字體?B?就是當(dāng)前這個情況的 fallback。

font-family: Helvetica, Arial; 為例,Arial 字體就是一種 fallback ,當(dāng)指定的第一選擇字體 Helvetica 不可用時,則嘗試去尋找 Arial 是否可用。

系統(tǒng)所包含哪些字體跟什么有關(guān)呢?當(dāng)我們想用一種字體,但不確認這個字體是否是系統(tǒng)已有的,怎么去確認呢?

首先系統(tǒng)所包含字體不只和系統(tǒng)預(yù)裝的字體有關(guān),還和系統(tǒng)上安裝哪些軟件有關(guān),

再讓我們回到網(wǎng)頁中,CSS里如果font-family未設(shè)置中文字體時,我們知道是根據(jù)瀏覽器默認的字體來顯示,找到瀏覽器對應(yīng)的設(shè)置,你也可以手動修改這些。

渲染

當(dāng)確定了字體以后,就可以將文本、字體等等參數(shù)一起交給具體的排版引擎,生成字形和位置,然后根據(jù)不同的平臺調(diào)用不同的字體 rasterizer 將字形轉(zhuǎn)換成最后顯示在屏幕上的圖案,一般瀏覽器都會選擇平臺原生的 rasterizer,比如 Mac OS X 下用 Core Graphics,Linux/X11 下用 FreeType,Windows 下用 GDI/DirectWrite 等等。

影響字體渲染的因素

影響字體的渲染是因素有很多,總的來說:

  • Web頁面的 lang, charset 和瀏覽器設(shè)置都會對默認字體產(chǎn)生影響
  • 不同操作系統(tǒng)、不同瀏覽器都默認中文、英文字體的設(shè)置都有區(qū)別

serif 和 sans-serif 不總是生效

serif 和 sans-serif 不總是生效,這個受到很多因素的影響。

Web頁面的 lang, charset 和瀏覽器設(shè)置都會對默認字體產(chǎn)生影響。

font-family: sans-serif 為例,希望瀏覽器選擇一款非襯線字體展示文字。但是我們可以通過修改瀏覽器的默認配置來使得 sans-serif 展示一款 serif 字體。

在 Chrome 的高級設(shè)置,自定義字體中,可以進行設(shè)置。

設(shè)置了這個,此時用戶代理,也就是瀏覽器會以用戶設(shè)置的字體為準(zhǔn)。

來源:
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概念 參考網(wǎng)頁字體Serif和Sans-serif的區(qū)別及瀏覽器字體的設(shè)置CSS Font知識整理總結(jié) 1.F...
    合肥黑閱讀 6,583評論 0 12
  • http://www.cnblogs.com/duanhuajian/archive/2013/01/31/288...
    ssRice閱讀 2,433評論 0 6
  • 之前寫過一篇關(guān)于Web字體簡介及使用技巧的文章: 你該知道的字體 font-family。 該篇文章基本沒有太多移...
    videring閱讀 954評論 0 1
  • 這篇文字里我會介紹50 個便于使用的 CSS2/CSS3 代碼片段給所有的WEB專業(yè)人員. 選擇IDE開發(fā)環(huán)境來存...
    JamHsiao_aaa4閱讀 1,888評論 0 3
  • 大家都知道,在不同操作系統(tǒng)、不同游覽器里面默認顯示的字體是不一樣的,并且相同字體在不同操作系統(tǒng)里面渲染的效果也不盡...
    陳_宣閱讀 2,069評論 0 7

友情鏈接更多精彩內(nèi)容