[小程序]設(shè)置view中字體水平垂直方向都居中

問(wèn)題

設(shè)置了text-align 和 line-height屬性 實(shí)現(xiàn)水平和垂直方向居中,在iOS端顯示正常居中。但在Android機(jī)型特別是小米手機(jī)上僅水平居中,垂直方向上會(huì)向上偏移。

解決方案

網(wǎng)上大佬表示:

  1. 單純使用CSS是無(wú)法解決的:
    即使解決了也是一種通過(guò)微調(diào)來(lái)實(shí)現(xiàn)的hack方法,因?yàn)槲淖衷赾ontent-area內(nèi)部渲染的時(shí)候已經(jīng)偏移了,而css的居中方案都是控制的整個(gè)content-area的居中
    簡(jiǎn)單說(shuō)就是:文字在渲染時(shí)本身就是偏移的。
    的確,自己嘗試了
    ① view中文字包裹text標(biāo)簽并設(shè)置為block屬性,用于設(shè)置居中布局 —— 不行
    ② 對(duì)view使用flex布局,設(shè)置內(nèi)部元素水平垂直方向都居中 —— 但無(wú)效果
    (補(bǔ)充: flex 可用于內(nèi)部多塊元素之間的布局設(shè)置,屬于外部設(shè)置。對(duì)于塊內(nèi)文字的布局設(shè)置這類內(nèi)部布局,使用flex并無(wú)效果,即使設(shè)置文字的為block屬性)

  1. 大佬認(rèn)為導(dǎo)致這個(gè)問(wèn)題的本質(zhì)原因可能是Android在排版計(jì)算的時(shí)候參考了primyfont字體的相關(guān)屬性(即HHead Ascent、HHead Descent等),而primyfont的查找是看font-family里哪個(gè)字體在fonts.xml里第一個(gè)匹配上,而原生Android下中文字體是沒(méi)有family name的,導(dǎo)致匹配上的始終不是中文字體,所以解決這個(gè)問(wèn)題就要在font-family里顯式申明中文,或者通過(guò)什么方法保證所有字符都fallback到中文字體。
    簡(jiǎn)單說(shuō)就是:Android下 對(duì)文字的排版方面沒(méi)有中文字體,導(dǎo)致渲染出來(lái)的不是中文字體。
  2. 根據(jù)這2個(gè)思路,給出2個(gè)解決方案:
    ① 針對(duì)Android 7.0+設(shè)備:<html>上設(shè)置 lang 屬性:<html lang="zh-cmn-Hans">,同時(shí)font-family不指定英文,如 font-family: sans-serif 。這個(gè)方法是利用了瀏覽器的字體fallback機(jī)制,讓英文也使用中文字體來(lái)展示,blink早期的內(nèi)核在fallback機(jī)制上存在問(wèn)題,Android 7.0+才能ok,早期的內(nèi)核下會(huì)導(dǎo)致英文fallback到Noto Sans Myanmar,這個(gè)字體非常丑。
    ② 針對(duì)MIUI 8.0+設(shè)備:設(shè)置 font-family: miui 。這個(gè)方案就是顯式申明中文的方案,MIUI在8.0+上內(nèi)置了小米蘭亭,同時(shí)在fonts.xml里給這個(gè)字體指定了family name:miui,所以我們可以直接設(shè)置。

通過(guò)上述,自己嘗試了下

  1. HTML部分自己設(shè)置是 <html lang="zh-CN”>,說(shuō)明HTML 的lang只要是 zh的大類就行
  2. font-family 我原本設(shè)置的PingFang-SC-Regular, PingFang-SC,發(fā)現(xiàn)在IOS和三星手機(jī)上顯示還OK,不過(guò)在小米手機(jī)上 字體偏上比較明顯
    ( 個(gè)人覺(jué)得,line-height屬性在Android 顯示會(huì)偏上問(wèn)題,原因是
    ① 字體類型不是中文
    ② 小米手機(jī)中文類型需要特別處理,font-family: miui

PS:后來(lái)又嘗試使用flex布局 控制居中,發(fā)現(xiàn)在iOS和Android上顯示正常居中了,不清楚是否是小程序后來(lái)實(shí)現(xiàn)了兼容。

參考文章

Android瀏覽器下line-height垂直居中為什么會(huì)偏離?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 記得以前某某某天上午被設(shè)計(jì)師“調(diào)戲”了,記憶猶新啊,就是因?yàn)橐粋€(gè)項(xiàng)目(PC和移動(dòng))中的字體問(wèn)題,糾結(jié)了一上午,設(shè)計(jì)...
    Seven_Star閱讀 3,555評(píng)論 0 3
  • CSS字體樣式屬性 font-size:字號(hào)大小 font-size屬性用于設(shè)置字號(hào),該屬性的值可以使用相對(duì)長(zhǎng)度單...
    Arvin_zhea閱讀 1,909評(píng)論 0 1
  • 大家都知道,在不同操作系統(tǒng)、不同游覽器里面默認(rèn)顯示的字體是不一樣的,并且相同字體在不同操作系統(tǒng)里面渲染的效果也不盡...
    陳_宣閱讀 2,061評(píng)論 0 7
  • 一、概念 參考網(wǎng)頁(yè)字體Serif和Sans-serif的區(qū)別及瀏覽器字體的設(shè)置CSS Font知識(shí)整理總結(jié) 1.F...
    合肥黑閱讀 6,573評(píng)論 0 12
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂愁,有人驚喜有人失落,有的覺(jué)得收獲滿滿有...
    陌忘宇閱讀 8,832評(píng)論 28 54

友情鏈接更多精彩內(nèi)容