初心者エンジニアなりにハンバーガーメニューの作り方をメモ用に書きました
全体コード
index.html
<header>
<a id="menu_button">
<div></div>
<div></div>
<div></div>
</a>
<nav id="nav">
<ul>
<li>menu1</li>
<li>menu2</li>
<li>menu3</li>
<li>menu4</li>
</ul>
</nav>
</header>
style.css
@charset "utf-8";
*, *::before, *::after{
box-sizing: border-box;
}
a{
text-decoration: none;
}
ul{
list-style: none;
}
#menu_button{
display: block;
height: 50px;
width: 50px;
background: rgb(117, 117, 117);
position: fixed;
top: 0;
left: 0;
}
#menu_button div{
height: 1px;
width: 60%;
background-color: #fff;
position: absolute;
top: 50%;
right: 50%;
transform: translateX(50%);
transition: ease .4s;
}
#menu_button div:nth-of-type(1){
transform: translate(50%,-10px);
}
#menu_button div:nth-of-type(3){
transform: translate(50%,10px);
}
#nav{
width: 30%;
height: 100vh;
position: fixed;
top: 0;
left: -30%;
background-color: gray;
font-size: 16px;
z-index: -1;
padding-top: 50px;
transition: ease .4s;
}
#nav.active{
transform: translateX(100%);
}
#menu_button.active {
transform: translateX(0);
}
#menu_button.active div:nth-of-type(1){
transform: rotate(45deg);
top: 25px;
left: 10px;
}
#menu_button.active div:nth-of-type(2) {
opacity: 0;
}
#menu_button.active div:nth-of-type(3) {
transform: rotate(-45deg);
bottom: 25px;
left: 10px;
}
script.js
const menuButton = document.getElementById("menu_button")
const nav = document.getElementById("nav")
// menu_buttonをとってくる→クリックされたとき
menuButton.addEventListener("click",() =>{
menuButton.classList.toggle("active")
nav.classList.toggle("active")
})
メニューボタンを作る
<a id="menu_button">
<div></div>
<div></div>
<div></div>
</a>
#menu_button{
display: block;
height: 50px;
width: 50px;
background: rgb(117, 117, 117);
position: fixed;
top: 0;
left: 0;
}
#menu_button div{
height: 1px;
width: 60%;
background-color: #fff;
position: absolute;
top: 50%;
right: 50%;
transform: translateX(50%);
transition: ease .4s;
}
#menu_button div:nth-of-type(1){
transform: translate(50%,-10px);
}
#menu_button div:nth-of-type(3){
transform: translate(50%,10px);
}
div要素を3つ作り、width60%、height1pxの要素を作ります
div:nth-of-type(1)で1つ目のdivと
div:nth-of-type(3)3つ目のdivを上下にtransformでずらします
jsでtoggleを使いクリックで切り替え機能を追加する
const menuButton = document.getElementById("menu_button")
const nav = document.getElementById("nav")
//クリックされたとき
menuButton.addEventListener("click",() =>{
menuButton.classList.toggle("active")
nav.classList.toggle("active")
})
メニューボタンと表示、非表示させるnavをdocument.getElementByIdを使い取得します
menu_buttonがクリックされたときにclassList.toggleを使いmenu_buttonとnavをactiveにします
activeになった時にメニューボタンを×マークにし、navを表示させます
#menu_button.active {
transform: translateX(0);
}
#menu_button.active div:nth-of-type(1){
transform: rotate(45deg);
top: 25px;
left: 10px;
}
#menu_button.active div:nth-of-type(2) {
opacity: 0;
}
#menu_button.active div:nth-of-type(3) {
transform: rotate(-45deg);
bottom: 25px;
left: 10px;
}
まず1つ目、2つ目のdiv要素をtransform: rotate(45deg);で回転させます
そして回転される支点は左上になってしまうのでtopとleftを使い位置を調整します
#nav{
width: 30%;
height: 100vh;
position: fixed;
top: 0;
left: -30%;
background-color: gray;
font-size: 16px;
z-index: -1;
padding-top: 50px;
transition: ease .4s;
}
#nav.active{
transform: translateX(100%);
}
navは元の位置を画面外にしておきactiveになった時にtransformで持ってきています