回想2年前剛開始接觸手機項目,接到PSD稿后,發現視覺設計師們喜歡用微軟雅黑作為中文字體進行設計,於是我寫頁面的時候也定義 font-family 為微軟雅黑,后來發到線上后,細心的產品經理發現頁面的字體不是微軟雅黑,要求馬上修改,我就驚呆了,還跟產品爭執一番。
后來了解到的手機系統 ios、android 等是不支持微軟雅黑字體,為了滿足產品的需要,保證視覺稿的還原度,手機端是如何定義微軟雅黑字體呢?
相信大家會想到 @font-face 定義為微軟雅黑字體並存放到 web 服務器上,在需要使用時被自動下載
@font-face { font-family: 'MicrosoftYaHei'; src: url('MicrosoftYaHei.eot'); /* IE9 Compat Modes */ src: url('MicrosoftYaHei.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('MicrosoftYaHei.woff') format('woff'), /* Modern Browsers */ url('MicrosoftYaHei.ttf') format('truetype'), /* Safari, Android, iOS */ url('MicrosoftYaHei.svg#MicrosoftYaHei') format('svg'); /* Legacy iOS */ }
有關 @font-face 的使用,大漠的這篇《CSS3 @font-face》有詳細的介紹。
雅黑字體問題雖然解決了,但也帶來了影響,一來消耗用戶的流量,二來對頁面的打開速度造成了延遲。
總感覺不好,為了說服產品經理,找了三大手機系統的字體資料:
ios 系統
android 系統
- 默認中文字體是Droidsansfallback
- 默認英文和數字字體是Droid Sans
- 無微軟雅黑字體
winphone 系統
- 默認中文字體是Dengxian(方正等線體)
- 默認英文和數字字體是Segoe
- 無微軟雅黑字體
並做了個小測試,下圖為測試機 iphone 4s、三星 GT-N7000 android 2.3.6、HTC windows Phone 8.0 三種手機中的默認中文字體和英文字體展現:
我們可以看出三種不同的中文字體和微軟雅黑一樣是無襯線字體,有無襯線只是一個小原因,而無論頁面中使用哪種字體,肉眼很難看出它們的差異,對產品的體驗幾乎沒有影響。
有關襯線字體和無襯線字體的差別,參考下圖:
那么,使用系統默認的字體所達到的視覺效果跟使用微軟雅黑字體沒有明顯的差別,權衡利弊,最終說服了產品經理放棄使用微軟雅黑的想法。
結論
- 各個手機系統有自己的默認字體,且都不支持微軟雅黑
- 如無特殊需求,手機端無需定義中文字體,使用系統默認
- 英文字體和數字字體可使用 Helvetica ,三種系統都支持
代碼:
/* 移動端定義字體的代碼 */ body{font-family:Helvetica;}
一點思考,如有疑問,歡迎大家和我討論。