Подтвердить что ты не робот

Вертикально центральным текстом на 100% высотой div?

Я работаю с div, который составляет 100% от высоты родительских div.

В div содержится только одна строка текста.

У div не может быть фиксированной высоты.

Итак, мой вопрос.

Как вертикально центрировать строку текста?

Я попытался использовать:

display: table-cell;  
line-height:200%;

Если важно, что div абсолютно позиционирован.


Текущий CSS
.requests {
    position: absolute;
    right: 0;
    height: 100%;
    width: 50px;
    padding: 0 10px;
    background-color: #69A4B5;
    display: table-cell;
    vertical-align: middle;
    border-bottom-right-radius: 5px;
}
4b9b3361

Ответ 1

Этот ответ больше не лучший ответ... см. ниже ответ flexbox!


Чтобы получить его идеально по центру (как указано в david answer), вам нужно добавить отрицательный верхний край. Если вы знаете (или усиливаете) только одну строку текста, вы можете использовать:

margin-top: -0.5em;

например:

http://jsfiddle.net/45MHk/623/

//CSS:
html, body, div {
    height: 100%;
}

#parent
{
    position:relative;
    border: 1px solid black;
}

#child
{
    position: absolute;
    top: 50%;
    /* adjust top up half the height of a single line */
    margin-top: -0.5em;
    /* force content to always be a single line */
    overflow: hidden;
    white-space: nowrap;
    width: 100%;
    text-overflow: ellipsis;
}

//HTML:
<div id="parent">
    <div id="child">Text that is suppose to be centered</div>
</div>​

Первоначально принятый ответ не будет располагаться вертикально по центру текста (он сосредотачивается на верхней части текста). Итак, если ваш родитель не очень высокий, он не будет выглядеть центрированным, например:

http://jsfiddle.net/45MHk/

//CSS:
#parent
{
    position:relative;
    height: 3em;
    border: 1px solid black;
}

#child
{
    position: absolute;
    top: 50%;
}​ 

//HTML:
<div id="parent">
    <div id="child">Text that is suppose to be centered</div>
</div>​

Ответ 2

Изменить: лучший и самый простой способ сделать это (в настоящее время в 2015 2017) использует flexbox:

.parent-selector {
    display: flex;
    align-items: center;
}

И что он: D

Завершите этот рабочий пример: http://jsfiddle.net/qj2Jr/114/

Старый ответ: Вы можете использовать вертикальное выравнивание: среднее, если вы также укажете также display: table-cell;

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

Рабочий пример: http://jsfiddle.net/qj2Jr/1/

Если он не работает, вы можете попробовать установить его родительский display: table;:

.parent-selector {
    display: table;
}

Изменить: У вас есть этот метод плюс все методы, рассмотренные в этом вопросе, в этом другом вопросе: Как вертикально центрировать текст с помощью CSS?

Ответ 3

Попробуйте этот http://jsfiddle.net/Husamuddin/ByNa3/ он отлично работает со мной,
CSS

.table {
    width:100%;
    height:100%;
    position:absolute;
    display:table;
}
.cell {
    display:table-cell;
    vertical-align:middle;
    width:100%;
    height:100%:
}

и html

<div class="table">
    <div class="cell">Hello, I'm in the middle</div>
</div>

Ответ 4

Поскольку он абсолютно позиционирован, вы можете использовать верх: 50% для вертикального выравнивания по центру.

Но тогда вы сталкиваетесь с проблемой того, что страница больше, чем вы хотите. Для этого вы можете использовать переполнение: hidden для родительского div. Это то, что я использовал для создания того же эффекта:

CSS:

div.parent {
    width: 100%;
    height: 300px;
    position: relative;
    overflow: hidden;
}
div.parent div.absolute {
    position: absolute;
    top: 50%;
    height: 300px;
}

HTML:

<div class="parent">
    <div class="absolute">This is vertically center aligned</div>
</div>

Ответ 5

Несмотря на то, что этот вопрос довольно старый, вот решение, которое работает как с одной, так и с несколькими линиями, которые должны быть центрированы по вертикали (можно легко центрировать как вертикально, так и горизонтально, как показано в css в Демо.

HTML

<div class="parent">
    <div class="child">Text that needs to be vertically centered</div>
</div>


CSS

.parent {
    position: relative;
    height: 400px;
}

.child {
    position: absolute;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
}

Ответ 6

Я не согласен, здесь свободное решение JS, которое работает:

<html style="height: 100%;">
    <body style="vertical-align: middle; margin: 0px; height: 100%;">
        <div style="height: 100%; width: 100%; display: table; background-color: #ccc;">
            <div style="display: table-cell; width: 100%; vertical-align: middle;">
                <div style="height: 300px; width: 600px; background-color: wheat; margin-left: auto; margin-right: auto;">A</div>
            </div>
        </div>
    </body>
</html>

Ответ 7

Если вы знаете, насколько высок ваш текст, вы можете использовать комбинацию top:50% и margin-top:-x px, где x - половина высоты вашего текста.

Рабочий пример: http://jsfiddle.net/Qy4yy/

Ответ 8

просто оберните свой контент таблицей, подобной этой:

  <table width="100%" height="100%">
         <tr align="center">
               <th align="center">
                 text
               </th>
          </tr>
  </table><

Ответ 9

Вы пробовали линию-высоту: 1em;? Я помню, что это способ сделать его вертикальным.

Ответ 10

Пробовал ли вы вертикально-выровнять: средний???

Более подробную информацию о вертикальном выравнивании вы можете найти здесь: http://www.w3schools.com/css/pr_pos_vertical-align.asp

Ответ 11

Вертикальное выравнивание, динамическая высота в сочетании с абсолютным положением за исключением некоторых особых условий, которые не возможны без нескольких строк JS (например, jQuery). (возможно, в некоторых случаях может быть решена с использованием кода backend или min-height в сочетании с разумными вершинами или марками, но не идеальными)

В основном я использую только абсолютную позицию, когда что-то предполагается "всплывать" по отношению к чему-то еще, что находится в поплавке, я думаю, что лучший способ использовать его, чтобы вам не пришлось возиться с такими вещами.

Не обижайтесь, но большинство ответов здесь не работают.

Ответ 12

Установка высоты линии так же, как высота div приведет к тому, что текст станет центром. Работает только в том случае, если есть одна строка. (например, кнопка).

Ответ 13

Современное решение - работает во всех браузерах и IE9 +

caniuse - поддержка браузера.

.v-center {
  position: relative;
  top: 50%;
  -webkit-transform: translateY(-50%);
      -ms-transform: translateY(-50%);
          transform: translateY(-50%);
}

Пример: http://jsbin.com/rehovixufe/1/