android 中文字體向上偏移解決方案

android 中文字體向上偏移解決方案

在開發 webapp 時,發如今 android 端的中文會莫名其妙的向上偏移。爲了解決這個問題,嘗試了不少方法,最後使用如下解決方案。

1.bug 出現

目前在開發 webapp,在調試的時候,發現項目裏面的中文有一點向上偏移。具體表現爲:使用開發者工具去查看元素,元素的真實高度和位置與文字不一樣。列如,一個spanfont-sizeline-height都設置爲16px,在調試時,元素的高度確實是16px,可是,中文的高度看起來並不止16px,並且顯示的位置明顯超出了元素的尺寸範圍,向上偏移。css

開始的時候還覺得是樣式致使的,因而嘗試各類修改 css,可是徹底沒有用。後來在網上看到用「定位」或者「上邊距」來強制文字的位置,可是發現這個方法太麻煩了,最終放棄這個方案。
後來想到使用的是ubuntu,懷疑多是系統默認字體的緣由致使了這個問題。因而下載了一個字體文件(用的是「思源黑體」)。而後配置全局字體,發現能夠解決這個問題。html

2.第二個問題出現

雖然使用自定義字體解決了中文文字偏移的問題,可是因爲字體文件太大致使性能很不理想。不管是將字體文件放到服務器仍是使用 cdn 都不理想。最終找到了fontmin這個插件。這個插件的原理是將字體文件中的字符集進行篩選,生成的新的字體文件中,只包含要使用到的文字字符集。node

3.最終的方案

雖然fontmin能夠進行字符集篩選,可是項目中到底須要哪些中文文字是不肯定的。但沒有關係,通過實驗,使用一個只有0這個字符集的字體文件一樣能夠解決咱們最初的問題。下面來看實現步驟。android

3.1 字體下載

到網上下載一箇中文字體,這裏我使用的是google fonts。先測試一下,直接引用這個字體後,是否能夠解決字體偏移。能夠的話,進行下一步。web

3.2 安裝 fontmin

這裏不推薦全局安裝,在項目裏面安裝便可。npm

npm install fontmin -D

而後編寫配置文件。這裏我是寫在項目根目錄的。ubuntu

// 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;
}
相關文章
相關標籤/搜索