Позиція абсолютна, але відносно батьківського


457

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

Зразок html:

<div id="father">
   <div id="son1"></div>
   <div id="son2"></div>
</div>

Ви хочете, щоб син1 був у правому верхньому куті батька, але де в нижній частині має бути син2? Знизу вліво, вправо чи в центрі?
j08691

1
У цьому випадку вам потрібно буде встановити позицію: відносно батьківського елемента та позицію: абсолютну для дочірніх елементів. На першому дочірньому елементі слід поставити верх: 0 і право: 0, щоб розташувати його праворуч у батьківському елементі. На другій дочірній частині слід поставити дно: 0, щоб розмістити його на нижній частині батьківського елемента. Тут є чудова стаття kolosek.com/css-position-relative-vs-position-absolute, яка детально пояснює відносне та абсолютне позиціонування.
Неша Зорич

Відповіді:


812
#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 0;
}

#son2 {
   position: absolute;
   bottom: 0;
}

Це працює , тому що position: absoluteозначає що - щось на зразок «використання top, right, bottom, leftпозиціонувати себе по відношенню до найближчого предка , який має position: absoluteабо position: relative

Таким чином , ми робимо #fatherє position: relative, і у дітей position: absolute, а потім використовувати topі bottomдля розміщення дітей.


17
Чому це #father { position: relative; }потрібно?
joshreesjones

4
потрібно змінити "правило положення" для тих, хто знаходиться всередині нього.
BlaShadow

36
@ mathguy54 Оскільки специфікація говорить, що абсолютно розміщені елементи розташовані відносно першого батьківського позиціонера , а це означає, що будь-який з батьків, у якого немає значення позиції static.
Alex W

як щодо такого сценарію: БАЦЬКА відносна і її зріст становить 100%, як розташувати сина і сина2 на, скажімо, 20% та 70% росту батька відповідно?
Rossitten


27
div#father {
    position: relative;
}
div#son1 {
    position: absolute;
    /* put your coords here */
}
div#son2 {
    position: absolute;
    /* put your coords here */
}

1
Що робити, якщо вам потрібно змінити розмір батька з дитиною?
FrenkyB

10

На випадок, коли хтось хоче поставити дитину-діву безпосередньо під батьків

#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 100%;
}

Робоча демонстрація Codepen


6

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

Приклад 1 ::

http://jsfiddle.net/Cr9KB/1/

   #mainall
{

    background-color:red;
    height:150px;
    overflow:scroll
}

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

Приклад 2 ::

http://jsfiddle.net/Cr9KB/2/

#mainall
{
    position:relative;
    background-color:red;
    height:150px;
    overflow:scroll
}

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


А як бути, якщо у вас немає #mainall {height: 150px} ...? Я маю на увазі, якщо mainall має динамічну висоту?
Альберт Катала

то ваш плаваючий елемент буде відносно положення, яке було у батьківського елемента під час завантаження сторінки (та css). Якщо ви хочете оновити це після завантаження сторінки, використовуйте javascript - clientX та clientY - це гарне місце для початку
Abraham Brookes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.