position:absoluteはwindowの左上からの座標に必ずなるとばかり思っていた


absolutecenter

勘違いの話。

CSSでレイアウトするときに、「全部position:absoluteで配置すれば作ったデザインからずれないんじゃないか?」と思うけれど、「position:absoluteはwindowの左上からだからウィンドウ引き伸ばしたら左に寄っちゃうからだめだよな…」と思い直してあきらめていたのですが、そもそもこの前提が間違っていることを最近知りました。

動作サンプル

position:absoluteの特性は、そもそも「親要素に対しての絶対座標で配置」ということなのですが、「親要素がstaticである場合はさらにその親要素からの絶対座標になる」というのが仕様のようです。positionは何も指定しなければstaticになるので、何も考えずに作ると、position:absoluteにした時の親要素は延々と辿っていってwindowになるはずです。なので、windowからの絶対配置になってしまって、左上寄せになってしまう…という勘違いを自分もしていたのだと思います。

つまり、中央寄せしたabsolute要素を作りたければ、positionがstaticでない要素を中央寄せにして、その子要素として絶対座標で配置したい要素を置けば良いことになります。上のサンプルはそんな感じで置いています。IETesterのIE6で確認しても普通に表示できていました。

多分初歩の初歩なのでしょうが、一度思い込んでしまうとなかなか気づかないものだな…と反省するのでした。

ちなみに、この方法、万能ではありません。ここでちょっかいを出してくるのがIEです。

表示は確かに出来ます。位置はピッタリです。しかし、position:absoluteは別のバグを引っ張りだすようで、IE8でjQueryのフェードインアウトなどの動きがおかしくなります。filterを全部の要素に指定すれば動いたのですが、それも何だか重そう…というのもあって解決策を模索中です。

うーん、ブラウザは奥が深い、というか闇が深いというか。人がブラウザを見つめるとき、ブラウザもこちらを見つめているのかもしれない。

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です