记一次字体缩放的实践与问题解决

367 阅读3分钟

前情提要

我司的某个站点登录页迎来了一次样式上的迭代,设计师同学将一段说明文字的字体大小设置为了10px,期望开发同学能够实现。

实践

1.❌想当然地直接设置font-size:10px

结果: 不生效

为什么不生效?

因为谷歌浏览器支持的最小字体是12px

2.灵光一闪⭐,用transform缩放,把原来的12px乘上0.833的倍数

a.❌直接搭配

结果: 不生效

代码

  <Typography.Text
                      style={{
                        fontSize: 12,
                        transform: 'scale(.833)',
                      }}
                      type="secondary"
                    >
                      登录视为您已同意第三方账号绑定协议、个人信息保护知情同意书
                    </Typography.Text>

b.❌想到了,谷歌浏览器内核,因此transform要加上-webkit前缀

(Tip:旧版的谷歌浏览器需要加,最新版的无需添加此前缀)

谷歌浏览器的内核是WebKit的一个分支,称为Blink。在早期,当Chrome浏览器还使用原始的WebKit作为其渲染引擎时,确实需要使用-webkit-前缀来支持某些CSS属性,如transform。这是因为这些属性在当初还是实验性特性,或是WebKit特有的。

代码

  <Typography.Text
                      style={{
                        fontSize: 12,
                        WebkitTransform: 'scale(.833)',
                      }}
                      type="secondary"
                    >
                      登录视为您已同意第三方账号绑定协议、个人信息保护知情同意书
                    </Typography.Text>

结果: 还是不生效

c.❌原来如此,块级元素里设置transform才会生效

代码

  <Typography.Text
                      style={{
                        fontSize: 12,
                        WebkitTransform: 'scale(.833)',
                        display: 'block',

                      }}
                      type="secondary"
                    >
                      登录视为您已同意第三方账号绑定协议、个人信息保护知情同意书
                    </Typography.Text>

问题

transform: scale是现代浏览器都支持的css元素,应该是首选,但它会引发一个问题,虽然可以缩小整体显示的内容,但是并没有引起重排,所以占据的实际空间没有缩小

图片对比

ff43f867237aaea14b64e2f95a2ad02.png

image.png

可以看到,上方的图2,哪怕字体是10px大小的,但是块级元素的宽度还是和12px大小的相同。 因此,有没有其他方式,既可以使显示内容缩放,又可以缩小占据的实际空间?

3.❌使用zoom

(我本来以为这是最优解,但是看了下MDN文档,发现这是不规范的一种解法😓)

zoom-MDN

代码

         <Typography.Text
                      style={{
                        fontSize: 12,
                        zoom: '.833',
                      }}
                      type="secondary"
                    >
                      登录视为您已同意第三方账号绑定协议、个人信息保护知情同意书
                    </Typography.Text>

结果

image.png 可以看到,通过设置zoom的方式,我们既实现了字体的缩放,也实现了所占空间的真实缩小。

延伸问题

为什么是使用12 * 0.833,而不是使用20 * 0.5去得到整数呢?

因为假设在某些场景zoom失效了,此时字体会使用设置的12px,在展示上不会有太大的影响

但是如果一开始设置的是20px,那么在展示上就会影响特别大,如下图所示:

image.png

结论:都不用,不建议字体小于12px,不符合规范😕