自适应 词条目录
前端Wiki/自适应/深入/移动端适配实战

1px 边框问题

设计稿上的 1px 边框在 DPR=2/3 的手机上其实用 2~3 个物理像素渲染,反而显得更粗;而代码里写 1px 的设备像素又太细。所以“1px 边框问题”是“如何用 CSS 画出物理 1px 的细线”。

主流解法:transform: scaleY(0.5) 伪元素画线(兼容性好),或直接用 0.5px(iOS 支持已普及)。

  • 本质:CSS 1px ≠ 物理 1px,需要 DPR 换算
  • 方案 A:::after 伪元素 + scaleY(0.5),兼容性最好
  • 方案 B:直接 1px + 媒体查询写 0.5px(Safari 14+ 支持)
CSS
/* 方案 A:伪元素缩放(推荐,全平台兼容) */
.hairline-bottom { position: relative; }
.hairline-bottom::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0;
  height: 1px; background: #ddd;
  transform: scaleY(0.5);          /* DPR=2 时恰好物理 1px */
  transform-origin: 0 0;
}
/* DPR=3 的屏幕再细一点 */
@media (-webkit-min-device-pixel-ratio: 3) {
  .hairline-bottom::after { transform: scaleY(0.33); }
}

/* 方案 B:直接 0.5px */
@media (-webkit-min-device-pixel-ratio: 2) {
  .border-half { border-width: 0.5px; }
}
本节要点1px 边框:伪元素 scaleY(0.5) 是最稳方案;DPR 越高缩放越狠。
🔗 相关词条CSS3CSSJavaScript