Открыть меню    

CSS позиционирование

В этой статье будут рассмотрены различные объявление, которые применяются для позиционирования элементов: position:static, position:relative, position:absolute, и свойство float.

1. position:static

Значение по умолчанию. В потоке вывода элемент не позиционируется и располагается в соответствие с разметкой документа.

CSS

 #div-1 
              {
              position:static;
              } 
блок position:static

2. position:relative

Элемент позиционируется относительно его исходного местоположения. Регулировать местоположение элемента можно с помощью свойств left, right, top и bottom.

CSS

 #div-1 
              {
              position:relative; 
              top:20px;
              left:-40px; 
              } 
relative

Как видно, при смещении блока (#div-1) остается пустое пространство там, где стоял до смещения блок #div-1. При смещении блока #div-1 следующий за ним элемент (#div-after) остается на своем прежнем месте. Это происходит, потому что для всех остальных блоков в документе блок (#div-1) по-прежнему занимает свое первоначальное местоположение.

3. position:absolute

Если свойству position задано значение absolute, элемент удаляется из потока, а все последующие элементы сдвигаются вверх.

CSS

 #div-1a 
              {
              position:absolute; 
              top:0;
              right:0;
              width:200px;
              } 
блок позиционирован абсолютно

Элемент позиционируется относительно родительского элемента. В том случае, если родительский элемент не позиционирован, элемент позиционируется относительно body.

В моем примере элемент позиционируется относительно body.

4. position:relative + position:absolute

Если мы зададим блоку #dev-1 объявление position:relative, другие элементы внутри блока #dev-1 будут позиционироваться относительно блока #dev-1. К примеру, если блок #dev-1a имеет position:absolute, его можно легко расположить вверху и справа относительно блока #dev-1.

CSS

 
              #div-1
              {
              position:relative;
              } 
              #div-1a 
              {
              position:absolute;
              top:0;
              right:0; 
              width:200px;
              } 
блок relative и absolute

5. Две абсолютно позиционированные колонки

Сделаем макет из двух колонок с помощью абсолютного и относительного позиционирования.

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

CSS

              #div-1 
              {
              position:relative;
              }
              #div-1a 
              {
              position:absolute; 
              top:0;
              right:0;
              width:200px;
              }
              #div-1b 
              { 
              position:absolute;
              top:0; 
              left:0;
              width:200px; 
              } 
две колонки абсолютно позиционированные

Где же другие элементы? Спросите вы, взглянув на картинку. Дело в том, что абсолютно позиционируемые элементы закрыли собой другие элементы. Что можно с этим сделать?

6. Высота абсолютно позиционируемых колонок

Первое решение: зафиксировать высоту у "родителя" абсолютно позиционированных элементов.

CSS

 
              #div-1 
              {
              position:relative;
              height:250px;
              }
              #div-1a 
              {
              position:absolute;
              top:0;
              right:0;
              width:200px;
              }
              #div-1b 
              {
              position:absolute;
              top:0;
              left:0; 
              width:200px;
              } 
фиксируем высоту у позоц. колонок

Это решение, к сожалению, в большинстве случаях не приемлемо, так как количество текста в таких колонках предсказать иногда никак невозможно.

7. Float

Для растягивающихся колонок абсолютное позиционирование не годится, поэтому самое время придумать другое решение.

Мы можем применить свойство float и расположить элементы по краям (левому или правому), причем текст будет обтекать эти элементы. Хотя обычно свойство float используется для изображений, мы будем применять его для позиционирования элементов, ведь альтернатив практически нет.

CSS

              #div-1a 
              { 
              float:left; 
              width:200px; 
              } 
плавающий элемент

8. "Плавающие" (float) колонки

Если мы зададим двум колонкам float:left, то другие блоки (кроме текста в этих блоках, который будет обтекать "плавающее" блоки) поднимутся и займут их место.

CSS

 
              #div-1a 
              {
              float:left;
              width:150px;
              }
              #div-1b 
              {
              float:left; 
              width:150px;
              } 
2 плавающий колонки

9. Плавающие колонки и clear

С помощью свойства clear можно отменить обтекание, и тогда элемент (#div-1c) расположится под "плавающими" колонками.

CSS

 
              #div-1a 
              {
              float:left;
              width:190px;
              }
              #div-1b 
              {
              float:left; 
              width:190px; 
              } 
              #div-1c 
              { 
              clear:both;
              } 

Позиционирование: заключение

Эти примеры сильно упрощены и они не отменяют наличия ошибок в некоторых браузерах (например в таком мертвом браузере как ie6).

Комментарии к статье