記事内に商品プロモーションが含まれる場合があります
今回はCSSのpositionプロパティについて解説していきます。基礎知識から「具体的にどのように使えるのか」というところまでみっちり解説します。
1. CSSのpositionとは?
positionとはものすごくざっくりというと「要素の位置を決める」ためのプロパティです。
どんな使い方ができるの?
このpositionプロパティは具体的にどのようなときに使うのでしょうか。
たとえば「要素の位置を20pxだけ右に動かす!」というようなことができたり…
要素の上に別の要素を重ねてのせることができたり…(この図は画像の上に要素をのせるイメージです)
また画面の決まった位置に要素を固定して表示させることができたりします。
それぞれの方法はこれから紹介していきます。
positionの書き方
positionプロパティはCSSで以下のように書きます。
◯◯ {position : 値}
◯◯にはセレクタが入ります(セレクタとは?)。値には次の4つのどれかを指定します。
positionの値
static
:初期値はこれ。指定することはほとんどないrelative
:現在の位置を基準に相対的な位置を決めるabsolute
:親要素を基準に絶対的な位置を決めるfixed
:画面のきまった位置に固定する
たとえば、class名が”test”の要素の相対的な位置を指定したいときには、.test {position: relative}
というように書くわけですね。それぞれの値の意味はのちほど解説するので、この段階で理解する必要はありません。
2. positionとセットで使うtop・bottom・left・right
positionは基本的にtop
、bottom
、left
、right
というプロパティとセットで使います。イメージとしては、以下のようになります。
位置を指定する流れ
positon
で基準を決めるtop
bottom
left
right
で具体的な位置を数字で調整
ではこのtopやらbottomやらにはどのような意味があるのでしょうか。
考え方はこの図のようになります。基準からの距離で指定するわけですね。
top
:基準の上からの距離bottom
:下からの距離left
:左からの距離right
:右からの距離
たとえば、基準の上からの距離を10pxにしたいときは.test {top: 10px}
というように書きます。
「この基準の位置をどうするか」というのをさきほどのpositionプロパティで決めるわけです。
基本的にこのうちの2つを使う
top
やleft
などは基本的に2つを組み合わせて使います。少し例を見てみましょう。
たとえば、top:10px
とleft:10px
と指定した要素は、基準の左上から右に10px、下に10pxの位置に配置されます。
top:0
とleft:0
にした場合は、基準の左上にぴったりとくっつきます。
また、bottom:10px
とright:10px
を指定された要素は、右下から上に10px、左に10pxの位置に配置されます。
bottom
とright
を0にした場合は、基準の右下にぴったりとくっつきます。
left
とright
、またはtop
とbottom
を同時に指定することは殆どありません。※ ちなみにtopとbottomを同時に0に指定すると要素は縦いっぱいに広がります。leftとrightを同時に0にすると要素は横いっぱいに広がります。
3. staticとは?
ここからはpositionの値ごとにどのような位置指定ができるのかを解説していきます。まずposition: static
から見ていきましょう。
特徴
- 初期値:CSSで何も指定していなければコレになっている
- 要素は通常の位置に:上下左右に動かすことができない
- 要素の位置を調整できない:
top
やleft
などを指定しても効かない - z-indexを指定できない:要素の重なり順を変えられない
基本的にstaticを指定することはありません。そのためあまり意識することのない値なのですが、以下のことを頭に入れておきましょう。
staticは位置が変えられない
top:10px
などと指定しても効きません。位置を変えたいときはrelative
やabsolute
にしましょう。
z-indexを指定できない
z-index
とは要素の重なり順を決めるプロパティです。staticではz-index:0
の状態になっており、変えることができません。
4. position: relative
position: relative
は現在の表示位置から相対的に要素の位置を動かしたいときに使います。
このように本来の表示位置から、右と下に10pxずつ動かすというようなことができるわけですね。
使用例
実際にコードを書いて指定してみましょう。要素をposition: relative
にしたうえでtop
とleft
をそれぞれに10pxに指定してみます。分かりやすくするために指定なしの要素も作ることにします。
<p>指定なし</p> <p id="relative">relative</p>CSS
#relative { position: relative; top: 10px; left: 10px; } /*装飾は省略*/
指定なし
relative
解説
本来の表示位置が基準になり、上から10px(top:10px
)、左から10px(left:10px
)だけ移動したわけですね。
staticとrelativeの違い
position:relative
としても、top
やbottom
を指定しなければstaticと同じ位置に表示されます。そのため一見同じように感じられますが、①位置調整の可否や②z-index指定の可否という違いがあります。「z-indexやtopなどが指定できないときはrelativeにする!」とおぼえておくと良いでしょう。
5. position: absolute
position: absolute
を使うとデザインの幅がぐっと広がるので、使い方を覚えておくことをおすすめします。
absolute
だと親要素を基準に、絶対的な位置を指定することになります。たとえば「親要素の左上から下に10px、右に10pxの位置に配置する」というようなことができます。
この「絶対的な位置」というのは、要素がどんな形であろうと、間に他の要素や余白が入っていようと、その位置に配置してくれるということ意味します。これは例を見てみるのが早いかもしれません。
使用例
"parent"
というclass名の親要素の中に要素①と要素②を入れてみました。まず何も指定しなかった場合は以下のように表示されます。
position指定なしの場合
<div class="parent"> <p>要素①</p> <p id="absolute">要素②</p> </div>
要素①
要素②
グレイの部分が親要素(.parent)
要素②をabsoluteにした場合
要素②をabsolute
にしたうえでtop
とleft
を0にしてみましょう。
<div class="parent"> <p>要素①</p> <p id="absolute">要素②</p> </div>CSS
.parent { /*親要素はrelativeに*/ position: relative; padding: 20px; } #absolute { position: absolute; top: 0; left: 0; } /*装飾は省略*/
要素①
要素②
親要素の左上にぴったりとくっつきました。
解説
もしtop
とleft
の値を指定した場合は、親要素の左上が基準点となります。両方0の場合は、親要素の左上にピッタリとくっつきます。
逆にbottom:0
とright:0
と指定すれば、親要素の右下にピッタリとくっつくことになります。またabsolute
は絶対的な位置指定です。そのため他の要素があろうと表示位置は変わらず重なって表示されるのですね。
親要素はrelativeにしておく
absolute
を使って位置調整するときは、親要素にposition:relative
(もしくはfixed
)を指定しておきましょう。これを忘れると基準位置がずれて思ったように表示されません。absoluteを使うときは、おまじないのように親要素もセットで変えるようにしましょう。
absoluteの便利な使い方
たとえばサルワカのトップページのアイキャッチ写真上のカテゴリ名はabsolute
を使って表示されています。
画像の上に要素を重ねてみよう
実際にabsolute
で画像の上に文字をのせるCSSを書いてみます。ここではbottom
とright
を0にすることで右下にのせてみましょう。
<div id="example"> <img src="bear.jpg"/> <span>クマさん</span> </div>CSS
/*親要素*/ #example { position: relative; /*要素内の余白は消す*/ padding:0; } /*文字*/ #example span { position: absolute; bottom: 0; right: 0; /*以下装飾*/ color: white; background: #74c1f8; padding:0 2px; line-height:1.5; }
画像の右下にクマさんと表示されましたね。親要素はdivで画像(img)ではありませんが「親要素内にピッタリはまった画像の上に文字がのった」というイメージです。
位置を変えてみる
たとえばbottom
とright
をそれぞれ10pxに変えてみます。
/*略*/ /*文字*/ #example span { position: absolute; bottom: 10px; right: 10px; /*略*/ }
画像の右下から上に10px、左に10pxの位置に文字が配置されました。
値にはマイナスの値を指定することもできます。親要素からあえてはみ出させたいときに使えるテクニックですね。
6. position: fixed
最後はfixed
です。これは画面の決まった位置に要素を固定させたいときに使います。
スクロールしても位置が変わらないメニューバーやソーシャルボタンを表示したいときなんかに使うと便利です。
このようにタイトルバーが固定されたデザインはよく見ますね。これはfixed
とtop
により「画面の1番上に表示する」という指定をしているのです。
absolute
と指定方法がほとんど同じですが、位置の基準は親要素ではなく「ウィンドウ全体」です。そのため、要素の位置に関係なくtop: 0
と指定したら画面の最上部に表示されます。
使用例
ある要素を画面の上部に常に表示するようにしてみましょう。
<p>これは文章です。</p> <p>これは文章2です。</p> . . . <p>これは文章20です。</p> <p id="fixed">fixed</p>CSS
#fixed { position: fixed; /*基準を画面の左上に*/ top: 0; left: 0; /*余白が入らないように*/ margin: 0; /*以下装飾*/ width: 100%; background: #FFC778; color:white; }
スクロールしても常に上側に要素を固定することができました。このように何かを固定するときにfixed
は使えるのですね。
positionを使いこなすことができるようになると本当にウェブデザインが楽しくなります。マスターして自分の好きなレイアウトを実現しましょう。