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

Властивість position використовується разом з top, right, bottom і left для позиціювання елементу в потрібному місці.
Розміри абсолютно позиціонованого елементу(absolute), який має встановлене значення auto для властивостей width і height, відповідають його вмісту. Тим часом, блок може займати всю можливу висоту батьківського елементу, якщо має встановлене значення 0 для top i bottom, а також невизначену висоту (auto). Таким чином також може бути розтягнутий по горизонталі: із визначеними left i right та невизначеною шириною.
Але в усіх інших випадках:
- якщо одночасно встановлене значення для
topibottom(й визначена висота), застосовуєтьсяtop(bottomігнорується);
- якщо одночасно встановлене значення для
leftiright(й визначена ширина), застосовуєтьсяleftякщо дляdirectioвстановлене значенняltr(значення без задання), іrightякщоrtr.
Загальний опис
автор: NagarD
- Нотатка
-
Браузер Safari підтримує значення
автор: NagarD-webkit-sticky.
Синтаксис
position: static|absolute|fixed|relative|sticky|initial|inherit;
Властивість position може отримувати 7 значень:
-
static -
Елементи відображаються як зазвичай (в потоці формування документа). Використання властивостей
автор: NagarDleft,top,right,bottomтаz-indexне призводить до будь-яких результатів. Без задання. -
absolute -
Видаляє елемент з загального потоку (місце, що звільнив елемент заповнюється іншими елементами) і вставляється відносно свого батьківського, не статично позиційованого елемента, якщо такого елемента немає, то їм вважається вікно браузера (При цьому ширина елемента, без задання, встановлюється за його вмістом). Нове місце розраховується за допомогою властивостей
left,top,rightтаbottomНа положення впливає значення властивості
positionбатьківського елемента. Так, якщо у батька значенняpositionвстановлено якstaticабо батька немає, то відлік координат ведеться від краю вікна браузера.Якщо у батька значення position задано як
автор: NagarDrelative, то відлік координат ведеться від краю батьківського елементу. -
fixed -
За своєю дією це значення близьке до
автор: NagarDabsolute, але на відміну від нього позиціонує елемент відносно вікна браузера, а не документа та не змінює свого положення при прокручуванні веб-сторінки. -
relative -
Відносне позиціювання. Положення елемента встановлюється відносно його поточного положення. Додавання властивостей
автор: NagarDleft,top,rightіbottomзмінює позицію елемента і зрушує його в ту чи іншу сторону. Ця властивість дозволяє змінюва ти позицію елемента без зміни макету. -
sticky -
Це поєднання відносного і фіксованого позиціонування. Елемент розглядається як відносно позиційований і прокручується разом з вмістом сторінки до тих пір, поки він не перетинає певний поріг, після чого він стає фіксованим. Зазвичай застосовується для фіксації заголовка на одному місці, доки вміст, до якого належить заголовок, прокручується на сторінці.
автор: NagarD -
initial -
Встановлює властивість у значення без задання.
автор: NagarD -
inherit -
Вказує на спадковість властивостей від свого батьківського елемента.
автор: NagarD
| Значення без задання: | static |
|---|---|
| Наслідує: | Ні |
| Анімується: | Ні |
| JavaScript синтаксис: | object.style.position="absolute" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 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 | Не підтримується |
| Переглядач | ||||
|---|---|---|---|---|
| 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'));
}));
Однакова позначка з 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;
}
Значення, які можна задавати для властивості 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
Приклад використання властивості 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;
}
Демонстрація роботи властивості.
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;
}
Коментарі
Коментарів ще немає — будьте першим!