вертикальное выравнивание с flexbox в IE11 и IE10

Как сделать кросс-браузерное решение, в котором элемент выровнен по вертикали?

http://jsfiddle.net/e2yuqtdt/3/

это работает как в Firefox, так и в Chrome, но не в IE11

<div class="page_login">
    <div>vertical-align:center; text-align:center</div>
</div>

html, body {
    height:100%;
}

.page_login {
    display:flex;
    height:100%;
    width:100%;
    background:#303030;
}

.page_login > div {
    margin:auto;
    background:#fff;
    min-height:100px;
    width:200px;
}

обновление

когда центрированный элемент выше высоты окна просмотра, фон составляет только 100%, а не 100% высоты прокрутки

http://jsfiddle.net/e2yuqtdt/8/

html, body {
    min-height:100%;
    height:100%;
}

.page_login {
    display:flex;
    min-height:100%;
    height:100%;
    width:100%;
    background:#303030;
}

.page_login > div {
    margin:auto;
    background:#fff;
    height:800px;
    width:200px;
}

2 ответов


как сделать кросс-браузерное решение, где элемент является вертикальным выровняли?

взгляните на эту скрипку:http://jsfiddle.net/5ry8vqkL/

применяемая там техника использует "дисплей: таблица". Вот статья на углубленное подхода http://css-tricks.com/centering-in-the-unknown/

поддерживаемые браузеры можно увидеть здесь: http://caniuse.com/#search=table-cell

HTML:

<div class="container">
    <div id="page-login">
        <div class="panel">Some content</div>
    </div>
</div>

CSS:

html, body {
    min-height:100%;
    height:100%;
}

.container {
    display: table;
    height:100%;
    width:100%;
    background:#303030;
}

#page-login {
    display: table-cell;
    vertical-align: middle
}

.panel {
    height: 100px;
    background-color: #fff;
}

вам нужно добавить высоту в div. Поскольку вы указали только минимальную высоту, IE автоматически расширяет ее до максимально возможной. Поэтому добавьте высоту, например:

.page_login > div {
     margin:auto;
     background:#fff;
     min-height:100px;
     width:200px;
     height:200px;
}

http://jsfiddle.net/e2yuqtdt/6/

поскольку это коробка flex и, следовательно, предназначена для flex, хорошей идеей может быть сделать высоту в процентах. Таким образом, высота div будет - например-50% от высоты страницы, если страница не будет меньше 200px - тогда это будет 100 Пикс. высокое.

обновление: к сожалению, невозможно заставить div заполнить всю страницу только CSS. Однако, похоже, это возможно с Javascript, см. здесь сделать div заполнить высоту оставшегося пространства экрана

На самом деле-достигли его, используя таблицы divs

http://jsfiddle.net/e2yuqtdt/14/

<div>
    <div id="div1">
        <div id="div2">vertical-align:center; text-align:center</div>
    </div>
</div>


#div1 {
    display:flex;
    height:100%;
    width:100%;
    background:#303030;
}

#div2 {
    margin:auto;
    background:#fff;
    height:800px;
    width:200px;
}

Я знаю, что это обновление идет после один Элад.Чэнь-но уже сделал это и опубликовал в комментарии ниже - просто не удосужился обновить вопрос.