Текст центра CSS (по горизонтали и вертикали) внутри блока div
У меня есть div
для display:block
(height
и width
90px
), и у меня есть текст внутри.
Мне нужно, чтобы текст был выровнен по центру как по вертикали, так и по горизонтали.
Я пробовал text-align:center
, но он не выполняет горизонтальную часть, поэтому я попробовал vertical-align:middle
, но это не сработало.
Есть идеи?
Ответы
Ответ 1
Если это одна строка текста и/или изображения, то это легко сделать. Просто используйте:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
Вот оно. Если это может быть несколько строк, то это несколько сложнее. Но есть решения на http://pmob.co.uk/. Ищите "вертикальное выравнивание".
Так как они, как правило, являются хаки или добавления сложных div-ов... Я обычно использую таблицу с одной ячейкой, чтобы сделать это... чтобы сделать его максимально простым.
Обновление для 2016/2017:
Обычно это можно сделать с помощью transform
, и он хорошо работает даже в старых браузерах, таких как Internet Explorer 10 и Internet Explorer 11. Он может поддерживать несколько строк текста:
position: relative;
top: 50%;
transform: translateY(-50%);
Пример: https://jsfiddle.net/wb8u02kL/1/
Чтобы уменьшить ширину:
Решение выше использовал фиксированную ширину для области содержимого. Чтобы использовать ширину в термоусадочную пленку, используйте
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Пример: https://jsfiddle.net/wb8u02kL/2/
Я попробовал flexbox, но он не получил такой широкой поддержки, как он ломался в некоторых старых версиях Internet Explorer, таких как Internet Explorer 10.
Ответ 2
Общие методы с 2014 года:
-
Подход 1 - transform
translateX
/translateY
:
Пример здесь/ Полноэкранный пример
В поддерживаемых браузерах (большинство из них), вы можете использовать top: 50%
/left: 50%
в комбинации с translateX(-50%) translateY(-50%)
динамически вертикально/горизонтально центрируйте элемент.
.container {
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
-
Подход 2 - Flexbox метод:
Пример здесь/ Полноэкранный пример
В поддерживаемых браузерах установите display
целевого элемента на flex
и используйте align-items: center
для вертикального центрирования и justify-content: center
для горизонтального центрирования. Не забудьте добавить префиксы поставщиков для дополнительной поддержки браузера (см. Пример).
html, body, .container {
height: 100%;
}
.container {
display: flex;
align-items: center;
justify-content: center;
}
-
Подход 3 - table-cell
/vertical-align: middle
:
Пример здесь/ Полноэкранный пример
В некоторых случаях вам необходимо убедиться, что высота элемента html
/body
установлена на 100%
.
Для вертикального выравнивания установите родительский элемент width
/height
в 100%
и добавьте display: table
. Затем для дочернего элемента измените display
на table-cell
и добавьте vertical-align: middle
.
Для горизонтального центрирования вы можете добавить text-align: center
, чтобы центрировать текст и любые другие элементы inline
children. В качестве альтернативы вы можете использовать margin: 0 auto
, если уровень элемента block
.
html, body {
height: 100%;
}
.parent {
width: 100%;
height: 100%;
display: table;
text-align: center;
}
.parent > .child {
display: table-cell;
vertical-align: middle;
}
-
Подход 4 - Абсолютно расположенный 50%
сверху с перемещением:
Пример здесь/ Полноэкранный пример
Этот подход предполагает, что текст имеет известную высоту - в этом случае 18px
. Просто абсолютно позиционируйте элемент 50%
сверху, относительно родительского элемента. Используйте отрицательное значение margin-top
, которое составляет половину известной высоты элемента, в этом случае - -9px
.
html, body, .container {
height: 100%;
}
.container {
position: relative;
text-align: center;
}
.container > p {
position: absolute;
top: 50%;
left: 0;
right: 0;
margin-top: -9px;
}
-
Подход 5 - Метод line-height
(наименее гибкий - не рекомендуется):
Пример здесь
В некоторых случаях родительский элемент будет иметь фиксированную высоту. Для вертикального центрирования все, что вам нужно сделать, - установить значение line-height
для дочернего элемента, равное фиксированной высоте родительского элемента.
Хотя это решение будет работать в некоторых случаях, стоит отметить, что он не будет работать, если есть несколько строк текста - как это.
.parent {
height: 200px;
width: 400px;
text-align: center;
}
.parent > .child {
line-height: 200px;
}
Методы 4 и 5 не являются самыми надежными. Пойдите с одним из первых 3.
Ответ 3
Использование flexbox/CSS:
<div class="box">
<p>അ</p>
</div>
CSS:
.box{
display: flex;
justify-content: center;
align-items: center;
}
Взято из Быстрый совет: простой способ центрирования элементов по вертикали и по горизонтали
Ответ 4
Добавьте строку display: table-cell;
к вашему контенту CSS для этого div.
Только ячейки таблицы поддерживают vertical-align: middle;
по vertical-align: middle;
, но вы можете дать определение [table-cell] div...
Живой пример здесь: http://jsfiddle.net/tH2cc/
div{
height: 90px;
width: 90px;
text-align: center;
border: 1px solid silver;
display: table-cell; // This says treat this element like a table cell
vertical-align:middle; // Now we can center vertically like in a TD
}
Ответ 5
Вы можете попробовать очень простой код для этого:
display: flex;
align-items: center;
justify-content: center;
.box{
height: 90px;
width: 90px;
background: green;
display: flex;
align-items: center;
justify-content: center;
}
<div class="box">
Lorem
</div>
Ответ 6
Я всегда использую следующий CSS для контейнера, чтобы центрировать его содержимое по горизонтали и вертикали.
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-moz-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-box-pack: center;
-moz-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
Смотрите это в действии здесь: https://jsfiddle.net/yp1gusn7/
Ответ 7
Передайте этот класс CSS целевому элементу <div>:
.centered {
width: 150px;
height: 150px;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
background: red; /* Not necessary just to see the result clearly */
}
<div class="centered">This text is centered horizontally and vertically</div>
Ответ 8
Вы можете использовать свойство flex
в родительском div
и добавить свойство margin:auto
к дочерним элементам:
.parent {
display: flex;
/* You can change this to 'row' if you want the items side by side instead of stacked */
flex-direction: column;
}
/* Change the 'p' tag to what your items child items are */
.parent p {
margin: auto;
}
Вы можете увидеть больше вариантов flex
здесь: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Ответ 9
Подход 1
div {
height: 90px;
line-height: 90px;
text-align: center;
border: 2px dashed #f69c55;
}
<div>
Hello, World!!
</div>
Ответ 10
# Parent
{
display:table;
}
# Child
{
display: table-cell;
width: 100%; // As large as its parent to center the text horizontally
text-align: center;
vertical-align: middle; // Vertically align this element on its parent
}
Ответ 11
<div class="small-container">
<span>Text centered</span>
</div>
<style>
.small-container {
width:250px;
height:250px;
border:1px green solid;
text-align:center;
position: absolute;
top: 50%;
left: 50%;
-moz-transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
}
.small-container span{
position: absolute;
top: 50%;
left: 50%;
-moz-transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
}
</style>
Ответ 12
div {
height: 90px;
line-height: 90px;
text-align: center;
border: 2px dashed #f69c55;
}
<div>
Hello, World!!
</div>
Ответ 13
Это работает для меня (проверено ОК!):
HTML:
<div class="mydiv">
<p>Item to be centered!</p>
</div>
CSS:
.mydiv {
height: 100%; /* Or other */
position: relative;
}
.mydiv p {
margin: 0;
position: absolute;
top: 50%;
left: 50%;
margin-right: -50%;
transform: translate(-50%, -50%); /* To compensate own width and height */
}
Вы можете выбрать другие значения, кроме 50%. Например, 25% от центра в 25% от родителей.
Ответ 14
<!DOCTYPE html>
<html>
<head>
<style>
.maindiv {
height: 450px;
background: #f8f8f8;
display: -webkit-flex;
align-items: center;
justify-content: center;
}
p {
font-size: 24px;
}
</style>
</head>
<body>
<div class="maindiv">
<h1>Title</h1>
</div>
</body>
</html>
Ответ 15
Вы можете попробовать следующие методы:
-
Если у вас есть одно слово или предложение в одну строку, то следующий код может помочь.
Поместите текст внутри тега div и присвойте ему идентификатор. Определите следующие свойства для этого идентификатора.
id-name {
height: 90px;
line-height: 90px;
text-align: center;
border: 2px dashed red;
}
Примечание. Убедитесь, что свойство line-height совпадает с высотой деления.
Образ
Но если содержимое содержит более одного слова или строки, это не работает. Также будут случаи, когда вы не сможете указать размер деления в px или% (когда деление очень маленькое, и вы хотите, чтобы содержимое было точно посередине).
-
Чтобы решить эту проблему, мы можем попробовать следующую комбинацию свойств.
id-name {
display: flex;
justify-content: center;
align-items: center;
border: 2px dashed red;
}
Образ
Эти 3 строки кода устанавливают содержимое точно в середине раздела (независимо от размера дисплея). "Align-items: center" помогает в вертикальном центрировании, тогда как "justify-content: center" сделает его горизонтально центрированным.
Примечание. Flex работает не во всех браузерах. Убедитесь, что вы добавили соответствующие префиксы поставщиков для дополнительной поддержки браузера.
Ответ 16
.cell-row {display: table; width: 100%; height: 100px; background-color: lightgrey; text-align: center}
.cell {display: table-cell}
.cell-middle {vertical-align: middle}
<div class="cell-row">
<div class="cell cell-middle">Center</div>
</div>
Ответ 17
Регулировка высоты линии, чтобы получить вертикальное выравнивание.
line-height: 90px;
Ответ 18
Это должен быть правильный ответ. Самый чистый и простой:
.element {
position: relative;
top: 50%;
transform: translateY(-50%);
}
Ответ 19
<!DOCTYPE html>
<html>
<head>
<style>
.container {
height: 450px;
background: #f8f8f8;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-align: center;
align-items: center;
-webkit-box-align: center;
justify-content: center;
width: 100%;
}
p {
font-size: 24px;
}
</style>
</head>
<body>
<div class="container">
<p>Hello, World!</p>
</div>
</body>
</html>
Ответ 20
Применить стиль:
position: absolute;
top: 50%;
left: 0;
right: 0;
Ваш текст будет центрирован независимо от его длины.
Ответ 21
Это сработало для меня:
.center-stuff{
text-align: center;
vertical-align: middle;
line-height: 230px; /* This should be the div height */
}
Ответ 22
Для меня это было лучшее решение:
HTML:
<div id="outer">
<img src="logo.png">
</div>
CSS:
#outer {
position: fixed;
top: 50%;
left: 50%;
/* bring your own prefixes */
transform: translate(-50%, -50%);
}
Ответ 23
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div style ="text-align: center;">Center horizontal text</div>
<div style ="position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%);">Center vertical text</div>
</body>
</html>
Ответ 24
Попробуйте следующий пример. Я добавил примеры для каждой категории: горизонтальные и вертикальные
<!DOCTYPE html>
<html>
<head>
<style>
#horizontal
{
text-align: center;
}
#vertical
{
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
</style>
</head>
<body>
<div id ="horizontal">Center horizontal text</div>
<div id ="vertical">Center vertical text</div>
</body>
</html>
Ответ 25
footer {
width: 100%;
height: 80px;
position: absolute;
bottom: 0;
left: 0;
}