※本記事はプロモーションを含みます
1. はじめに
CSSのposition: sticky;
は、スクロールに応じて要素を固定表示させる便利なプロパティです。しかし、「意図した動作をしない」「効かない」といった問題によく直面します。
本記事では、position: sticky;
が期待通りに動作しない主な原因と解決策を詳しく解説します。また、CSSを体系的に学ぶ方法も紹介します。
2. position: sticky;
とは?
2.1 基本的な動作
position: sticky;
は、スクロール時に指定した位置で要素を固定できるCSSプロパティです。
.sticky {
position: sticky;
top: 10px; /* スクロール時に上から10pxの位置で固定 */
background-color: yellow;
}
この設定により、要素は通常のフローに従いながら、スクロール時に親要素の範囲内で固定表示されます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sticky Example</title>
<style>
.container {
height: 1500px;
padding: 20px;
}
.sticky-box {
position: sticky;
top: 20px;
background: lightblue;
padding: 10px;
border: 1px solid #000;
}
</style>
</head>
<body>
<div class="container">
<div class="sticky-box">私はスクロールすると固定されます!</div>
</div>
</body>
</html>
2.2 position: sticky;
の要件
top
,bottom
,left
,right
のいずれかを指定する必要があるposition: sticky;
は親要素のスクロール範囲内でのみ有効overflow: hidden;
などの影響を受ける
3. position: sticky;
が効かない原因と解決策
3.1 top
, bottom
, left
, right
が未指定
問題点 position: sticky;
を指定しただけでは要素は固定されません。top
, bottom
, left
, right
のいずれかが必要です。
解決策
.sticky {
position: sticky;
top: 0; /* 画面上部に固定 */
}
3.2 親要素のoverflow
がhidden
, auto
, scroll
になっている
問題点 親要素にoverflow: hidden;
やoverflow: auto;
が指定されていると、position: sticky;
が無効になります。
解決策 親要素のoverflow
をvisible
に変更。
.parent {
overflow: visible;
}
3.3 親要素の高さが足りない
問題点 position: sticky;
は親要素のスクロール範囲内でのみ機能するため、親要素の高さが不足すると正しく動作しません。
解決策 親要素の高さを増やす。
.parent {
min-height: 200vh;
}
3.4 z-indexの影響を受けている
問題点 他の要素がz-index
でposition: sticky;
の要素を覆っていると、正しく表示されません。
解決策 z-index
を適切に設定。
.sticky {
position: sticky;
top: 10px;
z-index: 1000;
}
3.5 display: flex;
の影響を受ける場合
問題点 Flexboxのalign-items: stretch;
によりposition: sticky;
が無効になることがあります。
解決策 align-self: flex-start;
を指定。
.sticky {
align-self: flex-start;
}
4. CSSをちゃんと学ぶ方法
4.1 公式ドキュメントを活用する
4.2 実践的なプロジェクトを作る
- 実際のウェブページで
position: sticky;
を試す - コードペンなどでデモを作成
4.3 本を読む
4.4 オンライン学習プラットフォームを活用する

5. まとめ
position: sticky;
が効かない原因として、
top
,bottom
,left
,right
の指定忘れ- 親要素の
overflow
設定 - 親要素の高さ不足
z-index
の問題display: flex;
の影響
などが挙げられます。
これらのポイントを確認しながら適用することで、正しく動作させることができます。
CSSをしっかり学びながら、実際のプロジェクトで試してみましょう!