[記事の内容]

ハンバーガーメニューとは、ウェブサイトやスマートフォンのアプリの画面のどこかにある、横線が3本並んだマーク(≡)のことです。ハンバーガーメニューをクリックする事により、ナビゲーションを表示させたり、コンテンツを表示させる事が可能になります。
こちらにデモサイトはこちらになります。
HTMLは、ハンバーガーメニューのエリア「#nav-toggle」を記述します。
今回は「#nav-toggle」の中に「nav」を記述しておきます。
コンテンツ「#main-contents」を記述しておきます。2つ用意してください。
HTMLは以下になります。
<div id="nav-toggle">
<div>
<span></span>
<span></span>
<span></span>
</div>
</div>
<nav id="gloval-nav">
<ul>
<li><a href="#">NAV01</a></li>
<li><a href="#">NAV02</a></li>
<li><a href="#">NAV03</a></li>
<li><a href="#">NAV04</a></li>
<li><a href="#">NAV05</a></li>
</ul>
</nav>
<div id="main-contents">
<div class="inner">
<p>ハンバーガーメニューをクリックした際に、<br>メインコンテンツ押し出されます。</p>
</div>
</div>CSSは、以下になります。
/* ==========================================
①定義
========================================== */
:root {
--nav-toggle-height: 32px;
--nav-toggle-color: #222222;
--nav-toggle-open-color: #222222;
--nav-toggle-span-height: 2px;
--nav-background-color: #fff;
--nav-text-color: #fff;
--nav-link-hover-color: #666;
--transition-duration: 0.6s;
--transition-easing: ease-in-out;
}
/* ==========================================
②ハンバーガーアイコン
========================================== */
#nav-toggle {
position: fixed;
top: 6%;
height: var(--nav-toggle-height);
cursor: pointer;
z-index: 1000;
left: calc(50% - 600px);
}
@media (max-width: 1200px) {
#nav-toggle {
left: 5%;
}
}
.open #nav-toggle {
top: 4%;
left: 20px;
}
#nav-toggle > div {
position: relative;
width: 36px;
}
#nav-toggle span {
display: block;
position: absolute;
left: 0;
width: 100%;
height: var(--nav-toggle-span-height);
background: var(--nav-toggle-color);
transition: transform var(--transition-duration) var(--transition-easing),
top 0.5s ease;
}
#nav-toggle span:nth-child(1) {
top: 0;
}
#nav-toggle span:nth-child(2) {
width: 80%;
top: calc(var(--nav-toggle-height) / 3);
}
#nav-toggle span:nth-child(3) {
top: calc(var(--nav-toggle-height) / 3 * 2);
}
/* ==========================================
③開いたときのXアニメーション
========================================== */
.open #nav-toggle span {
background: var(--nav-toggle-open-color);
}
.open #nav-toggle span:nth-child(1) {
top: calc(var(--nav-toggle-height) / 2 - var(--nav-toggle-span-height) / 2);
transform: rotate(45deg);
}
.open #nav-toggle span:nth-child(2) {
top: calc(var(--nav-toggle-height) / 2 - var(--nav-toggle-span-height) / 2);
width: 0;
left: 50%;
}
.open #nav-toggle span:nth-child(3) {
top: calc(var(--nav-toggle-height) / 2 - var(--nav-toggle-span-height) / 2);
transform: rotate(-45deg);
}
/* ==========================================
④グローバルナビ
========================================== */
#gloval-nav {
position: fixed;
top: 0;
left: 0;
width: 390px;
height: 100vh;
background: var(--nav-background-color);
color: var(--nav-text-color);
z-index: 990;
text-align: left;
padding: 5rem 4rem;
transform: translateX(-100%);
transition: transform var(--transition-duration) var(--transition-easing);
box-shadow: 2px 0 10px rgba(0, 0, 0, 0.15);
overflow-y: auto;
}
/* ==========================================
⑤開いたとき
========================================== */
.open #gloval-nav {
transform: translateX(0);
opacity: 1;
visibility: visible;
}
#gloval-nav {
letter-spacing: 0.08em;
}
#gloval-nav ul {
list-style: none;
padding: 0;
margin: 0;
margin-bottom: 4rem;
}
#gloval-nav ul li {
opacity: 1;
margin-bottom: 1rem;
}
#gloval-nav ul li a {
font-size: 2.3rem;
font-weight: 700;
text-decoration: none;
display: block;
padding: 2rem 0;
transition: color 0.3s;
color: #333;
}
#gloval-nav ul li a:hover {
opacity: 0.5;
color: var(--nav-link-hover-color);
}
/* ==========================================
⑥メインコンテンツ押し出し
========================================== */
#main-contents {
width: 100%;
height: 100vh;
background: #f9f9f9;
transition: transform var(--transition-duration) var(--transition-easing);
}
.open #main-contents {
transform: translateX(280px);
transition: transform 0.6s var(--transition-easing);
}
/*---------ここは自由に------------*/
.inner {
width: 1000px;
margin: 0 auto;
}
.inner p {
font-size: 20px;
font-weight: bold;
padding-top: 5rem;
}
/* ==========================================
⑦スクロール無効化
========================================== */
.open body {
overflow: hidden;
}:rootセレクタを使用しています。:rootの中の定義を一行修正するだけで、サイト全体にその変更を反映させることができます。#nav-toggleを位置を指定します。.openを付与します。こちらは次の「js」になります。transform: rotate(45deg)を指定することにより、width: 0 left: 50%で線を消します。#gloval-navは、開い際のコンテンツの位置、横幅、高さ、背景色などの指定が可能になります。#gloval-navの、開い際のコンテンツのレイアウト用のCSSになります。navやbtnを追加した際には、CSSを追加してください。.open #main-contentsは、「open=開いた際」に「translateX(方向)=280」移動します。overflow: hiddenでスクロール無効化しております。ここでは、CSSにあったクリックした際に「open」を付与します。
jsは、以下になります。
(function($) {
$(function () {
$('#nav-toggle').on('click', function() {
$('body').toggleClass('open');
});
});
})(jQuery);
今回はこれで以上です。
translateX(方向)に移動します。被るパターンを使用する場合は、「⑥メインコンテンツ押し出し」のコードは削除しても問題ありません。open」を付与します。2025.10.17
2025.10.17
2025.10.15
2025.08.16
2025.08.13
2025.08.12
2023.06.15
2022.06.30
2020.03.22
2020.03.06

© 2025 shu-naka-blog