這篇文章主要介紹了詳解android 中文字體向上偏移解決方案,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
在開發 webapp 時,發現在 android 端的中文會莫名其妙的向上偏移。爲了解決這個問題,嘗試了很多方法,最後使用以下解決方案。
1.bug 出現
目前在開發 webapp,在調試的時候,發現項目裏面的中文有一點向上偏移。具體表現爲:使用開發者工具去查看元素,元素的真實高度和位置與文字不同。列如,一個span
的font-size
和line-height
都設置爲16px
,在調試時,元素的高度確實是16px
,但是,中文的高度看起來並不止16px
,而且顯示的位置明顯超出了元素的尺寸範圍,向上偏移。
開始的時候還以爲是樣式導致的,於是嘗試各種修改 css,但是完全沒有用。後來在網上看到用“定位”或者“上邊距”來強制文字的位置,但是發現這個方法太麻煩了,最終放棄這個方案。
後來想到使用的是ubuntu
,懷疑可能是系統默認字體的原因導致了這個問題。於是下載了一個字體文件(用的是“思源黑體”)。然後配置全局字體,發現可以解決這個問題。
2.第二個問題出現
雖然使用自定義字體解決了中文文字偏移的問題,但是由於字體文件太大導致性能很不理想。無論是將字體文件放到服務器還是使用 cdn 都不理想。最終找到了fontmin這個插件。這個插件的原理是將字體文件中的字符集
進行篩選,生成的新的字體文件中,只包含要使用到的文字字符集。
3.最終的方案
雖然fontmin
可以進行字符集篩選,但是項目中到底需要哪些中文文字是不確定的。但沒有關係,經過實驗,使用一個只有0
這個字符集的字體文件同樣可以解決我們最初的問題。下面來看實現步驟。
3.1 字體下載
到網上下載一箇中文字體,這裏我使用的是google fonts。先測試一下,直接引用這個字體後,是否可以解決字體偏移。可以的話,進行下一步。
3.2 安裝 fontmin
這裏不推薦全局安裝,在項目裏面安裝即可。
npm install fontmin -D
然後編寫配置文件。這裏我是寫在項目根目錄的。
// fontmin-config.js var Fontmin = require("fontmin") var srcPath = "./src/assets/fonts/my-font.ttf" // 字體源文件 var destPath = "./src/assets/font-output/" // 輸出路徑 var text = "0" // 篩選的字符集 var fontmin = new Fontmin() .src(srcPath) // 輸入配置 .use( Fontmin.glyph({ text: text }) ) .dest(destPath) // 輸出配置 fontmin.run(function(err, files, stream) { if (err) { console.error(err) } console.log("done") })
然後執行
cd your-project-dir node ./fontmin-config.js
3.3 配置 css
// global.css @font-face { font-family: "my-font"; src: url("../fonts/my-font.ttf"); } html,body{ font-family: "my-font", sans-serif; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。