「position」プロパティを使って、Webページの上部にヘッダーを固定し、画面をスクロールさせるとヘッダーがついてくる(ヘッダーが常時表示される)方法を紹介します。
自分の学習・メモ用がメインですが、プログラミング学習初心者の参考になればとも思います!
なお、同じようにサイドバーやフッターを固定(追従)させる方法については以下記事で紹介しています。

実装例とコード
本ページの上部に表示されているエリアが実装例です。
左側にロゴ(サイト名、他)を、右側にナビメニューを表示する領域を作りました。
また、画面の表示サイズに応じてメニューの表示方法も変えてみました。
- 画面サイズが800px以下(スマホやタッチパネルなど) → メニューが1つ
- 画面サイズが800px超(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>
<!-- モバイル用表示 -->
<nav class="mobile-menu">
<div>Menu</div>
</nav>
</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;
font-size: 28px;
font-weight: 600;
line-height: 80px;
text-align: center;
}
/* モバイル用表示切り替え */
@media (max-width: 800px) {
.mobile-menu {
display: block;
}
.pc-menu {
display: none;
}
}
特定の要素を、画面上の特定の位置に固定するには、CSSの「position: fixed;」を使います!
これに加えて、画面上のどの位置に固定するかを「top」「left」「bottom」「right」を使って示します。
本実装例では、「top: 0;」「left: 0;」と指定しており、これは画面上端かつ左端に配置という意味になります。
「width: 100%;」を合わせて指定しているので、画面上端の左端から右端までheader要素が広がった状態で表示されています。
本実装例では、ロゴとメニューのレイアウトにフレックスボックス(display: flex;)を採用し、画面サイズに応じた表示変更にはメディアクエリ(@media)を採用しています。
こちらについては以下記事で紹介していますので、合わせてご覧ください。


まとめ
以上、ヘッダーを画面上部に固定し、スクロールしてもついてくる実装について紹介しました。
今回はヘッダーでしたが、「top」「left」「bottom」「right」の指定を変えることで、画面の好きな位置に要素を配置できます。いろいろな値を入れてみて、表示がどのように変わるかぜひ試してみてください。