<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);
    }
  });
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js