Element alignment

Модель объектов документа выражающаяся в XHTML очень логическая структура и гибкая. Проблема в том что ни создатели, как так часто бывает, ни веб-разработчики (и я в их числе) не представляют в полной мере всю гибкость и возможности оптимального позиционирования, из-за этого постоянно возникают вопросы и хаки, решающие проблему не-табличным решением.

Не совсем центр

Вертикальная оцентровка

Вертикальное позиционирование например предлагается делать через относительное абсолютное позиционирование, но замечу что хотя идея хорошая, просто взять и написать ниже приведённый код нельзя, потому что -50% не прокатит в Firefox и Safari. Никита кстати тоже не заметил это, потому что оба выравнивают строчку текста и пол строчки разница небольшая, да и к тому же имеет место быть какой-то хак для IE.

#container {top:50%;position: absolute;}
#inner {top:-50%;position:relative;}

Поэтому в моём случае, где это действительно полезно, при показе login-формы, надо ставить реальные пиксели сдвига вверх вместо процентов. Более простой пример, где нужна плавающая ширина контейнера я не рассматриваю.

Центр

Горизонтальная оцентровка

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

#container {text-align:center;}
#inner {text-align:left;margin:0 auto;}
Центр

Полная оцентровка

Поскольку нам надо теперь контейнер сделать абсолютным, то выравнивание текста не сможет совладать с хитрыми элементами. Для этого вводим ещё один элемент.

RSS

Комментарии

  • Yuriy
    Артем, вертикальное выравнивание методами css делается очень легко, для этого существует display:table-cell . Другой вопрос, что IE это свойство не поддерживает, поэтому имеет место css хак для IE
  • Евгений
    Большинство броузеров не понимают display:table-cell, поэтому для кросс-броузерности такое решение предлагать не просто негоже, а просто непрофессионально. Необходимо раз и навсегда запомнить, что для display существуют только два атрибута: block и inline.
  • Zodios
    Привет, фокус с вертикальным центрированием хорош, но не лишён недостатков, так же как и способ горизонтального.
    Я у себя привел больше способов горизонтального центрирования
    http://zodios.net/htmlcss/div-center.html
  • ref
    Способ конечно хороший, но к сожалению не всегда работает. Рекомендую прочитать мою статью по этому поводу, в ней я указал несколько способов правильного выравнивания - http://deadblog.ru/makeup/vyravnivanie-div-blokov-po-centru-css/