CSSとJavaScriptで作るカーテン式ナビゲーションメニューの実装方法
カーテン式ナビゲーションメニューとは
カーテン式(スライド式)ナビゲーションメニューとは、ボタンをクリックすると画面の端からカーテンを開くように滑らかに展開し、閉じるときには元の位置へ引っ込むタイプのメニューです。CSSのtransitionプロパティによるアニメーションと、JavaScriptによる要素の幅(width)制御を組み合わせることで、比較的シンプルなコードで実装できます。
本記事では、実際に動作するサンプルコードとその仕組みをわかりやすく解説します。
コード例
以下は、CSSとJavaScriptを使用してカーテン式ナビゲーションメニューを作成するコード例です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.sideNav {
height: 100vh;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: rgba(46, 218, 195,0.4);
overflow-x: hidden;
padding-top: 60px;
transition: 0.5s;
}
.sideNav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #000000;
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
display: block;
transition: 0.3s;
text-align: center;
}
.sidenav a:hover {
color: #f1f1f1;
}
.sideNav .closeBtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
button {
padding: 15px;
background-color: rgb(0, 27, 145);
color: rgb(255, 255, 255);
font-size: 20px;
border: none;
border-radius: 2%;
}
</style>
</head>
<body>
<nav class="sideNav">
<a href="#" class="closeBtn">×</a>
<a href="#">ログイン</a>
<a href="#">新規登録</a>
<a href="#">ホーム</a>
<a href="#">会社概要</a>
</nav>
<button class="openSideNav">サイドナビを開く</button>
<div class="main-content">
<h1>見出し1</h1>
<p>段落テキスト</p>
<h2>見出し2</h2>
<p>さらに続く段落テキスト</p>
</div>
<script>
let openBtn = document.querySelector(".openSideNav");
openBtn.addEventListener("click", () => {
showNav();
});
let closeBtn = document.querySelector(".closeBtn");
closeBtn.addEventListener("click", () => {
hideNav();
});
function showNav() {
document.querySelector(".sideNav").style.width = "100%";
}
function hideNav() {
document.querySelector(".sideNav").style.width = "0";
}
</script>
</body>
</html>
実行結果
上記のコードを実行すると、最初は次のようにメニューが閉じた状態でページが表示されます。

「サイドナビを開く」ボタンをクリックすると、半透明の緑色のナビゲーションメニューが画面全体にカーテンのように展開されます。

仕組みの解説
このカーテン式ナビゲーションメニューのポイントは以下の通りです。
- 初期状態の設定:
.sideNavクラスではwidth: 0;としており、メニューは最初非表示の状態になっています。position: fixed;とtop: 0; left: 0;により、画面左端に固定配置されます。 - 滑らかなアニメーション:
transition: 0.5s;を指定することで、幅が変化する際に0.5秒かけて滑らかにアニメーションします。これがカーテンのような動きを実現しています。 - JavaScriptでの開閉制御: 開くボタンのクリックイベントで
showNav()関数を呼び出してwidthを100%に変更し、閉じるボタン(×)のクリックでhideNav()関数によりwidthを0に戻すことで、メニューの表示・非表示を切り替えています。 - はみ出し防止:
overflow-x: hidden;を指定することで、メニューが閉じている間にリンクテキストが画面外へはみ出して見えることを防いでいます。
このように、CSSのトランジションとJavaScriptのイベント処理を組み合わせるだけで、ユーザー体験を向上させる洗練されたナビゲーションメニューを簡単に実装できます。
-
CSSとJavaScriptでスナックバー/トーストを実装する方法【サンプルコード付き】
スナックバー(トースト)は、画面の端に一時的に表示される小さな通知メッセージのことです。「保存が完了しました」などの操作結果をユーザーへ伝える際によく使われ、数秒後に自動的に消えるのが特徴です。CSSとJavaScriptを組み合わせれば、特別なライブラリを使わずとも簡単に実装できます。以下に、ボタンをクリックすると画面下部にスナックバーが表示され、数秒後にフェードアウトするサンプルコードを示します。コード例<!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu
-
CSSとJavaScriptでアコーディオン(開閉パネル)を作成する方法をわかりやすく解説
CSSとJavaScriptを組み合わせることで、クリックすると内容が開閉する「アコーディオン(折りたたみパネル)」を簡単に実装できます。本記事では、実際に動作するサンプルコードをもとに、その作成手順と仕組みを詳しく解説します。 アコーディオンの実装例 以下は、HTML・CSS・JavaScriptを使ってアコーディオンを実装した完全なサンプルコードです。 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, ini