Css одно или несколько строк вертикальное выравнивание
У меня есть заголовок, который может содержать одну или несколько строк.
Как выровнять текст по вертикали? Если бы всегда была одна строка, я мог бы просто установить высоту строки на высоту контейнера.
Я могу сделать это с помощью JavaScript, но мне это не очень нравится, я ищу чистый способ CSS.
Также, если контейнер может расширяться с линиями, он будет идеальным, поэтому я всегда могу иметь ту же самую прописку сверху и снизу.
![enter image description here]()
Ответы
Ответ 1
Для этого вы можете использовать свойство display:table-cell
:
.inline {
display: inline-block;
margin: 1em;
}
.wrap {
display: table;
height: 100px;
width: 160px;
padding: 10px;
border: thin solid darkgray;
}
.wrap p {
display: table-cell;
vertical-align: middle;
}
<div class="inline">
<div class="wrap">
<p>Example of single line.</p>
</div>
</div>
<div class="inline">
<div class="wrap">
<p>To look best, text should really be centered inside.</p>
</div>
</div>
Ответ 2
Если вам не нравится трюк display:table
(я знаю, что я этого не знаю) здесь без него:
.cen {
min-height:5em; width:12em; background:red; margin:1em 0;
}
.cen p {
display:inline-block; vertical-align:middle;
margin:0 0 0 1em; width:10em;
}
.cen::after {
display:inline-block; vertical-align:middle; line-height:5em;
width:0; content:"\00A0"; overflow:hidden;
}
с HTML
<div class="cen">
<p>Text in div 1</p>
</div>
Это дает div высоту 5em, если контент не будет более сложным, тогда он растет.
Пример в реальном времени здесь.
Изменить: О, какие браузеры должны работать? IE8 не будет сотрудничать.
(Позже отредактируйте: обновленный CSS для обработки проблем в Chrome)
Ответ 3
Мне действительно нравится это решение:
<div>
<span style="display: inline-block; vertical-align: middle; height: --The height of your box here--"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here</span>
</div>
Не стесняйтесь использовать таблицы стилей и 100% для высоты...
Также может потребоваться прокомментировать пробелы между тегами span, поскольку они являются встроенными блоками
Кредит отправляется Hades. Я получил его из здесь
<div style="outline:thin solid red;">
<span style="display: inline-block; vertical-align: middle; height: 60px;"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here.</span>
</div>
<div style="outline:thin solid red;">
<span style="display: inline-block; vertical-align: middle; height: 60px;"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here. Put your multi-line content here. Put your multi-line content here. Put your multi-line content here. Put your multi-line content here.</span>
</div>
Ответ 4
somthing like this
HTML
<div>
<p>
Lorem Ipsum is simply
</p>
</div>
CSS
div {
display: table;
}
p {
display:table-cell;
vertical-align: middle;
}
Ответ 5
Если вы хотите, чтобы ваш текст реагировал, обертывание слов от одной до нескольких строк по мере динамического изменения ширины, упомянутый выше трюк с помощником inline-block
(который имеет лучшую совместимость здесь) может быть недостаточным, поскольку .inlinehelper
может подтолкнуть текст упаковки под себя.
Здесь полное решение для такой задачи simpel:
HTML:
<div id="responsive_wrap">
<span class="inlinehelper"><span id="content">
</div>
CSS
#responsive_wrap {
display: block;
height: 100%; //dimensions just for
width: 100%; //example sake
white-space: nowrap;
}
#content {
display: inline-block;
white-space: initial;
}
.inlinehelper {
height: 100%;
width: 0;
vertical-align: middle;
display: inline-block;
}
Обратите внимание на свойство white-space:nowrap
, которое предотвращает обтекание .inlinehelper
и #content
по отношению друг к другу.
white-space:initial
on #content
сбрасывает возможность обертывания для самого span
;
Другой вариант:
Больше вопрос личных предпочтений. Вы можете использовать псевдоэлемент вместо .inlinehelper
. Удалите правила и элемент .inlinehelper
css и добавьте селектор css псевдо-элементов:
#responsive_wrap:before {
content: "";
display: inline-block;
vertical-align: middle;
height: 100%;
width: 0px;
}
P.S.: Я понял, что это действительно старый вопрос слишком поздно, поэтому пусть этот ответ будет, может быть, он будет полезен для кого-то.
Ответ 6
Стилирование, таблица будет лучшим способом компоновки вашего контента (поместите теги стиля в CSS):
<table style="border:1;collapse;width:300px;padding:5px;background-color:red;">
<tr>
<td style="width:250px;vertical-align:middle;">Lorem ipsum dolor sit amet ipswum dolor</td>
<td style="width:50px;vertical-align:top;color:white;">1 Line</td>
</tr>
Счет строки потребует JS script, посмотрите здесь:
http://www.webdeveloper.com/forum/archive/index.php/t-44333.html
Ответ 7
Мне нравится такое решение. Я видел где-то этот трюк в stackoverflow, но не помню, где именно. Очень полезно!:)
ul {
background: #000;
padding-left: 0;
}
ul li {
height: 130px;
position: relative;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border-bottom: 3px solid #F7F7F7;
}
ul li:last-of-type {
border-bottom: none;
}
ul li:after {
color: #333;
position: absolute;
right: 35px;
font-size: 40px;
content: ">";
top: 50%;
margin-top: -24px;
color: #FFDA00;
-webkit-transition: 0.25s all ease;
transition: 0.25s all ease;
}
ul li a {
font-size: 35px;
font-family: Arial;
color: #fff;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding-left: 40px;
height: 100%;
line-height: 38px;
display: inline-block;
width: 100%;
text-align: left;
text-decoration: none;
}
ul li a:before {
display: inline-block;
vertical-align: middle;
content: " ";
height: 100%;
}
ul li a span {
display: inline-block;
vertical-align: middle;
}
<ul>
<li class="dn">
<a href="kapec.ru.php"><span> Lorem ipsum 1 LINE</span></a>
</li>
<li>
<a href="varianti.ru.php"><span>Lorem ipsum <br> 2 lines </span></a>
</li>
</ul>