5

Как центрировать элемент по горизонтали и вертикали

14

Я пытаюсь выровнять содержимое своих вкладок по вертикали, но когда я добавляю стиль CSS display: inline-flex, горизонтальное выравнивание текста пропадает.

Как мне сделать так, чтобы оба выравнивания (по оси X и Y) работали для каждой из моих вкладок?

Вот код, с которым я работаю:

* { box-sizing: border-box; }
#leftFrame {
  background-color: green;
  position: absolute;
  left: 0;
  right: 60%;
  top: 0;
  bottom: 0;
}
#leftFrame #tabs {
  background-color: red;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 25%;
}
#leftFrame #tabs div {
  border: 2px solid black;
  position: static;
  float: left;
  width: 50%;
  height: 100%;
  text-align: center;
  display: inline-flex;
  align-items: center;
}
<div id="leftFrame">
  <div id="tabs">
    <div>first</div>
    <div>second</div>
  </div>
</div>

Буду благодарен за любые советы!

5 ответ(ов)

0

Если CSS3 является вариантом (или у вас есть резервный вариант), вы можете использовать свойство transform:

.center {
    right: 50%;
    bottom: 50%;
    transform: translate(50%, 50%);
    position: absolute;
}

В отличие от первого подхода, вам не следует использовать left: 50% с отрицательным смещением, так как в IE9+ возникает проблема с переполнением. Используя положительное значение для right, вы избежите появления горизонтальных полос прокрутки.

0

Вот как использовать два простых свойства Flexbox, чтобы выровнять n

на двух осях:

  1. Установите высоту вашего контейнера: в данном случае, тело (body) задано с минимальной высотой 100% от высоты вьюпорта (viewport).
  2. Свойство align-items: center; выровняет блоки по вертикали, если направление flex — строка (row), или по горизонтали, если направление flex — колонка (column).
  3. Свойство justify-content: space-around; распределит свободное пространство по вертикали, если направление flex — строка, или по горизонтали, если направление flex — колонка, вокруг элементов
    .

Пример CSS-кода:

body {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: space-around;
}

И пример HTML-кода:

<div>foo</div>
<div>bar</div>

С помощью данного подхода вы сможете легко центрировать любые элементы внутри контейнера.

0

Чтобы создать <div>, который будет выровнен по центру как по вертикали, так и по горизонтали, можно воспользоваться Flexbox. Вот как можно это реализовать на HTML и CSS:

html,
body,
.container {
  height: 100%;
  width: 100%;
}
.container {
  display: flex;
  align-items: center; /* Вертикальное выравнивание */
  justify-content: center; /* Горизонтальное выравнивание */
}
.mydiv {
  width: 80px; /* Ширина внутреннего блока */
}
<div class="container">
  <div class="mydiv">h & v aligned</div>
</div>

Объяснение:

  • html, body, и .container имеют заданную высоту и ширину в 100%, чтобы контейнер занимал всё доступное пространство.
  • .container настроен как flex-контейнер. Свойства align-items: center и justify-content: center позволяют выровнять вложенные элементы по центру как вертикально, так и horizontally.
  • .mydiv задает ширину для внутреннего блока.

Запустив данный код, вы увидите <div> с текстом "h & v aligned", выровненный по центру экрана.

0

Чтобы центрировать элемент div на странице, вы можете использовать несколько подходов. Вот один из способов с использованием CSS-свойства position:

#vh {
    border-radius: 15px;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
    padding: 25px;
    width: 200px;
    height: 200px;
    background: white;
    text-align: center;
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
<div id="vh">Div для вертикального центирования</div>

Этот код задает div с идентификатором vh, который будет располагаться в центре страницы. Используя position: absolute, элемент будет находиться в центре между границами top, bottom, left и right, что позволяет добиться нужного эффекта.

Обновление: Другой вариант — использовать Flexbox, который очень удобен для выравнивания элементов.

.vh {
    background-color: #ddd;
    height: 200px;
    display: flex;
    align-items: center; /* Вертикально центрируем содержимое */
    justify-content: center; /* Горизонтально центрируем содержимое */
}
.vh > div {
    width: 100%;
    text-align: center;
}
<div class="vh">
    <div>Div для вертикального центирования</div>
</div>

В этом примере используется Flexbox. Свойства align-items: center и justify-content: center позволяют легко центровать содержимое как по вертикали, так и по горизонтали внутри элемента div с классом vh.

0

Для того чтобы первый элемент внутри контейнера с классом .align был выровнен по центру как по вертикали, так и по горизонтали, можно использовать свойство position: absolute; вместе с установкой top и left в 50%, а также с помощью транслейта (transform: translate(-50%, -50%);). Однако, в вашем коде это не было учтено.

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

.align {
    display: flex;
    width: 400px;
    height: 400px;
    border: solid 1px black;
    align-items: center;
    justify-content: space-around;
    position: relative; /* Добавляем стиль для относительно позиционированного родителя */
}

.align div:first-child {
    width: 20px;
    height: 20px;
    background-color: red;
    position: absolute; 
    top: 50%; /* Центрируем по вертикали */
    left: 50%; /* Центрируем по горизонтали */
    transform: translate(-50%, -50%); /* Сдвигаем элемент, чтобы он оказался точно по центру */
}

.align div {
    width: 20px;
    height: 20px;
    background-color: blue;
}

И HTML остается таким же:

<div class='align'>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</div>

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

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