Absolutne pozycjonowanie w pozycji absolutnej

Mam 3 div Elementy.

1. div jest większy (zawijany) i ma position:relative;

2nd div jest pozycjonowane bezwzględnie do 1st div względnego pozycjonowania (i jest zawarty w 1st div)

3rd div jest zawarty w 2nd div i ma również absolutne pozycjonowanie.

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

Dlaczego pozycja 3. div jest absolutna do pozycji 2. div (która jest również pozycją absolutną do pozycji 1. div), a nie do pozycji 1. div, która ma pozycję względną ?

Ponieważ 3 div jest pozycjonowaniem absolutnym do pozycjonowania absolutnego 2 div.

Author: Toby Speight, 2011-05-08

6 answers

Ponieważ position: absolute resetuje względną pozycję dla dzieci, tak jak robi to position: relative.

Nie da się tego obejść-jeśli chcesz, aby Trzeci div był absolutnie umieszczony w stosunku do pierwszego, będziesz musiał uczynić go dzieckiem pierwszego.

 95
Author: Pekka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-08 14:38:29

Zarówno position:relative, jak i position:absolute ustalają elementy zawierające elementy jako elementy pozycjonujące.

Jeśli chcesz, aby div 3 był ustawiony na podstawie div 1, uczyń go bezpośrednim potomkiem div 1.

Zauważ, że position: relative oznacza, że element jest umieszczony względem swojego naturalnego położenia i position: absolute oznacza, że element jest umieszczony względem swojego pierwszego position:relative LUBposition:absolute przodka .

 27
Author: Mike Tunnicliffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-08 14:40:46

Position static: pozycja statyczna jest domyślną drogą elementu pojawi się w normalnym przepływie twojego Plik HTML, jeśli w ogóle nie podano pozycji.

Ważne: top, right, bottom i left właściwości nie mają wpływu na statycznie POZYCJONOWANY ELEMENT.

Pozycja względna: pozycjonowanie elementu z wartością względną utrzymuje element (i zajmowaną przez niego przestrzeń) w normalnym przepływie pliku HTML.

Można następnie przenieść element o pewną kwotę używając właściwości left, right, top i bottom. Może to jednak spowodować nakładanie się elementu na inne elementy, które znajdują się na strona-która może, ale nie musi być efektem, który chcesz.

Względnie umieszczony element może poruszać się ze swojego miejsca, ale zajmowana przez niego przestrzeń pozostaje.

Pozycja absolutna: zastosowanie bezwzględnej wartości pozycji do elementu usuwa go z normalnego przepływu. Podczas przesuwania elementu bezwzględnego, jego odniesienie punkt to górny / lewy najbliższy element zawierający, który ma zadeklarowaną pozycję inną niż statyczna-zwany także najbliższym kontekstem pozycjonowania. Tak więc, jeśli nie istnieje element zawierający element o innej pozycji niż statyczna, to zostanie on umieszczony z lewego górnego rogu element ciała.

W Twoim przypadku najbliższy kontener 3rd jest 2nd.

 15
Author: Gaurav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 13:56:27

Kolejna wyjaśniająca odpowiedź.

Twój obecny scenariusz jest taki:

#my-parent {position: absolute}
#my-parent .my_child {position: absolute}
I trochę się z tym zmagasz.

Jeśli możesz zmienić HTML, po prostu zrób to:

#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 */
 4
Author: valk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-25 18:56:15

Powodem, dla którego 3. div element jest absolutnie umieszczony na 2. div jest to, że jak wyjaśnia Specyfikacja CSS tutaj, jest to, że element "rodzic" (lepiej powiedzieć: zawierający blok) absolutnie element pozycjonowany nie jest koniecznie jego bezpośrednim rodzicem, ale raczej jego bezpośrednim pozycjonowanym elementem tj. każdy element, którego pozycja jest ustawiona na cokolwiek oprócz static na przykład position: relative/absolute/fixed/sticky;

Stąd, w miarę możliwości w Twój kod, jeśli chcesz, aby 3rd div element był absolutnie umieszczony w odniesieniu do 1st div powinieneś umieścić swój 2nd div element jako position: static;, który jest jego wartością domyślną (lub po prostu usuń dowolną position: ... deklarację z zestawu reguł twojego 2nd div element).

Powyższe spowoduje, że 1. div zawierający blok 3. absolutnie pozycjonowany div, ignorując 2. div w tym celu pozycjonowania.

Mam nadzieję, że to pomoże.
 3
Author: atzom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-15 16:49:29

Na wypadek, gdyby ktoś nadal szukał odpowiedzi na to pytanie.

Udało mi się osiągnąć ten wynik, dodając styl clear: both; do pierwszego absolutnie pozycjonowanego div, który resetuje dziecko i pozwala mu używać własnego pozycjonowania absolute.

 0
Author: Guest1234,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-27 07:14:41