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
位置が2番目のdiv
(これは1番目のdiv
に対する絶対位置でもあります)に対して絶対であり、相対的な1番目のdiv
ではありませんポジション ?
3番目のdiv
は絶対位置の2番目のdiv
に対する絶対位置であるためです。
position: absolute
は、position: relative
と同様に、子の相対位置をリセットするためです。
これを回避する方法はありません-3番目のdiv
を最初の1つに対して絶対的に配置する場合は、最初の子の子にする必要があります。
両方 position:relative
およびposition:absolute
配置子として要素を含むことを確立します。
Div 3をdiv 1に基づいて配置する必要がある場合は、div 1の直接の子にします。
ご了承ください position: relative
は、要素がその自然位置とposition: absolute
は、要素が最初のposition:relative
またはposition:absolute
祖先。
Position static:静的位置は、位置がまったく指定されていない場合にHTMLファイルの通常のフローで要素が表示されるデフォルトの方法です。
重要:top
、right
、bottom
およびleft
プロパティは、統計的に配置された要素には影響しません。
Position relative:要素を相対値で配置すると、要素(および要素が占めるスペース)がHTMLファイルの通常のフローに保持されます。
その後、プロパティleft
、right
、top
およびbottom
を使用して、要素をある程度移動できます。ただし、これにより、要素がページ上にある他の要素と重なる場合があります。これは、必要な効果である場合とそうでない場合があります。
相対的に配置された要素は、その場所から移動できますが、占有されているスペースは残ります。
絶対位置:要素に絶対位置の値を適用すると、通常のフローからそれが削除されます。絶対配置要素を移動すると、その参照ポイントは、静的以外の宣言された位置を持つ最も近い包含要素の最上部/左端になります(最も近い配置コンテキストとも呼ばれます)。したがって、static以外の位置を持つ要素が含まれていない場合、body要素の左上隅から配置されます。
あなたの場合、3番目に最も近いコンテナは2番目です。
さらに別の明確な答え。
現在のシナリオは次のとおりです。
#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 */
3番目のdiv
要素が2番目のdiv
要素に絶対に配置される理由は、CSS仕様で here が説明しているように、「親」要素(より良い言い方: absolutely配置された要素のブロックを含むis not必ずその直接の親要素ではなく、むしろその直接の要素positioned要素、つまり位置が設定されている要素static
以外の任意の例position: relative/absolute/fixed/sticky;
したがって、コード内で可能な限り、3番目のdiv
要素を1番目のdiv
に対して絶対的に配置する場合は、2番目のdiv
要素をposition: static;
これはデフォルト値です(または単にposition: ...
2番目のdiv
要素のルールセットでの宣言)。
上記は、最初のdiv
を含むブロック 3番目の絶対的に配置されたdiv
にし、2番目のdiv
を無視します。
それが役に立てば幸い。