Яка різниця між position: relative
і position: absolute
в CSS? І коли слід використовувати який?
Яка різниця між position: relative
і position: absolute
в CSS? І коли слід використовувати який?
Відповіді:
Абсолютне CSS-позиціонування
position: absolute;
Абсолютне позиціонування - це найлегше зрозуміти. Ви починаєте з position
властивості CSS :
position: absolute;
Це повідомляє веб-переглядачу, що все, що буде розміщено, слід вилучити із звичайного документообігу та розмістити в точному місці на сторінці. Це не вплине на те, як елементи перед ним або після нього в HTML розміщуються на веб-сторінці, однак це буде залежати від позиціонування батьків, якщо ви не перекриєте це.
Якщо ви хочете розташувати елемент на 10 пікселів у верхній частині вікна документа, ви використовуєте top
зсув до position
нього там з absolute
позиціонуванням:
position: absolute;
top: 10px;
Потім цей елемент завжди відображатиметься 10px
вгорі сторінки незалежно від того, який вміст проходить через, під або над елементом (візуально).
Чотири властивості позиціонування:
top
right
bottom
left
Щоб їх використовувати, потрібно розглядати їх як властивості зміщення. Іншими словами, розташований елемент right: 2px
не переміщується вправо 2px
. Його правий бік зміщений з правої сторони вікна (або його головного батьківського положення) на 2px
. Те саме стосується інших трьох.
Відносне позиціонування
position: relative;
Відносне позиціонування використовує ті самі чотири властивості absolute
позиціонування, що і позиціонування. Але замість того, щоб базувати положення елемента на порту перегляду браузера, він починається з того місця, де був би елемент, якби він все ще знаходився в нормальному потоці .
Наприклад, якщо у вас на веб-сторінці є три абзаци, а третій має position: relative
стиль, розміщений на ній, його положення буде зміщене на основі поточного місця розташування - не з оригінальної сторони порту перегляду.
Пункт 1.
Пункт 2.
Пункт 3. У наведеному вище прикладі третій абзац розміщуватиметься3em
з лівого боку елемента контейнера, але все ще буде нижче перших двох абзаців. Він залишатиметься в нормальному документообігу і просто трохи компенсується. Якщо ви змінили його position: absolute;
, все, що слід за ним, відображатиметься поверх нього, оскільки воно більше не буде в нормальному потоці документа.
Примітки:
за замовчуванням width
елемента, який абсолютно розміщений, - це ширина вмісту всередині нього, на відміну від елемента, який розміщується відносно там, де за замовчуванням width
є 100%
місця, яке він може заповнити.
У вас можуть бути елементи, які перетинаються з абсолютно розташованими елементами, тоді як ви не можете це робити з відносно розташованими елементами (як правило, без використання негативних поля / позиціонування)
багато витягнуто з: цього ресурсу
І «відносне», і «абсолютне» позиціонування дійсно відносні, просто з різними рамками. "Абсолютне" позиціонування відносно положення іншого, що охоплює елемента. "Відносне" позиціонування є відносно положення, яке має сам елемент без позиціонування.
Це залежить від ваших потреб та цілей, якими ви користуєтесь. "Відносна" позиція підходить тоді, коли ви бажаєте змістити елемент з положення, яке воно інакше було б мати в потоці елементів, наприклад, щоб деякі символи відображалися в надшироковому положенні. "Абсолютне" позиціонування підходить для розміщення елемента в деякій системі координат, встановлених іншим елементом, наприклад, для "надрукування" зображення з деяким текстом.
Як спеціальне, використовуйте "відносне" позиціонування без переміщення (просто встановлення position: relative
), щоб зробити елемент орієнтиром, щоб ви могли використовувати "абсолютне" позиціонування для елементів, що знаходяться всередині нього (у розмітці).
Relative positioning is relative to the position that the element itself would have without positioning
?? Елемент без позиціонування буде "статичним" за замовчуванням, але не відносним
Ще слід зазначити, що якщо ви хочете, щоб абсолютний елемент був обмежений батьківським елементом, вам потрібно встановити позицію батьківського елемента на відносну. Це збереже дочірній елемент, що міститься в батьківському елементі, і не буде "відносним" до всього вікна.
Я написав допис у блозі, де наводиться простий приклад, який створює наступний ефект:
У ньому є зелений div, який абсолютно розміщений внизу батьківського жовтого дива.
1 http://blog.troygrosfield.com/2013/02/11/working-with-css-positions-creating-a-simple-progress-bar/
Позиція відносна:
Якщо ви вкажете позицію: відносна, то ви можете використовувати верхній або нижній, а також лівий або правий, щоб перемістити елемент відносно того місця, в якому він зазвичай відбуватиметься в документі.
Абсолютна позиція:
Коли ви вказуєте позицію: абсолютний, елемент вилучається з документа і розміщується саме там, де ви скажете йому це перейти.
Ось хороший підручник http://www.barelyfitz.com/screencast/html-training/css/positioning/ із використанням вибірки обох позицій відповідно до абсолютного та відносного позиціонування.
Відносно: Відносно поточного положення, але його можна перемістити. Або ЕЛЕКТРИЧНИЙ розміщений елемент розташований відносно ITSELF.
Абсолют: Елемент, розміщений АБСОЛЮТ, розташований відносно БЛОКУВАННЯ БЕЗПЕЧЕНОГО БИТАНЯ. якщо такий присутній, він працює як фіксований ..... відносно вікна.
<div style="position:relative"> <!--2nd parent div-->
<div> <!--1st parent div-->
<div style="position:absolute;left:10px;....."> <!--Middle div-->
Md. Arif
</div>
</div>
</div>
Тут div
позиція 2-го батьків є відносною, тому середина div
змінить своє положення стосовно другого з батьків div
. Якщо div
позиція першого батька буде відносною, то середня div
змінює свою позицію відносно першого з батьків div
. Деталі
Відповідаючи, оскільки моя репутація недостатньо коментує. Але не дивись на це як на відповідь, просто додаткова інформація, як я, мала деякі проблеми як з колонтитулом, так і з позиціонуванням.
Під час налаштування сторінки таким чином, щоб моє колонтитул завжди залишався внизу, з абсолютним положенням, а основний контейнер / обгортка з відносним положенням.
Потім я виявив деякі проблеми з моїм текстовим вмістом і меню всередині того самого вмісту (біла частина сторінки між заголовком та нижним колонтитулом), коли їх встановлено на абсолютний, нижній колонтитул більше не залишається вниз.
Повідомлення - це, як ви кажете, складна тема.
Моє рішення, щодо вмісту, який я хотів у «абсолютному» положенні на своїй веб-сторінці, і не відсунути його в сторону, коли, наприклад, відкриваючи спадне меню, було насправді дати йому відношення до посади, і поставити його на 35ем нижче мого спаду меню. (35em - це висота мого спадного меню, коли воно повністю розширене)
Потім, Top: -35em, для вмісту, який раніше був відсунутий убік. А потім додаємо маржу внизу: -35em. Таким чином, вміст знаходиться "внизу" мого випадаючого меню, але візуально він знаходиться поряд з моїм спадною меню! А пробіл внизу до нижнього колонтитулу має лише 10-кратний запас, як це було до того, як почати займатися цим. Тож моє рішення для цього було таким:
html, body {
margin:0;
padding:0;
height:100%;
}
h1 {
margin:0;
}
#webpage {
position:relative;
min-height:100%;
margin:0;
overflow:auto;
}
#header {
height:5em;
width:100%;
padding:0;
margin:0;
}
#text {
position:relative;
margin-bottom:-32em;
padding-top:2em;
padding-right:2em;
padding-bottom:10em;
background-repeat:no-repeat;
width:70%;
padding-left:auto;
margin-left:auto;
margin-right:auto;
right:10em;
float:right;
top:-32em;
}
#dropdown {
position:absolute;
left:0;
width:20%;
clear:both;
display:block;
position:relative;
top:1em;
height:35em;
}
#footer {
position:absolute;
width:100%;
right:0;
bottom:0;
height:5em;
margin:0;
margin-top:5em;
}
Я бачу, що на ваше запитання відповіли добре, але після багатьох проблем я знайшов це дуже гарним рішенням і способом краще зрозуміти, як працює позиціонування .. Коли я розміщую свій текстовий вміст, під меню, що випадає, це не відбувається " t відсуньте мій текст убік. Якщо я змінив текст на позицію абсолютної, колонтитул не залишився на місці. Як я можу повірити, що це питання для більшої кількості людей, ніж я, я додаю це тут. Що насправді трапляється, це я поклав текст, 35ем, нижче моєї краплі вниз.
Потім я візуально поставив його поруч з іншим, з відносним положенням і вгорі: -35em ;, і ввечері вийшов величезний простір внизу, з запасом: -35em;
негативні значення занижуються часом, дуже хороша функціональність, коли хтось краще розуміє ці позиції!
Насправді фіксоване положення також здавалося логікою для мого нижнього колонтитулу, але я дійсно хочу, щоб нижній колонтитул переходив нижче області перегляду, якщо текст чи вміст довші, ніж вікно перегляду. І залишатися внизу, якщо на сторінці мало вмісту.
Цей параметр налаштував це дуже добре, і не забудьте використовувати "em", а не "px" для більш текучого / динамічного макета сторінки! :)
(можуть бути кращі рішення, але це працює для мене на крос-платформах, а також на пристроях).
Відносні проти абсолютного:
Давайте обговоримо сценарій, щоб пояснити різницю між абсолютним та відносним.
Всередині елемента корпусу кажуть, що у вас є елемент заголовка, висота якого 95% від висоти огляду, тобто 95vh. Всередині цього контейнера ви розмістили зображення і зменшили його непрозорість, щоб сказати 0,5. А тепер ви хочете розмістити зображення логотипу біля верхнього лівого кута. Сподіваюся, ви зрозуміли сценарій. Таким чином у вас буде світліше зображення в розділі заголовка з логотипом вгорі його у вказаному положенні.
Але перед тим, як почати це, я встановив маржу та прокладку на 0, як це
*{
margin:0px;
padding:0px;
box-sizing: border-box;
}
Це забезпечує відсутність за замовчуванням полів та накладки на елементи.
Таким чином, ви можете досягти своєї вимоги двома способами.
Перший шлях
в css ви пишете
.logo{
float:left;
margin-top:40px;
margin-left:40px;
}
Але мій друг, це поганий дизайн, щоб розмістити зображення, на яке ви зайво витратили стільки місця навколо, надавши йому трохи запасу, коли цього не потрібно. Все, що вам потрібно - це розмістити зображення в цьому місці. Ви впоралися, подушовуючи його з полями навколо. Поля зайняла простір і просунула його вміст глибше, створюючи враження, що він розташований саме там, де ви хотіли. Сподіваюся, ви зрозуміли проблему, вирішивши її навколо. Ви розміщуєте більше місця, ніж потрібно, щоб розмістити лише зображення в потрібному місці.
Тепер спробуємо інший підхід.
Другий шлях
ви встановите властивість позиції класу заголовків таким, як це
.header{
position: relative;
}
потім ви додали наступні властивості до класу логотипів
.logo{
position:absolute;
top:40px;
left:40px
}
Ось так. Ви розмістили зображення саме в тому самому місці. Не буде явної різниці в позиціонуванні неозброєним оком між першим підходом і другим підходом. Але якщо ви оглянете елемент зображення, то виявите, що він не зайняв зайвого місця. Він займає абсолютно таку ж площу, наскільки це власна ширина і висота.
То як це можливо? Я сказав класу логотипу зображення, що ви будете розміщені відносно класу заголовків, оскільки ви є дитиною цього класу, і що я конкретно згадав, що він є відносним . Так що будь-яка його дитина буде розміщена відносно її верхнього лівого кута. І що Ваше положення потрібно зафіксувати всередині цього батьківського елемента. значить, вам дано абсолют. І що вам потрібно трохи рухатися зверху і вліво до положення, яким я хочу, щоб ви були. Отже, вам надано верхнє та ліве властивість із значенням 40 пікселів. Таким чином ви будете розміщені відносно лише свого батька. Тож якщо завтра я переміщу вашого батька вгору або вниз або просто куди завгодно, ви завжди будете на 40 пікселів вгорі та зліва від верхнього лівого кута вашого батьківського заголовка. Таким чином, ваше становище фіксується всередині вашого батька, незалежно від того, чи є положення вашого батька виправленим чи ні в майбутньому (як це не є абсолютним, як ви).
Тому використовуйте відносні та абсолютні значення для батьків та дитини відповідно. По-друге, використовуйте його, коли ви хочете розмістити дочірній елемент у якомусь місці всередині його батьківського елемента. Не використовуйте наповнювачі, як поля, щоб насильно натискати на них. Надайте батьківському відносному значенню та дитині, яких ви хочете переїхати, абсолютне значення. Вкажіть верхній, лівий нижній або правий властивості дочірнього класу, щоб розмістити його всередині батьківського місця, де ви хочете.
Дякую.
Марко Пеллічотта: Положення елемента всередині іншого елемента може бути відносним або абсолютним щодо елемента, який знаходиться всередині.
Якщо вам потрібно розташувати елемент у точці зору вікна браузера, найкраще використовувати позицію: нерухома