编辑:Chrome 98(2022 年 2 月 1 日)添加了对小于 1 像素的 border-width 值的直接支持。
截至 2020 年年中,当前版本的 Safari 和 Firefox 都支持border-width: .5px。
另一方面,Chrome 会将其视为1px。
您可以通过以下方式检测浏览器是否支持它:
var el = document.createElement('div');
el.style.position = 'fixed';
el.style.borderTop = '.5px solid';
document.body.appendChild(el);
var hasSubpixelBorder = el.getBoundingRect().height < 1;
document.body.removeChild(el);
如果您在启动时这样做,请确保在创建 document.body 之后调用它。
如果不支持(例如 Chrome),您可以向 document.body 或某些父元素添加一个类,以使后代采用不同的边框样式:
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) {
.noSubpixelBorder .border-top {
border-top-width: 0;
background-image: linear-gradient(180deg, var(--mycolor) 0, var(--mycolor) .5px, transparent 0);
}
}
@media (-webkit-min-device-pixel-ratio: 3) and (-webkit-max-device-pixel-ratio: 3.5), (min-resolution: 3dppx) and (max-resolution: 3.5dppx) {
.noSubpixelBorder .border-top {
background-image: linear-gradient(180deg, var(--mycolor) 0, var(--mycolor) .333333px, transparent 0);
}
}
您可以使用多个线性渐变来实现多边的边框。这接管了background-image,因此如果您将其用于其他用途,您将需要找到另一种方式(还有其他几种方式)。
这不是特别干净,但它似乎一直有效。
如果你想变得超级狡猾,你可以通过动态计算样式表来支持奇怪的像素比率。