cssを得意としてコーディングしている時に、まだまだ自分の知らないことがあると気がついた、ユゲタです。
position機能について、便利に座標で配置できるので、webページ内でのドラッグ操作や、フローティング要素などの扱いに便利に仕様できますが、absoluteをネストで使うと座標がずれるという事に、ある時コーディングをしていて気が付きました。
今後のcssライフの為に、徹底的にposition:absoluteについての調査をしておきました。
本日のIT謎掛け
「position:absolute」と、かけまして・・・
「お見合いの場で趣味を聞く時」と、ときます。
そのココロは・・・
いちが、とても重要です。
(位置と、一致)
positon:absoluteについて
この記事を見ている人は、ある程度の認識があると想定しているんですが、css初心者の人や、position:absoluteがわからない人の為に簡単にこの機能の説明をしておきます。
cssにおけるposition設定は、要素の位置に関する設定ができる機能です。
具体的な機能は、以下の4つあります。
1. static
デフォルト値で、通常のタグのように、HTMLで書かれたとおりの位置に順番に並ぶ表示方法です。
2. absolute
ページ内で、自由に座標で要素を配置することができるようになります。
top,left,bottom,rightの値を登録することで、画面の好きな位置に配置できます。
3.relative
通常absoluteを使う場合は、はページの左上を(0,0)としてセットされますが、relativeをセットした要素の左上位置を(0,0)として、陰萎条件の依存関係を断ち切る場合などに仕様できます。
4.fixed
閲覧しているブラウザの画面の座標に配置でき、ページのスクロールなどには依存しない特性があります。
absoluteのネスト問題
absoluteは、relative設定の要素を(0,0)とする事は、理解していましたが、それ以外はページの左上が起点になると信じていましたが、
absoluteの中にさらにabsoluteがセットされた要素があると、その子要素は、親absoluteの要素が起点になってしまうようです。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body{
margin:10px;
padding:0;
border:1px solid green;
}
.base{
position:relative;
border:1px solid black;
}
.test1{
position:absolute;
width:100px;
height:100px;
top:100px;
left:100px;
border:1px solid red;
}
.test2{
position:absolute;
width:80px;
height:80px;
top:100px;
left:100px;
border:1px solid blue;
}
</style>
</head>
<body>
<div class="base">
<div class="test1">
<div class="test2">
あいうえお
</div>
</div>
<div class="test2">
かきくけこ
</div>
</div>
</body>
</html>
サンプルとして、上記のようなコードを書いていました。
レンダリングすると、上記のようになります。
注目すべきポイントは、「あいうえお」の書かれた要素と「かきくけこ」の書かれた要素は、同じクラスで表示してますが、上位にabsoluteがある場合に座標がずれていることが見て分かります。
relativeをセットしていないにも関わらず、起点が変わってしまうという事をしりませんでした。
ちなみに、他のブラウザで見てみたところ、どれも同じ結果になったので、ブラウザのバグということではなさそうです。
これまで、あまりネストで使うことがなかったabsolute設定ですが、
こうした細かな事を知っておかないと、とんでもない不具合に繋がりかねませんからね。
0 件のコメント:
コメントを投稿