JSFiddle - React, Tailwind, and code Playground
HTML
<header>
<!-- 表示させるナビゲーション -->
<div class="header-nav move" id="header_nav">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
<!-- メニューボタン -->
<a class="menu-btn" id="menu_btn" href="">
<span class="line"></span>
</a>
</header>
CSS
*{
margin: 0;
padding: 0;
}
header {
height: 60px;
background-color: rgb(151, 192, 230);
position: relative;
border-bottom: 0.5px solid rgb(184, 184, 185);
}
.header-nav {
width: 100%;
height: 100vh;
position: absolute;
left: 0;
top: 60px;
background-color: rgb(210, 226, 236);
transition: .6s;
z-index: -1;
}
/* ナビゲーションの非表示にさせておく */
.move {
top: -100vh;
}
.header-nav li {
margin: 30px auto 0;
background-color: rgb(30, 134, 194);
text-align: center;
list-style: none;
height: 30px;
line-height: 30px;
width: 50%;
color: #fff;
}
.menu-btn {
display: block;
position: absolute;
right: 0;
top: 0;
width: 62px;
height:60px;
text-align: center;
}
.menu-btn::before {
content: '';
display: block;
width: 22px;
height: 2px;
background: #716767;
position: absolute;
top: 30px;
right: 19px;
transition:all .3s;
}
.menu-btn::after {
content: '';
display: block;
width: 22px;
height: 2px;
background: #716767;
position: absolute;
top: 30px;
right: 19px;
transition:all .3s;
}
.menu-btn span {
display: block;
width: 22px;
height: 2px;
background: #716767;
position: absolute;
top: 30px;
right: 19px;
transition:all .3s;
}
.menu-btn::before {
margin-top: 8px;
}
.menu-btn::after {
margin-top: -8px;
}
/* バツ印のスタイル */
.menu-btn.active::before {
transform: translateY(-8px) rotate(-45deg);
}
.menu-btn.active span {
opacity: 0;
}
.menu-btn.active::after {
transform: translateY(8px) rotate(45deg);
}
JavaScript
//メニューボタン
let menuBtn = document.getElementById('menu_btn');
//ナビゲーション
let headerNav = document.getElementById('header_nav');
//メニューボタンクリック時に
menuBtn.addEventListener('click', function(e){
e.preventDefault();
//メニューボタンがactiveクラスを所持してたら削除・所持していなければ追加
menuBtn.classList.toggle('active');
//ナビゲーションがmoveクラスを所持してたら削除・所持していなければ追加
headerNav.classList.toggle('move');
});