J'ai 3 div
éléments.
Le 1er div
est plus grand (enveloppement) et aposition:relative;
Le 2nd div
est positionné de manière absolue au 1er div
positionnement relatif (et est inclus dans le 1er div
)
Le 3e div
est contenu dans le 2e div
et a également un positionnement absolu.
<div id="1st">
<div id="2nd">
<div id="3rd"></div>
</div>
</div>
Pourquoi la 3ème div
position est-elle absolue à la 2ème div
(qui est également la position absolue à la 1ère div
) et non à la 1ère div
qui a une position relative?
Parce que le 3ème div
est le positionnement absolu au 2ème positionné absolu div
.
html
css
css-position
pufos
la source
la source
Réponses:
Parce que
position: absolute
réinitialise la position relative des enfants tout comme leposition: relative
fait.Il n'y a pas moyen de contourner cela - si vous voulez que le troisième
div
soit absolument positionné par rapport au premier, vous devrez en faire un enfant du premier.la source
0px / 0px
position des enfants est réinitialisée par leposition: absolute
position:relative
signifie que l'élément sera positionné (en haut, à droite, en bas à gauche) par rapport à sa position actuelle.position: absolute
signifie qu'il sera positionné par rapport à la fenêtre du navigateur ou au premier parent avecposition: absolute
ouposition: relative
.Les deux
position:relative
etposition:absolute
établissent des éléments contenant comme des ascesteurs de positionnement.Si vous avez besoin que div 3 soit positionné en fonction de div 1, faites-en un enfant direct de div 1.
Notez que cela
position: relative
signifie que l'élément est positionné par rapport à sa position naturelle etposition: absolute
que l'élément est positionné par rapport à son premierposition:relative
ouposition:absolute
ancêtre .la source
Position statique: la position statique est la façon dont un élément apparaîtra par défaut dans le flux normal de votre fichier HTML si aucune position n'est spécifiée du tout.
Important:
top
,right
,bottom
etleft
propriétés sont sans effet sur une statiquement PLACÉ élément.Position relative: le positionnement d'un élément avec la valeur relative maintient l'élément (et l'espace qu'il occupe) dans le flux normal de votre fichier HTML.
Vous pouvez ensuite déplacer l'élément par une certaine quantité en utilisant les propriétés
left
,right
,top
etbottom
. Cependant, cela peut entraîner le chevauchement de l'élément avec d'autres éléments de la page, ce qui peut ou non être l'effet souhaité.Un élément relativement positionné peut bouger de son emplacement, mais l'espace qu'il occupait reste.
Position absolue: appliquer la valeur de position absolue à un élément le supprime du flux normal. Lorsque vous déplacez l'élément positionné absolu, son point de référence est le haut / gauche de son élément conteneur le plus proche qui a une position déclarée autre que statique, également appelée son contexte de positionnement le plus proche. Ainsi, si aucun élément contenant avec une position autre que statique n'existe, il sera positionné à partir du coin supérieur gauche de l'élément body.
Dans votre cas, le conteneur contenant le 3ème le plus proche est le 2ème.
la source
Encore une autre réponse clarifiante.
Votre scénario actuel est le suivant:
#my-parent {position: absolute} #my-parent .my_child {position: absolute}
Et vous avez du mal avec ça.
Si vous pouvez modifier le HTML, procédez simplement comme suit:
#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 */
la source
La raison pour laquelle le 3ème
div
élément est absolument positionné sur le 2èmediv
élément est que, comme l'explique la spécification CSS ici , c'est parce que l'élément "parent" (mieux dit: bloc contenant) d'un élément positionné de manière absolue n'est pas nécessairement son élément parent immédiat, mais plutôt son élément positionné immédiatement , c'est-à-dire tout élément dont la position est définie sur autre chose questatic
par exempleposition: relative/absolute/fixed/sticky;
Par conséquent, dans la mesure du possible dans votre code, si vous voulez que le 3ème
div
élément soit absolument positionné par rapport au 1er,div
vous devez faire de votre 2èmediv
élémentposition: static;
sa valeur par défaut (ou simplement supprimer touteposition: ...
déclaration dans l'ensemble de règles de votre 2èmediv
élément) .Ce qui précède fera du 1er
div
le bloc contenant du 3ème positionné de manière absoluediv
, ignorant le 2èmediv
à cette fin de positionnement.J'espère que cela aide.
la source
Au cas où quelqu'un cherche encore une réponse à cela.
J'ai pu obtenir ce résultat en ajoutant un
clear: both;
style au premier div positionné de manière absolue qui réinitialise l'enfant et lui permet d'utiliser son propreabsolute
positionnement.la source