В CSS выровнять текст по центру (по горизонтали и по вертикали) внутри div блок
у меня есть div
значение display:block
. (90px
height
и width
) и у меня есть некоторый текст внутри.
мне нужно, чтобы текст был выровнен по центру как по вертикали, так и по горизонтали.
Я пробовал text-align:center
, но он не делает горизонтальную часть, поэтому я попытался vertical-align:middle
но это не сработало.
какие идеи?
24 ответов
если это одна строка текста и/или изображения, то это легко сделать. Просто используйте
text-align: center;
vertical-align: middle;
line-height: 90px; /* the same as your div height */
вот и все. Если это может быть несколько строк, то это несколько сложнее. Но есть решения на http://pmob.co.uk/ ищите "вертикальное выравнивание".
так как они, как правило, хаки или добавление сложных divs... Обычно для этого я использую таблицу с одной ячейкой... чтобы все было как можно проще.
обновление для 2016 / 2017:
Это можно чаще делать с transform
, и он хорошо работает даже в старых браузерах, таких как IE10 и IE11. Он может поддерживать несколько строк текста:
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, но он не был так широко поддерживается, как это было бы сломать в некоторых старых версиях IE, таких как IE10.
общие методы по состоянию на 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
to100%
и добавитьdisplay: table
. Затем для дочернего элемента изменитеdisplay
totable-cell
и добавитьvertical-align: middle
.для горизонтального центрирования вы можете добавить
text-align: center
центрировать текст и любой другойinline
дочерними элементами. Кроме того, вы можете использоватьmargin: 0 auto
предполагая, что элемент
использование flexbox / CSS:
<div class="box">
<p>അ</p>
</div>
CSS-код:
.box{
display: flex;
justify-content: center;
align-items: center;
}
принято от Быстрый Совет: Самый Простой Способ Центрировать Элементы По Вертикали И Горизонтали
добавить строку display: table-cell;
к вашему css для этого div.
только ячейки таблицы поддерживают вертикальное выравнивание: середина; но вы можете дать это определение [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
}
Я всегда использую следующий 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/
вы можете попробовать очень простой код для этого
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>
codpen link http://codepen.io/santoshkhalse/pen/xRmZwr
дайте этот класс css целевому
.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>
подход 1
div {
height: 90px;
line-height: 90px;
text-align: center;
border: 2px dashed #f69c55;
}
<div>
Hello World!
</div>
подход 2
div {
height: 200px;
line-height: 200px;
text-align: center;
border: 2px dashed #f69c55;
}
span {
display: inline-block;
vertical-align: middle;
line-height: normal;
}
<div>
<span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Haec et tu ita posuisti, et verba vestra sunt. Non enim iam stirpis bonum quaeret, sed animalis. </span>
</div>
подход 3
div {
display: table;
height: 100px;
width: 100%;
text-align: center;
border: 2px dashed #f69c55;
}
span {
display: table-cell;
vertical-align: middle;
}
<div>
<span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
</div>
#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
}
<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>
один из лучших подходов-использовать свойство flex в Родительском div и добавить margin:auto свойство элемент tag
.parent{
display: flex;
flex-direction: column;
flex: 1;
height:100%;
}
p{
margin:auto;
}
div {
height: 90px;
line-height: 90px;
text-align: center;
border: 2px dashed #f69c55;
}
<div>
Hello World!
</div>
это работает для меня (протестировано ok!)
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% fi. 25% к центру на 25% родителя
Это должен быть правильный ответ. Самый чистый и простой:
.element {
position: relative;
top: 50%;
transform: translateY(-50%);
}
<!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>
<!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>
Вы можете попробовать следующие методы:
1. если у вас есть одно слово или одно предложение строки, то следующий код может сделать трюк.
имейте текст внутри тега div и дайте ему идентификатор. Определите следующие свойства для этого id.
id-name {
height: 90px;
line-height: 90px;
text-align: center;
border: 2px dashed red;
}
Примечание: убедитесь, что свойство line-height совпадает с высотой деления.
но, если содержание больше чем одно слово или строчка, и это не сработает. Кроме того, будут случаи, когда вы не сможете указать размер divison в px или %.(когда divison действительно маленький, и вы хотите, чтобы контент был точно посередине)
2. чтобы решить эту проблему, мы можем попробовать следующую комбинацию свойств.
id-name {
display: flex;
justify-content: center;
align-items: center;
border: 2px dashed red;
}
эти 3 строки кода устанавливают содержимое точно в середине деления (независимо от размер дисплея). The "align-items: center" помогает в вертикальном центрировании в то время как "оправдать-содержание: центр" будет делать это по горизонтали.
Примечание: Flex не работает во всех браузерах. Убедитесь, что добавлены соответствующие префиксы поставщиков для дополнительной поддержки браузера.
применить стиль:
position: absolute;
top: 50%;
left: 0;
right: 0;
ваш текст будет центрирован независимо от его длины.
.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>
это сработало для меня
.center-stuff{
text-align: center;
vertical-align: middle;
line-height: 230px;/*This should be the div height*/
}
попробуйте следующий пример. Я добавил примеры для каждой категории: горизонтальный и вертикальный
<!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>
<!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>