Pozycja bezwzględna, ale względem rodzica

457

Mam dwa div div wewnątrz innego div i chcę ustawić jeden div div w prawym górnym rogu div rodzica, a drugi div div na dole rodzica div za pomocą css. Tzn. Chcę użyć pozycjonowania bezwzględnego z dwoma div div, ale ustaw je względem div diva, a nie strony. W jaki sposób mogę to zrobić?

Przykładowy HTML:

<div id="father">
   <div id="son1"></div>
   <div id="son2"></div>
</div>
BlaShadow
źródło
Chcesz, żeby son1 był w prawym górnym rogu ojca, ale gdzie na dole powinien być son2? Dolny lewy, prawy lub środkowy?
j08691
1
W takim przypadku należy ustawić pozycję: względem elementu macierzystego i pozycję: bezwzględną dla elementów potomnych. W pierwszym elemencie potomnym należy umieścić górny: 0 i prawy: 0, aby umieścić go w prawym górnym rogu elementu nadrzędnego. Na drugim dziecku powinieneś wstawić bottom: 0, aby umieścić go na dole elementu nadrzędnego. Jest tutaj świetny artykuł kolosek.com/css-position-relative-vs-position-absolute wyjaśniający szczegółowo względne i bezwzględne pozycjonowanie.
Nesha Zoric

Odpowiedzi:

812
#father {
   position: relative;
}

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

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

To działa, ponieważ position: absoluteoznacza coś jak „użytku top, right, bottom, leftaby ustawić się w stosunku do najbliższego przodka, który ma position: absolutelub position: relative”.

Więc robimy #fathermieć position: relative, a dzieci mają position: absolute, a następnie użyć topi bottomdo położenia dzieci.

Domenic
źródło
17
Dlaczego jest to #father { position: relative; }wymagane?
joshreesjones
4
jest wymagane, aby zmienić „regułę pozycji” dla tych, którzy są w nim.
BlaShadow
36
@ mathguy54 Ponieważ specyfikacja mówi, że absolutnie pozycjonowane elementy są pozycjonowane względem pierwszego pozycjonowanego rodzica, co oznacza, że ​​każdy rodzic, który nie ma wartości pozycji static.
Alex W
co z takim scenariuszem: OJCIEC jest względny, a jego wysokość wynosi 100%, jak ustawić syna i son2 na, powiedzmy, odpowiednio 20% i 70% wzrostu ojca?
Rossitten,
27
div#father {
    position: relative;
}
div#son1 {
    position: absolute;
    /* put your coords here */
}
div#son2 {
    position: absolute;
    /* put your coords here */
}
Brian Warshaw
źródło
1
Co jeśli musisz zmienić rozmiar rodzica z dzieckiem?
FrenkyB
10

Jeśli ktoś chce umieścić div dziecka bezpośrednio pod rodzicem

#father {
   position: relative;
}

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

Działające demo Codepen

petergus
źródło
6

Jeśli nie podasz żadnej pozycji rodzicowi, wówczas domyślnie zajmie static. Jeśli chcesz zrozumieć tę różnicę, zapoznaj się z tym przykładem

Przykład 1::

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

   #mainall
{

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

Tutaj klasa nadrzędna nie ma pozycji, więc element jest umieszczany zgodnie z treścią.

Przykład 2 ::

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

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

W tym przykładzie rodzic ma pozycję względną, dlatego element jest pozycjonowany absolutnie wewnątrz względnego rodzica.

anam
źródło
A co jeśli nie masz #mainall {height: 150px} ...? Mam na myśli, czy główna wysokość ma dynamiczną wysokość?
Albert Català,
wtedy element pływający będzie względny w stosunku do pozycji, jaką miał element nadrzędny, gdy strona (i css) została załadowana. Jeśli chcesz zaktualizować to po wczytaniu strony, użyj javascript - clientX i clientY są dobrym miejscem do rozpoczęcia
Abraham Brookes