Как центрировать элемент по горизонтали и вертикали
Я пытаюсь выровнять содержимое своих вкладок по вертикали, но когда я добавляю стиль 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 ответ(ов)
Если CSS3 является вариантом (или у вас есть резервный вариант), вы можете использовать свойство transform:
.center {
right: 50%;
bottom: 50%;
transform: translate(50%, 50%);
position: absolute;
}
В отличие от первого подхода, вам не следует использовать left: 50% с отрицательным смещением, так как в IE9+ возникает проблема с переполнением. Используя положительное значение для right, вы избежите появления горизонтальных полос прокрутки.
Вот как использовать два простых свойства Flexbox, чтобы выровнять n
- Установите высоту вашего контейнера: в данном случае, тело (body) задано с минимальной высотой 100% от высоты вьюпорта (viewport).
- Свойство
align-items: center;
выровняет блоки по вертикали, если направление flex — строка (row), или по горизонтали, если направление flex — колонка (column). - Свойство
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>
С помощью данного подхода вы сможете легко центрировать любые элементы внутри контейнера.
Чтобы создать <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", выровненный по центру экрана.
Чтобы центрировать элемент 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
.
Для того чтобы первый элемент внутри контейнера с классом .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>
Таким образом, первый элемент будет правильно выровнен по центру контейнера как по вертикали, так и по горизонтали.
Как горизонтально центрировать элемент?
Как вертикально центрировать элемент div для всех браузеров с помощью CSS?
Как задать cellpadding и cellspacing с помощью CSS?
Вертикальное выравнивание текста рядом с изображением?
Что такое clearfix?