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


89

У мене 3 divелементи.

1-й divбільший (обгортання) і маєposition:relative;

2-й divпозиціонується абсолютним до 1-го divвідносного позиціонування (і входить до 1-го div)

3-й divміститься у 2-му, divа також має абсолютне позиціонування.

<div id="1st">
   <div id="2nd">
     <div id="3rd"></div>
   </div>
</div>

Чому 3-я divпозиція абсолютна до 2-ї div(що також є абсолютною позицією до 1-ї div), а не до 1-ї, divяка має відносне положення?

Оскільки 3-е divє абсолютним позиціонуванням до абсолютного позиціонуванням 2-го div.


Це справді те, що я шукаю, і ці відповіді на ваші запитання відкрили мені очі: \.
Бенджамін

абсолютний: Елемент розміщений відносно його першого позиціонованого (не статичного) елемента-предка
Освальдо Сапата

Відповіді:


94

Тому що position: absoluteскидає відносне положення дітей так само, як position: relativeце робить.

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


Отже, в основному абсолютна позиція стає відносною для її абсолютно позиціонованої дитини?
pufos

@pufos вид. 0px / 0pxПоложення для дітей отримує скидання поposition: absolute
Пекка

24
@pufos Я думаю, ти трохи плутаєш це. position:relativeозначає, що елемент буде розміщений (з використанням верхнього, правого, нижнього лівого) відносно поточного положення. position: absoluteозначає, що він буде розміщений відносно вікна браузера або першого батька з position: absoluteабо position: relative.
продавець

Чи можете ви поділитися посиланням на це в Інтернеті? Тому що я не міг знайти жодного ... І ... Велике спасибі
pufos

2
@pufos саме основне посилання тут: w3.org/TR/CSS2/visuren.html#choose-position
Пекка

27

І те, position:relativeі position:absoluteінше встановлюють містять елементи як позиціонуючих підйомників.

Якщо вам потрібно розмістити div 3 на основі div 1, зробіть його прямим нащадком div 1.

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


Я хотів, щоб 3-й div був абсолютним позиціонуванням до абсолютного позиціонованого div, але я не знав, чи це стандарт (перехресний браузер) .. і я не зміг знайти специфікації в Інтернеті ... Велике спасибі
pufos

Абсолютне позиціонування в цьому розділі: w3.org/TR/CSS21/visuren.html#comp-abspos
Майк

Елемент абсолютних значень @MikeTunnicliffe позиціонується відносно свого першого положення: також зафіксовано
Trần Kim Dự

15

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

Важливо: top, right, bottomі leftвластивості не впливає на те Статічаском позиціонується.

Позиція відносна: позиціонування елемента з відносним значенням зберігає елемент (і простір, який він займає) у звичайному потоці вашого HTML-файлу.

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

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

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

У вашому випадку найближчий контейнер, що містить 3 місце, є 2-м.


4

Ще одна уточнююча відповідь.

Ваш поточний сценарій такий:

#my-parent {position: absolute}
#my-parent .my_child {position: absolute}

І ти якось борешся з цим.

Якщо ви можете змінити HTML, просто зробіть це:

#my-parent {position: absolute}
#my-parent .my-wrapper {position: relative}        /* Since you've added the wrapper in HTML */
#my-parent .my-wrapper .my-child {position: absolute}  /* Now you can play with it */

2
my-wrapper, мабуть, повинен бути .my-wrapper
jdavid.net

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

2

Причина, чому 3-й divелемент абсолютно позиціонується до 2-го divелемента, полягає в тому, що, як тут пояснюється специфікація CSS , тому, що "батьківський" елемент (краще сказати: містить блок) абсолютно розташованого елемента не обов'язково є його безпосереднім батьківським елементом, але скоріше, його безпосередньо позиціонований елемент, тобто будь-який елемент, позиція якого встановлена ​​на що завгодно, крім staticнаприкладposition: relative/absolute/fixed/sticky;

Отже, коли це можливо у вашому коді, якщо ви хочете, щоб 3-й divелемент був абсолютно позиціонований по відношенню до 1-го, divви повинні зробити свій 2-й divелемент як position: static;значення за замовчуванням (або просто видалити будь-яку position: ...декларацію з набору правил вашого 2-го divелемента) .

Вищевказане зробить 1- divй вміщуючий блок 3-го абсолютно позиціонованим div, ігноруючи 2-й divдля цієї позиціонування.

Сподіваюся, це допоможе.


0

Якщо хтось все ще шукає відповіді на це.

Я зміг досягти цього результату, додавши clear: both;стиль до першого абсолютно розташованого div, який скинув дитину і дозволив їй використовувати власне absoluteпозиціонування.

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