6

Как вертикально выровнять текст внутри flexbox?

1

Я хотел бы использовать flexbox для вертикального выравнивания содержимого внутри тега <li>, но не добиваюсь успеха.

Я проверил множество онлайн-руководств, и многие из них используют обертку (wrapper) в виде div, который получает стиль align-items: center от настроек flex на родителе. Но мне интересно, возможно ли обойтись без этого дополнительного элемента?

Я выбрал flexbox, потому что высота элемента списка будет динамической и задана в процентах.

Вот мой код:

* {
  padding: 0;
  margin: 0;
}

html,
body {
  height: 100%;
}

ul {
  height: 100%;
}

li {
  display: flex;
  justify-content: center;
  align-self: center; /* Здесь выравнивание не работает */
  background: silver;
  width: 100%;
  height: 20%;
}
<ul>
  <li>This is the text</li>
</ul>

Как я могу выровнять текст по центру внутри элемента <li> без использования дополнительной обертки?

5 ответ(ов)

0

Лучший подход - это просто вложить флексконтейнер внутрь другого флексконтейнера. Все, что вам нужно сделать, это задать дочернему элементу стиль align-items: center. Это позволит вертикально выровнять текст внутри родительского элемента.

// Предполагая, что родительский элемент выровнен по горизонтали, но это не обязательно
.parent {
  align-items: center;
  display: flex;
  justify-content: center;
}

.child {
  display: flex;
  align-items: center;
}

Таким образом, текст внутри .child будет выровнен по центру относительно родительского контейнера .parent.

0

Наиболее голосованный ответ предназначен для решения конкретной проблемы, упомянутой автором вопроса, где содержимое (текст) оборачивалось внутри элемента inline-block. В некоторых случаях речь может идти о вертикальном центрировании обычного элемента внутри контейнера, что также применимо в моем случае. Для этого вам достаточно использовать:

align-self: center;
0

Используя свойство display: flex, вы можете управлять вертикальным выравниванием HTML-элементов. В приведенном примере кода создается контейнер с классом .box, в котором элементы располагаются по центру как по вертикали, так и по горизонтали.

.box {
  height: 100px;
  display: flex;
  align-items: center; /* Вертикальное выравнивание */
  justify-content: center; /* Горизонтальное выравнивание */
  border: 2px solid black;
}

.box div {
  width: 100px;
  height: 20px;
  border: 1px solid;
}
<div class="box">
  <div>Hello</div>
  <p>World</p>
</div>

В этом примере контейнер .box имеет высоту 100 пикселей и использует flexbox, чтобы выровнять элементы внутри него. Свойство align-items: center; позволяет вертикально центрировать содержимое, а justify-content: center; центрирует его горизонтально. Результат — текст "Hello" и "World" будет расположен по центру контейнера как по вертикали, так и по горизонтали.

0

align-self не выравнивает элементы внутри li. Вместо этого он выравнивает сам элемент li как целое.

Если вы хотите выровнять текст внутри li, вам следует использовать align-items. В вашем случае стоит использовать display: flex на элементе li, чтобы элементы внутри него (в данном случае текст) выравнивались по центру.

Вот пример кода, который работает:

* {
  padding: 0;
  margin: 0;
}

html,
body {
  height: 100%;
}

ul {
  height: 100%;
}

li {
  display: flex;
  justify-content: center;
  align-items: center;
  background: silver;
  width: 100%;
  height: 20%;
}
<ul>
  <li>This is the text</li>
</ul>

Таким образом, задавая display: flex для li, вы гарантируете, что текст будет выровнен по центру.

0

Ваш текущий CSS-код выглядит корректно и должен работать, как вы ожидаете. Он создает полный экранный список, в котором каждый элемент списка (<li>) занимает 20% высоты родительского элемента (<ul>). Также элементы центрируются как по горизонтали, так и по вертикали.

Вот как это будет выглядеть в действии:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Пример</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        html,
        body {
            height: 100%;
        }

        ul {
            height: 100%;
        }

        li {
            display: flex;
            justify-content: center;
            align-items: center;
            background: silver;
            width: 100%;
            height: 20%;
        }
    </style>
</head>
<body>
    <ul>
        <li>This is the text</li>
        <li>Другой элемент</li>
        <li>Еще один элемент</li>
        <li>Последний элемент</li>
    </ul>
</body>
</html>

В этом примере я добавил несколько элементов <li>, чтобы продемонстрировать, как список будет выглядеть с несколькими элементами. Каждое из них занимает 20% высоты, а центрирование текста выполняется с помощью Flexbox. Если у вас есть дополнительные вопросы или нужна помощь с настройкой стилей, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь