Все способы вертикального центрирования содержимого в CSS Статьи по дизайнуАвтор: admin13.06.2021 Если вы знаете высоту… Один из старых приемов CSS — центрировать элемент по вертикали с помощью свойства position. Здесь мы задаем элементу абсолютное положение и устанавливаем поля таким образом, чтобы элемент сдвигался к центру. С автозапуском Мы можем указать равные значения для верхнего и нижнего положения элемента и установить для поля значение auto. Это автоматически центрирует элемент с соответствующими полями по оси Y. В этом примере мы установили верхнюю и нижнюю позиции на ноль. Однако мы должны специально установить высоту элемента, чтобы он не занимал всю высоту. . товар { позиция : абсолютная ; верх : 0 ; низ : 0 ; маржа : авто ; высота : 50 vh ; } Смотрите ручку здесь (@livecodestream) на CodePen. С отрицательными полями В этом методе мы размещаем вершину в средней точке (на 50%) в вертикальном направлении. Затем используйте отрицательное поле, чтобы переместить верхнюю половину элемента выше средней точки. . товар { позиция : абсолютная ; верх : 50 % ; слева : 10 vw ; справа : 10 vw ; высота : 50 vh ; верхний край : -25 vh ; / * также учитываем размеры отступов и границ, если таковые имеются, при расчете поля * / } Смотрите ручку здесь (@livecodestream) на CodePen. Здесь мы также должны явно указать высоту элемента, чтобы получить правильное значение для margin-top. Но в большинстве случаев мы не хотим устанавливать явную высоту для элементов, учитывая, что высота должна учитывать изменения ширины, корректировки текста и т. Д. Следовательно, эти два метода в большинстве случаев не идеальны для вертикального центрирования. Нет необходимости в росте с переводчиком Мы можем настроить последний метод центрирования, чтобы найти решение, которое избегает проблемы с явными высотами. Здесь, после размещения верхней части элемента в центре, мы используем translateY, чтобы переместить его на 50% по оси Y. .item { позиция: абсолютная; верх: 50%; преобразовать: translateY (-50%); } Смотрите ручку здесь (@livecodestream) на CodePen. Таблицы и вертикальное выравнивание CSS поддерживает свойство vertical-align для содержимого, размещенного внутри ячеек таблицы. Мы можем воспользоваться этим и объявить элемент ячейкой таблицы (а его родительский элемент — таблицей), чтобы центрировать его содержимое. Если вы используете div, установите для его отображения значение table-cell. Или вы можете использовать фактические элементы таблицы, но это решение семантически неверно. . контейнер { дисплей : таблица ; } . товар { отображение : таблица - ячейка ; вертикальное выравнивание : среднее ; } Смотрите ручку здесь (@livecodestream) на CodePen. Подобно последнему методу центрирования, вам не нужно явно указывать высоту элемента при использовании таблиц. Но если вы хотите поместить внутрь ячейки нецентрированный элемент, этот метод не идеален. Вертикальное центрирование с использованием гибкости Не будет ошибкой сказать, что внедрение гибкости решило многие проблемы проектирования, с которыми сталкивались веб-разработчики, включая вертикальное центрирование. С помощью этого современного дополнения к CSS мы можем легко создавать простые, гибкие и понятные решения для вертикального центрирования. Единственным недостатком этих гибких решений является то, что они не поддерживаются более ранними версиями Internet Explorer (ниже IE9). И вы должны использовать префикс webkit, moz или ms для поддержки некоторых других старых версий браузеров. Но даже тогда flex добавляет невероятную гибкость в управление макетами страниц и позиционированием элементов. Здесь мы рассмотрим несколько способов центрировать контент с помощью гибкости. С гибкими контейнерами и элементами выравнивания Мы можем указать выравнивание элементов внутри родительского гибкого блока, используя свойства align-items и justify-content. Когда мы устанавливаем align-items на center, он вертикально центрирует все элементы внутри flexbox, если flex-direction равно row (по умолчанию). .container { дисплей: гибкий; align-items: center; } Смотрите ручку здесь (@livecodestream) на CodePen. Если вы ищете решение для вертикального центрирования отдельного элемента, вам больше подойдет следующий метод. С гибкими элементами и самовыравниванием Это решение дает вам свободу центрировать по вертикали только один элемент внутри гибкого бокса. Он использует свойство гибкости, align-self, для размещения элемента в центре. . контейнер { дисплей : гибкий ; } . центр { выровнять себя : центр ; } Смотрите ручку здесь (@livecodestream) на CodePen. С гибким контейнером и автоматической маржей Еще один способ центрировать отдельный элемент в гибком контейнере — установить для его поля значение auto. Затем браузер автоматически вычисляет соответствующие поля, чтобы центрировать его в обоих направлениях. . контейнер { дисплей : гибкий ; } . товар { маржа : авто ; } Смотрите ручку здесь (@livecodestream) на CodePen. С призрачными элементами внутри гибкого контейнера Использование призрачных элементов — не лучший способ центрировать контент. Но он выполняет свою работу. А взамен дает вам гибкий интервал в вертикальном направлении. Вы можете складывать несколько элементов внутри гибкого бокса и использовать призрачные элементы, чтобы подтолкнуть их к центру. . контейнер { дисплей : гибкий ; гибкое направление : столбец ; } . контейнер :: до . контейнер :: после { содержание : "" ; гибкий : 1 ; } Смотрите ручку здесь (@livecodestream) на CodePen. Вертикальное центрирование с использованием сетки CSS Сетка — одно из самых мощных дополнений к CSS за последние годы. Поскольку это позволяет нам управлять макетом по осям x и y, вертикальное центрирование с помощью сетки CSS довольно просто. И это дает нам несколько способов решения этой задачи. Подобно flexbox, сетка не полностью поддерживается более старыми версиями современных браузеров, включая Internet Explorer, Chrome и Firefox. В некоторых более старых версиях есть возможность включить поддержку сетки, даже если она недоступна по умолчанию. Первые несколько способов вертикального центрирования с сеткой следуют шаблону, аналогичному тому, что мы сделали с flexbox. Давайте посмотрим на примеры того, как они работают. С сеткой и элементами выравнивания Мы можем вертикально центрировать все элементы внутри сетки, установив для свойства align-items значение center. . контейнер { дисплей : сетка ; align-items : center ; } Если вы хотите вертикально центрировать несколько элементов внутри родительского элемента, обязательно разделите сетку на столбцы, чтобы разместить их в одной строке. Смотрите ручку здесь (@livecodestream) на CodePen. С элементом сетки и самовыравниванием Если вы хотите центрировать только один элемент внутри сетки, используйте align-self: center для стилизации этого конкретного элемента. . контейнер { дисплей : сетка ; } . центр { выровнять себя : центр ; } Смотрите ручку здесь (@livecodestream) на CodePen. С Grid Container и Margin Auto Подобно тому, что мы сделали с flexbox, мы можем вертикально центрировать отдельный элемент внутри сетки, установив для его поля значение auto. . контейнер { дисплей : сетка ; } . центр { маржа : авто ; } Смотрите ручку здесь (@livecodestream) на CodePen. С призрачными элементами на сетке Мы можем настроить трюк с призрачным элементом, который мы проделали с помощью flexbox, в сетку CSS. Для этого сначала нам нужно создать сетку из трех рядов. Затем добавляемые элементы-призраки занимают пространство первой и последней строк, чтобы переместить наш элемент в средний ряд. . контейнер { дисплей : сетка ; сетка-шаблон-строки : повторить ( 3 1 fr); } . контейнер :: до . контейнер :: после { содержание : "" ; } Смотрите ручку здесь (@livecodestream) на CodePen. С точным размещением элементов Сетка позволяет нам указать точное место, в котором должен быть размещен элемент, с помощью нескольких свойств элемента. Мы можем использовать эту функцию, чтобы разместить элемент точно в центре трехрядной сетки и облегчить себе жизнь. . контейнер { дисплей : сетка ; сетка-шаблон-строки : повторить ( 3 1 fr); } . товар { сетка-строка : 2 ; } Смотрите ручку здесь (@livecodestream) на CodePen. Подведение итогов Сегодня мы обсуждали, как решить одну из повторяющихся головных болей в жизни веб-разработчика — вертикальное центрирование контента. Мы говорили о почти 13 различных методах решения этой задачи. Я надеюсь, что это все. Если у вас есть еще какие-то приемы и советы по вертикальному центрированию контента, не забудьте поделиться ими с нами в комментариях. Если вы хотите узнать, как легко выявлять проблемы с макетом, ознакомьтесь с этим руководством, чтобы использовать простой трюк CSS для выделения макетов на вашем сайте. .