- Web 服務(wù)器返回的 HTTP 頭中的 Content-Type: text/html; charset=”"的編碼
- 網(wǎng)頁(yè)本身 meta header 中的 charset 部分
- 瀏覽器菜單里一般允許用戶強(qiáng)制指定編碼
- 部分瀏覽器 (比如 Firefox) 可以選擇編碼自動(dòng)檢測(cè)功能,使用基于統(tǒng)計(jì)的方法判斷未定編碼。
1. 點(diǎn)陣字體(Bitmap Fonts)
2. 輪廓字體(Outline Font)
2-1. Postscript字體
2-2. TrueType字體
2-3. OpenType字體
3.筆畫字體(Stroke-based font)
4.metaFONT 如何理解點(diǎn)陣字體和輪廓字體的區(qū)別呢,其實(shí)它們的表現(xiàn)和圖片格式中的png8和png24的的區(qū)別很類似,點(diǎn)陣字體都是實(shí)色,沒有過(guò)渡色,邊緣銳 利,而輪廓字體有過(guò)渡色,邊緣也比較平滑。很多人把”宋體”(simsun)當(dāng)作點(diǎn)陣字體,其實(shí)不是,它和”微軟雅黑”(microsoft yahei)一樣,都屬于輪廓字體,只不多12px~17px的宋體內(nèi)置了點(diǎn)陣信息而已。 如果按照字形來(lái)分的話,字體又可以分為:
- 襯線(serif)
- 非襯線(sans-serif)
- 等寬字體(monospace )
- 書寫體(cursive)
- 夢(mèng)幻體(fantasy)
常見的非襯線有:
而系統(tǒng)所包含哪些字體跟什么有關(guān)呢?當(dāng)我們想用一種字體,但不確認(rèn)這個(gè)字體是否是系統(tǒng)已有的,怎么去確認(rèn)呢? 首先系統(tǒng)所包含字體不只和系統(tǒng)預(yù)裝的字體有關(guān),還和系統(tǒng)上安裝哪些軟件有關(guān),微軟操作系統(tǒng)下,詳細(xì)的系統(tǒng)和一些軟件包含的字體可以查看這個(gè)索引:Microsoft typography,Mac系統(tǒng)可以查看這個(gè)索引:List of typefaces included with OS X 再讓我們回到網(wǎng)頁(yè)中,CSS里如果font-family未設(shè)置中文字體時(shí),我們知道是根據(jù)瀏覽器默認(rèn)的字體來(lái)顯示,找到瀏覽器對(duì)應(yīng)的設(shè)置,你也可以手動(dòng)修改這些。 1 p{font:12px/24px Tahoma;} 2 p{font:12px/24px Arial;} 以上兩種寫法按照前面我們所說(shuō)的規(guī)則來(lái)說(shuō),在同一個(gè)系統(tǒng)和瀏覽器中匹配的是唯一的字體,那么它們的顯示還會(huì)有區(qū)別嗎?看看下面Windows系統(tǒng)下部分瀏覽器的測(cè)試結(jié)果: 仔細(xì)看,你會(huì)發(fā)現(xiàn)IE6,IE8,Chrome,Firefox下文字底部不在同一水平線上的。所以由此得知:英文字體不會(huì)影響中文的字形,但會(huì)影響其位置。可是…為什么會(huì)影響位置呢?我們?cè)賮?lái)看下網(wǎng)頁(yè)中的文字的位置到底是怎么被控制的: 默認(rèn)的規(guī)則是:用行高(line-height)減去內(nèi)容區(qū)(content area)的高度所得到的值一分為二,各放在內(nèi)容區(qū)的上面和下面,但不同瀏覽器的渲染不同,并且結(jié)合上面的測(cè)試結(jié)果,就算內(nèi)容區(qū)的位置是相同的,文字在內(nèi)容區(qū)的位置還可能不同。
而影響文字在內(nèi)容區(qū)的位置的因素有下面幾個(gè),也就是說(shuō)這也不是統(tǒng)一的。
- 字體類型
- 排版引擎
- 瀏覽器
對(duì)比圖片來(lái)看看它們之間的區(qū)別,其中上圖為FacitWeb字體,下圖為 Minion Pro字體。 Core Text 渲染引擎 DirectWrite渲染引擎 GDI渲染引擎,開啟ClearType GDI渲染引擎,標(biāo)準(zhǔn)抗鋸齒(Standard antialiasing) GDI渲染引擎,無(wú)抗鋸齒(no antialiasing) 注:iOS和Mac的渲染引擎一樣,但采用的是灰度渲染,默認(rèn)情況下亞像素抗鋸齒是關(guān)閉的,但可以通知設(shè)置開啟。 所以不同系統(tǒng)因?yàn)殇秩疽娴牟煌?,?dǎo)致文字在細(xì)節(jié)上也表現(xiàn)不同,在這里順便說(shuō)下微軟和蘋果兩家公司對(duì)于字體表現(xiàn)的不同風(fēng)格,蘋果公司更專注于還原字形設(shè)計(jì)的本來(lái)面貌,使字形更優(yōu)雅、平滑。而微軟則更傾向字體的清晰,可讀性。 瀏覽器 確認(rèn)了排版引擎,我們?cè)賮?lái)看看瀏覽器,瀏覽器會(huì)有布局引擎,它來(lái)決定是怎樣用html結(jié)構(gòu),css樣式表來(lái)你渲染網(wǎng)頁(yè)。布局引擎和網(wǎng)站外觀表現(xiàn)是息 息相關(guān)的,但是對(duì)于字形渲染,絕大部分還是由操作系統(tǒng)的文本渲染引擎來(lái)控制的,這就很好的解釋了為什么同樣的瀏覽器,在不同的操作系統(tǒng)下有不同的字形表 現(xiàn),見下圖: Windows下各瀏覽器所使用的渲染模式。 光柵化 當(dāng)確定了編碼、字體類型、排版引擎、瀏覽器后,就要進(jìn)行光柵化過(guò)程了,光柵化是將文字從一個(gè)向量表示(比如一個(gè)TrueType字體)轉(zhuǎn)化到光柵或 者位圖表示的過(guò)程。在這個(gè)過(guò)程中往往涉及到一些抗鋸齒技術(shù)來(lái)使得屏幕上的字體更加平滑易讀,這也經(jīng)常會(huì)涉及到”字體微調(diào)(font hinting)”技術(shù)。 總結(jié) 現(xiàn)在再回過(guò)頭來(lái)說(shuō)說(shuō)研究字體渲染的初衷,細(xì)節(jié)控對(duì)于不同瀏覽器像素級(jí)統(tǒng)一有時(shí)候要求是很極致,研究的目的是想做出一套方法來(lái)實(shí)現(xiàn)它們的統(tǒng)一??涩F(xiàn)在 我們知道,這和字體類型、系統(tǒng)排版引擎、瀏覽器都有關(guān)系,并且排版引擎有多種,這里還沒有加上Linux,Android系統(tǒng),瀏覽器就更不用說(shuō)了,如果 再加上移動(dòng)端,就更復(fù)雜了。所以完美的方案是近乎沒有的,就算寫一大堆的hack。 如果再跳出來(lái)看這個(gè)問(wèn)題,我們真的一定需要讓不同瀏覽器在字體渲染方面的表現(xiàn)完美一致嗎,其實(shí)普通的用戶不是專門測(cè)試人員,不會(huì)打開所有瀏覽器對(duì)比 區(qū)別,所以細(xì)微的差別對(duì)普通用戶來(lái)說(shuō)幾乎是無(wú)法感知的,是的,我這里說(shuō)的是”細(xì)微”,但是如果差別比較離譜,這些導(dǎo)致表現(xiàn)不同的原因都不會(huì)成為借口。