文章

Edge 浏览器 bug 定位 —— 使我的 GitHub 界面被压扁

132.0.2957.55 版本中确认已修复。

测试环境:Microsoft Edge 132.0.2957.26 (Beta Channel)

测试时间:2024/12/6 18:00

复现难度:极低


1 发现问题

大概是半个月之前的某天,我像往常一样打算打开 GitHub 看一眼项目的分支列表。

然后就被开幕雷击了。

是的,分支的名字都被压扁了,而且表头看起来也不太正常的样子。

作为对比,正常的页面是这样的:

尝试 Chrome 和 Firefox(一个前端人怎么可能只装了一个浏览器!),发现根本没有问题。

果然还是 Edge 全责,打开 DevTools,找到文字所在的 div 元素,进入 Computed 选项卡,瞬间就发现了几个不太对劲的属性。

height: 0.604167px

line-height: 0.6px

很明显,问题出在 line-height 属性。此时,它的值为 calc(20 / var(--table-font-size))

鉴于 --table-font-size 的值为 0.75rem,而此时的 font-size16pxline-height 的值大概就是 calc(20 / 12px) 了。

根据 CSS 规范(calc () - CSS:层叠样式表 | MDN),

除法,除数(/ 右面的数)必须是 <number>

理论上这是个无效的属性值,但是实际上它却被 Edge 计算成了 0.6px 这个抽象数字。

试图用各种算法计算这个值无果后,遗憾的放弃了问题定位。

2 问题定位

在被折磨了半个月之后,我终于忍不了了。

在一个很闲的下午,我打开网上随便找的一个 CSS Playground,怀着沉重的心情输入了:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="src/style.css">
  </head>
  <body>
    <p>F**k Microsoft Edge</p>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
body {
  background: #ffffff;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 16px;
}

p {
  font-size: 0.75rem;
  line-height: calc(20 / 0.75rem);
  overflow: hidden;
}

果然复现出来了。line-height: 0.6px 也是完全一致。


↑希望你能看见这一行抽象的点↑

然后脑抽了在 calc 后面的被除数后面加了个 0。

line-height: calc(200 / 0.75rem);

显示效果完全没有变化。对于一个无效的属性值,这是完全合理的。

但是 Computed 选项卡中的 line-height 值却变成了 0.06px

被除数 x10,值反而小了 10 倍?怎会如此呢?

这时,我们就能大概猜到原因了。

在多次改变被除数与除数后,不难发现,在:

  • 被除数为 number

  • 除数为 length

时,巨硬 的阴间优化会认为你不慎把被除数和除数写反了,于是贴心的帮你换回来。

这就是为什么 line-length0.6px,因为 12px / 20 == 0.6px

3 结语

所以,真的不要进行 CSS 规范外的操作。

鉴于你跟着规范走都会有 巨量 的浏览器兼容性问题,不跟着规范走绝对会让你爽到姥姥家。

4 课后作业

  1. :root { font-size: 32px; }
    p { line-height: calc(20 / 12rem); }
    计算后的 line-height 是多少?

好吧我已经编不下去了。希望永远不会有人再碰到这个抽象问题了。

5 为什么还有?

附上美丽的故事一则。

勿问为什么没有 Edge,Edge 已经被 巨硬 压扁了。