Вертикальное выравнивание ячейки таблицы не работает - PullRequest
55 голосов
/ 23 октября 2010

Я пытаюсь просто центрировать текст по горизонтали и вертикали, используя DIV и отображать тип как ячейку таблицы, но он не работает ни в IE8, ни в Firefox.

Ниже приведен CSS, который я использую, и этовсе что есть на html странице.

@charset "utf-8";
/* CSS Document */
html, body
{
    background-color:#FFFFFF;
    font-family:Arial, Helvetica, sans-serif;
    margin: 0;
    padding: 0;
    padding-top: 5px;
}
div.Main
{
    background-color:#FFFFFF;
    border-collapse:collapse;
    width:800px;
    margin-left:auto;
    margin-right:auto;
}
div.MainHeader
{
    color:#C00000;
    font-size:18pt;
    font-weight:bold;
    text-align:center;
    width:800px;
}
div.BlackBox
{
    background-color:#000000;
    color:#FFFF00;
    display:table-cell;
    float:left;
    font-size:18pt;
    font-weight:bold;
    height:191px;
    text-align:center;
    vertical-align:middle;
    width:630px;
}
div.BlackBoxPicture
{
    background-color:#000000;
    float:right;
    height:191px;
    margin-top:auto;
    margin-bottom:auto;
    text-align:right;
    vertical-align:bottom;
    width:170px;
}

Что я делаю не так?

Ответы [ 10 ]

43 голосов
/ 23 октября 2010

Я думаю, table-cell должен иметь родительский элемент display:table.

40 голосов
/ 27 мая 2012

Вот как я это делаю:

CSS:

html, body {
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
    display: table
}
#content {
    display: table-cell;
    text-align: center;
    vertical-align: middle
}

HTML:

<div id="content">
    Content goes here
</div>

См

Пример вертикального центрирования

и

CSS: центрирование вещей .

9 голосов
/ 29 августа 2011

Вы можете вертикально выровнять плавающий элемент так, как это работает в IE 6+. Он также не нуждается в полной разметке таблицы. Этот метод не совсем чистый - он включает в себя обертки и есть несколько вещей, о которых нужно знать, например: если у вас слишком много текста, превышающего контейнер - но это довольно хорошо.


Краткий ответ: Вам просто нужно применить display: table-cell к элементу внутри плавающего элемента (ячейки таблицы не плавают) и использовать запасной вариант с position: absolute и top для старого IE.


Длинный ответ: Вот jsfiddle, показывающий основы . Подытоженные важные вещи (с условным комментарием, добавляющим класс .old-ie):

    .wrap {
        float: left;
        height: 100px; /* any fixed amount */
    }
    .wrap2 {
        height: inherit;
    }
    .content {
        display: table-cell;
        height: inherit;
        vertical-align: middle;
    }

    .old-ie .wrap{
        position: relative;
    }
    .old-ie .wrap2 {
        position: absolute;
        top: 50%;
    }
    .old-ie .content {
        position: relative;
        top: -50%;
        display: block;
    }

Вот jsfiddle, который намеренно выделяет мелкие неисправности с помощью этого метода. Обратите внимание, как:

  • В стандартных браузерах содержимое, превышающее высоту элемента-оболочки, перестает центрироваться и начинает спускаться по странице. Это не большая проблема (вероятно, выглядит лучше, чем ползучая страница), и ее можно избежать, избегая слишком большого контента (обратите внимание, что, если я ничего не пропустил, методы переполнения, такие как overflow: auto;, похоже, не работа)
  • В старом IE элемент содержимого не растягивается, чтобы заполнить доступное пространство - высота - это высота содержимого, а не контейнера.

Это довольно незначительные ограничения, но о них стоит знать.

Код и идея адаптированы отсюда

6 голосов
/ 26 февраля 2016

Элемент в следующем стиле будет выровнен по вертикали по центру:

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

Однако, родительский элемент должен иметь фиксированную высоту.Смотрите эту скрипку: https://jsfiddle.net/15d0qfdg/12/

5 голосов
/ 30 октября 2016

В моем случае я хотел центрироваться в родительском контейнере с позицией: absolute.

<div class="absolute-container">
    <div class="parent-container">
        <div class="centered-content">
            My content
        </div>
    </div>
</div>

Мне пришлось добавить некоторое позиционирование для верха, низа, левого и правого.

5 голосов
/ 24 апреля 2014

см. Этот контейнер: http://jsbin.com/yacom/2/edit

должен установить родительский элемент на

display:table-cell;
vertical-align:middle;
text-align:center;
3 голосов
/ 06 марта 2013

Поскольку вы все еще используете float ...

, попробуйте удалить "float" и обернуть его следующим отображением: таблица

пример:

<div style="display:table">
 <div style="display:table-cell;vertical-align:middle;text-align:center">
       Hai i'm center here Lol
 </div>
</div>
2 голосов
/ 22 января 2015

Иногда поплавки тормозят вертикальное выравнивание, лучше их избегать.

1 голос
/ 03 декабря 2013

Float с другой оберткой без использования display: table;, работает:

<div style="float: right;">
   <div style="display: table-cell; vertical-align: middle; width: 50%; height: 50%;">I am vertically aligned on your right! ^^</div>
</div>
1 голос
/ 16 июля 2013

Установить высоту для родительского элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...