CSS position — static, relative, absolute, fixed і sticky


Властивість position визначає тип позиціювання відносно вікна браузера або інших елементів: static, relative, absolute, fixed або sticky (статичний, відносний, абсолютний, фіксований або клейкий).

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

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

Розміри абсолютно позиціонованого елементу(absolute), який має встановлене значення auto для властивостей width і height, відповідають його вмісту. Тим часом, блок може займати всю можливу висоту батьківського елементу, якщо має встановлене значення 0 для top i bottom, а також невизначену висоту (auto). Таким чином також може бути розтягнутий по горизонталі: із визначеними left i right та невизначеною шириною.

Але в усіх інших випадках:

  • якщо одночасно встановлене значення для top i bottom (й визначена висота), застосовується top (bottom ігнорується);
  • якщо одночасно встановлене значення для left i right (й визначена ширина), застосовується left якщо для directio встановлене значення ltr (значення без задання), і right якщо rtr.
автор: NagarD

Загальний опис

автор: NagarD

Нотатка

Браузер Safari підтримує значення -webkit-sticky.

автор: NagarD

Синтаксис

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

Властивість position може отримувати 7 значень:

static

Елементи відображаються як зазвичай (в потоці формування документа). Використання властивостей left, top, right, bottom та z-index не призводить до будь-яких результатів. Без задання.

автор: NagarD

absolute

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

На положення впливає значення властивості position батьківського елемента. Так, якщо у батька значення position встановлено як static або батька немає, то відлік координат ведеться від краю вікна браузера.

Якщо у батька значення position задано як relative, то відлік координат ведеться від краю батьківського елементу.

автор: NagarD

fixed

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

автор: NagarD

relative

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

автор: NagarD

sticky

Це поєднання відносного і фіксованого позиціонування. Елемент розглядається як відносно позиційований і прокручується разом з вмістом сторінки до тих пір, поки він не перетинає певний поріг, після чого він стає фіксованим. Зазвичай застосовується для фіксації заголовка на одному місці, доки вміст, до якого належить заголовок, прокручується на сторінці.

автор: NagarD

initial

Встановлює властивість у значення без задання.

автор: NagarD

inherit

Вказує на спадковість властивостей від свого батьківського елемента.

автор: NagarD

Значення без задання: static
Наслідує: Ні
Анімується: Ні
JavaScript синтаксис: object.style.position="absolute"

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 4 12 4
static, relative, absolute 1.0 1.0 1.0 4.0 12.0 4.0
fixed 4.0 1.0 1.0 4.0 12.0 7.0
sticky 56.0 32.0 6.1 <br> -webkit-sticky 42.0 16.0 Не підтримується
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
static, relative, absolute 1.0 1.0 1.0
fixed 1.0 1.0 1.0
sticky Не підтримується 32.0 6.1 <br> -webkit-sticky

Приклади

+ запропонувати свій приклад у пісочниці

HTML

<p>Цей приклад показує як працює властивість <code>position</code>. Спробуйте вимкнути/ввімкнути перемикач, щоб змінити тип позиціонування елементу нижче. Далі змінюйте значення для самих власне координат.</p>

<div class="inputs">
  <input id="static" checked name="position" type="radio"/>
  <label for="static">static</label>
  <message for="static">Елементи відображаються як зазвичай (в потоці формування документа).</message>
  
  <input id="relative" name="position" type="radio"/>
  <label for="relative">relative</label>
  <message for="relative">Відносне позиціювання. Положення елемента встановлюється відносно його поточного положення.</message>
  
  <input id="absolute" name="position" type="radio"/>
  <label for="absolute">absolute</label>
  <message for="absolute">Видаляє елемент з загального потоку (місце, що звільнив елемент заповнюється іншими елементами) і вставляється відносно свого батьківського.</message>
  
  <input id="fixed" name="position" type="radio"/>
  <label for="fixed">fixed</label>
  <message for="fixed">За своєю дією це значення близьке до absolute, але на відміну від нього позиціонує елемент відносно вікна браузера, а не документа та не змінює свого положення при прокручуванні веб-сторінки.</message>
</div>

<div class="wm">
  <p id="message">Елементи відображаються як зазвичай (в потоці формування документа). Без задання.</p>
</div>

<hr>

<strong>left: </strong>
<input type="number" class="input" id="left" value="0">px
<strong>;</strong><br><br>

<strong>top: </strong>
<input type="number" class="input" id="top" value="0">px
<strong>;</strong><br><br>

<hr>

<div class="box">
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
  <div id="block"></div>
</div>

CSS

* {
  box-sizing: border-box;
  padding: 0;
}

body {
  font-family: system-ui, sans-serif;
}

#block {
  width: 75px;
  height: 75px;
  background-color: gold;
  position: static;
  left: 0px;
  top: 0px;
  transition: all .15s ease-in;
}

message {
  display: none;
}

.wm {
  min-height: 100px;
}

.box {
  max-width: 450px;
  height: 100vh;
  position: relative;
  background-color: #ccc;
  margin: 0 auto;
  padding: 16px;
}

hr {
  margin-bottom: 16px;
}

JS

const message = document.querySelector('#message');

document.querySelectorAll('.inputs input').forEach((el) => el.addEventListener('change', function () {

  var messageText = document.querySelector("message[for='" + this.id + "']");
  message.textContent = messageText?.textContent ?? '';
  document.querySelectorAll('#block').forEach((n) => n.style.setProperty('position', this.id));

}));

document.querySelectorAll('.input').forEach((el) => el.addEventListener('change', function () {

  var left = document.querySelector('#left').value;
  var top = document.querySelector('#top').value;

  document.querySelectorAll('#block').forEach((n) => n.style.setProperty('left', left + 'px'));
  document.querySelectorAll('#block').forEach((n) => n.style.setProperty('top', top + 'px'));

}));
автор: NagarD

Однакова позначка з position: absolute у двох картках: у лівої батько має position: relative, у правої — ні.

HTML

<div class="row">
    <div class="card rel">
        <span class="badge">-50%</span>
        Батько: <b>position: relative</b>
    </div>
    <div class="card">
        <span class="badge">-50%</span>
        Батько статичний — позначка втекла до кута сторінки
    </div>
</div>

CSS

body {
    font-family: sans-serif;
    font-size: 15px;
    line-height: 1.45;
    padding: 40px 24px;
}

.row {
    display: flex;
    gap: 24px;
}

.card {
    width: 180px;
    padding: 14px;
    border: 1px solid #cfd4d9;
    border-radius: 6px;
}

.rel {
    position: relative;
}

.badge {
    position: absolute;
    top: -12px;
    right: -12px;
    padding: 4px 9px;
    border-radius: 12px;
    background: #d93526;
    color: #fff;
    font-size: 13px;
}
автор: NagarD

Значення, які можна задавати для властивості position.

HTML

<form id="form">
  <p>Вибрати тип позиціонування:</p>
  <label><input type="radio" value="static" name="radio">static</label>
  <label><input type="radio" value="absolute" name="radio">absolute</label>
  <label><input type="radio" value="relative" name="radio">relative</label>
  <label><input type="radio" value="sticky" name="radio">sticky</label>
  <label><input type="radio" value="fixed" name="radio">fixed</label>
</form>

<hr>
<p id="text"></p>
<hr>

<div class="wrapper">
  <div id="block">
    <code>top: 25px;</code>
    <br>
    <code>left: 40px;</code>
  </div>
</div>

CSS

body {
  font-family: sans-serif;
  font-size: 17px;
  line-height: 1.4;
}

input[type=radio] {
  margin-right: 8px;
}

label {
/*   display: block; */
/*   margin-bottom: 10px; */
}

.wrapper {
  position: relative;
  min-height: 1050px;
}

#block {
  border: 4px solid #666;
  padding: 36px 16px;
  max-width: 175px;
  text-align: center;
}

#text {
  line-height: 1.75;
}

JS

window.onload = function () {

  var textArray = { static: 'Елементи відображаються як зазвичай',
    absolute: 'Видаляє елемент з загального потоку',
    relative: 'Положення елемента встановлюється відносно його поточного положення',
    sticky: 'Елемент розглядається як відносно позиційований і прокручується разом з вмістом сторінки до тих під, поки він не перетинає певний поріг, після чого він стає фіксованим(тільки у найновіших браузерах)',
    fixed: 'Позиціонує елемент відносно вікна браузера, а не документа та не змінює свого положення при прокручуванні веб-сторінки' };

  var radioBtns = document.getElementsByName('radio');
  var block = document.getElementById('block');
  var result = null;
  var text = document.getElementById('text');

  document.getElementById('form').onchange = function () {
    for (var i = 0; i < radioBtns.length; i++) {if (window.CP.shouldStopExecution(0)) break;
      if (radioBtns[i].checked) {
        result = radioBtns[i].value;
      }
    }window.CP.exitedLoop(0);
    block.style.position = result;
    block.style.top = '250px';
    block.style.left = '40px';
    text.innerHTML = textArray[result];
  };

};
//# sourceURL=pen.js
автор: NagarD

Приклад використання властивості position

HTML

<div class="block">
   <p>Цей елемент розміщений на відстані від меж батьківського елементу за допомогою властивості <code>position</code>.</p>
</div>

CSS

.block {
  width: 225px;
  border: 4px solid #666;
  
  position: relative;
  top: 100px;
  left: 125px;
  
  padding: 16px;
  font-size: 18px;
  line-height: 1.4;
  font-family: sans-serif;
 }
автор: NagarD

Демонстрація роботи властивості.

HTML

<div class="info">
	<p>За допомогою властивості <code>position</code> ми можемо вказати тип позиціонування для елемента.</p>
	<p>Для темних блоків нижче, задано значення: <em>static</em>, <em>relative</em> й <em>absolute</em> відповідно, а також <em>16px</em> для top і left.</p>
</div>

<div class="wrapper">
	<div class="block one">
		<div class="content">
			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
			tempor incididunt ut labore et dolore magna aliqua.</p>
		</div>
		<div class="child"></div>
	</div>
	<div class="block two">
		<div class="content">
			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
			tempor incididunt ut labore et dolore magna aliqua.</p>
		</div>
		<div class="child"></div>
	</div>
	<div class="block three">
		<div class="content">
			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
			tempor incididunt ut labore et dolore magna aliqua.</p>
		</div>
		<div class="child"></div>
	</div>
</div>

CSS

* {
	box-sizing: border-box;
}

body {
	font-family: monospace;
	font-size: 17px;
}

.info {
	padding: 4px 6px;
}

code {
	font-weight: 700;
	color: #444;
	border-bottom: 2px solid #666;
}

.wrapper {
	display: flex;
	justify-content: space-around;
}

.block {
	width: 25%;
	height: 150px;
	background-color: gold;
	position: relative;
	font-size: 12px;
	padding: 4px;
}

.block .child {
	background-color: #222;
	display: inline-block;
	color: #fff;
	top: 16px;
	left: 16px;
	padding: 16px;
}

.block.one .child {
	position: static;
}

.block.two .child {
	position: relative;
}

.block.three .child {
	position: absolute;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід