このhtmlコードを含む this jsfiddle を検討してください:
<div id="container">
<div id="item">TEST</div>
</div>
そしていくつかのCSS:
#container {
border: 1px solid red;
height: 100px;
width: 100px;
}
#item {
border: 1px dashed purple;
position: absolute;
left: 50%;
}
結果は私を驚かせます。 W3ポジショニングプロップ を見ると、#item
の左側の値は「含まれているブロック」の50%、つまり#container
であると思います。ただし、 ブロックを含む だけでなく、ページ全体の50%にあるようです。さらに驚くべきことに、コンテナのオーバーフローを非表示のままにするように指示すると、「テスト」は引き続き存在します。
すべての主要なブラウザー(IE9を含む)は同じ動作を示すように見えるので、私の期待はおそらく間違っています。 問題は:仕様のどの部分がこの動作を説明しているのか、もしあれば?
絶対位置は、位置が静的ではない次の親要素を基準にして適用されます。あなたの場合、それは全ページです。コンテナ部門でposition: relative
を設定してみてください。
jsFiddleを参照してください。
追加
position:relative;
コンテナdivへ。