Різниця між статичним та відносним розташуванням


89

У чому різниця між статичним (за замовчуванням) і відносним позиціонуванням у CSS?


21
Різниця в тому , що ви часто типу position: relative, і ви ніколи не набрати position: static:)
thirtydot

Відповіді:


168

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

статично розташовані елементи підпорядковуються нормальному потоку HTML.

Відносне позиціонування дозволяє задати певне зміщення ( left, і topт.д.) , яка є відносно нормального положення елемента в потоці HTML. Отже, якщо у мене є текстове поле всередині, divя можу застосувати відносне позиціонування в текстовому полі, щоб воно відображалося в певному місці відносно того, де воно зазвичай розміщується в межах div:

відносно розташовані елементи підпорядковуються потоку HTML, але надають можливість регулювати своє положення відносно їх нормального положення в потоці HTML.

Існує також абсолютне позиціонування - за допомогою якого ви вказуєте точне розташування елемента відносно всього документа або наступного відносно розташованого елемента далі вгору по дереву елементів :

абсолютно позиціоновані елементи виведені з потоку HTML і можуть бути розміщені в певному місці документа ...

І коли a position: relativeзастосовується до батьківського елементу в ієрархії:

... або розміщений відносно першого батьківського елемента в дереві HTML, який розміщений відносно.

Зверніть увагу, як наш абсолютно позиційний елемент пов'язаний відносно позиціонованим елементом.

І нарешті це виправлено. Фіксоване позиціонування обмежує елемент до певної позиції у вікні перегляду, яка залишається на місці під час прокрутки:

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

Ви також можете спостерігати за поведінкою того, що елементи з фіксованим розташуванням не викликають прокручування, оскільки вони не вважаються пов'язаними областью перегляду:

фіксовані елементи не впливають на прокрутку.

Тоді як абсолютно розташовані елементи все ще пов’язані областью перегляду і спричинять прокрутку:

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

..крім звичайно, ваш батьківський елемент використовує overflow: ?для визначення поведінки прокрутки (якщо така є).

При абсолютному позиціонуванні та фіксованому позиціонуванні елементи виводяться з потоку HTML.


4
Хороша відповідь, але (для відносного положення) хіба зміщення не базується на нормальному положенні елемента?
Baztoune

4
Я згоден з Базтуном, це визначення відносно розташованих елементів вводить в оману. A staticта relativeелемент однакові, за винятком останнього, ви можете змінити його розташування відносно вихідного положення , а не до вміщуючого елемента - саме там він absoluteвходить. Крім того, як і будь-який елемент, позиціонований з використанням іншого значення, ніж staticви можете використовувати z-index.
Райан Вільямс,

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

3
Цікаво, чому CSS все-таки реалізував би position: static;замість того, щоб просто замінити його position: relative;за замовчуванням? Якщо хтось не хоче розміщувати елемент інакше, top: 0;а left: 0;тоді давайте не будемо цього робити, так? Чи є основна причина того, чому position: static;все ще вимагається як частина CSS?
cram2208

8
@ cram2208, тому що відносне змушує дочірнє розташування вузлів із абсолютним розташуванням відносно них, статичне дозволяє абсолютно розташованим дітям ігнорувати своє положення та розташовуватися відносно найближчого відносно розташованого елемента. Це важлива концепція
Феліпе

7

Ви можете побачити простий огляд тут: W3School

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


29
w3schools ... Я не буду проти цього, але ви повинні жити з ганьбою.
Myles Gray

4
Тим часом, у 2017 році W3Schools не настільки поганий, як раніше (він все ще не ідеальний, але вони сприйняли реакцію спільноти серйозно і фактично покращили).
Priidu Neemre

Тим часом, у 2018 році W3Schools все ще не настільки поганий, як колись, але їм шкода, що їхня репутація навіть сьогодні така, що згадування вищезгаданого першого коментаря іншим розробникам все одно отримує класичний посміх ... назад в мої часи ... W3School .... перші враження, ей ...
redfox05

7

У відповідь на "чому CSS все ще реалізує position: static;" в одному сценарії, використовуючи позицію: відносна для батьків і позиція: абсолютна для дитини, обмежує масштабовану ширину дитини. У горизонтальній системі меню, де ви можете мати "стовпці" посилань, використання "width: auto" не працює з відносними батьками. У цьому випадку зміна його на "статичне" дозволить змінювати ширину залежно від вмісту всередині.

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


Це ВІДПОВІДЬ! Усі говорять плюси лише за відносне позиціонування, пропускаючи суть у такому питанні: яка різниця.
Бартіс Арон,

5

Позиційне відношення дозволяє використовувати верхній / нижній / лівий / правий для позиціонування. Статистика не дозволить вам цього зробити, якщо ви не використовуєте параметри поля. Існує різниця між Top і margin-top.

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


2

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


2

Метью Еббот має справді хорошу відповідь.

Абсолютні і відносні позиційований деталі підкоряються top, left, rightі bottomкоманди (зміщення) , де статичні розташовані елементи не.

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

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


0

Статичні: СТАТИЧНИЙ позиціонований елемент - це те, що ми отримуємо за замовчуванням (нормальне позиціонування об’єктів).

Відносно: відносно поточної позиції, але може бути переміщено. Або RELATIVE позиціонований елемент позиціонується відносно САМОГО.


0

static і relative - це атрибути позиції. relative використовується для багатьох цілей. Не для одного. Але майте на увазі, що статичні та відносні не шкодять нормальному документообігу HTML. static - це типове положення, яке при записі будь-якого елемента в Html. Якщо елемент має відносне положення, цей елемент може бути розміщений відносно його рідного місця. коли ви хочете скоригувати елемент з малих пробілів, використовуйте відносне положення, щоб вам не потрібно було додавати поле, відступ і т. д., якщо елемент має відносну позицію та має дочірній елемент. Тут ми можемо проводити вимірювання відносно батьківського рівня. Якщо ви додаєте дочірню ширину 10%, це означає (ширина + відступ) x10%. Але ви не додаєте відносне ключове слово, ви отримуєте widthx10%. Крім цього, найважливішим використанням родича є; Ви можете розташувати будь-який елемент зверху.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.