Eu tenho 3 div
elementos.
O primeiro div
é maior (embrulhar) e temposition:relative;
2º div
é posicionado de forma absoluta ao 1º div
posicionamento relativo (e está incluído no 1º div
)
O 3º div
está contido no 2º div
e também possui posicionamento absoluto.
<div id="1st">
<div id="2nd">
<div id="3rd"></div>
</div>
</div>
Por que a 3ª div
posição é absoluta para a 2ª div
(que também é posição absoluta para a 1ª div
) e não a 1ª div
que tem posição relativa?
Porque a 3ª div
é o posicionamento absoluto para a 2ª posição absoluta div
.
html
css
css-position
pufos
fonte
fonte
Respostas:
Porque
position: absolute
redefine a posição relativa para crianças assim comoposition: relative
faz.Não há como contornar isso - se você quiser que o terceiro
div
seja absolutamente posicionado em relação ao primeiro, terá que torná-lo filho do primeiro.fonte
0px / 0px
posição para crianças é redefinida peloposition: absolute
position:relative
significa que o elemento será posicionado (usando superior, direito, inferior esquerdo) relativamente a sua posição atual.position: absolute
significa que ele será posicionado em relação à janela do navegador ou primeiro pai composition: absolute
ouposition: relative
.Ambos
position:relative
eposition:absolute
estabelecem elementos de conteúdo como ascestores de posicionamento.Se você precisa que div 3 seja posicionado com base em div 1, torne-o um filho direto de div 1.
Observe que isso
position: relative
significa que o elemento está posicionado em relação à sua posição natural eposition: absolute
significa que o elemento está posicionado em relação à sua primeiroposition:relative
ouposition:absolute
ancestral .fonte
Posição estática: a posição estática é a forma padrão como um elemento aparecerá no fluxo normal do seu arquivo HTML se nenhuma posição for especificada.
Importante:
top
,right
,bottom
eleft
propriedades não têm efeito sobre A estará estática elemento.Posição relativa: posicionar um elemento com o valor relativo mantém o elemento (e o espaço que ocupa) no fluxo normal de seu arquivo HTML.
Você pode então mover o elemento por uma certa quantidade usando as propriedades
left
,right
,top
ebottom
. No entanto, isso pode fazer com que o elemento se sobreponha a outros elementos que estão na página - o que pode ou não ser o efeito que você deseja.Um elemento posicionado relativamente pode mover-se de seu lugar, mas o espaço que ocupou permanece.
Posição absoluta: aplicar o valor da posição absoluta a um elemento remove-o do fluxo normal. Quando você move o elemento posicionado de forma absoluta, seu ponto de referência é a parte superior / esquerda de seu elemento contendo mais próximo que tem uma posição declarada diferente de estática - também chamado de contexto de posicionamento mais próximo. Portanto, se nenhum elemento recipiente com uma posição diferente de estática existir, ele será posicionado no canto superior esquerdo do elemento do corpo.
No seu caso, o terceiro contêiner mais próximo é o segundo.
fonte
Mais uma resposta esclarecedora.
Seu cenário atual é este:
#my-parent {position: absolute} #my-parent .my_child {position: absolute}
E você está lutando com isso.
Se você puder alterar o HTML, basta fazer o seguinte:
#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 */
fonte
A razão pela qual o terceiro
div
elemento está absolutamente posicionado no segundodiv
elemento é porque, como a especificação CSS explica aqui , é porque o elemento "pai" (melhor dito: contendo o bloco) de um elemento absolutamente posicionado não é necessariamente seu elemento pai imediato, mas em vez disso, seu elemento imediatamente posicionado , ou seja, qualquer elemento cuja posição seja definida como qualquer coisa, excetostatic
por exemploposition: relative/absolute/fixed/sticky;
Portanto, sempre que possível em seu código, se você deseja que o terceiro
div
elemento seja absolutamente posicionado em relação ao primeiro,div
você deve fazer o seu segundodiv
elemento como oposition: static;
seu valor padrão (ou simplesmente remover qualquerposition: ...
declaração no conjunto de regras do seu segundodiv
elemento) .A descrição acima fará o primeiro
div
a bloco contendo do 3º posicionado de forma absolutadiv
, ignorando a segundadiv
para este fim posicionamento.Espero que ajude.
fonte
Caso alguém ainda esteja procurando uma resposta para isso.
Consegui atingir esse resultado adicionando um
clear: both;
estilo ao primeiro div posicionado absolutamente que redefiniu a criança e permitiu que ela usasse seu próprioabsolute
posicionamento.fonte