Как выровнять текст по вертикали в div? - PullRequest
1027 голосов
/ 30 мая 2010

Я пытаюсь найти наиболее эффективный способ выравнивания текста с помощью div. Я попробовал несколько вещей, но ни одна из них не работает.

.testimonialText {
  position: absolute;
  left: 15px;
  top: 15px;
  width: 150px;
  height: 309px;
  vertical-align: middle;
  text-align: center;
  font-family: Georgia, "Times New Roman", Times, serif;
  font-style: italic;
  padding: 1em 0 1em 0;
}
<div class="testimonialText">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
  in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

Ответы [ 28 ]

716 голосов
/ 30 мая 2010

Вертикальное центрирование в CSS
http://www.jakpsatweb.cz/css/css-vertical-center-solution.html

Краткое содержание статьи:

Для браузера CSS2 можно использовать display:table / display:table-cell для центрирования контента.

Образец также доступен по адресу JSFiddle :

div { border:1px solid green;}
<div style="display: table; height: 400px; overflow: hidden;">
  <div style="display: table-cell; vertical-align: middle;">
    <div>
      everything is vertically centered in modern IE8+ and others.
    </div>
  </div>
</div>

Можно объединить хаки для старого браузера (IE6 / 7) в стили с помощью #, чтобы скрыть стили от новых браузеров:

div { border:1px solid green;}
<div style="display: table; height: 400px; #position: relative; overflow: hidden;">
  <div style=
    "#position: absolute; #top: 50%;display: table-cell; vertical-align: middle;">
    <div style=" #position: relative; #top: -50%">
      everything is vertically centered
    </div>
  </div>
</div>
693 голосов
/ 06 февраля 2011

Вам необходимо добавить атрибут line-height, и этот атрибут должен соответствовать высоте div. В вашем случае:

.center {
  height: 309px;
  line-height: 309px; /* same as height! */
}
<div class="center">
  A single line.
</div>

На самом деле, вы, вероятно, могли бы вообще удалить атрибут height.

Это работает только для одной строки текста , поэтому будьте осторожны.

413 голосов
/ 22 ноября 2012

Обновление - вот отличный ресурс

http://howtocenterincss.com/

Центрирование в CSS - это боль в заднице. Кажется, существует множество способов сделать это, в зависимости от множества факторов. Это объединяет их и дает вам код, необходимый для каждой ситуации.

Обновление - Использование Flexbox

В соответствии с последним обновлением этой статьи, существует гораздо более простой способ центрирования чего-либо с помощью flexbox. Flexbox не поддерживается в IE9 and lower.

Вот несколько замечательных ресурсов:

jsfiddle с префиксами браузера

HTML

<ul>
    <li>
        <p>Some Text</p>
    </li>
    <li>
        <p>A bit more text that goes on 2 lines</p>
    </li>
    <li>
        <p>Even more text that demonstrates how lines can span multiple lines</p>
    </li>
</ul>

CSS

li {
    display: flex;
    justify-content:center;
    align-content:center;
    flex-direction:column; /* column | row */
}

Обновление - Другое решение

Это от zerosixthree и позволяет вам центрировать что угодно с 6 строками CSS

Этот метод не поддерживается в IE8 and lower

jsfiddle

HTML

<ul>
    <li>
        <p>Some Text</p>
    </li>
    <li>
        <p>A bit more text that goes on 2 lines</p>
    </li>
    <li>
        <p>Even more text that demonstrates how lines can span multiple lines</p>
    </li>
</ul>

CSS

p {
    text-align: center;
    position: relative;
    top: 50%;
    -ms-transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
    transform: translateY(-50%);
}

Предыдущий ответ

Простой и кросс-браузерный подход, полезный, поскольку ссылки в помеченном ответе немного устарели.

Как центрировать текст по вертикали и горизонтали как в неупорядоченном списке, так и в div без использования JavaScript или высоты строки CSS . Независимо от того, сколько у вас текста, вам не нужно применять какие-либо специальные классы к определенным спискам или элементам div (код одинаков для каждого). Это работает во всех основных браузерах, включая IE9, IE8, IE7, IE6, Firefox, Chrome, Opera и Safari. Есть две специальные таблицы стилей (одна для IE7 и другая для IE6), чтобы помочь им в этом из-за ограничений CSS, которых нет в современных браузерах.

Энди Ховард - Как центрировать текст по вертикали и горизонтали в неупорядоченном списке или в div

Edit: Поскольку для последнего проекта, над которым я работал, меня не очень заботили IE7 / 6, я использовал слегка урезанную версию (то есть удалил то, что заставляло его работать в IE7 и 6). Может быть полезным для кого-то еще ...

jsfiddle

HTML

<ul>
    <li>
        <div class="outerContainer">
          <div class="innerContainer">
            <div class="element">
                <p><!-- Content --></p>
            </div>
          </div>
        </div>
    </li>
    <li>
        <div class="outerContainer">
          <div class="innerContainer">
            <div class="element">
                <p><!-- Content --></p>
            </div>
          </div>
        </div>
    </li>
</ul>

И CSS:

.outerContainer {
    display: table;
    width: 100px; /* width of parent */
    height: 100px; /* height of parent */
    overflow: hidden;
}
.outerContainer .innerContainer {
    display: table-cell;
    vertical-align: middle;
    width: 100%;
    margin: 0 auto;
    text-align: center;
}
li {
    background: #ddd;
    width: 100px;
    height: 100px;
}
169 голосов
/ 12 декабря 2015

Это просто с display: flex. При использовании следующего метода текст в div будет центрирован по вертикали:

div {
  display: -webkit-flex;
  display: flex;
  align-items: center;
  /* more style: */
  height: 300px;
  background-color: #888;
}
<div>
  Your text here.
</div>

А если хотите, по горизонтали:

div {
  display: -webkit-flex;
  display: flex;
  align-items: center;
  justify-content: center;
  /* more style: */
  height: 300px;
  background-color: #888;
}
<div>
  Your text here.
</div>

Вы должны увидеть нужную версию браузера; в старых версиях код не работает.

108 голосов
/ 24 января 2014

Я использую следующее для легкого вертикального центрирования случайных элементов:

HTML:

<div style="height: 200px">
    <div id="mytext">This is vertically aligned text within a div</div>
</div>

CSS:

#mytext {
    position: relative;
    top: 50%; 
    transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
}

Это центрирует текст в моем div в точную вертикальную середину внешнего элемента высотой 200px div. Обратите внимание, что вам может понадобиться использовать префикс браузера (например, -webkit- в моем случае), чтобы это работало для вашего браузера.

Это работает не только для текста, но и для других элементов.

38 голосов
/ 18 апреля 2012

Вы можете сделать это, установив для дисплея 'table-cell' и применив выравнивание по вертикали: middle;

    {
        display:table-cell;
        vertical-align:middle;
    }

Однако это поддерживается не всеми версиями Internet Explorer в соответствии с этим отрывком, скопированным из http://www.w3schools.com/cssref/pr_class_display.asp без разрешения.

Примечание: Значения "inline-table", "table", "table-caption", "table-cell", "table-column", "table-column-group", " таблица-строка "," таблица-строка-группа "и" наследовать "не поддерживаются в IE7 и более ранних версиях. IE8 требует! DOCTYPE. IE9 поддерживает значения.

В следующей таблице приведены допустимые отображаемые значения также из http://www.w3schools.com/cssref/pr_class_display.asp. Надеюсь, это поможет

enter image description here

30 голосов
/ 15 сентября 2014

UPD: В наши дни (нам больше не нужен IE6-7-8), я бы просто использовал css display: table для этой проблемы (или display: flex)

Таблица:

.vcenter{
    display: table;
    background:#eee;
    width: 150px;
    height: 150px;
    text-align: center;
}
    
.vcenter :first-child {
    display: table-cell;
    vertical-align: middle;
}
<div class="vcenter">
  <p>This is my Text</p>
</div>
   

Flex:

.vcenter{
    display: flex; /* <-- here */
    background:#eee;
    width: 150px;
    height: 150px; /* <-- here */
    align-items: center; /* <-- here */
}
<div class="vcenter">
  <p>This is my Text</p>
</div>
   

Это (на самом деле, было) мое любимое решение для этой проблемы (простой и очень хорошо поддерживаемый браузер):

div{
    margin:5px;
    text-align:center;
    display:inline-block;
}

.vcenter{
    background:#eee;
    width: 150px;
    height: 150px;
}
.vcenter:before {
    content: " ";
    display: inline-block;
    height: 100%;
    vertical-align: middle;
    max-width: 0.001%; /* Just in case the text wrapps, you shouldn't notice it */
}
    
.vcenter :first-child {
    display:inline-block;
    vertical-align:middle;
    max-width: 99.999%;
}
<div class="vcenter">
  <p>This is my Text</p>
</div>
<div class="vcenter">
  <h4>This is my Text<br />Text<br />Text</h4>
</div>
<div class="vcenter">
  <div>
   <p>This is my</p>
   <p>Text</p>
  </div>
</div>
8 голосов
/ 08 октября 2014

Вот решение, которое лучше всего подходит для одной строки текста.

Может также работать с многострочным текстом с некоторыми изменениями, если число строк известно

.testimonialText{
    font-size:1em;/*Set a font size*/
}
.testimonialText:before {/*add a pseudo element*/
    content:"";
    display:block;
    height:50%;
    margin-top:-0.5em;/*half of the font size*/
}

Вот JSFiddle

7 голосов
/ 21 декабря 2016

Вы можете выровнять текст по центру внутри div, используя flexbox.

<div>
   <p class="testimonialText"> This is the testimonial text. </p>
</div>

div {
   display: flex;
   align-items: center;
}

Подробнее об этом вы можете узнать по этой ссылке: https://css -tricks.com / сниппеты / CSS / а-руководство к Flexbox /

7 голосов
/ 17 марта 2017
<!DOCTYPE html>
<html>
  <head>
    <style>
      .container{
        height:250px;
        background:#f8f8f8;
        display: -ms-flexbox;
        display: -webkit-flex;
        display: flex;
        -ms-flex-align: center;
        align-items: center;
        -webkit-box-align: center;
        justify-content: center;
      }
      p{
      font-size:24px;}
    </style>
  </head>
  <body>
    <div class="container">
      <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
  </body>
</html>
...