问题:

当我们设置文字垂直居中时,一般会设置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

更多相关文章

  1. eBook 功能模块二之设置模块Android
  2. Android(安卓)屏幕适配(修改系统字体大小、显示大小、修改分辨率
  3. android多国语言文件夹汇总
  4. android 获取字体宽高
  5. 有关谷歌Android和Java历史的一课
  6. 杂乱之android的字体相关类Typeface
  7. Android(安卓)Activity中启动另一应用程序的方法,无需类名
  8. Android(安卓)中的 values XML
  9. android资源配置文件

随机推荐

  1. Android(安卓)build.prop生成过程
  2. 约束布局ConstraintLayout的使用你知道吗
  3. 轻量级 Web 组件编译器 — Stencil
  4. PHP 使用钉钉发送群消息
  5. 彩虹发卡网源码+企业级发卡网源码+个人发
  6. 基于Vue的极简生成器 — Vuepress
  7. 飞舞的小球演示
  8. JQuery长按事件
  9. h5页面在ios机上禁止长按复制
  10. 0518作业