Центрирование по вертикали с использованием top: 50% и transform: translate (-50%) вызывает удвоение подчеркивания на 1px

Эта проблема заметна только на стандартных экранах с плотностью пикселей. Похоже, что браузер пытается позиционировать линию 1px на полупиксельной координате оси Y и принимает решение удвоить линию 1px, чтобы она находилась в математически правильной координате оси Y. Цвет новой линии будет на несколько оттенков светлее и вызовет эффект "размытой линии" для человеческого глаза. CodePen.

Упаковочная коробка "надувается" с%:

padding-top: 38.45%;

Родительская коробка:

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

Дочерний элемент:

border-bottom: 1px solid #000000;

Как это можно предотвратить, не устанавливая фиксированную высоту для родительских и дочерних элементов?

1 ответ

Решение

Вот решение: центрируйте вертикально с помощью 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 намного проще и чище, чем преобразование.

Другие вопросы по тегам