CSS 速習チュートリアル

CSS ポジション

position プロパティは、要素に対して使用されるポジショニング(配置)方法の種類を指定します。

1. position プロパティの基本 (The position Property)

position プロパティは、要素の配置方法を指定します。

position プロパティには、以下の5つの値があります。

  • static
  • relative
  • fixed
  • absolute
  • sticky

要素は、topbottomleftright プロパティを使用して配置されます。ただし、これらのプロパティは、先に position プロパティが設定されていない限り機能しません。また、position の値によって、これらのプロパティの動作も異なります。

2. position: static;

HTML 要素はデフォルトで static(スタティック)に配置されます。

スタティックに配置された要素は、topbottomleftright プロパティの影響を受けません。

position: static; が指定された要素は、特定の配置が行われるわけではなく、常にページの通常のフロー(文書流)に従って配置されます。

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

3. position: relative;

position: relative; が指定された要素は、その要素が本来あるべき通常の位置(ノーマルフロー上の位置)を基準として配置されます。

リラティブ(相対的)に配置された要素の toprightbottomleft プロパティを設定すると、元の位置からオフセット(移動)されます。他のコンテンツは、その要素によって残された空きスペースに合わせて調整されることはありません。

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

4. position: fixed;

position: fixed; が指定された要素は、**ビューポート(ブラウザの画面)**を基準として配置されます。つまり、ページをスクロールしても常に同じ場所に留まります。

toprightbottomleft プロパティは、要素を配置する場所を指定するために使用されます。

フィックス(固定)配置された要素はページフローから完全に外れるため、本来あった場所にスペースは残りません。

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

5. position: absolute;

position: absolute; が指定された要素は、最も近い「ポジショニングされた(static 以外の値を持つ)」祖先要素を基準として配置されます。

ポジショニングされた祖先要素がない場合は、ドキュメントのボディ(<body>)を基準とし、ページのスクロールと共に移動します。

注意: 「ポジショニングされた」要素とは、positionstatic 以外の値(relative, fixed, absolute, sticky)を持つ要素を指します。

/* 親要素を基準とするための設定 */
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;
}

6. position: sticky;

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

スティッキー要素は、ユーザーのスクロール位置に応じて relativefixed の間を切り替えるような挙動をします。ビューポート内で特定のオフセット位置に達するまでは relative として振る舞い、その後はその位置で「スタック(固定)」されます。

注意: このプロパティが機能するためには、topbottomleftright のうち少なくとも1つを指定する必要があります。

div.sticky {
  position: -webkit-sticky; /* Safari 用 */
  position: sticky;
  top: 0;
  background-color: yellow;
  padding: 50px;
  font-size: 20px;
}

7. 要素の重なり (Overlapping Elements)

要素がポジショニングされると、他の要素と重なる場合があります。

7.1 z-index プロパティ

z-index プロパティは、要素のスタック順序(どの要素を前面または背面に配置するか)を指定します。

要素は、正または負のスタック順序を持つことができます。

img {
  position: absolute;
  left: 0px;
  top: 0px;
  z-index: -1; /* テキストの背面に配置 */
}

スタック順序が大きい要素は、常にスタック順序が小さい要素の手前に表示されます。

備考: z-index は、ポジショニングされた要素(position: relative;position: absolute;position: fixed;、または position: sticky;)およびフレックスアイテム(display: flex; の直下の子要素)に対してのみ機能します。

8. ポジショニングプロパティ一覧

プロパティ説明
bottomポジショニングされた要素の下端の位置を設定する
clip要素をクリッピング(切り抜き)する。現在は clip-path が推奨される
leftポジショニングされた要素の左端の位置を設定する
position要素のポジショニング方法の種類(static, relative, absolute, fixed, sticky)を指定する
rightポジショニングされた要素の右端の位置を設定する
topポジショニングされた要素の上端の位置を設定する
z-index要素のスタック順序を設定する