同样line-height下ios和Android显示不一致的问题

问题:

当我们设置文字垂直居中时,一般会设置line-heigh于box的高度一致,这是我们很难看出有什么差别。当我们设置icon和文字同时上下居中时,同样的line-height,会发现ios和Android显示不一致,Android会显得偏高

原因:

这个问题通过css是无法解决的,即使解决了也是一种通过微调来实现的hack方法,因为文字在content-area内部渲染的时候已经偏移了,而css的居中方案都是控制的整个content-area的居中。导致这个问题的本质原因可能是Android在排版计算的时候参考了primyfont字体的相关属性(即HHead Ascent、HHead Descent等),而primyfont的查找是看font-family里哪个字体在fonts.xml里第一个匹配上,而原生Android下中文字体是没有family name的,导致匹配上的始终不是中文字体,所以解决这个问题就要在font-family里显式申明中文,或者通过什么方法保证所有字符都fallback到中文字体。

解决方法

1.针对Android 7.0+设备:

1.1上设置 lang 属性:

,同时font-family不指定英文,如 font-family: sans-serif 。这个方法是利用了浏览器的字体fallback机制,让英文也使用中文字体来展示,blink早期的内核在fallback机制上存在问题,Android 7.0+才能ok,早期的内核下会导致英文fallbackNoto Sans Myanmar,这个字体非常丑。

1.2 在需要的标签上设置lang

 <div lang="zh-cmn-Hans">div>

2.针对MIUI 8.0+设备:

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

3.奇数导致(不一定有效)

因为行高或字体大小是奇数导致的

参考:
作者:周祺
链接:https://www.zhihu.com/question/39516424/answer/274374076

你可能感兴趣的:(工作中遇到的问题,css,icon和文字对不齐,line-height安卓问题,ios与Android不一致)