Центрирование элемента по вертикали внутри родительского блока — это одна из тех задач, с которой сталкиваются многие начинающие разработчики. Часто возникает необходимость выровнять по центру элемент, высота которого заранее неизвестна. Вместо того чтобы прибегать к flexbox или таблицам, существует простой и эффективный способ сделать это с помощью всего трех строк CSS-кода.
Здесь top: 50% перемещает элемент на половину высоты родительского блока, а translateY(-50%) сдвигает его обратно вверх на половину собственной высоты, что в итоге центрирует элемент по вертикали. В отличие от метода с абсолютным позиционированием, здесь не нужно добавлять дополнительные свойства для родительского блока, и этот способ работает даже в старых браузерах, таких как Internet Explorer 9.
Создание миксина для повторного использования
Чтобы упростить задачу и сделать код более читаемым и поддерживаемым, вы можете создать миксин с поддержкой префиксов для старых браузеров:
Этот миксин можно применять ко многим элементам на странице, обеспечивая их корректное вертикальное выравнивание независимо от содержимого.
Решение проблемы полупиксельного размытия
Иногда использование translateY(-50%) может привести к появлению эффекта полупикселя, что вызывает размытие границ элемента. Вот два способа решения этой проблемы:
Использование preserve-3d для родительского блока:
Эта техника сохраняет трехмерное отображение дочерних элементов, что устраняет эффект размытия. 2. Добавление функции perspective() к целевому элементу:
perspective(1px) добавляет минимальную глубину перспективы, что также может помочь устранить размытие.
Заключение
Вертикальное центрирование элементов с неизвестной высотой — это задача, которую можно легко решить с помощью CSS. Использование transform: translateY(-50%) в сочетании с top: 50% позволяет эффективно выравнивать элементы по центру без сложных манипуляций и дополнительных настроек. Этот метод работает «из коробки» в большинстве современных браузеров, включая старые версии, такие как Internet Explorer 9.