position
プロパティを使って、Webページの上部にヘッダーを固定し、画面をスクロールさせるとヘッダーがついてくる(ヘッダーが常時表示される)方法を紹介します。
なお、同じようにサイドバーやフッターを固定(追従)させる方法については以下記事で紹介しています。

固定表示ヘッダーの実装例とコード
本ページの上部に表示されているエリアが実装例です。
左側にロゴ(サイト名、他)を、右側にナビメニューを表示する領域を作りました。
また、ブラウザウィンドウのサイズに応じて、メニューの表示方法も変えてみました。
ウィンドウ幅 | デバイス | 表示内容 |
---|---|---|
〜800px | スマホ、タッチパネル | ロゴ + ハンバーガーメニューを表示 |
801px〜 | PC | ロゴ + メニュー3つを横並び表示 |
ハンバーガーメニューついては以下記事にて詳しく紹介しています。

HTML / CSS コード
<!-- ヘッダー高さ分の余白 -->
<div class="header-box"></div>
<header>
<div class="logo">仮ロゴ</div>
<!-- PC用表示 -->
<nav class="pc-menu">
<ul>
<li><a href="#">Menu 1</a></li>
<li><a href="#">Menu 2</a></li>
<li><a href="#">Menu 3</a></li>
</ul>
</nav>
<!-- モバイル用表示 -->
<div class="mobile-menu">
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
</div>
</header>
.header-box {
height: 80px;
}
header {
position: fixed;
top: 0;
left: 0;
width: 100%;
background: rgba(0, 0, 0, .1);
z-index: 100;
display: flex;
justify-content: space-between;
}
.logo {
width: 20%;
height: 80px;
text-align: center;
line-height: 80px;
font-size: 20px;
font-weight: 600;
background: skyblue;
}
nav {
width: 30%;
}
ul {
width: 100%;
display: flex;
list-style: none;
padding: 0;
margin: 0;
}
li {
width: 33%;
}
a {
display: block;
width: 100%;
line-height: 80px;
text-align: center;
}
.mobile-menu {
display: none;
width: 30px;
height: 22px;
text-align: center;
cursor: pointer;
position: absolute;
top: 50%;
right: 20px;
transform: translateY(-50%);
}
.line {
background-color: black;
height: 4px;
width: 100%;
position: absolute;
transition: all 0.3s;
}
.line:nth-of-type(1) {
top: 0;
}
.line:nth-of-type(2) {
top: 50%;
transform: translateY(-50%);
}
.line:nth-of-type(3) {
bottom: 0;
}
/* モバイル用表示切り替え */
@media (max-width: 800px) {
.mobile-menu {
display: block;
}
.pc-menu {
display: none;
}
}
固定表示にはposition: fixed;
を使う
特定の要素を、画面上の特定の位置に固定するには、CSSのposition: fixed;
を使います!
これに加えて、画面上のどの位置に固定するかを「top」「left」「bottom」「right」を使って示します。
本実装例では、top: 0; left: 0;
と指定しており、これは画面上端かつ左端に配置という意味になります。width: 100%;
を合わせて指定しているので、画面上端の左端から右端までheader要素が広がった状態で表示されています。
ロゴとメニューを横並びレイアウトにするにはdisplay: flex;
を使う
ロゴとメニューのレイアウトにはフレックスボックスを採用しています。
親要素にdisplay: flex;
を適用することで、その子要素を横並びで表示したり、サイズや間隔を調整したりできるようになります。
詳しくは以下記事をご覧ください。

ウィンドウ幅に応じて表示を変えるにはメディアクエリを使う
ウィンドウ幅(画面サイズ)に応じた表示変更はメディアクエリ(@media
)で対応します。
メディアクエリを使うと、特定のウィンドウ幅になったときにレイアウトや表示を自動的に切り替えることができるようになります。
詳しくは以下記事をご覧ください。

まとめと応用例
以上、ヘッダーを画面上部に固定し、スクロールしてもついてくる実装について紹介しました。
今回はヘッダーでしたが、「top」「left」「bottom」「right」の指定を変えることで、画面の好きな位置に要素を配置できます。いろいろな値を入れてみて、表示がどのように変わるかぜひ試してみてください。
なお、本記事ではハンバーガーメニュー(モバイル表示時)はアイコンのみで、クリックしても何も表示されません。
メニューも表示する方法は以下記事にて紹介していますので、ぜひ合わせてご覧ください。

当サイトで公開しているWebデザインやUIの実装例は、一覧として以下記事に纏めています。
