Выровнять текст по вертикали
Приведенный ниже код (также доступен в качестве демонстрации на JS Fiddle) не размещает текст посередине, как мне бы хотелось. Я не могу найти способ вертикально центрировать текст в div
, даже используя атрибут margin-top
. Как я могу это сделать?
<div id="column-content">
<img src="http://i.stack.imgur.com/12qzO.png">
<strong>1234</strong>
yet another text content that should be centered vertically
</div>
#column-content {
display: inline-block;
border: 1px solid red;
position:relative;
}
#column-content strong {
color: #592102;
font-size: 18px;
}
img {
margin-top:-7px;
vertical-align: middle;
}
Ответы
Ответ 1
Создайте контейнер для вашего текстового содержимого, возможно < <20 > .
#column-content {
display: inline-block;
}
img {
vertical-align: middle;
}
span {
display: inline-block;
vertical-align: middle;
}
/* for visual purposes */
#column-content {
border: 1px solid red;
position: relative;
}
<div id="column-content">
<img src="http://i.imgur.com/WxW4B.png">
<span><strong>1234</strong>
yet another text content that should be centered vertically</span>
</div>
Ответ 2
Андрес Ильич имеет это право. На всякий случай, если кто-то пропустит его комментарий...
A.) Если у вас есть только одна строка текста:
div
{
height: 200px;
line-height: 200px; /* <-- this is what you must define */
}
<div>vertically centered text</div>
Ответ 3
Обновление 10 апреля 2016 г.
Флексбоксы теперь должны использоваться для выравнивания элементов по вертикали (или даже по горизонтали).
<div class="flex-container">
<div class="flex-item">Item</div>
<div class="flex-item">Item</div>
<div class="flex-item">Item</div>
<div class="flex-item">Item</div>
</div>
<style>
.flex-container {
display: flex;
align-items: center; /* Vertical center alignment */
justify-content: center; /* Horizontal center alignment */
}
</style>
Хорошее руководство по flexbox можно прочитать на CSS Tricks. Спасибо Бен (из комментариев) за указание на это. У меня не было времени, чтобы обновить.
Хороший парень по имени Махендра отправил очень работающее решение здесь.
Следующий класс должен сделать элемент горизонтально и вертикально центрированным по отношению к его родителю.
.absolute-center {
/* Internet Explorer 10 */
display: -ms-flexbox;
-ms-flex-pack: center;
-ms-flex-align: center;
/* Firefox */
display: -moz-box;
-moz-box-pack: center;
-moz-box-align: center;
/* Safari, Opera, and Chrome */
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-align: center;
/* W3C */
display: box;
box-pack: center;
box-align: center;
}
Ответ 4
Принятый ответ не работает для многострочного текста.
Я обновил JSfiddle для отображения вертикального выравнивания многострочного текста CSS, как описано здесь:
<div id="column-content">
<div>yet another text content that should be centered vertically</div>
</div>
#column-content {
border: 1px solid red;
height: 200px;
width: 100px;
}
div {
display: table-cell;
vertical-align:middle;
text-align: center;
}
Он также работает с <br/>
в "еще одном..."
Ответ 5
Попробуйте следующее:
HTML
<div><span>Text</span></div>
CSS
div {
height: 100px;
}
span {
height: 100px;
display: table-cell;
vertical-align: middle;
}
Ответ 6
Чтобы сделать решение Omar (или Mahendra) еще более универсальным, блок кода относительно Firefox должен быть заменен следующим:
/* Firefox */
display: flex;
justify-content: center;
align-items: center;
Проблема с кодом Omar, в противном случае действующая, возникает, когда вы хотите отцентрировать прямоугольник на экране или у его непосредственного предка. Это центрирование выполняется либо путем установки его положения в
position: relative;
или position:static;
(не с положением: абсолютное или фиксированное).
А потом маржа: авто; или поле справа-справа: авто; поле слева: авто;
Под этой средой выравнивания по центру коробки предложение Омара не работает. Это не работает ни в Internet Explorer 8 (пока 7,7% доли рынка). Таким образом, для Internet Explorer 8 (и других браузеров) следует рассмотреть обходной путь, который рассматривается в других вышеупомянутых решениях.
Ответ 7
Это просто должно работать:
#column-content {
--------
margin-top: auto;
margin-bottom: auto;
}
Я попробовал это на вашем демо.
Ответ 8
Это самый простой способ сделать это, если вам нужно несколько строк. Заверните вы span
"d текста в другой span
и указать его высоту с line-height
. Трюк с несколькими строками сбрасывает line-height
внутреннего span
.
<span class="textvalignmiddle"><span>YOUR TEXT HERE</span></span>
.textvalignmiddle {
line-height: /* Set height */;
}
.textvalignmiddle > span {
display: inline-block;
vertical-align: middle;
line-height: 1em; /* Set line height back to normal */
}
DEMO
Конечно, внешний span
может быть div
или что-то еще.
Ответ 9
Добавьте выравнивание по вертикали в CSS content #column-content strong
тоже сильно:
#column-content strong {
...
vertical-align: middle;
}
Также смотрите ваш обновленный пример.
=== ОБНОВЛЕНИЕ ===
С пролетом вокруг другого текста и другим вертикальным выравниванием:
HTML:
... <span>yet another text content that should be centered vertically</span> ...
CSS:
#column-content span {
vertical-align: middle;
}
Также см. Следующий пример.
Ответ 10
Я знаю, что это совершенно глупо, и вы обычно не должны использовать таблицы, когда не создаете таблицы, но:
Ячейки таблицы могут выравнивать несколько строк текста по центру и даже делать это по умолчанию. Таким образом, решение, которое работает вполне нормально, может быть примерно таким:
HTML:
<div class="box">
<table class="textalignmiddle">
<tr>
<td>lorem ipsum ...</td>
</tr>
</table>
</div>
CSS (сделать элемент таблицы всегда подходящим для блока div):
.box {
/* For example */
height: 300px;
}
.textalignmiddle {
width: 100%;
height: 100%;
}
Смотрите здесь: http://www.cssdesk.com/LzpeV