IT知識の秘伝書

positionプロパティについて

X(Twitter) facebook はてなブックマーク LINE
OgImage

CSSのpositonプロパティについて解説する。

CSSのpositionプロパティは要素の配置方法を指定する為のもの。

プロパティ 説明
positon static デフォルトの値。CSSの設定を戻したい時に使用する
positon relative 親要素から相対的に配置する
positon absolute 親要素から絶対位置で配置する。通常はtop, right, bottom, left のプロパティも同時に使う
positon fixed 固定して表示する。スクロールしても固定された位置で表示し続ける
positon sticky スクロールに合わせて追従して表示する

position: relative について

relativeはリレイティブと読みそうだがレライティブが正しいらしい。他にもIT用語はカタカナで読もうとすると間違った発音になる単語も多いので、気が向いたら発音を極める旅に出るのも良いかもしれない。

さて、relativeは相対的な配置をする。例を見せよう

<style> #oya1 { width: 100%; height: 250px; background: gray; } .ko1 { width: 100px; height: 100px; background: white; margin-top: 20px; position: relative; top: 20px; left: 20px; } </style> <body> <div id="oya1"> <div class="ko1"></div> <div class="ko1"></div> </div> </body>

灰色のoya1の中にあるko1の座標を確認してほしい。この表現は正しいか分からないがoya1はデフォルトで左上の座標の位置を持っている。大事なのは左上って事だ。その左上からko1がtopとleftのプロパティを持っているが、これは指定した座標からどれだけ移動するかを表す。どちらも20pxなので上と左に20pxだけ移動して100pxの白いボックスを描画している。

top, right, bottom, left のプロパティを使う際はpositionがstatic以外の指定が必要だ。

ko1を2つ描画しているが着目するのは配置だ。2つは重なっていない。
margin-topで余白を作って見やすくしているが、これを取ると余白なく表示される。relativeは重ならない仕様になっているのだ。ただし、topやleftを指定して無理矢理重ねる表示にする事は可能だ。

position: absolute について

今度はrelativeで示したコードをpositionだけ修正し、absoluteに変えてみる。

<style> #oya1 { width: 100%; height: 250px; background: gray; } .ko1 { width: 100px; height: 100px; background: white; margin-top: 20px; position: absolute; top: 20px; left: 20px; } </style> <body> <div id="oya1"> <div class="ko1"></div> <div class="ko1"></div> </div> </body>

結果はボックスが一つしか表示されていない! これはko1が重なって一つに見えている為だ。実際は2つあるが、重なっているだけ! absoluteは親の要素の左上から見た絶対的な位置で配置する。

絶対的な位置という意味がよく分かりません!
確かに難しいよな。要は親の要素(1つだけ)しか影響されないって事だ。しかし、relativeは他の要素にも影響される。絶対は基準となるものが1つしかない
気を付ける事はありますか?
absoluteは親がpositionが設定されていないと、その親の親に影響される。混乱しない為にpositionは設定する心がけをすると良いかも

position: fixed について

これは何かを固定して表示させる配置方法だ。ページをスクロールしても固定して表示する。例えばこのサイトの上に「LEARNING MENU」と表示しているが、このメニューがページをスクロールしても固定して付いてくるな。fixedを使っているからだ。

position: sticky について

ある領域限定でfixedの動きをする。例えばPCで僕のサイトを表示すると右に僕の簡易プロフィールを表示しているが、スクロールすると追従して付いてくるだろう。しかし、ずっと同じ位置ではなく、その領域内限定で追従する事が確認できるだろう。これはstickyを使っている。