自定義字體@font-face的常見應用

2021-02-20 工程師加一

前言

@font-face允許網頁自帶字體,從而消除對用戶電腦字體的依賴。基本用法如下:

@font-face {    font-family: "family-name";     src: url("family-name.eot");     src: url("family-name.eot?#iefix") format("embedded-opentype"),          url("family-name.woff") format("woff"),          url("family-name.ttf") format("truetype"),          url("family-name.svg#family-name") format("svg");         unicode-range: <urange>;     font-weight: normal;      font-style: normal;  }

當頁面中用到這個字體,且用戶設備中沒有這個字體,就會從@font-face中指定的路徑下載字體文件。以下幾點請注意:

1.因各瀏覽器對字體的兼容不同,需要同時備有多種字體樣式,請參考瀏覽器兼容情況;

2.字體文件的路徑需要和網頁在同一域名下,否則需要做跨域處理;

3.unicode-range設置只使用該字體的個別字符,有一定實用性,請參考文檔使用;

本文列舉@font-face的常見應用。

自定義字體

@font-face最原始的應用場景,就是使用用戶電腦裡沒有的字體。舉例:

某狗電商網站,使用@font-face引入方正字體。CSS中的@font-face依次配置了eto、woff、truetype、svg四種格式,格式參考上文。Chrome選擇下載woff格式,其餘格式不下載。文件地址來自misc.360buyimg.com域名,與頁面自身域名不一致,使用Cors跨域。至此,字體已下載到用戶的設備中了,可以直接在css中使用通過font-family調用。

成套的中文字體包含大量字符,文件通常都比較大,動輒幾M的字體文件會拖累頁面加載速度,影響用戶體驗。上述這個頁面中,使用到方正字體的只有28個漢字,因此對字體進行了子集化的處理,精簡後文件大小只有6.47K。關於字體子集化,請參考我的上一篇博客。

自定義圖標

@font-face的另一個常見應用,是取代圖片格式的圖標,舉例:

某鳥社交網站的LOGO是一隻藍色小鳥,查看這個小鳥源碼,發現這個元素使用一個空的<i>標籤。該標籤中有一個::before偽元素,內容是"/f179",字體名是"edgeicons"。我們找到頁面資源,下載這個字體,用字體編輯軟體打開,找到unicode編碼為f179的字形:

可以看到,這個字形就是該網站的LOGO,因此頁面中的這個字就會顯示成LOGO的形狀。使用字體繪製圖標不僅比圖片要更小,減少請求次數,還可以通過font-size矢量縮放大小,通過color設置圖標顏色,使用起來也是非常便捷。

在線製作的字形圖標的工具,國外用戶推薦fontello,國內用戶推薦iconfont。

反爬蟲抓取

第一次聽到字體竟然可以用於反爬蟲,誰都會大吃一驚。先看例子:

某駱駝訂票網站,頁面上價格明明就是1590,查看源碼怎麼就變成1580了?繼續查css,發現此處使用@font-face引入一個自定義字體如下:

原來,狡猾的工程師把自定義字體中的字符「8」,形狀繪製成「9」的形狀。這樣頁面中用到這個字體的所有8,都會顯示為9。注意這裡字體每次都會動態生成,並配合生成頁面內容,使得用戶頁面上看到的形狀都是「1590」,從而理解到正確的價格。而蠢萌的爬蟲抓取到的內容,則是錯誤的1580。

在許多競爭激烈的行業,價格這種敏感數據,不能輕易被友商的爬蟲抓取。不過所謂道高一尺、魔高一丈,某貓電影票也使用這種反爬蟲策略,但網上已經出現了對頁面截圖、並進行圖象識別的python腳本。

其他腦洞

受限於公眾號不能直接修改網頁源碼, 有些效果展示不了。有興趣的朋友可以點擊原文連結,跳轉到我博客上的原文,了解一下自定義字體的其他應用。

相關焦點

  • Android應用使用自定義字體的一些探究
    因為我們的開發模式,所以需要研究在界面內的字體自定義,以及webview的顯示中的字體自定義。android系統內置字體android 系統本身內置了一些字體,可以在程序中使用,並且支持在xml配置textView的時候進行修改字體的樣式。
  • 前端引用字體@font-face的若干優化方法
    之前在開發的時候使用了一些自定義字體,這裡總結下自己尋找的的一些處理辦法。本文只列出了引入本地字體,網絡的字體由於實踐不多,這裡介紹就少一些。😂 獻醜了 😂2、 正 文2.1 本地字體2.1.1 版 權首先一定要注意這個問題2.1.2 字體定義一般情況定義如下:@font-face { font-family:"Regular"; src:url
  • 網絡字體@font-face 如何處理網頁中的特殊字體
    在CSS2.0 規範中有一個東西,@font-face(IE4.0就存在),後來在 CSS2.1 草案中又被刪掉。後來又被納入到CSS3草案當中。這個東西就是今天要跟大家分享的東西——自定義網絡字體。網絡字體的支持程度(截止到2015年04月29日)我們可以使用該屬性進行自定義字體的設置,換句話說,使用它之後,我們就能夠在網絡中自由的使用自定義字體,先來看其基本的語法:@font-face {font-family: <YourWebFontName>;src: <source> [<format
  • 自定義字體的引入方法
    應某人的要求寫一個關於自定義字體引入的方法,@font-face是css3中的一種規則。
  • CSS @font-face性能優化
    這樣就可以使我們的網頁用上自定義字體了。通常情況下,只有當我們的頁面元素用到了font-face中定義的字體的情況下,才會下載對應的字體。注意: 這裡我們說了是通常情況,這是因為,IE8在只要是定義了font-face,即使頁面元素沒有使用對應的字體,也會下載。
  • 真正了解 CSS3 背景下的 @font face 規則
    很多人只要一提到@font face規則,心中就會不由自主「哦~~」的一聲:「這個我知道,可以用來生成自定義字符小圖標!」
  • 聊一聊「@font-face」
    @font-face 和 EOT 的是同一家公司 - 微軟。早在九十年代 CSS 就有了自定義字體的語法,IE4是首個實現此語法的瀏覽器,沒錯,就是IE。不過,字體格式只能是微軟自己開發的 EOT(Embedded Open Type) 格式。EOT 允許字體的作者保護字體不被非法複製,微軟不允許其他瀏覽器廠商使用該格式,因此它只能在 IE 下使用。這對當時來說太超前了。還記得在 windows XP 下看使用了『微軟雅黑』的網頁嗎?
  • | HTML字體標籤
    定義與用法語法格式<font>……</font>示例代碼
  • font-display的用法
    目前我們解決這類問題的方法是使用JavaScript-based腳本(比如 Font Face Observer)來跟蹤字體是否被下載。在字體被下載完成前,我們使用瀏覽器自帶的字體來顯示文本,直到我們通過JavaScript探測到字體下載完成,我們給我們的文檔添加一個CSS類來應用我們的自定義字體。這種方法我們之前有過詳細介紹。
  • Web 性能優化:使用 CSS font-display 控制字體加載和替換
    後來,CSS 開始支持 @font-face 這個指令,可以加載自定義的字體文件,這個時候可以把字體隨網站一起發布,用戶在瀏覽網站的時候,會下載 @font-face 中指定的字體。例如下邊的代碼加載了 fonts 目錄下的 Raleway 字體:@font-face {  font-family: 'Raleway';  font-style: normal;  font-weight: 500;  src: url(/fonts/raleway.woff2) format('woff2
  • 【Web API 教程】— FontFace API
    family:字符串,表示字體名,寫法與 CSS 的@font-face的font-family屬性相同。source:字體文件的 URL(必須包括 CSS 的url()方法),或者是一個字體的 ArrayBuffer 對象。descriptors:對象,用來定製字體文件。該參數可選。
  • 圖標字體 VS 雪碧圖——圖標字體應用實踐
    生成幾種規格的字體使用的時候通過@font-face引入,根據圖標的編碼就可以在頁面中使用了。使用PSD to SVG增加便利 現在重點說下,圖標字體的使用和一些注意事項圖標字體的使用 通過font-face導入自定義字體,可以參考字體下載後的demo。
  • 讓你的網站用上炫酷的中文字體
    作者 | 米開朗基楊隨著當前 Web 技術的日新月異,網頁界面內容越來越豐富,讓人眼花繚亂,其中就包括了網頁中的各種自定義字體。EOT 字體是 IE 瀏覽器的首選格式,其他瀏覽器都不支持;其他瀏覽器更鍾愛常見的 TTF、SVG、WOFF。
  • Web-Fontmin -- 在線提取你需要的字體
    關於 @font-face@font-face 是 CSS3 中的一個模塊,使用 @font-face 可以自定義網頁字體
  • 設計師的春天:中文WebFont解決方案Font-Spider(字蛛) - 騰訊ISUX
    導致網頁不支持選中、複製、搜索、翻譯、矢量縮放,也會影響視障用戶使用讀屏器操作網頁。3.帶來更多帶寬消耗。導出的圖片體積隨著文本面積增加,且字形無法重複利用,這消耗著大量的伺服器資源。WebFont技術提供了在網頁使用特殊字體的可能,從而避免用圖片的方法。它的實現方法是通過CSS的@font-face引入字體。
  • Web 中文字體性能優化實踐
    使用 web 自定義字體—在聊這兩個問題之前,我們先簡述怎樣使用一個 Web 自定義字體。要想使用一個自定義字體,可以依賴 CSS Fonts Module Level 3 定義的 @font-face 規則。
  • 微信小程序開發 | 如何在小程序中使用自定義 icon 圖標
    為了解決這個問題,我們可以使用自定義的 icon 圖標,來豐富原有的圖標類型。在微信小程序中使用自定義 icon 圖標有 6 種方法:本文只對第 4 種方法進行說明,因為除了第 1 種方法,其他方法我暫時還都不會。使用矢量字體來自定義 icon 圖標,需要用到阿里巴巴圖標庫網站 Iconfont[1]。
  • 【CSS Trick】font-family 繼承失效了?
    CSS 屬性 font-family 允許您通過給定一個有先後順序的,由字體名或者字體族名組成的列表來為選定的元素設置字體。屬性 font-family 列舉一個或多個由逗號隔開的字體族,語法如下:/* 一個字體族名和一個通用字體族名 */font-family: "Gill Sans Extrabold", sans-serif;font-family: "Goudy Bookletter
  • 【Web技術】772- Web 中文字體性能優化實踐
    使用 web 自定義字體—在聊這兩個問題之前,我們先簡述怎樣使用一個 Web 自定義字體。要想使用一個自定義字體,可以依賴 CSS Fonts Module Level 3 定義的 @font-face 規則。
  • 如何優雅的選擇字體(font-family)
    ·Arial:Win平臺上默認的無襯線西文字體(為什麼要說英文字體後面會解釋),有多種變體,顯示效果一般。·Tahoma:十分常見的無襯線字體,被採用為Windows 2000、Windows XP、Windows Server 2003及Sega遊戲主機Dreamcast等系統的預設字型,顯示效果比Arial要好。