问题描述

如下图所示,需要在手机端实现一个上下居中的价格标签,字号 10。

图0

但对于小于 12 号的字体浏览器默认不会显示更小,因为浏览器默认会有个最小的字体大小,在 pc 端通常这个值是 12。

如果非常必要显示更小的字体常规策略会使用 scale 缩放一定的比例来实现,代码如下:

// 缩放字体的样式如下

// 这里的 @rex 是手机端自适应的 rem 单位

font-size: 10 * @rex;

transform-origin: 50% 50%;

transform: scale(0.9);

我们为了兼容多种场景(包含 pc 端),使用了缩放的方法,部分代码如下:

// dom 结构如下

会员券后价

// 样式如下

.tag{

line-height: 10 * @rex;

padding: 2 * @rex 4 * @rex;

color: #fff;

background-color: #e22929;

border-radius: 10 * @rex;

&-text {

font-size: 10 * @rex;

transform-origin: 50% 50%;

transform: scale(0.9);

font-weight: bold;

}

}

在通过缩放显示更小的文字,在有些手机上不能很完美的上下居中,有些手机会明显看到显示偏上几像素,如下图所示:

图1(iphone 8,14.0)

图2(未设置 block 各种手机下的截图)

定位问题

下表列出了各种尝试结果

序号

手机型号

系统版本

浏览器

结果

1

iphone x

13.6.1

safari

上下间距、大小正常

2

nova 6

10.0

系统浏览器

上下间距、大小正常

3

pc 模拟器

--

chrome

上下间距正常,大小偏大

4

iphone 8

14.0

safari

上下间距偏上,大小偏大

在尝试设置多种方式依然解决不了,后来想试试设置 flex 布局上下居中可行不,竟然可以了,第 3、4 条都可以,除了 4 上下间距还有点偏差(见截图)。

// 设置 flex 的样式

.tag {

display: flex;

align-items: center;

...

}

图3(iphone 8,14.0)

定位到这里基本算是解决了,但为什么会这样呢?设置 flex 后有了哪些差异?再回去看了看 dom 结构发现原来文字是用 span 包裹,设置父元素 flex 后它的布局会变为 block,难道是这里的差异?

以这个 “inline sacle” 关键字搜索下,发现 “Transform的 scale属性不能作用于 inline元素上,例如span”,接着去查看 transform 的定义说明。

Only transformable elements can be transformed. That is, all elements whose layout is governed by the CSS box model except for: non-replaced inline boxes, table-column boxes, and table-column-group boxes.

这里说只有可变换的元素可以设置 transform,除了 inline、table-column、table-column-group 这几个盒模型其它盒模型都可以设置 transform。

解决方法

最终解决方法,通过给 span 上设置 display: block

// 调整后的样式如下

.tag{

line-height: 10 * @rex;

padding: 2 * @rex 4 * @rex;

margin-left: 4 * @rex;

color: #fff;

background-color: #e22929;

border-radius: 10 * @rex;

&-text {

display: block;

font-size: 10 * @rex;

transform-origin: 50% 50%;

transform: scale(0.9);

font-weight: bold;

}

}

结论

通过 transform 缩放实现小号字体的上下居中布局,一定要在 block 元素上设置,记得 transform 设置在 inline 元素不生效。

图4(设置 block 后各浏览器的截图)

上图缩放后有两个问题,1字体过小,2有些机型里上下还是不居中

问题1

关于字体过小问题,上图是在字号 10 的基础上缩小,为了让缩小后显示字号接近 10,这里可以调整缩放样式:

// 调整字号到 12,对应计算缩放比例取 0.83(10/12 = 0.83)

font-size: 12 * @rex;

transform-origin: 50% 50%;

transform: scale(0.83);

问题2

怎么解决字体缩小后,有的手机还是上下居中有点偏差???

图5(缩小文字没上下居中)

因为使用自适应单位,@rex 会根据手机实际尺寸计算出不同的值,而不同的手机对奇数以及含有小数像素处理会有差异的,尝试把样式修改如下:

// 弃用自适应单位,使用 px 像素单位,考虑布局小在手机端各尺寸中差距不大

// 注意这里在文字里多了一个 line-height 设置

.tag{

line-height: 10px;

padding: 2px 4 *px;

margin-left: 4 * @rex;

color: #fff;

background-color: #e22929;

border-radius: 10 * @rex;

&-text {

display: block;

font-size: 12px;

line-height: 12px;

transform-origin: 50% 50%;

transform: scale(0.83);

font-weight: bold;

}

}

最终结果见下图,在 android 和 iOS 手机下都能比较好的居中。

7_p_6.png

具体 line-height 和 font-size 在含有小数值上的具体表现留待以后研究。

ios和android下数字没有垂直居中,手机端设置小号字体的上下居中问题相关推荐

  1. 华为鸿蒙系统手机开机,抓紧感受下,华为鸿蒙手机端开机界面确认

    原标题:抓紧感受下,华为鸿蒙手机端开机界面确认 最近一段时间关于华为鸿蒙手机端操作系统的消息非常多,但是由于目前仅是测试阶段,我们无法全面的了解这个全新的操作系统长什么样.在操作上有何不同等等,在这样 ...

  2. web,pc端及手机端支持的字体

    页面地址为:<点击此处> 以上为引致张鑫旭的网站内容,仅为了以后方便查看,如有不当,请指出谅解! 手机端字体选择: 手机端支持的字体比较少,对于要求的字体一般如何定义? 相信大家会想到 @ ...

  3. 手机端设置https访问代理(windows)

    手机端设置https访问代理(windows) 系统环境:window7 Fiddler当前版本:v4.5.1.0 Fiddler最新版本:v4.6.20171.26113 一.启动Fiddler,打 ...

  4. Charles抓取手机端设置信任证书

    手机端信任证书 Android端证书信任 iOS端证书信任 Android端证书信任 手机和电脑确保在同一网络下 打开Charles,点击help->ssl proxying->insta ...

  5. google 兼容测试_手机端设置

      Android设备上的设置---CTS   用户构建版本 1 兼容的设备为是指具有用户/释放键签名版本的设备,因此你的设备必须在运行在已知的系统映像兼容的用户版本(Android 4.0及更高版本 ...

  6. html5手机端设置date,如何在移动端更好地使用HTML5 date input

    烙印99 众所周知,HTML5新增了几种input类型,比如email, number, url, range, date等.这些input类型在一定程度上方便了我们做输入限制和数据校验.但是不同的浏 ...

  7. 手机端设置缩放的解决方法和遇到的UC浏览器的坑

    对于手机端来说,有时候h5界面是要禁止放大和缩小的. 那么如何解决这个问题呢,话不多说,我们直接说解决方法: 在index的首页之中,有把meta标签改成如下形式,就可以将用户缩放功能关闭了. < ...

  8. Android下磁盘分区表损坏,手贱去硬盘合并!结果分区损坏!花一上午终于成功搞定!!!!!...

    前排提醒:数据无价,一定要提前备份! 切入正题:昨晚楼主一块1t的硬盘之前分了2个区.最近又添了块固态,容量够了,所以想把原来的2个分区合并成一整个. 准备:1.用"分区助手"软件 ...

  9. android订餐系统app、android购物商城系统app 手机端+服务器端 mysql数据库,界面简单,功能齐全 安卓购物商城 安卓在线订餐系统

    android订餐系统app.android购物商城系统app 一.简介 该项目可作为毕业设计开发使用,包含项目源代码.数据库.开题报告.毕业论文.答辩ppt等. 毕业设计题目:"基于And ...

最新文章

  1. 卷积神经网络为什么能称霸计算机视觉领域?
  2. 浅谈linux命令大全
  3. 仿京东左侧菜单弹出html代码,相仿京东左侧菜单
  4. mysql数据库的目录_了解MySQl数据库目录
  5. SQL Server 索引重建手册
  6. nodejs接收post数据
  7. 【算法分析与设计】习题分享
  8. android p 牛轧糖_Android牛轧糖快速设置图块
  9. SparkSQL概念介绍
  10. hexo sever端口占用,localhost:4000无响应
  11. 吾管不到的地方,资源已开始混乱
  12. 基于产生式系统的野人渡河问题求解
  13. 自定义浏览器UA标识
  14. STM32F429DISCO+AT070TN92 7寸LCD
  15. cuda compute capability
  16. 桌面计算机地址栏在哪,电脑窗口地址栏清理
  17. xcode中ineligible devices的注意事项
  18. vc设备工程师_设备工程师考核.doc
  19. iOS 发布证书申请 (转载)
  20. app同质化趋势下,如何实现差异化?

热门文章

  1. 完美删除Mac Os自带输入法
  2. 某政府门户网站维护项目运维方案
  3. vs2022安装dev控件工具箱不显示
  4. Android 获取通话记录和短信内容
  5. 数字音频总线A2B开发详解十一(A2B一Slave板做音效处理-31段EQ,高中低音分频,延时,3D音效等)
  6. Android蓝牙开发系列文章-蓝牙设备类型知多少?
  7. 2022年武汉专精特新小巨人企业奖励补贴以及申报条件汇总
  8. pdf2html java_pdf2HtmlEX的使用
  9. springboot笔记(硅谷)
  10. CRC8 CRC16 查表法