【総まとめ】CSSでHTML要素の位置を変える
CSSでHTML要素の位置を変更する手順
要素の位置を動かすときは、以下の3段階を踏みます。
- HTML要素を用意する
-
position
でモードを選択 -
top
,right
,bottom
,left
で位置を指定する
それぞれ解説します。
1. HTML要素を用意する
HTMLがなければ何も始まりません。
<div class="box">This is box!</div>
何もCSSが適用されていない、裸のHTMLです。
position
で配置方法を選択
2. 以下の5つの配置方法があります。1つのHTML要素につき1つだけ選べます。もし2個以上選んだ場合、一番下に書いたものが適用されます。
.box {
position: static;
position: relative;
position: absolute;
position: fixed;
position: sticky;
}
static
2.1. 元々の位置のままなら機能
もしこのように書いた場合、そのHTML要素は、元々あった場所に配置されます。そのため、その後にtop
, right
, bottom
, left
を書いても何も変わりません。当たり前ですね。
ちなみに、HTML要素が重なる順番を指定するz-index
もposition:static;
では固定され、変更できません。
.box {
position: static;
}
固定されているので、何も変わりません。
relative
2.2. 微調整には下の画像を見てください。これが、position:relative;
の配置設定のイメージです。
また、top
とbottom
がどちらも定義された場合はtop
が適用されます。
そして、left
とright
がどちらも定義された場合はleft
が適用されます。
例えば、元々の位置から右に50px
, 下に100px
ズラしたところにHTML要素を置きたい時を考えましょう。その場合は、
.box {
position: relative;
top: 100px;
rigt: right: 50px;
}
あるいは、元々の位置から左に50px
, 下に100px
ズラしたところにHTML要素を置きたい時は、
.box {
position: relative
top: 100px;
left: 50px;
}
absolute
2.3. 子要素を親要素上で配置するWebサイトを開発していると、親要素の中に小要素を並べる時があります。
その時に、小要素は親要素を基準に位置を決める必要があります。そのような時にabsolute
を使います。
その前にまず、配置の基準となる親要素にrelative
を与える必要があります。もし、親要素にrelative
が与えられなかった場合、ユーザのデバイスの画面(ビューポートと言います)を基準に配置されてしまいます。
次に、小要素にabsolute
を与えます。
.container {
position: relative;
}
コンテナというクラスをもつ親要素と、その中に属するボックスというクラスをもつ子要素を作りました。
<div class="container">
<div class="box">This is box!</div>
</div>
基準としたい親要素はrelative
にします。そして、実際に配置したい小要素はabsolute
にします。
.container {
position: relative;
}
.box {
position: absolute;
}
fixed
2.4. 固定するならfixed
を持つHTML要素は画面の端っこを基準に大きさを変えたり配置したりできます。
fixed
を与えられたHTML要素は、元々あった場所からその姿を消します。そして、指定したところに
fixed
を適用されたHTML要素は、固定されます。いくらスクロールしても、ずっとその場所にあります。
.box {
position: fixed;
top: 100px;
right: 50px;
bottom: 80px;
left: 60px;
}
sticky
2.5. 画面内にある時はスクロールできる画面の端っこを基準に固定するのはfixed
と同じです。しかし、sticky
はfixed
と異なり、通常フロー残ります。そのため、通常フローが画面上にある時は普通にスクロールできます。
下のような広告を見たことはありますか...?海外のデスクトップアプリのサイトでよくあります。
Discussion