時間:2023-05-28 16:21:02 | 來源:網(wǎng)站運營
時間:2023-05-28 16:21:02 來源:網(wǎng)站運營
前端網(wǎng)頁字體優(yōu)化指南:日常開發(fā)網(wǎng)頁經(jīng)常會使用一些特殊字體,比如思源黑體、蘋方字體等,因為這些字體在一般的宿主環(huán)境中是不存在的,需要通過 css 的@font-face
定義,并從服務器中加載對應的字體文件,而字體文件一般都是比較大的,甚至有時候一個字體比其他所有的資源(js、css、圖片)加起來還要大,對網(wǎng)頁的加載性能起到非常關鍵的影響,因此有必要對字體進行一些優(yōu)化。 本文主要從字體格式、按需提取、統(tǒng)一渲染三個方面來談談優(yōu)化字體的常用技巧。cat font.ttf | ttf2woff2 > font.woff2
因為使用 了 cat 命令來提取 ttf 的內(nèi)容,如果你使用的是 windows ,需要使用 git bash 或 wsl 來運行。otf2ttf MyFont.ttf
里面的 MyFont.ttf 應該是 MyFont.otf 才對,因為這個 input 應該是 OTF 類型而不是 TTF 。關于字體轉換的這里再啰嗦一下:有時候美術同學還會提供 ttc 文件給我們,這不是單個字體,而是將多種字體打包在一起了,需要從中提取出 ttf 后才能使用,可以嘗試使用 TTC2TTF。
0-9
這 10 個數(shù)字用到某種特殊字體,如果把整個字體文件引入就沒有必要了,比切10個圖片還要大。好在有一些技術能夠?qū)?0-9
這10個數(shù)字對應的字體子集提取出來。我平時會使用 font-spider 字蜘 來提取。npm install font-spider -g
然后,新建一個 html 文件,比如文件名為 index.html
,里面用一個元素包含所有的你想要提取的文字,比如 0-9,并為這個元素定義上你想要的特殊字體:<h1>0123456789</h1><style>@font-face { font-family: 'sourceHan'; src: url('./SourceHanSansCN-Regular.ttf'); font-weight: normal; font-style: normal;}h1 { font-family: 'sourceHan';}</style>
最后,在這個 html 文件所在的目錄執(zhí)行以下命令:font-spider index.html
這時候,原來的 SourceHanSansCN-Regular.ttf
就會被移動到 .font-spider/
目錄下,而原來位置的字體會被替換成只提取了 0-9
的字體文件。這個體積相差了好幾個數(shù)量級的:0-9
10 個數(shù)字的字體文件只有 7K:@font-face { font-family: myfont; src: url('./myfont.woff2') format('woff2');}body { font-family: myfont;}
假如這個 myfont.woff2 文件大小為 4M,而網(wǎng)絡下載速度只有 1M/s ,則加載這個字體需要 4 秒鐘。這4秒期間由于還沒有加載完成遠程字體,瀏覽器會使用什么字體渲染呢?事實上,不同的瀏覽器表現(xiàn)會不一樣的,以下是一些常見的桌面瀏覽器的表現(xiàn):@font-face { font-family: 'myfont'; src: url('./myfont.woff2') format('woff2');}
注意,CSS 中只需要定義字體就行,而不要使用使用這個字休。
custom.families
列表中,并在 active 回調(diào)中將該字體添加到對應的元素上,代碼如下:<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script><script>WebFont.load({ custom: { families: ['myfont'], }, classes: false, active() { document.body.style.fontFamily = 'myfont'; },});</script>
這樣瀏覽器一開始就會使用默認字體渲染內(nèi)容,等字體加載完成后再使用特殊字體重新渲染。關鍵詞:指南,字體
微信公眾號
版權所有? 億企邦 1997-2025 保留一切法律許可權利。