CSSのfixed
とsticky
は、要素の位置を指定するために使用されるプロパティで、ウェブデザインにおいて重要な役割を果たします。それぞれの特性や使い方を理解することは、デザインをより魅力的で機能的にするために不可欠です。本記事では、これらのプロパティを完全かつ包括的に解説し、どのように使いこなすかを説明します。
1. position: fixed
の基本
position: fixed
は、要素をページ上で固定された位置に配置するために使用します。スクロールしてもその位置から動くことはありません。つまり、画面上で常に同じ位置に留まるため、ナビゲーションバーやサイドバー、通知バーなどの固定要素によく使われます。

使用方法
css.fixed-element {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 50px;
background-color: #333;
color: white;
text-align: center;
}
上記のコードでは、要素が画面の上部(top: 0
)に固定され、左端(left: 0
)に配置されています。幅は画面いっぱいに広がり、ナビゲーションバーとして使われることが多いです。
特徴
-
スクロールしても位置が変わらない。
-
ビューポート(画面表示領域)に対して相対的に配置される。
-
他の要素に重なる可能性があるため、適切な
z-index
を使って重なり順序を管理することが重要です。
使用例
固定されたヘッダーやナビゲーションバーは、ユーザーがページをスクロールしても常に表示されるため、便利です。
html<div class="fixed-element">固定されたナビゲーションバーdiv>
2. position: sticky
の基本
position: sticky
は、要素が指定したスクロール位置に達するまで通常のフローに従って移動し、スクロール位置に達するとその位置に固定されるという特性を持っています。これは、スクロールに応じて動きが変化するため、fixed
とrelative
の中間的な挙動をします。
使用方法
css.sticky-element {
position: sticky;
top: 0;
background-color: #ffcc00;
padding: 10px;
}
この場合、要素は通常通りページをスクロールしますが、top: 0
を指定しているため、スクロールして要素が画面上部に到達すると、その位置に固定されます。スクロールを続けると、ページの内容とともにその位置も動きますが、指定したスクロール位置を越えた際に固定されます。
特徴
-
スクロール位置に達するまで動く。
-
その後、指定した位置に固定される。
-
ページ内のスクロール位置に応じて動作が変わる。
使用例
例えば、サイドバーや記事内の目次などで、スクロールに合わせて固定される要素として利用されます。
html<div class="sticky-element">スクロールで固定される要素div>
3. fixed
とsticky
の違い
position: fixed
とposition: sticky
は似ているようで、実際には異なる挙動をします。その違いを以下にまとめます。
特徴 | position: fixed |
position: sticky |
---|---|---|
スクロール時の動き | 常に固定される | スクロール位置に応じて固定される |
参照する基準 | ビューポート(画面表示領域) | 親要素または指定したスクロール位置 |
使用場面 | 固定ナビゲーションバー、通知バーなど | サイドバー、目次、ヘッダーなど |
他の要素との重なり | 他の要素の上に表示される可能性がある | 指定したスクロール位置で固定されるため、重なりが少ない |
影響を受ける要素 | 親要素やスクロールに影響されない | 親要素の範囲内でのみ固定される |
4. fixed
とsticky
の組み合わせ
fixed
とsticky
は、同じページ内でもうまく組み合わせて使用することができます。例えば、ナビゲーションバーをfixed
で固定し、ページのサイドに表示される目次をsticky
でスクロール位置に応じて固定するような使い方です。
css.fixed-nav {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: #333;
color: white;
padding: 10px;
}
.sticky-sidebar {
position: sticky;
top: 20px; /* 20pxの位置からスクロールしたら固定 */
background-color: #f0f0f0;
padding: 15px;
}
このようにして、画面上部には固定されたナビゲーションバー、サイドバーにはスクロールに応じて動き、指定位置で固定される目次を配置することができます。
5. 注意点とベストプラクティス
-
sticky
は、親要素がoverflow: hidden
やoverflow: auto
になっている場合、期待通りに動作しないことがあります。この場合、親要素のoverflow
を適切に設定する必要があります。 -
fixed
要素が他の要素に重なってしまうことを避けるため、z-index
を利用して重なり順序を調整しましょう。 -
モバイルデバイスでは、
sticky
の動作に制限がある場合があるため、実際のデザインで動作を確認することが重要です。
結論
position: fixed
とposition: sticky
は、それぞれ異なるシチュエーションで役立つ強力なCSSプロパティです。fixed
は画面上で常に固定された要素を作成するのに対し、sticky
はスクロール位置に応じて動作を変える要素を作成します。これらを適切に使い分けることで、ユーザー体験を向上させ、よりインタラクティブなウェブデザインが実現できます。