position
は位置を指定するためのCSSプロパティです。top
、bottom
、left
、right
、および重なりの順番を指定するz-index
についても解説します。
position
設定値 | 意味 | デフォルト |
---|---|---|
static | デフォルト | |
relative | 本来あるべき位置に対して 相対的 | |
absolute | : relative である直近の先祖要素に対して絶対的 | |
fixed | ブラウザの対して 固定 |
親子関係のある<div>
要素を準備します。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
: relative
.children
クラスにposition: relative
を指定します。 全ての子要素は本来あるべき位置にあり、まだ表示は変わりません。
position: relative
に加えてtop
/bottom
/left
/right
のCSSプロパティを使うことで、本来あるべき位置から相対的に移動させることができます。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; }
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-2 { left: 2rem; }
.child-2
を右に移動parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-2 { left: 2rem; } .child-3 { top: 2rem; }
.child-3
を下に移動parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-2 { left: 2rem; } .child-3 { top: 2rem; } .child-1 { bottom: 2rem; right: 3rem; }
.child-1
を左上に移動: absolute
position: absolute
を使うためには、まず親要素.parent
にposition: relative
を指定する必要があります。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; }
absolute
.child-3
にposition: absolute
を指定します。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; }
absolute
加えて.child-3
にtop: 0
、bottom: 0
、left: 0
、right: 0
を指定した結果を示します。 .child-3
が親要素に対して絶対的な位置に移動することが分かります。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; top: 0; }
top: 0
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; bottom: 0; }
bottom: 0
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; left: 0; }
left: 0
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; right: 0; }
right: 0
以下のようにすると、親要素の角に一致します。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; top: 0; left: 0; }
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; top: 0; right: 0; }
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; bottom: 0; left: 0; }
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.parent { position: relative; } .child-3 { position: absolute; bottom: 0; right: 0; }
上の例では直接の親要素.parent
に対して絶対的な位置に移動しましたが、直接の親では無くても先祖要素であれば移動の基準(包含ブロック)に設定できます。
包含ブロックに設定するにはposition: relative
を指定します。(分かりにくい説明ですが。。。)
先祖関係のある<div>
要素を準備します。
great-grandparent<br> <div class="great-grandparent"> grandparent<br> <div class="grandparent"> parent<br> <div class="parent"> <div class="child">child</div> </div> </div> </div>
div { border: 3px solid blue; padding: 20px; display: inline-block; } .parent { min-height: 4rem; min-width: 6rem; } .child { border-color: red; background-color: rgba( 255, 0, 0, 0.3 ); padding: 3px 7px; }
.child
クラスにposition: absolute
、top: 0
、right: 0
を指定します。 どの先祖要素にもposition: relative
を指定していない(=包含ブロックが無い) ので、.great-grandparent
の外に出てしまいます。
great-grandparent<br> <div class="great-grandparent"> grandparent<br> <div class="grandparent"> parent<br> <div class="parent"> <div class="child">child</div> </div> </div> </div>
div { border: 3px solid blue; padding: 20px; display: inline-block; } .parent { min-height: 4rem; min-width: 6rem; } .child { border-color: red; background-color: rgba( 255, 0, 0, 0.3 ); padding: 3px 7px; }
.child { position: absolute; top: 0; right: 0; }
position: relative
を.great-grandparent
、.grandparent
、.parent
に設定した例を示します。 position: relative
を指定した先祖要素が包含ブロックとなっていることが分かります。
great-grandparent<br> <div class="great-grandparent"> grandparent<br> <div class="grandparent"> parent<br> <div class="parent"> <div class="child">child</div> </div> </div> </div>
div { border: 3px solid blue; padding: 20px; display: inline-block; } .parent { min-height: 4rem; min-width: 6rem; } .child { border-color: red; background-color: rgba( 255, 0, 0, 0.3 ); padding: 3px 7px; }
.great-grandparent { position: relative; } .child { position: absolute; top: 0; right: 0; }
.great-grandparent
great-grandparent<br> <div class="great-grandparent"> grandparent<br> <div class="grandparent"> parent<br> <div class="parent"> <div class="child">child</div> </div> </div> </div>
div { border: 3px solid blue; padding: 20px; display: inline-block; } .parent { min-height: 4rem; min-width: 6rem; } .child { border-color: red; background-color: rgba( 255, 0, 0, 0.3 ); padding: 3px 7px; }
.grandparent { position: relative; } .child { position: absolute; top: 0; right: 0; }
.grandparent
great-grandparent<br> <div class="great-grandparent"> grandparent<br> <div class="grandparent"> parent<br> <div class="parent"> <div class="child">child</div> </div> </div> </div>
div { border: 3px solid blue; padding: 20px; display: inline-block; } .parent { min-height: 4rem; min-width: 6rem; } .child { border-color: red; background-color: rgba( 255, 0, 0, 0.3 ); padding: 3px 7px; }
.parent { position: relative; } .child { position: absolute; top: 0; right: 0; }
.parent
なお、複数の先祖要素にposition: relative
を設定している場合、直近の先祖要素が包含ブロックになります。
以下の例では.great-grandparent
と.parent
の両方にposition: relative
を設定していますが、より近い先祖である.parent
が優先されます。
great-grandparent<br> <div class="great-grandparent"> grandparent<br> <div class="grandparent"> parent<br> <div class="parent"> <div class="child">child</div> </div> </div> </div>
div { border: 3px solid blue; padding: 20px; display: inline-block; } .parent { min-height: 4rem; min-width: 6rem; } .child { border-color: red; background-color: rgba( 255, 0, 0, 0.3 ); padding: 3px 7px; }
.great-grandparent, .parent, { position: relative; } .child { position: absolute; top: 0; right: 0; }
.parent
が優先: fixed
position: fixed
はブラウザに対して固定の位置に表示されます。
.sample
クラスを持つ<div>
要素を準備します。
<div class="sample">sample</div>
.sample { background-color: purple; color: white; display: inline-block; padding: 5px; border-radius: 50%; font-size: 1rem; z-index: 100; opacity: 0.7; }
.sample
クラスにposition: fixed
とtop
とright
プロパティを指定すると、要素はブラウザの右上に移動します。(下の実行結果の四角の中にあるべき要素がブラウザの右上に移動して固定されている、ということです。)
<div class="sample">sample</div>
.sample { background-color: purple; color: white; display: inline-block; padding: 5px; border-radius: 50%; font-size: 1rem; z-index: 100; opacity: 0.7; }
.sample { position: fixed; top: 10px; right: 10px; }
position: fixed
top
/bottom
/left
/right
top
/bottom
/left
/right
の使い方は、設定する要素のposition
が何かによって変わります。
position | : relative | : absolute : fixed |
---|---|---|
top | : relative | : absolute |
bottom | : relative | : absolute |
left | : relative | : absolute |
right | : relative | : absolute |
2つの設定値 |
position: relative
親子関係のある<div>
要素を準備し、 子要素.child
にposition: relative
を指定します。
子要素の中心が親要素の中心に来ることを確認してください。(position: absolute
の場合と異なります。)
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; }
.child { position: relative; }
移動させるには、これにtop
/bottom
/left
/right
を指定しますが、感覚と逆の方に移動することに注意してください。
top
position: relative
でtop
を指定すると下に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; top: 2rem; }
top: 2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; top: 4rem; }
top: 4rem
bottom
position: relative
でbottom
を指定すると上に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; bottom: 2rem; }
bottom: 2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; bottom: 4rem; }
bottom: 4rem
left
position: relative
でleft
を指定すると右に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; left: 2rem; }
left: 2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; left: 4rem; }
left: 4rem
right
position: relative
でright
を指定すると左に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; right: 2rem; }
right: 2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; right: 4rem; }
right: 4rem
斜めに移動
2つの設定値で斜めに移動できます。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; bottom: 2rem; right: 4rem; }
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; bottom: 2rem; left: 4rem; }
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; top: 2rem; left: 4rem; }
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 3rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.child { position: relative; top: 2rem; right: 4rem; }
position: absolute
親子関係のある<div>
要素を準備し、 親要素.parent
にposition: relative
を子要素.child
にposition: absolute
を指定します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; }
.child { position: absolute; }
子要素の左上角が親要素の中心に来ていることに注意してください。 position: absolute
の場合はこれが最初の位置です。
参考までにposition: relative
の場合は子要素の中心が親要素の中心に来ます。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: relative; }
.child { position: relative; }
top
position: absolute
でtop
を指定すると、子要素は親要素の上辺に移動します。
top
に-1rem
、0
、1rem
を指定した場合の結果を示します。0
の場合には上辺が接し、マイナス値にすると外側に、プラス値にすると内側に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: -1rem; }
top: -1rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 0; }
top: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 1rem; }
top: 1rem
bottom
position: absolute
でbottom
を指定すると、子要素は親要素の下辺に移動します。
bottom
に-1rem
、0
、1rem
を指定した場合の結果を示します。0
の場合には下辺が接し、マイナス値にすると外側に、プラス値にすると内側に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; bottom: -1rem; }
bottom: -1rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; bottom: 0; }
bottom: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; bottom: 1rem; }
bottom: 1rem
left
position: absolute
でleft
を指定すると、子要素は親要素の左辺に移動します。
left
に-1rem
、0
、1rem
を指定した場合の結果を示します。0
の場合には左辺が接し、マイナス値にすると外側に、プラス値にすると内側に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; left: -1rem; }
left: -1rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; left: 0; }
left: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; left: 1rem; }
left: 1rem
right
position: absolute
でright
を指定すると、子要素は親要素の右辺に移動します。
right
に-1rem
、0
、1rem
を指定した場合の結果を示します。0
の場合には右辺が接し、マイナス値にすると外側に、プラス値にすると内側に移動します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; right: -1rem; }
right: -1rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; right: 0; }
right: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; right: 1rem; }
right: 1rem
角に移動
2つの設定値で(親要素の)角に移動できます。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 0; left: 0; }
top: 0
left: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 0; right: 0; }
top: 0
right: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; bottom: 0; right: 0; }
bottom: 0
right: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; bottom: 0; left: 0; }
bottom: 0
left: 0
角から少しズラしたい場合には値を微調整します。
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 2rem; right: 0; }
top: 2rem
right: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 2rem; right: 2rem; }
top: 2rem
right: 2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 0; right: 2rem; }
top: 0
right: 2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: -2rem; right: 2rem; }
top: -2rem
right: 2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: -2rem; right: 0; }
top: -2rem
right: 0
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: -2rem; right: -2rem; }
top: -2rem
right: -2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 0; right: -2rem; }
top: 0
right: -2rem
parent<br> <div class="parent"> <div class="child">child</div> </div>
.child { padding: 5px; border-color: purple; background-color: purple; color: white; } .parent { padding: 5rem 6rem; border-color: blue; background-image: radial-gradient( blue, lightblue 7% ); } div { border: 2px solid; display: inline-block; }
.parent { position: relative; } .child { position: absolute; top: 2rem; right: -2rem; }
top: 2rem
right: -2rem
position: fixed
position: fixed
はposition: absolute
とほぼ同じです。包含ブロック(position: relative
を指定した直近の先祖要素)に対して行っている設定を、ブラウザに対して行います。
z-index
z-index
プロパティで重なりの順番を指定できます。
position: relative
を設定して子要素を移動させて重ねます。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-1 { right: 1rem; top: 2rem; } .child-2 { left: 2rem; } .child-3 { bottom: 2rem; }
position: relative
後に指定した要素ほど、重なりの上に来ます。 z-index
でこの順番を変えます。
z-index
のデフォルト値は0
なので、0
よりも大きい値を指定すると重なりの上になります。 .child-1
に10
、.child-2
に20
、.child-3
に15
、.child-3
に30
を順に設定した例を示します。
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-1 { right: 1rem; top: 2rem; } .child-2 { left: 2rem; } .child-3 { bottom: 2rem; }
.child-1 { z-index: 10; }
.child-1
- 10
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-1 { right: 1rem; top: 2rem; } .child-2 { left: 2rem; } .child-3 { bottom: 2rem; }
.child-1 { z-index: 10; } .child-2 { z-index: 20; }
.child-2
- 20
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-1 { right: 1rem; top: 2rem; } .child-2 { left: 2rem; } .child-3 { bottom: 2rem; }
.child-1 { z-index: 10; } .child-2 { z-index: 20; } .child-3 { z-index: 15; }
.child-3
- 15
parent<br> <div class="parent"> <div class="children child-1">child-1</div> <div class="children child-2">child-2</div> <div class="children child-3">child-3</div> </div>
div { border: 2px solid; /* 境界線 */ } /* --------- 親要素 --------- */ .parent { padding: 4rem; /* 内側の余白 */ border-color: orange; /* 境界線の色 */ display: inline-block; /* インライン・ブロック要素 */ } /* --------- 子要素 --------- */ .children { width: 5rem; /* 幅 */ height: 3rem; /* 高さ */ padding: 5px; opacity: 0.85; /* 不透明度 */ } .child-1 { background-color: #daa; /* 背景 */ border-color: #b88; } .child-2 { background-color: #ada; border-color: #8b8; } .child-3 { background-color: #aad; border-color: #88b; }
.children { position: relative; } .child-1 { right: 1rem; top: 2rem; } .child-2 { left: 2rem; } .child-3 { bottom: 2rem; }
.child-1 { z-index: 10; } .child-2 { z-index: 20; } .child-3 { z-index: 30; }
.child-3
- 30