目次
absoluteとrelativeを利用して要素の位置を変更する方法
- 移動対象の要素(子要素)に『position: absolute』を適用
- 移動基準の要素(親要素)に『position: relative』を適用
- 子要素(absolute)で位置を指定
要素の位置はleft
, top
, bottom
, right
で指定します。insetを利用すると一括指定もできます。
たとえば、top: 10px
、left: 50px
の場合、親要素から見て上から10px、左から50pxの位置に子要素が配置されます。
top: 10px
、left: 50px
を指定した例は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
top: 10px;
left: 50px;
}
See the Pen
absolute-example by Toshiharu Nishina (@nishina555)
on CodePen.
absoluteとrelativeを利用した配置例
重ね合わせ
ラベルやバッチの実装でよく利用する配置です。位置を0
にすると重ね合わせになります。
たとえば左上に重ねる場合はtop: 0
とleft: 0
を指定します。top: 0
とleft: 0
はinset: 0 auto auto 0
で一括指定できます。
top: 0
、left: 0
を指定した結果は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
top: 0;
left: 0;
}
See the Pen
absolute-left0-top0 by Toshiharu Nishina (@nishina555)
on CodePen.
隣接
位置を100%
にすると隣接します。
たとえば親要素の右端と子要素の左端と合わせる場合はleft: 100%
を指定します。
left: 100%
を指定した結果は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
left: 100%;
}
See the Pen
absolute-left0-top0 by Toshiharu Nishina (@nishina555)
on CodePen.
左右中央よせ
方法1: marginプロパティを利用する
left: 0
、right: 0
、margin: auto
で左右中央よせになります。
left: 0
とright: 0
はinset: auto 0
で一括指定できます。
具体例は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
left: 0;
right: 0;
margin: auto;
}
See the Pen
absolute-x-center-with-margin by Toshiharu Nishina (@nishina555)
on CodePen.
方法2: transformプロパティを利用する
left: 50%
とtransform: translateX(-50%)
で左右中央よせになります。
left: 50%
で要素の左端が左右中央よせになります。transform: translateX(-50%)
で要素の半分の幅だけ左に移動させることで、左右中央よせを実現しています。
translateX(-50%)
はtranslate(-50%, 0)
でも指定可能です。
具体例は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
left: 50%;
transform: translateX(-50%);
}
See the Pen
absolute-x-center-with-transform by Toshiharu Nishina (@nishina555)
on CodePen.
上下中央よせ
方法1: marginプロパティを利用する
top: 0
、bottom: 0
、margin: auto
で上下中央よせになります。
top: 0
とbottom: 0
はinset: 0 auto
で一括指定できます。
具体例は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
top: 0;
bottom: 0;
margin: auto;
}
See the Pen
absolute-y-center-with-margin by Toshiharu Nishina (@nishina555)
on CodePen.
方法2: transformプロパティを利用する
top: 50%
とtransform: translateY(-50%)
で上下中央よせになります。
translateY(-50%)
はtranslate(0, -50%)
でも指定可能です。
具体例は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
See the Pen
absolute-y-center-with-transform by Toshiharu Nishina (@nishina555)
on CodePen.
上下左右中央よせ
方法1: marginプロパティを利用する
top: 0
、right: 0
、bottom: 0
、left: 0
、margin: auto
で上下左右中央よせになります。top: 0
、right: 0
、bottom: 0
、left: 0
はinset: 0
で一括指定できます。
具体例は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
See the Pen
absolute-xy-center-with-margin by Toshiharu Nishina (@nishina555)
on CodePen.
方法2: transformプロパティを利用する
left: 50%
、transform: translateX(-50%)
、top: 50%
、transform: translateY(-50%)
で左右中央よせになります。
top: 50%
とleft: 50%
はinset: 50% auto auto 50%
で一括指定できます。
translateX(-50%)
とtranslateY(-50%)
はtranslate(-50%, -50%)
で一括指定できます。
具体例は以下の通りです。
<div class="parent">
<div class="child">child(absolute)</div>
</div>
.parent {
width: 300px;
height: 300px;
background-color: lightskyblue;
position: relative;
}
.child {
width: 120px;
height: 120px;
background: lightgreen;
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
See the Pen
absolute-xy-center-with-transform by Toshiharu Nishina (@nishina555)
on CodePen.
まとめ
- 重ね合わせる場合は位置を0にする
- 隣接させる場合は位置を100%にする
- 中央寄せにする場合は『対となる位置を0にする』+『margin autoを適用』あるいは、『位置を50%にする』+『transformを-50%にする』
さいごに
position: absolute
を適用すると要素の表示形式の特性が変化します。詳細は『position: absolute』を適用した要素の表示特性まとめで紹介しています。
また、今回紹介したabsolute
とrelative
を組み合わせたデザインは::before
(::after
)を利用するとよりシンプルに記述できます。詳細は【CSS】relative/absoluteの作成方法で紹介しています。::before
(::after
)の詳細は擬似要素before/afterの概要と具体例を参考にしてください。
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!