У меня 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
позиция абсолютна по отношению ко второй div
(которая также является абсолютной по отношению к 1-й div
), а не к 1-й div
, имеющей относительное положение?
Потому что третий div
- это абсолютное позиционирование по отношению к абсолютному позиционированию второго div
.
html
css
css-position
пуф
источник
источник
Ответы:
Потому что
position: absolute
сбрасывает относительное положение для детей точно такposition: relative
же.Обойти это невозможно - если вы хотите, чтобы третий
div
был абсолютно позиционирован относительно первого, вам придется сделать его дочерним по отношению к первому.источник
0px / 0px
Положение для детей получает сбрасыватьсяposition: absolute
position:relative
означает, что элемент будет позиционироваться (используя верхнее, правое, нижнее левое положение) относительно своего текущего положения.position: absolute
означает, что он будет расположен относительно окна браузера или первого родителя с помощьюposition: absolute
илиposition: relative
.Оба
position:relative
иposition:absolute
устанавливают содержащие элементы в качестве предков позиционирования.Если вам нужно, чтобы div 3 располагался на основе div 1, сделайте его прямым потомком div 1.
Обратите внимание, что это
position: relative
означает, что элемент расположен относительно своего естественного положения, иposition: absolute
означает, что элемент расположен относительно своего первогоposition:relative
илиposition:absolute
предка. .источник
Позиция статическая: статическая позиция - это способ отображения элемента по умолчанию в обычном потоке вашего HTML-файла, если позиция не указана вообще.
Важно:
top
,right
,bottom
иleft
свойства не влияет на то Статичаском позиционируемый элемент.Относительное положение : позиционирование элемента с относительным значением сохраняет элемент (и занимаемое им пространство) в обычном потоке вашего HTML-файла.
Затем вы можете переместить элемент на некоторую величину , используя свойства
left
,right
,top
иbottom
. Однако это может привести к тому, что элемент будет перекрывать другие элементы, находящиеся на странице, что может быть, а может и не быть желаемым эффектом.Относительно расположенный элемент может двигаться со своего места, но занимаемое им пространство остается.
Абсолютное положение: применение значения абсолютного положения к элементу удаляет его из обычного потока. При перемещении абсолютного позиционированного элемента, его опорная точка является вершина / слева от его ближайшего содержащего элемента , который имеет позицию объявила, кроме статического также называют его ближайшим контекстом позиционирования. Таким образом, если не существует содержащего элемента с положением, отличным от static, то он будет размещен из верхнего левого угла элемента body.
В вашем случае ближайший к третьему контейнеру контейнер - второй.
источник
Еще один уточняющий ответ.
Ваш текущий сценарий таков:
#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 */
источник
Причина, по которой третий
div
элемент абсолютно позиционируется по отношению ко второмуdiv
элементу, заключается в том, что, как объясняет здесь спецификация CSS , «родительский» элемент (точнее говоря: содержащий блок) абсолютно позиционированного элемента не обязательно является его непосредственным родительским элементом, но скорее его непосредственно позиционируемый элемент, то есть любой элемент, позиция которого установлена на что угодно, кроме,static
например,position: relative/absolute/fixed/sticky;
Следовательно, когда это возможно в вашем коде, если вы хотите, чтобы 3-й
div
элемент был абсолютно позиционирован относительно 1-го,div
вы должны сделать свой 2-йdiv
элемент,position: static;
который является его значением по умолчанию (или просто удалите любоеposition: ...
объявление в наборе правил вашего 2-гоdiv
элемента) .Выше будет сделать первый содержащий блок 3 - го абсолютно позиционирован , не обращая внимания на 2 - й для этой цели позиционирования.
div
div
div
Надеюсь, это поможет.
источник
На случай, если кто-то все еще ищет ответ на этот вопрос.
Мне удалось добиться этого результата, добавив
clear: both;
стиль к первому абсолютно позиционированному div, который сбросил дочерний элемент и позволил ему использовать собственноеabsolute
позиционирование.источник