Практическое руководство по центрированию в CSS

Опубликовано: 2022-04-18
Резюме » Ищете быстрое решение для центрирования текста или элемента div в CSS? Эта статья для вас. Мы сосредоточимся на конкретных случаях использования, таких как вертикальное и горизонтальное центрирование, а также на том, как центрировать элементы, когда вы не используете Flexbox или Grid. Не стесняйтесь добавить эту страницу в закладки для дальнейшего использования!

Оглавление
  • Встроенные и блочные элементы: text-align
    • Центрирующие блочные элементы с фиксированной шириной
    • Центрирование встроенных элементов с фиксированной шириной
  • Grid и Flexbox: современный подход
    • Вертикальное и горизонтальное: универсальное решение
  • Абсолютное центрирование: преобразование

Как я кратко упомянул в своем введении в математические функции CSS — после публикации статьи о полезных хитростях CSS — я увидел трафик, приходящий на этот сайт по таким ключевым словам, как «как центрировать CSS». Так что имеет смысл только то, что я, наконец, сам составил такую ​​статью.

Я уверен, что проблема с центрированием элементов с помощью CSS заключается не в том, чтобы помнить justify-content: center; имущество. Это больше связано с тем, что разные структуры макета имеют свои собственные правила и могут не соответствовать определенному подходу.

Но обо всем по порядку, для кого создано это руководство:

  • Фронтенд-разработчики, которые чувствуют себя перегруженными «правилами и положениями» CSS.
  • Любой, кому трудно раз и навсегда отцентрировать этот div. Ааааа!!
  • Владельцы веб-сайтов, которые застряли с плохо структурированными шаблонами/темами.

В CSS центрирование часто называют вертикальным, горизонтальным или вертикальным и горизонтальным.

Вы также можете интерпретировать его как левый, правый и левый и правый. А в некоторых случаях вы также можете увидеть, что это называется Top & Bottom. Эти термины также будут использоваться в этом руководстве. С учетом сказанного, давайте начнем с наиболее востребованного подхода из всех.

Встроенные и блочные элементы: text-align

Одна из вещей, которая на первый взгляд может показаться неочевидной, это то, что text-align: center; работает не только для абзацев. Как свойство его можно применить к любому элементу, считающемуся блоком. Это означает, что пока ваш контент заключен в <div> или подобный элемент, его можно центрировать с помощью text-align .

CSS и HTML

 <style> .text-align-container { display: flex; } .text-align-container-style .item { background: #fff2ea; padding: 20px 0; text-align: center; width: 100%; } </style> <div class="text-align-container text-align-container-style"> <div class="item">Hi, I am centered.</div> </div>
Привет, я в центре.

Прелесть этого подхода в том, что он работает как для Grid, так и для Flexbox. Пока вы оборачиваете контент внутри div, он будет работать так же хорошо для такого контента, как изображения.

Stack Diary - Helpful Advice for Web Developers

И это хорошо работает со списками:

  • Я пункт списка №1.
  • А это пункт списка №2.

    Давайте посмотрим, что произойдет, если мы попытаемся центрировать элемент <span> без предварительного помещения его в блочный контейнер.

    CSS и HTML

     .span-demo-container { background: #fff2ea; padding: 20px 0; width: 100%; } .span-demo-center { text-align: center; } <div class="span-demo-container"> <span class="span-demo-center">Am I in the center?</span> </div>

    И результат:

    Я в центре?

    Причина, по которой этот элемент <span> не центрирован, заключается в том, что это встроенный элемент. Для встроенных элементов вы всегда хотите установить родительский элемент.

    Итак, если мы вернемся назад и возьмем класс span-demo-center и применим его к <div> — результат будет таким:

    Сейчас я в центре.

    Если вы работаете с большой кодовой базой или используете плохо структурированный шаблон, обычно это основная причина, по которой центрирование не работает. Таким образом, всегда проверяйте наличие блочных и встроенных элементов и смотрите, правильно ли они вложены.

    Центрирующие блочные элементы с фиксированной шириной

    Еще один популярный метод центрирования элементов — использование margin: auto; , который чаще всего используется для блочных элементов с фиксированной шириной.

    Итак, подумайте о пользовательском div внутри большего контейнера. И затем вы пытаетесь поместить содержимое в этот пользовательский элемент div и расположить его по центру.

    автоматическое центрирование поля в CSS

    Давайте сделаем живой пример, чтобы увидеть его в действии:

    CSS и HTML

     .margin-auto-container { background: #fff2ea; padding:1rem; } .margin-auto-inner { width: 200px; padding: 1rem; background: #efba93; color: #fff; margin: 0 auto; text-align: center; } <div class="margin-auto-container"> <div class="margin-auto-inner">Div & Text centered.</div> </div>
    Div и текст по центру.

    В этом примере класс margin-auto-container берет контейнер из этого сообщения в блоге, затем мы создаем новый класс с именем margin-auto-inner и применяем к нему фиксированную ширину с пользовательским стилем. Наконец, мы применяем margin: 0 auto; чтобы убедиться, что наш внутренний контейнер останется центрированным относительно основного контейнера.

     Почему 0? Мы добавляем 0, потому что хотим оставить поле по вертикали (сверху и снизу) как есть и применить автоматическое поле к виду по горизонтали (справа и слева). Вы можете изменить это, чтобы указать отдельные поля, например «margin: 25px auto 50px;» что оставит поле 25 пикселей сверху и поле 50 пикселей снизу.
    
    Важно: Причина вашей маржи: auto; не центрируется, потому что вы не установили фиксированную ширину для элемента, который пытаетесь центрировать.

    Мы также указываем text-align: center; так как это будет центрировать текст внутри внутреннего контейнера.

    Центрирование встроенных элементов с фиксированной шириной

    В случае встроенного элемента пользовательская ширина игнорируется.

    Давайте посмотрим на демо:

    CSS и HTML

     .margin-auto-container { background: #fff2ea; padding:1rem; } .margin-auto-inner-span { width: 150px; padding: 5px; background: #efba93; color: #fff; margin: 0 auto; text-align: center; } <div class="margin-auto-container"> <span class="margin-auto-inner-span">Inline <span> element with custom width. (Not centered).</span> </div>

    И результат:

    Встроенный элемент с произвольной шириной. (не по центру)

    Как видите, несмотря на установку margin: auto; встроенный элемент span не центрирован.

    К счастью, это легко исправить. Добавив display: block; к нашему классу margin-auto-inner-span — мы можем сообщить браузеру, что хотим, чтобы этот конкретный элемент рассматривался как блок . И теперь он должен быть центрирован:

    Встроенный элемент с произвольной шириной. (по центру)

    На этом этапе вам может быть интересно, какие элементы HTML считаются блоками , а какие встроенными . Понятно. Я рекомендую посмотреть ссылку MDN:

    • Элементы блочного уровня
    • Встроенные элементы

    Если вы знаете разницу между Inline и Block, вам будет намного проще найти решение для центрирования, подходящее для вашей проблемы.

    Grid и Flexbox: современный подход

    Grid и Flexbox — это два модуля компоновки, используемые в современном веб-дизайне. В то время как Flexbox — это одномерная система компоновки, Grid основан на двухмерном подходе.

    А центрирование div для обоих макетов можно выполнить всего двумя строками кода.

    Вертикальное и горизонтальное: универсальное решение

    Для макетов Grid и Flexbox вы можете использовать place-content: center; имущество.

    CSS и HTML

     .center-div-grid-layout { display: grid; /* display: flex; */ place-content: center; } <div class="center-div-grid-layout">It's that easy.</div>
    Это так просто.

    Свойство place-content является сокращением для align-content и justify-content .

    С помощью place-content вы можете сделать множество вариантов размещения, в зависимости от стиля макета, с которым вы работаете:

    синтаксис содержания места

    Полную информацию см. на этой странице MDN.

    В целом, существует очень небольшое количество пограничных случаев, когда описанных методов центрирования будет недостаточно. Если вы работаете со старым макетом, лучше всего найти несоответствия в именах классов внутри самой таблицы стилей. Затем найдите способ правильно вложить элементы, чтобы указанная логика центрирования выполнялась правильно.

    Абсолютное центрирование: преобразование

    Свойство transform используется, когда вы хотите, чтобы что-то было центрировано «точно по центру» — по горизонтали и вертикали (слева, справа, сверху, снизу).

    CSS и HTML

     .transform-example-container { height: 150px; position: relative; background: #fff2ea; } .transform-example-container .transform-absolute { width: 300px; text-align: center; background: #efba93; color: #fff; top: 50%; left: 50%; transform: translateY(-50%) translateX(-50%); margin: 0; padding: 10px 0; position: absolute; } <div class="transform-example-container"> <p class="transform-absolute">Example: CSS transform</p> </div>

    Пример: преобразование CSS

    Это работает путем установки абсолютной позиции для дочернего элемента, который вы хотите центрировать.

    Важно, чтобы родительский элемент имел относительное положение, иначе свойство преобразования будет использовать основной макет в качестве своего родителя.

    Мы используем top и left для установки положения относительно верхнего левого угла. После этого элемент можно переместить в центр с помощью translate() .

    Поля и отступы должны быть установлены на 0, иначе вы столкнетесь с сдвигом позиции.


    И это завершает наш учебник/справочник. Если вы хотите освоить центрирование с помощью CSS, запустите свой любимый редактор кода и начните тестировать эти примеры.