出现问题

这几天在做移动端页面,研究了一下手淘的 flexible.js 并在自己项目中试行了一下,然后发现了一个纠结无比的问题,即:css里设置了字体大小,但是显示却非常诡异,用 “诡异” 来形容是因为这个问题在定位的时候真的无迹可寻。

探查原因

后来接触到了一个概念,终于了解了问题的本来面目。这个概念叫做 “Font Boosting”(文字爆炸)。

当 viewport 的 initial-scale 为 1时,不会涉及这个问题。

而 flexible.js 会依据 window.devicePixelRatio 值来对页面进行缩放

这时候,webkit 内核在移动端浏览器提供的 “Font Boosting” 属性开始起作用了,它会对字体进行放大,以便让人们方便的查看文本。

其计算规则如下:

multiplier = Math.max(1, deviceScaleAdjustment * textScalingSlider * systemFontScale * clusterWidth / screenWidth);
if (originFontSize < 16) {computedFontSize = originFontSize * multiplier;
}
else if (16 <= originFontSize <= (32 * multiplier - 16)) {computedFontSize = (originFontSize / 2) + (16 * multiplier - 8);
}
else if (originFontSize > (32 * multiplier - 16)) {computedFontSize = originFontSize;
}
  • originFontSize: 原始字体大小
  • computedFontSize: 经过计算后的字体大小
  • multiplier: 换算系数
  • deviceScaleAdjustment: 变量(1.05 - 1.3),有专门的计算规则,当指定 viewport 的 width=device-width 时此值为 1
  • textScalingSlider: 浏览器中手动指定的缩放比例,默认为 1
  • systemFontScale: 系统字体大小,Android设备可以在「设备 - 显示 - 字体大小」处设置,默认为 1
  • clusterWidth: 应用 Font Boosting 特性字体所在元素的宽度
  • screenWidth: 设备屏幕分辨率(DIPs, Density-Independent Pixels),如 iPhone 5 为 320

问题解决

下面两个样式选择一个就可以解决问题

p{max-height: 100%} //给元素加一个高度
p{-webkit-text-size-adjust: none;} //禁用Webkit内核浏览器的文字大小调整功能

根源在于

  • Font Boosting 仅在未限定尺寸的文本流中有效,所以给元素指定高度,就可以避免 Font Boosting 被触发。但是文本流一般都是不固定高度的,所以我们可以一个最大高度。
  • 直接禁用调整文字大小的功能,我们都知道浏览器最小字体是12px,你给一个元素加上 ‘font-size: 10px;’,其大小已然按照 12px 来显示,那么我们就想让字体为 10px,就可以使用 ‘-webkit-text-size-adjust’ 属性,但是建议大家不要轻易使用。

移动端字体显示大小和css设置大小的不一致解决方案相关推荐

  1. 产生粗体字的html标签,html字体加粗用css设置文字粗体样式

    html如何加粗文字,HTML加粗标签元素有哪些?CSS字体加粗又怎么来实现?粗体代码是什么? 综合以上问题,可以使用CSS样式和HTML标签两种方法来实现,在实际布局时候根据需要来选择文字字体加粗方 ...

  2. php链接字体颜色,通过html/css设置超链接字体颜色

    超链接字体颜色设置是通过css来设置,a链接的颜色设置常用的有以下两种,1.超链接a的初始状态颜色,2.超链接字体的鼠标滑过颜色,还有两种病不常用:3.超链接字体的已访问颜色 超链接字体颜色设置是通过 ...

  3. html怎样设置字体不能被选中,css设置:图片文字等不能被选择

    uva 12034 /* 比赛的名次的所有方案数 ___________________________________________________________________________ ...

  4. html语言 加粗,html字体加粗用css设置文字粗体样式

    HTML加粗标签元素有哪些?CSS字体加粗又怎么来实现?粗体代码是什么? 综合以上问题,可以使用CSS样式和HTML标签两种方法来实现,在实际布局时候根据需要来选择文字字体加粗方法途径. 一.html ...

  5. css行间距怎么设置(CSS设置行间距)

    1. CSS设置行间距 CSS将文本设置双倍行距后方法: 打开一个html代码页面,创建一个含有一段文本的div标签. 使用css的line-height属性设置行的高为40px. 保存html代码后 ...

  6. html前端小技巧—字体及颜色色值准确设置

    今天分享下"html前端小技巧-字体及颜色色值准确设置"这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一 ...

  7. html字体设置大小打印无效,css font-size属性怎么不管用?

    css font-size属性用于设置字体大小.在实际的开发中,有时会发现font-size属性不管用了,设置的字体大小是无效的.这是什么原因?怎么解决?下面本篇文章给大家介绍一下. css font ...

  8. html字体设置大小打印无效,使用css中的zoom:50%后对页面文字大小不生效,什么原因?...

    css样式如下: body { zoom: 50%; } 发现对 图片等都变为原大小的一半,但是字体还是设置的大小(比如font-size:30px).什么原因? 测试了下,说下我的测试结果: 我手头 ...

  9. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置...

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置 Download JetBrains Python IDE :: PyCharm http://ww ...

最新文章

  1. JavaScript的使用
  2. 解耦 多态性 java_java多态
  3. 通信原理随机信号分析
  4. 【mathematical statistics】4 hypothesis testing
  5. OpenCASCADE:Foundation Classes之数学原语和算法
  6. java线程暂停_Java之线程停止
  7. 取代java_为什么C++没有被java取代
  8. python入门学习的第三天
  9. 高通modem启动过程_苹果首次承认正自研基带芯片,高通要被抛弃了?
  10. PTA 7-1 求奇数和 (C语言)
  11. 初探PostgreSql
  12. 明晚8点直播丨经典知识库:深入解析Oracle检查点
  13. AGP与PCI-E的区别 PCI-E接口与PCI接口的区别
  14. Windows 7 纯净版各版本下载
  15. 自用推荐【浏览器网页监控插件 Distill Web Monitor】
  16. 张钹院士:迈向第三代人工智能 |论文学习总结
  17. HighCharts柱状图显示百分比
  18. 计算机硬件系统实验教程代码,计算机硬件系统实验教程
  19. diamond专题(三)—— diamond架构
  20. mybatis运行报错java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

热门文章

  1. 联通的流量卡都是快递激活吗?快递激活手机卡有没有关系?
  2. 如何将ppt演示文稿上传到微信公众号?
  3. FPGA中en-rdy机制和req-ack机制的区别
  4. Excel技能树系列04:函数的套路
  5. 客户端和服务端简单开发
  6. 小说程序源码 自动采集
  7. 深信服2019届校园招聘专场(私聊博主得内推码,免简历筛选)
  8. android recovery 和reboot
  9. SQL代码建表时引用外键,有红线提示引用了无效的表
  10. jq获取span标签的赋值和取值