Найти в Дзене
Тора go!

Позиционирование

Всем самый добрый день! Сегодня я хочу с Вами поговорить о такой интересной теме как “позиционирование”. Новичкам бывает трудно вникнуть в само это понятие.
Позиционирование задается правилом position, в котором указывается одно из нескольких значений. Значением по умолчанию является - static. Если нас оно устраивает, то правило position: static; мы писать не должны. Запись на скриншоте сверху равноценна записи на скриншоте ниже. Однако, если по какой-то причине нам нужно отличное от static позиционирование, мы будем вынуждены прописать правило position и указать требуемое нам значение. Итак, какие они бывают помимо static: Разберем каждое из них. 1. Position: relative; - свой среди чужих, чужой среди своих. Элемент с таким позиционированием не будет вырван из потока документа и подобно static будет подчиняться всем правилам, которые могут воздействовать на него со стороны других элементов. Однако, если его ввели, значит оно чем-то все же отличается от static. Дело в том, что элемент

Всем самый добрый день!

Сегодня я хочу с Вами поговорить о такой интересной теме как “позиционирование”. Новичкам бывает трудно вникнуть в само это понятие.
Позиционирование задается правилом
position, в котором указывается одно из нескольких значений.

Значением по умолчанию является - static. Если нас оно устраивает, то правило position: static; мы писать не должны.

Запись на скриншоте сверху равноценна записи на скриншоте ниже.

-2

Однако, если по какой-то причине нам нужно отличное от static позиционирование, мы будем вынуждены прописать правило position и указать требуемое нам значение.

Итак, какие они бывают помимо static:

  • Relative
  • Absolute
  • Fixed
  • Sticky

Разберем каждое из них.

1. Position: relative; - свой среди чужих, чужой среди своих.

Элемент с таким позиционированием не будет вырван из потока документа и подобно static будет подчиняться всем правилам, которые могут воздействовать на него со стороны других элементов. Однако, если его ввели, значит оно чем-то все же отличается от static. Дело в том, что элемент с “относительным” (именно так переводится relative) позиционированием становится податливым для таких правил как top, left, right, bottom. За точку отсчета этих правил он берет самого себя.

Тут нужно сделать отступление и сказать, что несмотря на то, что мы как пользователи смотрим на документ и он нам кажется двухмерным, третье измерение (назовем его высотой) у него всё-таки есть, и направлено оно на нас - это ось Z. Так вот, при “статичном” позиционировании правило отвечающее за расположение элемента по оси Z (z-index) принимает значение auto. С таким значением элемент располагается в одной плоскости с остальным документом.

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

Самое близкое сравнение всего вышеописанного, на мой взгляд, это человек с воздушным змеем. Человек стоит на месте (элементу всё так же выделяется место в потоке документа), а змей связанный с этим человеком нитью накладывается поверх (смещение с помощью left, top, bottom, right) всего того, что окружает человека.

Где может пригодиться position: relative;? Возьмем хотя бы случай, когда на каком-то блоке нужно затемнить фон с помощью “маски”, но текстовые элементы должны быть поверх этой маски. Самый простой способ это сделать - задать этим текстовым элементам position: relative; и если потребуется увеличить z-index.

Сделаем блок-заглушку:

-3

Подопытным элементом выступать будет span с классом relative. Внесем следующие правила в CSS:

-4

И получим, ничем не примечательную картинку:

-5

Наш элемент располагается как и все, в общем потоке текста, если бы не выделение его цветом, то остался бы он незамеченным.

А теперь давайте попробуем воздействовать на него правилом top со значением 17px:

-6

И получим следующую картину:

-7

Тут мы видим три вещи:

- элемент сместился относительно себя на 17px вниз (оттолкнулся от верха), - элемент “залез” на соседа снизу,
- и место для элемента осталось в потоке документа выделено несмотря на то, что он “уполз”.

2. Position: absolute; - он теряет корни, и улетает в небо.

Абсолютное позиционирование, на мой личный взгляд, не такое уж абсолютное. Надеюсь я смогу до вас далее донести, почему я так считаю.

Чем же отличается абсолютно позиционирование? Перво-наперво, оно вырывает элемент из потока документа, и теперь в потоке для элемента не выделяется место. Если вспомнить относительное позиционирование - элемент был “привязан” к своему прежнему месту, в случае же с абсолютным позиционированием - элемент привязан к ближайшему предку с позиционирование отличным от static. Если же таких нет, то относительно всего документа.

Давайте разбираться:

-8

Тут мы изменили нашему span class, это не обязательно, но сделаем чтобы не путаться.

Пропишем следующие правила для нового класса:

-9

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

-10

Видим две вещи:
- элемент улетел в верхний левый угол экрана, он позиционируется относительно всего документа, так как среди его предков нет ни одного с позиционированием отличным от статичного.
- в потоке текста место, которое занимал элемент, теперь занято другими словами.

А что если среди его предков был бы элемент с позиционированием отличным от static?

-11

Введем для блока относительное позиционирование, и увидим следующее:

-12

Наш “скиталец” теперь пристроился в углу этого блока, так как он является ближайшим предком с позиционирование отличным от static.

Что ещё мы можем сказать про абсолютное позиционирование?

Элемент с таким позиционированием по умолчанию занимает пространство достаточное, для отображения элемента, но не более того. Однако, если задавать элементу противоположные значения (например, top и bottom) - его можно растянуть.

Кроме того элемент с абсолютным позиционированием получает display: block;.

Двинемся дальше.

3. Position: fixed; - всегда с тобой.

Элемент с фиксированным позиционированием теряет место, выделяемое ему в документе (точно так же, как и с абсолютным позиционированием). Однако, привязывается и позиционируется элемент с фиксированным позиционированием относительно области просмотра (viewport). То есть даже при прокрутке вертикальной, равно как и горизонтальной, элемент остается в поле зрения. Часто такое позиционирование задают навигациям и меню.

ШТОШ, посмотрим как это выглядит:

-13

Вновь изменим класс нашему элементу.

-14

Что мы можем увидеть на этой “картине”?

Первое - несмотря на то, что у родителя позиционирование отличное от static - наш скиталец позиционируется относительно всего документа в целом. Полосу прокрутки мы создали путем уменьшения ширины, отводимой нашему тексту в 10 раз, таким образом он стал занимать больше места по вертикали.

Теперь попробуем прокрутить экран вниз:

-15

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

В остальном, этот вид позиционирования считается подвидом абсолютно позиционирования. Но на мой взгляд является куда более абсолютным, чем абсолютное позиционирование :D

4. Position: sticky; - банный лист.

Последнее позиционирование, которое мы рассмотрим - липкое. Прицепится как банный лист, и ничего с ним не сделать.

Чем же он отличается от остальных типов позиционирования?

Элемент располагается в нормальном потоке документа где-то на странице, но когда он должен выйти из области просмотра вследствие прокрутки экрана - он остается в области просмотра, занимая новое место.

Давайте посмотрим как это работает:

-16

Вновь меняем, ради порядка разумеется, класс подопытному кролику.

-17

Прописываем правила.

-18

Наш элемент располагается на своем месте в общем потоке документа.

Но, что если мы прокрутим полосу вниз?

-19

Элемент остался на экране, на заданном через top: 0; месте.

Мы рассмотрели все варианты позиционирования. Ничего сложного :)

Надеюсь, мне удалось донести информацию о том, чем они отличаются и как их применять. Остались вопросы? Комментарии - наше всё.

Помните, глупых вопросов не бывает. Самый глупый вопрос тот, что не был задан.

Желаю Вам успеха!