CSS レイアウト - position 属性

position 属性指定は、要素の位置決定方法のタイプ(static、relative、fixed、absoluteまたはsticky)に適用されます。

position 属性

position 属性は、要素に適用される定位方法のタイプを指定します。

五つの異なる位置値があります:

  • static
  • relative
  • fixed
  • absolute
  • sticky

要素は実際には top、bottom、left、right 属性を使用して定位されます。ただし、position 属性が最初に設定されない場合、これらの属性は機能しません。異なる position 値によって、これらの属性の動作も異なります。

position: static;

HTML 要素はデフォルトで static(静的)の定位方法を使用します。

静的定位の要素は top、bottom、left、right 属性に影響されません。

position: static; の要素は特別な定位方法を持ちません;常にページの正常なフローに基づいて定位されます:

この <div> 要素には position: static; が設定されています;

これは使用している CSS です:

div.static {
  position: static;
  border: 3px solid #73AD21;
}

自分で試してみましょう

position: relative;

position: relative; の要素はその正常位置に対して定位されます。

相対定位の要素の top、right、bottom、left 属性を設定することで、その正常位置からずれて調整されます。その要素が残す空間に合わせて他のコンテンツを調整することはありません。

この <div> 要素には position: relative; が設定されています;

これは使用している CSS です:

div.relative {
  position: relative;
  left: 30px;
  border: 3px solid #73AD21;
}

自分で試してみましょう

position: fixed;

position: fixed; の要素はビューポートに対して定位されています。これは、ページをスクロールしても常に同じ位置にいることを意味します。top、right、bottom、left 属性はこの要素の定位に使用されます。

固定定位の要素は、ページ内で通常配置されるべき位置に隙間を残しません。

ページの右下角に固定されているこの要素に注意してください。これは使用している CSS です:

div.fixed {
  position: fixed;
  bottom: 0;
  right: 0;
  width: 300px;
  border: 3px solid #73AD21;
}

自分で試してみましょう

この <div> 要素には position: fixed; が設定されています;

position: absolute;

position: absolute; の要素は最も近い定位祖先要素に対して定位されます(fixedの場合は、ビューポートに対して定位されます)。

しかし、絶対定位の要素に祖先がなければ、ドキュメントの主体(body)を使用し、ページのスクロールとともに移動します。

注意:「定位された」要素は、その位置が除かれています static それ以外のどんな要素も。

これは簡単な例です:

この <div> 要素には position: relative; が設定されています;
この <div> 要素には position: absolute; が設定されています;

これは使用している CSS です:

div.relative {
  position: relative;
  width: 400px;
  height: 200px;
  border: 3px solid #73AD21;
} 
div.absolute {
  position: absolute;
  top: 80px;
  right: 0;
  width: 200px;
  height: 100px;
  border: 3px solid #73AD21;
}

自分で試してみましょう

position: sticky;

position: sticky; の要素はユーザーのスクロール位置に基づいて定位されます。

粘性要素はスクロール位置に基づいて相対(relative)および固定(fixed)間で切り替わります。最初は相対定位されますが、ビューポート内で指定されたオフセット位置に達すると、それ以降は適切な位置に「貼り付けられます」(例えばposition:fixed)。

注意:Internet Explorer、Edge 15およびそれ以前のバージョンは粘性定位をサポートしていません。Safariでは-webkit-接頭辞が必要です(以下の例を参照してください)。さらに、少なくとも以下のものを指定する必要があります toprightbottom または left その中の1つで、粘性定位が機能するようにするためです。

この例では、スクロール位置に達したときに、sticky要素がページの顶部に留まります(top: 0)。

div.sticky {
  position: -webkit-sticky; /* Safari */
  position: sticky;
  top: 0;
  background-color: green;
  border: 2px solid #4CAF50;
}

自分で試してみましょう

重なった要素

要素を定位する際には、他の要素と重なることがあります。

z-index 属性は要素のスタッキングオーダーを指定します(どの要素が他の要素の前に配置されるべきか)。

要素は正または負のスタッキングオーダーを設定できます:

これはタイトルです

画像のz-indexが-1であるため、テキストの後ろに配置されます。

img {
  position: absolute;
  left: 0px;
  top: 0px;
  z-index: -1;
}

自分で試してみましょう

より高いスタッキングオーダーの要素は常により低いスタッキングオーダーの要素の前に配置されます。

注意:二つの定位要素が重なっていて指定されていない場合 z-index、HTMLコードの最後の要素が上に表示されます。

画像内のテキストの位置決定

画像にテキストを配置する方法:

CodeW3C.com ロゴ
左下
左上
右上
右下
中央揃え

自分で試してみましょう:

左上 右上 左下 右下 中央揃え

他の例もご覧ください

要素の形状を設定
この例では、要素の形状を設定する方法を示します。要素はこの形状にカットされ、表示されます。

すべての CSS 定位属性

属性 説明
bottom 設定定位框の底部外縁マージン。
clip 絶対定位の要素をカットアウトします。
left 定位フレームの左側マージンエッジを設定します。
position 要素の定位タイプを指定します。
right 定位フレームの右側マージンエッジを設定します。
top 定位フレームのトップマージンエッジを設定します。
z-index 要素のスタッキング順序を設定します。

関連リーディング

参考書:CSS定位の概要

参考書:CSS相対定位

参考書:CSS絶対定位