На Главную

Опять про css выравнивание

October 24th, 2007 by Yuriy Drozdov

Про вертикальное выравнивание я уже писал, можно почитать тут и тут. Написать снова меня натолкнула статья Артема Курапова - Element alignment.

Выравнивание - стандартная задача для CSS. Ее можно разбить на три:

  1. Выравнивание строковых элементов
  2. Выравнивание блочных элементов
  3. Выравнивание блочных элементов вертикально

Выравнивание строковых элементов

Тут все просто. Для этого существует css свойство text-align. Например:

CSS:
  1. p {text-align:center;}

Текст центрированный по горизонтали

Выравнивание блочных элементов

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

CSS:
  1. P.blocktext {
  2.     margin-left: auto;
  3.     margin-right: auto;
  4.     width: 100px;
  5. }

Блок текста центрированный по горизонтали,
сам текст внутри блока выравнен влево.

Выравнивание блочных элементов вертикально

Вертикальное выравнивание с помощью CSS делается путем назначения свойству display значения table-cell и свойству vertical-align значения middle.

CSS:
  1. DIV.container {
  2.     min-height: 100px;
  3.     display: table-cell;
  4.     vertical-align: middle
  5. }

Блок отцентрированный по вертикали.

Все сказанное выше было пересказом статьи из w3c. Выравнивать с помощью css нужно именно так.

Но у 27% посетителей этого блога (именно такой процент пользователей Internet Explorer среди посетителей) последние 2 примера не будут работать. А все потому, что IE не поддерживает данных значений css свойств. Отсюда и все танцы с бубном вокруг этого выравнивания.

Как бороться с IE можно почитать в статье Вертикальное выравнивание в CSS, часть 2, а также мне показалась очень интересной технология описанная на cssing.org.ua - метод выравнивания с использованием expression.

P.S. Пример с горизонтальным выравниванием не будет работать в IE версии ниже 6-й, а также для IE 6 в quirks mode. Спасибо Arestovза замечания.

Автор: Yuriy Drozdov

Похожие статьи:

RSS комментариев | Trackback URI

14 Комментариев

Comment by Voff4eg Subscribed to comments via email
2007-10-24 16:50:06

На cssing’е описаны еще другие методы вертикального выравнивания для IE, но, пожалуй, expression - самый удобный (пишем css и никаких дополнительных элементов).

А вообще, если бы не было IE, то писать css было бы сплошным удовольствием :)

Comment by y.drozdov
2007-10-24 16:52:35

было бы скучно :)

 
 
Comment by Владимир Subscribed to comments via email
2007-10-24 19:20:34

По-моему, в большинстве случаев получить примерно тот же эффект, что и в последнем примере можно с помощью:
padding-top:…
padding-bottom:…

Полностью согласен с Voff4eg в отношении IE :-)

Comment by y.drozdov
2007-10-25 11:46:09

вся фишка в “резиновости” дизайна, padding-top:auto - не работает. А если неизвестен размер блока?

Comment by Владимир Subscribed to comments via email
2007-10-25 14:12:22

Какой размер? Высота или ширина?
Я имел в виду только второй пример (с вертикальным выравниванием).
min-height задает только минимальную высоту. Если увеличить количество текста в блоке, то он будет увеличен и при этом изменятся отступы от текста до края блока.
Я не предлагал устанавливать padding-top:auto. Имелось ввиду, что их нужно задать равными, например, 40px.

Comment by y.drozdov
2007-10-26 17:22:15

Если высота блока, который нужно вертикально выровнять не известна. min-height задается для родительского блока.

(Вложеность комментариев заканчивается на этом уровне)
 
 
 
 
Comment by Voff4eg Subscribed to comments via email
2007-10-25 01:31:15

Тот же эффект пожно получить, если мы точно знаем количество строк внутри. А если мы не знаем, что внутри - тогда начинается творчество

Comment by Voff4eg Subscribed to comments via email
2007-10-25 01:31:43

что-то порвало теги :(

 
Comment by y.drozdov
2007-10-25 11:46:44

согласен

 
 
Comment by konst Subscribed to comments via email
2008-03-09 15:14:50

в ИЕ не работает выпвнивание по вертикали ((((
как бы выравнить в ИЕ???

 
Comment by arestov Subscribed to comments via email
2008-04-20 11:49:30

margin-left: auto;
margin-right: auto;

у меня работате в ие, а у вас откуда информация что не работает у ваших посетителей?

Comment by Yuriy Drozdov
2008-04-21 09:50:24

В 7 ие должно работать, а в 6-м и ниже - нет.

 
 
Comment by arestov Subscribed to comments via email
Comment by Yuriy Drozdov
2008-04-23 09:54:33

хм, у меня тоже работает при правильном DOCTYPE :)

 
 

Извините, комментарии закрыты.