CSS position: fixed プロパティ値
position: fixedは、CSS 配置プロパティの中で固定配置に使用される値です。固定配置を使用する要素はドキュメントフローから外れ、ブラウザのビューポート(viewport)に対して配置され、ページのスクロールに合わせて移動することはありません。
これは、固定ナビゲーションバー、トップに戻るボタン、サイドバー広告などの機能を実装するための中心的な技術です。
単語の意味:fixedラテン語に由来しfixare、「固定する、取り付ける」という意味で、要素の位置が一度決まると変わらないことを表します。
基本構文
position: fixedと組み合わせて使用する必要がありますtop、right、bottom、leftプロパティで、ビューポートに対する位置を指定します。
/* 语法 */
position: fixed;
/* 常用组合:固定在顶部 */
.navbar {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 60px;
}
/* 固定在右下角 */
.back-to-top {
position: fixed;
bottom: 20px;
right: 20px;
}
核心的な特徴
特徴1:ビューポートに対する配置
固定配置の要素は親要素の影響を受けず、常にブラウザウィンドウの表示領域に対して配置されます。
特徴2:ドキュメントフローから外れる
とabsoluteと同様に、fixed要素はドキュメント上のスペースを占有せず、周囲の要素は通常どおりに配置され固定配置された要素の存在を無視します。
特徴3:固定され、スクロールしても移動しない
これはfixedとabsoluteの重要な違いです:ページがどのようにスクロールしても、固定配置された要素は常に指定された位置に留まります。
特徴4:z-index の有効化
固定配置によってz-indexz-index プロパティが有効になり、要素のビューポート内での重なり順を制御できます。
実例
実例を通して、position:fixedposition: fixedの特性を深く理解しましょう。
例1:上部ナビゲーションバーの固定
これはfixedposition:fixed の最も一般的な使用シナリオです:ナビゲーションバーの固定。
実例
<html>
<head>
<style>
body {
margin: 0;
font-family: Arial, sans-serif;
}
/* 上部に固定されたナビゲーションバー */
.navbar {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 60px;
background-color: #2c3e50;
color: white;
display: flex;
align-items: center;
padding: 0 20px;
box-sizing: border-box;
z-index: 1000;
}
/* メインコンテンツ領域 */
.content {
padding-top: 80px; /* ナビゲーションバーに隠れないようにする */
padding: 80px 20px 20px;
max-width: 800px;
margin: 0 auto;
}
.spacer {
height: 1500px; /* 十分な長さのスクロール領域を作成 */
}
.text-block {
margin-bottom: 20px;
padding: 20px;
background-color: #f5f5f5;
border-radius: 4px;
}
</style>
</head>
<body>
<div class="navbar">
固定ナビゲーションバー - 下にスクロールして効果を確認
</div>
<div class="content">
<h1>固定配置の例</h1>
<p>これは position: fixed を使用して実装された固定ナビゲーションバーです。</p>
<p>ページをどのようにスクロールしても、ナビゲーションバーはページ上部に留まります。</p>
<div class="text-block">
<h2>コンテンツ領域1</h2>
<p>これは1番目のコンテンツで、スクロールバーを発生させるためにページを埋めています。</p>
</div>
<div class="text-block">
<h2>コンテンツ領域2</h2>
<p>これは2番目のコンテンツです。</p>
</div>
<div class="text-block">
<h2>コンテンツ領域3</h2>
<p>これは3番目のコンテンツです。</p>
</div>
<div class="text-block">
<h2>コンテンツ領域4</h2>
<p>これは4番目のコンテンツです。</p>
</div>
<div class="spacer"></div>
</div>
</body>
</html>
例2:右下隅に固定された「トップに戻る」ボタン
固定配置は「トップに戻る」ボタンの作成にもよく使用されます:
実例
<html>
<head>
<style>
body {
margin: 0;
font-family: Arial, sans-serif;
}
.content {
padding: 20px;
max-width: 800px;
margin: 0 auto;
}
/* スクロールバーが発生するようにページを十分に長くする */
.tall-content {
height: 2000px;
}
/* 右下隅に固定されたボタン */
.back-to-top {
position: fixed;
bottom: 30px;
right: 30px;
width: 50px;
height: 50px;
background-color: #e74c3c;
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 24px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
transition: transform 0.2s;
}
.back-to-top:hover {
transform: scale(1.1);
background-color: #c0392b;
}
</style>
</head>
<body>
<div class="content">
<h1>「トップに戻る」ボタンの例</h1>
<p>ページをスクロールして、固定ボタンの効果を確認してください。</p>
<div class="tall-content"></div>
</div>
<div class="back-to-top" title=「トップに戻る」>
↑
</div>
</body>
</html>
例3:サイドバーの固定
固定配置はサイドバーの固定にも使用できます:
実例
<html>
<head>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
}
/* メインコンテナ:grid レイアウトを使用 */
.container {
display: grid;
grid-template-columns: 1fr 200px;
max-width: 1000px;
margin: 0 auto;
min-height: 2000px;
}
.main-content {
padding: 20px;
background-color: #ecf0f1;
}
/* 固定サイドバー */
.sidebar {
position: fixed;
top: 20px;
right: calc(50% - 500px + 220px);
width: 180px;
background-color: #3498db;
color: white;
padding: 15px;
border-radius: 4px;
}
.ad-banner {
background-color: #e74c3c;
padding: 10px;
text-align: center;
border-radius: 4px;
margin-bottom: 10px;
}
.content-block {
background-color: white;
padding: 15px;
margin-bottom: 15px;
border-radius: 4px;
}
</style>
</head>
<body>
<div class="container">
<div class="main-content">
<h1>メインコンテンツ領域</h1>
<p>これはメインコンテンツで、スクロールに合わせて移動します。</p>
<div class="content-block">
<p>コンテンツ段落1 - スクロール効果を出すためにページを埋めます。</p>
</div>
<div class="content-block">
<p>コンテンツ段落2</p>
</div>
<div class="content-block">
<p>コンテンツ段落3</p>
</div>
<div class="content-block">
<p>コンテンツ段落4</p>
</div>
<div class="content-block">
<p>コンテンツ段落5</p>
</div>
<div class="content-block">
<p>コンテンツ段落6</p>
</div>
<div class="content-block">
<p>コンテンツ段落7</p>
</div>
<div class="content-block">
<p>コンテンツ段落8</p>
</div>
</div>
<div class="sidebar">
<div class="ad-banner">広告スペース</div>
<p>固定サイドバー</p>
<p>メインコンテンツがどのようにスクロールしても、私は常に右側の固定位置に留まります。</p>
</div>
</div>
</body>
</html>
例4:下部に固定されたフッター
コンテンツが少ないページのフッターを下部に固定する必要がある場合があります:
実例
<html>
<head>
<style>
* {
margin: 0;
padding: 0;
}
body {
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: Arial, sans-serif;
}
.content {
flex: 1;
padding: 40px 20px;
max-width: 800px;
margin: 0 auto;
width: 100%;
}
/* 下部に固定されたフッター */
.footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #2c3e50;
color: white;
text-align: center;
padding: 15px;
}
</style>
</head>
<body>
<div class="content">
<h1>コンテンツが少ないページ</h1>
<p>このページのコンテンツはほとんどありませんが、フッターは下部に固定されています。</p>
<p>flexbox の flex: 1 と position: fixed を組み合わせて実現しています。</p>
</div>
<div class="footer">
©2026 サンプル - 固定フッター
</div>
</body>
</html>
例5:固定オーバーレイ
固定配置は全画面オーバーレイの作成にも使用できます:
実例
<html>
<head>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
}
.open-btn {
padding: 12px 24px;
background-color: #3498db;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
}
/* 固定オーバーレイ */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
display: flex;
align-items: center;
justify-content: center;
z-index: 999;
}
/* オーバーレイを非表示 */
.modal-overlay.hidden {
display: none;
}
/* ポップアップの内容 */
.modal-content {
background-color: white;
padding: 30px;
border-radius: 8px;
text-align: center;
max-width: 400px;
}
.modal-content h2 {
margin-bottom: 15px;
}
.close-btn {
margin-top: 20px;
padding: 10px 20px;
background-color: #e74c3c;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
</style>
</head>
<body>
<h1>固定オーバーレイの例</h1>
<p>ボタンをクリックするとポップアップが開きます。</p>
<button class="open-btn" onclick="document.querySelector('.modal-overlay').classList.remove('hidden')">
ポップアップを開く
</button>
<div class="modal-overlay hidden">
<div class="modal-content">
<h2>サンプル へようこそ</h2>
<p>これは固定配置を使用して作成されたオーバーレイポップアップです。</p>
<p>オーバーレイは常にビューポート全体を覆い、ページのスクロールに合わせて移動しません。</p>
<button class="close-btn" onclick="document.querySelector('.modal-overlay').classList.add('hidden')">
閉じる
</button>
</div>
</div>
</body>
</html>
注意事項
モバイル端末の互換性の問題:iOS Safari や一部のモバイルブラウザでは、
position: fixed互換性の問題が発生する可能性があります。入力欄がフォーカスを取得すると要素が移動することがあります。解決策としては、-webkit-position: fixedを使用する、またはtransform: translateZ(0)を設定してハードウェアアクセラレーションを有効にします。
z-index の階層
固定配置された要素のz-indexz-index はビューポートに対して計算され、親要素に対してではありません。
絶対配置との違い
| 特性 | position: absolute | position: fixed |
|---|---|---|
| 配置の基準 | 最も近い配置可能な祖先要素 | ブラウザのビューポート(viewport) |
| ページスクロール | ページスクロールに合わせて移動する | 固定され移動しない |
| 印刷 | 正常に表示される | 表示されないか、動作が異常になる可能性がある |
固定配置された要素が印刷されないようにする
@media print {
.fixed-element {
position: static; /* 打印时取消固定定位 */
}
}
よくある使用シナリオ
シナリオ1:上部ナビゲーションの固定
.nav-header {
position: fixed;
top: 0;
width: 100%;
height: 50px;
z-index: 100;
}
シナリオ2:戻るボタンの固定
.floating-btn {
position: fixed;
bottom: 20px;
right: 20px;
}
シナリオ3:チャットウィンドウ
.chat-widget {
position: fixed;
bottom: 20px;
right: 20px;
width: 300px;
height: 400px;
}
まとめ
position: fixedは、固定 UI 要素を実装するための中心的な技術です:
- ブラウザのビューポートに対して配置され、親要素の影響を受けない
- 固定され、ページのスクロールに合わせて移動しない
- 要素はドキュメントフローから外れ、スペースを占有しない
- z-index を有効にし
z-index、重なり順を制御できる - 固定ナビゲーションバー、トップに戻るボタン、固定サイドバー、オーバーレイポップアップなどによく使用される
- モバイル端末では互換性の問題に注意が必要
その他の拡張
CSS position プロパティ