vertical-align:middle
14 Jul, 2005Продолжаю традицию обзывать посты экзотическими(для меня) CSS свойствами. Описываю свои трудности с реализацией вертикального выравнивания по центру.
Update: рекомендую так же ознакомиться с новым методом вертикального выравнивания
Одна строка текста - просто
Для того что бы выровнять одну строку например такого кода:- <p>
- Rovno odna stroka texta
- </p>
- p {
- line-height:30px;
- height:30px;
- }
Несколько строк или просто блочный элемент
Тут все гораздо сложнее. Для начала сформулирую проблему:- У нас есть div(или любой блочный элемент) с известной высотой
- Какой-нить абзац текста P внутри этого DIVa - известно лишь что он(текст) точно поместится в заданную высоту DIVa
- Нужно отцентрировать этот текст по вертикали без использования таблиц
- <div>
- <p>
- Because the Welsh and Roman heritage was almost entirely erased by the invasion of low German and then Scandinavian populations....
- </p>
- </div>
Для нормальных броузеров
Для всех броузеров кроме winIE и macIE работает такой CSS код:- div {
- display: table-cell;
- vertical-align: middle;
- }
для IE
А вот тут начинаются извраты...- <div style="display: table; height: 400px; _position: relative; overflow: hidden;">
- <div style=" _position: absolute; _top: 50%;display: table-cell; vertical-align: middle;">
- <p style=" _position: relative; _top: -50%">
- any text<br />
- any height<br />
- any content, for example generated from DB<br />
- everything is vertically centered
- </p>
- </div>
- </div>
Метод n2: Тоже не без извращений смотрим на центрирование во всем окне - http://www.kriton.de/CSS/zentrieren/alle-zentriert.html (видели ID на немецком? - посмотрите! :))
Тот сайт пока умер - смотрим и читаем тут - http://www.umade.ru/log/2004/10/46.html.
(не совсем отвечает постановке задачи, но очень распространенная проблема)
Метод n3(ИМХО самый удачный и универсальный из тех что я знаю):
Метод однако требует добавления в код пустого DIV или другого элемента.
Итак центрируем #valign-center:
- <div class="wrap">
- <div class="valign-center">
- <p>lenzi, e profondissima quiete</p>
- <p>infinito silenzio a questa voce vo comparando: </p>
- </div>
- <div class="just-for-IE"></div>
- </div>
display: table-cell;vertical-align: middle;
, а для ИЕ используем извраты с height:100%;
и display: inline-block
:
- .wrap {
- display: table-cell;
- vertical-align: middle;
- width: 100%;
- height: 401px;
- }
- .just-for-IE {
- display: none;
- width: 1px;
- margin-left: -1px;
- }
- * html .just-for-IE, * html .valign-center {
- display: inline-block;
- vertical-align: middle;
- }
- * html .valign-center {
- width: 100%;
- }
- * html .just-for-IE {
- height: 100%;
- }
- * html .just-for-IE, * html .valign-center {
- display: inline;
- }
n4:способ с помощью expression, смотрите в новом посте Еще один способ вертикального выравнивания в CSS.
38 комментариев к “vertical-align:middle”