.hairline::after {
content: ''; position: absolute; left: 0; right: 0; bottom: 0;
height: 1px; background: #ddd; transform: scaleY(0.333);
}
设计稿 1px 的边框,在 DPR 3 的安卓机上量出来是 3 个物理像素,比设计稿粗一倍,改成 0.333px 后部分机型直接不显示。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:CSS 像素会按 DPR 放大,1px 在 3 倍屏就是 3 个物理像素。直接写小数像素又会被部分内核四舍五入成 0。
围绕「1px 边框」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
处理上按这个顺序:用 transform: scaleY(0.333) 的伪元素画线;或者用 border-image 加渐变实现半像素;统一封装成 hairline 类 避免每处手写;在 DPR 2 和 3 的设备上各量一次。
确认没问题再收工,DPR 3 设备上边框量出来是 1 个物理像素,与设计稿一致。
