使用 top: 50% 和 transform: translate (-50%) 垂直居中会导致加倍的 1px 下划线

Centring vertically using top: 50% and transform: translate (-50%) causes doubled 1px underline

此问题仅在标准像素密度屏幕上很明显。浏览器似乎试图将 1px 线定位在半像素 Y 轴坐标上,并决定将 1px 线加倍,以便它位于数学上正确的 Y 轴坐标中。新线的颜色会浅几个色度,并且会对人眼产生 "blurred line" 效果。 CodePen.

包装盒是 "inflated",其中 %:

padding-top: 38.45%;

父框:

position: absolute;
top: 50%;
transform: translateY(-50%);

子元素:

border-bottom: 1px solid #000000;

如何在不需要父元素和子元素的固定高度的情况下避免这种情况?

这里有一个解决方案:使用 flex 垂直居中。

干掉

position: absolute
top: 50%
transform: translateY(-50%);

在子元素上。

然后将此应用到父级:

display: flex;
align-items: center;

所以最后的 css 将是:

#campaign_content .brand .copy_holder .inner_wrapper {
    left: 0;
    width: 100%;
    margin: 0 auto;
    z-index: 2;
}

#campaign_content .brand .copy_holder {
    width: 38.75%;
    background-color: #ffffff;
    position: relative;
    padding: 1em 0;
    display: flex;
    align-items: center;
}

在我看来,使用 flex 垂直居中比转换 hack 更容易和更清晰。