安卓移动端line-height垂直居中出现偏移的解决方法

Posted 懒懒de尐彪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓移动端line-height垂直居中出现偏移的解决方法相关的知识,希望对你有一定的参考价值。

目前移动端在项目使用的rem,安卓手机上line-height属性,让它的值等于height,结果发现是不居中的。

出现此问题的原因是android在排版计算的时候参考了primyfont字体的相关属性(即HHead Ascent、HHead Descent等),而primyfont的查找是看`font-family`里哪个字体在fonts.xml里第一个匹配上,而原生Android下中文字体是没有family name的,导致匹配上的始终不是中文字体,所以解决这个问题就要在`font-family`里显式申明中文,或者通过什么方法保证所有字符都fallback到中文字体。

解决方法:

1、添加border相关属性:

  • border: 1px solid transparent;

2、针对Android 7.0+设备:

  • <html>上设置 lang 属性:<html lang="zh-cmn-Hans">,同时font-family不指定英文,如 font-family: sans-serif 。这个方法是利用了浏览器的字体fallback机制,让英文也使用中文字体来展示,blink早期的内核在fallback机制上存在问题,Android 7.0+才能ok,早期的内核下会导致英文fallback到Noto Sans Myanmar,这个字体非常丑。

3、针对MIUI 8.0+设备:

  • 设置 font-family: miui 。这个方案就是显式申明中文的方案,MIUI在8.0+上内置了小米兰亭,同时在fonts.xml里给这个字体指定了family name:miui,所以我们可以直接设置。

以上是关于安卓移动端line-height垂直居中出现偏移的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

移动端line-height问题

移动端图片文字垂直居中实现方法

移动端开发时,让字体小于12px垂直居中的方法

【重构笔记Vol.2】H5页面输入框光标垂直居中

笔记uc浏览器中以及移动端浏览器中元素垂直居中的方法

记录手机端h5页面碰到的一些问题