Дизайн сайтов Евгения Бахвалова

Сделано проектов 80

Вертикальное выравнивание div в CSS

13 Июль 2008


Начну с того, что этот вопрос делится на 2 вопроса. Во-первых, как выровнить div или любой другой элемент по вертикали в браузере, а, во-вторых, как выровнять что-либо, например, текст в диве. Пойдем по порядку.

Также стоит заметить, что я до сих пор не знаю НИ ОДНОГО нормального способоа вертикально выравнивать дивы, который бы работал без огрехов во ВСЕХ браузерах.

Выравнивание div по центру по вертикали

Есть 2 способа, абсолютный и релевантный. Например, чтобы отцентрировать относительно <body>, у которого ширина-высота 100% и отступы обнулены, пишем:

div#center {
background:#CCC;/* для наглядности */
width:300px;
height:200px;
position:absolute;
top:50%;
left:50%;
margin-top:-100px;
margin-left:-150px;
}

<body>
<div id=»center»> наш флэш-ролик, например (другого назначения такому решению не знаю, потому что, когда размер окна браузера становится меньше размера содержимого дива, браузер «съедает» часть содержимого слева и сверху, что для контента или логотипа не есть хорошо!!!)</div>
</body>
</html>

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


div#Splash {
background:#CCC;/* для наглядности */
width:50%;
height:50%;
position:absolute;
top:25%;
left:25%;
}

На этот раз для позиционирования блока используем лишь координаты его левого верхнего угла. Вычитаем из общей высоты внешнего блока (в начале статьи решили что это будет <body>) высоту центрируемого блока (100% — 50% = 50%), делим ее пополам и получаем top:25%. Также поступаем с шириной и соответственно отступом слева (в примере: left:25%).

Выравнивание текста в диве

Как все знают, во всех нормальных браузерах (не IE!!!) работает это:

  1. div {
  2. height: 200px;
  3. display: table-cell;
  4. vertical-align: middle;
  5. }

Для следующего, к примеру, кода:

  1. <div>
  2. <p>
  3. Текст, который нужно выровнять по центру по вертикали…
  4. </p>
  5. </div>

А вот в IE (как в 5,6, так и в 7-8) начнаются всякие разные извращения. Они либо основаны на релевантных позициях и процентных отступах, либо на java expression. К сожалению, ни те, ни другие способы выравнивания div в IE нельзя назвать идеальными, тем не менее, других альтернатив нет.

Способ 1

  1. div {
  2. height: 200px;
  3. display: table-cell;
  4. vertical-align: middle;
  5. }
  6. div p {
  7. margin-top: expression((parentNode.offsetHeight — this.offsetHeight)<0 ? «0″ : (parentNode.offsetHeight — this.offsetHeight)/2 + «px»)
  8. }

Способ 2

  1. <div style=”display: table; height: 400px; _position: relative; overflow: hidden;”>
  2. <div style=” _position: absolute; _top: 50%;display: table-cell; vertical-align: middle;”>
  3. <p style=” _position: relative; _top: -50%”>
  4. Текст, который нужно выровнять по центру по вертикали…
  5. </p>
  6. </div>
  7. </div>

Способ 3

  1. <div class=”wrap”>
  2. <div class=”valign-center”>
  3. <p>lenzi, e profondissima quiete</p>
  4. <p>infinito silenzio a questa voce vo comparando: </p>
  5. </div>
  6. <div class=”just-for-IE”></div>
  7. </div>
  1. .wrap {
  2. display: table-cell;
  3. vertical-align: middle;
  4. width: 100%;
  5. height: 401px;
  6. }
  7. .just-for-IE {
  8. display: none;
  9. width: 1px;
  10. margin-left: -1px;
  11. }
  12. * html .just-for-IE, * html .valign-center {
  13. display: inline-block;
  14. vertical-align: middle;
  15. }
  16. * html .valign-center {
  17. width: 100%;
  18. }
  19. * html .just-for-IE {
  20. height: 100%;
  21. }
  22. * html .just-for-IE, * html .valign-center {
  23. display: inline;
  24. }

Наверх



Комментарии на “Вертикальное выравнивание div в CSS”

  1. Dmitriy пишет:

    :)

  2. mp3 пишет:

    у меня не работают в FF3

  3. blo пишет:

    Спасибо, помогло.

Оставить комментарий

Создание web-сайтов
Дизайн сайтов
Евгения Беарт
web-дизайнер, разработчик