前端如何保證 ui 效果一致性?

前端開發時經常會碰到需要還原設計稿而帶來的兼容性的問題,有的問題可以根據不同的機型不同的系統做出調整,而有的問題則需要工程師有很深的功底才可解決,如何在不同的客戶端保證一致的效果也是前端工程師的一項基本能力。

如果有一天設計師設計了 500 字重的字體,那么,我們該如何實現呢?

首先,碰到這個問題的時候我們應該想到,有的客戶端系統預設是沒有 500 字重的,也就是說設計師給出的 500 的字重效果相當于 normal 的字重。

那么我們該如何解決呢?

針對以上問題,我們可以想到兩種方案:

  1. 將文本導成圖片

  2. 使用字體文件

我們下面來看看這兩種方法:

文本導成圖片

使用圖片代替文字,制作和維護的成本都很高。前期切圖并合并處理成雪碧圖比較繁瑣;后期修改和維護比較麻煩,還會帶來更多的帶寬的消耗;用戶也無法對文字進行選擇、復制等操作。

字體文件

通過 css 方式引入外部字體文件,可使開發者在網頁中使用系統中沒有安裝的字體。只需將字體包安裝在服務器上,當用戶加載網頁時,字體包會自動下載到用戶機器上,保證字體能夠正確渲染。

但是由于中文數量太大,導致中文包體積過大,通常會有幾 M 大小,不適合在項目中使用,尤其是移動端項目,由于字體加載緩慢,嚴重影響用戶體驗。

對于移動端項目,我們可以考慮使用自動化工具,來實現在移動端使用指定的字體。

如何引入外部字體文件?

可通過使用 @font-face 引入外部字體。

@font-face{
 
  font-family:'HansHandItalic';
 
  src:url('fonts/hanshand-webfont.eot');
 
  src:url('fonts/hanshand-webfont.eot?#iefix') format('embedded-opentype'),
 
  url('fonts/hanshand-webfont.woff') format('woff'),
 
  url('fonts/hanshand-webfont.ttf') format('truetype'),
 
  url('fonts/hanshand-webfont.svg#webfont34M5alKg') format('svg');
 
  font-weight:normal;
 
  font-style:normal;
 
}

font-family 表示自定義字體的名字,src 表示加載字體文件的位置,多個 url 是為了解決瀏覽器兼容問題。

字體后綴和瀏覽器相應關系,如下所示:

  • .TTF或.OTF,適用于Firefox3.5、Safari、Opera

  • .EOT,適用于InternetExplorer4.0+

  • .SVG,適用于Chrome、IPhone

字體和瀏覽器關系

使用時調用 font-family

body{
 
  font-family:'HansHandItalic';
 
  font-size:16px;
 
}

使用 CSS 引入外部字體有什么好處呢?

  1. 使用的是真正的文本,而不是圖片,放大和縮小都不會影響渲染效果,用戶體驗好;

  2. 可以被搜索引擎辨認;

  3. 不像圖片每次需要重新生成,添加刪除更方便。

現在我們來看看自動化工具:

Font-Spider

Font-Spider 是一個中文 WebFont 自動化壓縮工具,它能自動分析頁面 CSSHTML 使用的 WebFont 并進行按需壓縮,同時生成跨瀏覽器使用的格式。

我們在項目中可以直接使用 grunt 和 gulp 的插件實現壓縮。

/*聲明 WebFont*/
@font-face {
  font-family: 'pinghei';
  src: url('../font/pinghei.eot');
  src:
    url('../font/pinghei.eot?#font-spider') format('embedded-opentype'),
    url('../font/pinghei.woff') format('woff'),
    url('../font/pinghei.ttf') format('truetype'),
    url('../font/pinghei.svg') format('svg');
  font-weight: normal;
  font-style: normal;
}

/*使用選擇器指定字體*/
.home h1, .demo > .test {
    font-family: 'pinghei';
}

注意: @font-face 中的 src 定義的 .ttf 文件必須存在,其余的格式將由工具自動生成

特性:
  1. 按需壓縮:從原字體中剔除沒有用到的字符,可以將數 MB 大小的中文字體壓縮成幾十 KB

  2. 簡單可靠:完全基于 HTML 與 CSS 分析進行本地處理,無需 js 與服務端輔助

  3. 自動轉碼:將字體轉碼成所有瀏覽器支持的格式,包括老舊的 IE6 與現代瀏覽器

  4. 圖標字體:除了常規的字體支持外,還支持圖標字體(字蛛 v1.0.0 新特性)

使用場景限制:
  1. 僅支持固定的文本與樣式,不支持 javascript 動態插入的元素與樣式

  2. .otf 字體需要轉換成 .ttf 才能被壓縮

  3. 僅支持 utf-8 編碼的 HTML 與 CSS 文件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容