<header class="header">
<div class="header__layout">
<div id="hamburger-logo" class="header__logo">
<a href="#">ロゴ</a>
</div>
<nav id="hamburger-nav" class="header__nav">
<ul class="header__menus">
<li class="header__menu">
<a href="#">メニュー</a>
</li>
<li class="header__menu header__menu--sub js-sub-menu">
<p>サブメニューあり</p>
<ul class="header__sub-menu">
<li>
<a href="" target="_blank">サブメニュー</a>
</li>
<li>
<a href="" target="_blank">サブメニュー</a>
</li>
</ul>
</li>
<li class="header__menu">
<a href="#">メニュー</a>
</li>
<li class="header__menu header__menu--sub js-sub-menu">
<p>サブメニューあり</p>
<ul class="header__sub-menu">
<li>
<a href="" target="_blank">サブメニュー</a>
</li>
<li>
<a href="" target="_blank">サブメニュー</a>
</li>
</ul>
</li>
</ul>
</nav>
<div id="hamburger" class="hamburger">
<div id="hamburger-icon" class="hamburger__icon">
<div class="hamburger__bar"></div>
<div class="hamburger__bar"></div>
<div class="hamburger__bar"></div>
</div>
<div id="hamburger-background" class="hamburger__background"></div>
</div>
</div>
</header>
/* リセットCSS */
*,
*::before,
*::after {
box-sizing: border-box;
}
ul,
ol {
list-style: none;
padding: 0;
}
ul,
ol,
p {
margin: 0;
}
a {
text-decoration: none;
color: inherit;
}
$header_height_pc: 100px;
$header_height_sp: 80px;
.header {
position: fixed;
z-index: 10;
top: 0;
left: 0;
width: 100%;
height: $header_height_pc;
@media screen and (max-width: 767px) {
height: $header_height_sp;
}
}
.header__layout {
/* position: relative; */
display: flex;
align-items: center;
justify-content: space-between;
gap: 30px;
height: inherit;
padding: 0 30px;
background-color: #5cc0ef;
@media screen and (max-width: 767px) {
padding: 0 20px;
}
}
.header__logo {
a {
font-size: 20px;
font-weight: 700;
color: #fff;
transition: all 0.3s;
&:hover {
opacity: 0.7;
}
}
}
.header__nav {
@media screen and (max-width: 767px) {
display: none;
}
}
.header__menus {
display: flex;
gap: 24px;
}
.header__menu {
width: auto;
height: $header_height_pc;
@media screen and (max-width: 767px) {
height: $header_height_sp;
}
a, p {
display: flex;
align-items: center;
height: inherit;
font-size: 16px;
font-weight: 700;
color: #fff;
}
a {
transition: all 0.3s;
&:hover {
color: #ffe100;
}
}
}
.header__menu--sub {
cursor: default;
position: relative;
/* サブメニューの表示 */
&:hover {
.header__sub-menu {
padding: 13px 16px;
height: auto;
}
}
}
.header__sub-menu {
position: absolute;
top: 100%;
left: -16px;
width: fit-content;
min-width: calc(100% + 16px * 2);
height: 0px;
padding: 0px 16px;
background-color: #5cc0ef;
overflow: hidden;
transition: all 0.4s ease;
@media screen and (max-width: 767px) {
background-color: transparent;
}
li {
&:not(:first-child) {
margin-top: 18px;
}
a {
font-size: 16px;
line-height: calc(30 / 16);
white-space: nowrap;
color: #fff;
transition: all 0.3s;
&:hover {
color: #ffe100;
}
}
}
}
.hamburger {
@media screen and (min-width: 768px) {
display: none;
}
.hamburger__icon {
cursor: pointer;
display: flex;
flex-direction: column;
justify-content: space-between;
width: 32px;
height: 25px;
&:hover {
.hamburger__bar {
background-color: #ffe100;
}
}
.hamburger__bar {
width: 100%;
height: 3px;
border-radius: 2px;
background-color: #fff;
transition: all 0.3s;
}
}
.hamburger__background {
display: none;
position: fixed;
z-index: 10;
top: $header_height_sp;
left: 0;
width: 100%;
/*
CodePenで適用されないのでコメントアウト
height: calc(100% - $header_height_sp);
*/
height: calc(100% - 80px);
background-color: #5CC0EF;
}
}
/* ここからハンバーガーメニューのアニメーション */
/* ハンバーガーメニューのアイコンで使用 */
.js-hamburger {
.hamburger__icon {
position: relative;
z-index: 12;
.hamburger__bar {
position: absolute;
background-color: #fff;
&:nth-child(1) {
left: 0;
top: calc(50% - 1px);
transform: rotate(45deg);
}
&:nth-child(2) {
opacity: 0;
}
&:nth-child(3) {
bottom: calc(50% - 2px);
left: 0;
transform: rotate(-45deg);
}
}
}
}
/* ハンバーガーメニューを開いた時にページを固定する */
.js-background-fixed {
height: 100%;
overflow: hidden;
width: 100%;
}
/* ハンバーガーメニューのメニューで使用 */
.js-hamburger-nav {
display: block;
position: fixed;
z-index: 11;
top: $header_height_sp;
left: 0;
width: 100%;
/*
CodePenで適用されないのでコメントアウト
height: calc(100% - $header_height_sp);
*/
max-height: 100%;
overflow-y: auto;
.header__menus {
display: flex;
flex-direction: column;
gap: 30px;
padding: 30px 20px;
min-height: fit-content;
.header__menu {
height: auto;
}
.header__menu--sub {
position: static;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 20px;
}
.header__sub-menu {
position: static;
display: block;
min-width: auto;
height: auto;
padding: 0 0 0 24px;
li {
&:not(:first-child) {
margin-top: 12px;
}
}
}
}
}
View Compiled
jQuery(function ($) {
/* ハンバーガーメニュー */
const bodyElement = $("body");
const hamburger = $('#hamburger');
const hamburger_logo = $('#hamburger-logo');
const hamburger_nav = $('#hamburger-nav');
const hamburger_menu = $('#hamburger-nav a');
const hamburger_background = $('#hamburger-background');
hamburger.on('click', function() {
bodyElement.toggleClass('js-background-fixed');
hamburger.toggleClass('js-hamburger');
hamburger_nav.toggleClass('js-hamburger-nav');
hamburger_background.fadeToggle(300);
});
hamburger_logo.on('click', function() {
bodyElement.toggleClass('js-background-fixed');
hamburger.removeClass('js-hamburger');
hamburger_nav.removeClass('js-hamburger-nav');
hamburger_background.fadeOut(300);
});
hamburger_menu.on('click', function() {
bodyElement.toggleClass('js-background-fixed');
hamburger.removeClass('js-hamburger');
hamburger_nav.removeClass('js-hamburger-nav');
hamburger_background.fadeOut(300);
});
$(window).resize(function() {
var windowWidth = $(window).width();
if (windowWidth >= 768) {
bodyElement.toggleClass('js-background-fixed');
hamburger.removeClass('js-hamburger');
hamburger_nav.removeClass('js-hamburger-nav');
hamburger_background.fadeOut(300);
}
});
});
This Pen doesn't use any external CSS resources.