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: 0parent<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: 0parent<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: 0parent<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-grandparentgreat-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; }
.grandparentgreat-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: fixedtop/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: 2remparent<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: 4rembottom
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: 2remparent<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: 4remleft
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: 2remparent<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: 4remright
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: 2remparent<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: -1remparent<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: 0parent<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: 1rembottom
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: -1remparent<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: 0parent<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: 1remleft
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: -1remparent<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: 0parent<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: 1remright
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: -1remparent<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: 0parent<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: 0parent<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: 0parent<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: 0parent<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: 0parent<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: 2remparent<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: 2remparent<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: 2remparent<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: 0parent<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: -2remparent<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: -2remparent<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: -2remposition: 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 - 10parent<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 - 20parent<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 - 15parent<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