FoxWeb

софт для студентов
Искать здесь

Центровка элементов в CSS, не имеющих постоянной ширины

Раздел: Интернет, веб-технологии Автор: Nuxx
E-mail: спаму - нет! Www: http://cssgrakhov.net.ru
Просмотров: 1906 Дата: 08.06.2007
Еще одна полезная заметка о выравнивании по центру элемента, когда его конкретная ширина неизвестна. Рассматривается способ, использованный в другой статье «Страница с горизонтально-вертикальной центровкой с помощью CSS»

Расположить по центру блочный элемент очень легко, указав margin:auto и ширину этого элемента (IE5+ требуют text-align:center для родительского элемента). Иногда необходимо отцентрировать блочный элемент, не имеющей точной ширины, обернув его в другой блочный элемент. Для этого нужно приложить немного усилий.

К счастью, есть очень простой способ достичь этого. Если вы уже видели пример вертикального центрирования элемента, когда этот элемент сначала перемещается вниз на 50%, а затем родительский элемент смещается вверх на 50% — в результате чего мы получаем вертикально выровненный элемент, то этот способ будет вам знаком. К сожалению, данный метод вертикального центрирования работает только в браузерах IE, но если мы используем его для горизонтального выравнивания элемента, то этот метод поймут и остальные браузеры.

.xouter{
  position:relative;
  left:50%;
  float:left;
  clear:both;
  margin:10px 0;
  text-align:left;
}
.xinner{
  border:1px solid #000;
  padding:10px 20px;
  position:relative;
  left:-50%;
  text-align:left;
}

Браузер IE5 на Mac отобразит результат применения данного способа неверно. Решением этой проблемы является использование display:inline-block для выравниваемого элемента. Причина использования плавающего блока без явного указания ширины в том, что он обертывает контент так, как нам этого хотелось.

Внешний элемент перемещается на 50% от левого края с использованием position:relative (указание этого необходимо для того, чтобы этот блок не выбивался из нормального потока документа). Внутренний элемент перемещается назад на 50% влево так же с использованием postion:relative — все это в совокупе позволяет нам выровнить блок, не имеющий точной ширины, точно посередине.

Использование этого метода порождает одну проблему: если выравниваемый блок имеет ширину большую половины размера окна, то в этом случае появляется полоса прокрутки (это относится как к вертикальному выравниванию, так и к горизонтальному — примеч. переводчика).

Ниже несколько примеров использования описанного метода.

This is some text of undefined width:

This is more text

This assumes text doesn't need to wrap

otherwise it will stretch full width

  • List elements with no width
  • List elements with no specified width with no specified width
  • List elements no specified width
  • List with no width
  • elements with no specified width

This is the usual method of centering and centres a block level element centred using margin-left:auto and margin-right:auto on an element of specified width (px, perentage or em are fine). Note that ie5.+ would text-align:center on a parent in order to center this block level element. This method does need a width.

This text is centred using text-align:center

This block of short lines

is centred

Using the left:50% and left:-50% technique

.outer{
position:relative;
left:50%;
float:left;
clear:left;
margin-bottom:10px;
}
.inner{
border:1px solid #000;
padding:10px 20px;
position:relative;
left:-50%;
text-align:left;
}

More widthless elements

Links:Contact|E-Mail|Main Page|Other
Copyright © 2006

Данная статья является переводом. При желании вы всегда можете прочитать эту статью на английском языке.

Комментарии

Антон 19.06.2007 15:16:52 #
Очень полезная статья!! Давно искал замену табличному варианту и вот -- нашел. Советую взять на заметку всем, кто так или иначе связан с версткой.
Заглянул на англоязычный сайт http://pmob.co.uk/ -- очень полезный ресурс!

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

Ваше имя

Ваш комментарий

Код   Защитный код. Если вы не видите здесь рисунок - обновите страницу.
Оценка   

Заметки по этой теме