Перейти до основного вмісту

Позиційовані елементи

За замовчуванням елементи на сторінці розташовуються зліва направо і зверху вниз. А як зробити напис на зображенні товару, показати один елемент поверх іншого при ховері або змусити меню завжди бути прикріпленим до верхньої частини в'юпорту, навіть під час скролу? Для вирішення подібних завдань існує властивість position, що дозволяє буквально підняти елемент і розмістити його поверх будь-якого іншого.

Типи позиціонування

Статичне позиціонування (static) - це початковий стан всіх елементів веб-сторінки. Блокова модель і флексбокс розташовують елементи саме в цьому статичному потоці сторінки. Відносне (relative), абсолютне (absolute) і фіксоване (fixed) позиціонування дозволяють підняти елемент над потоком сторінки і вручну його позиціонувати, використовуючи систему координат, початок якої залежить від типу позиціонування.

Увага

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

Властивість position

Змінює тип позиціонування елемента. За замовчуванням встановлено значення static. Для зазначення положення елемента використовуються властивості top, left, bottom або right, які застосовуються до елементів без position.

position: static | relative | absolute | fixed | sticky | inherit

Елемент, значення властивості position якого відрізняється від static, називається «позиційований елемент».

Позиційовані елементи

Відносне позиціонування

Під час використання відносного позиціонування елемент залишається в потоці сторінки, тобто сусідні елементи не займають його місце. Проте, візуально елемент можна зсунути щодо його оригінального положення, водночас він може перекривати сусідів.

Відносне позиціонування

Властивості top, left, bottom і right дозволяють вказати зміщення елемента (візуальне) щодо його вихідного положення. Можуть приймати від'ємні значення.

Координати при відносному позиціонуванні
Корисно

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

Створимо три блоки. Середньому div.relative встановимо відносне позиціонування і візуально змістимо його вправо і вниз щодо початкового положення.

Абсолютне позиціонування

Під час використання абсолютного позиціонування елемент виривається з потоку сторінки, тобто сусідні елементи займають його місце. Відлік значень top, left, bottom і right для абсолютно позиційованого елемента ведеться щодо найближчого предка з позиціонуванням, відмінного від статичного. Якщо такого предка не буде, то відлік буде здійснюватися від меж елемента <body>.

Координати при абсолютному позиціонуванні

Абсолютне позиціонування не дуже корисне самостійно, і використовується, наприклад, разом із відносним для декоративного позиціонування елементів. Тобто елемент «абсолютно» позиціонується «щодо» якогось свого предка, який знаходиться в потоці сторінки.

Координати при абсолютному позиціонуванні

Тоді значення top, left, right і bottom для абсолютно позиціонованого елемента відраховуються від меж цього предка, а не від <body>. Тобто встановлення position: relative предку використовується з єдиною метою - змусити абсолютно позиційований елемент розташовуватися щодо цього предка.

Корисно

Запис bottom: 20px означає відстань між нижньою межею щодо позиціонованого предка і нижньою межею абсолютно позиціонованого елемента. Аналогічно працюють right, left і top - задається відстань між однойменними сторонами предка і елемента.

Створимо три блоки із зображенням і текстом в кожному. Задамо div.thumb відносне позиціонування, а p.label - абсолютне, щоб можна було поставити текст поверх зображення в цьому блоці. Не забуваємо прибрати у p.label зовнішній відступ (margin), оскільки він впливає на зміщення самого елемента, але не на інші елементи в потоці.

Увага

Якщо не поставити div.thumb відносне позиціонування, то всі три p.label опиняться у верхньому правому куті вікна, оскільки значення top і right будуть відраховуватися щодо елемента <body>.

Фіксоване позиціонування

У разі фіксованого позиціонування, елемент вилучається з потоку сторінки і позиціонується щодо в'юпорту (вікна браузера). Це створює ефект фіксації елемента в певному місці екрану при прокручуванні сторінки.

Координати при фіксованому позиціонуванні

Фіксоване позиціонування використовується для закріплених хедерів з навігацією, спливаючих вікон, чатів з менеджером на сторінках інтернет-магазинів тощо.

Фіксована шапка

Створимо кнопку чату з менеджером button.chat-button і помістимо її в нижній правий кут в'юпорту. Під час прокручування сторінки кнопка залишається на місці, тому що у неї фіксоване позиціонування.

Липке позиціонування

Липке позиціонування (sticky) - це ніби комбінація властивостей relative і fixed. Для початку подивіться на ілюстрацію, на якій липке позиціонування задається елементам з літерами A і B, таким чином відразу буде зрозуміло.

Липке позиціонування
  1. Доки елемент знаходиться у своєму контейнері і контейнер не покидає область видимості під час вертикальної прокрутки - елемент поводить себе ніби позиціонується щодо (relative).
  2. Щойно частина батьківського контейнера залишає зону видимості, елемент фіксується на сторінці доти, доки хоча б якусь частину контейнера видно на екрані.
  3. Якщо весь контейнер покине зону видимості, то знову увімкнеться поведінка як під час відносного позиціонування - елемент зникне з екрану одразу після контейнера.

Для реалізації липкого позиціонування необхідні всього три умови:

  • У липкого елемента повинно бути встановлено позиціонування position: sticky.
  • У липкого елемента повинно бути встановлено положення, наприклад top: 0.
  • Елемент-контейнер повинен бути більшим по висоті за липкий елемент.

Заголовки секцій в прикладі зроблені липкими, тому, під час прокручування сторінки вони будуть «прилипати» до верху області перегляду доти, доки видима будь-яка частина їх секції.