【CSS / JavaScript】アコーディオンメニューの作り方

Contents

アコーディオンメニューとは

アコーディオンメニューとは、クリックすると隠れているメニューがアコーディオンのように伸びて表示されるメニューのことを指します。

この記事ではCSSのみでのアコーディオンメニューの作り方と、CSSとJavaScriptの2つを用いたやり方の。2種類を紹介しています。

コピペOKなので、自分のデザインに合わせてカスタマイズしてください。

CSSでのアコーディオンメニュー

See the Pen accordion2 by 古澤 良汰 (@ryotarofu) on CodePen.

HTML

<div class="accordion"> <label for="menu">MENU</label> <input type="checkbox" id="menu" /> <ul id="link"> <li><a>menu1</a></li> <li><a>menu2</a></li> <li><a>menu3</a></li> </ul>
</div>

CSS

.accordion { max-width: 50%; height:250px;
}
.accordion a { display: block; padding: 15px; text-decoration: none; color: #000;
}
label { display: block; margin: 0; padding : 15px; line-height: 1; color :#fff; background : #000; cursor :pointer; text-align:center;
}
input { display: none;
}
.accordion ul {
margin: 0;
padding: 0;
background :#dfdfdf;
list-style: none;
}
.accordion li { height: 0; overflow: hidden; text-align:center; -webkit-transition: all 0.5s; -moz-transition: all 0.5s; -ms-transition: all 0.5s; -o-transition: all 0.5s; transition: all 0.5s;
}
.accordion li:hover{ background-color:#888;
}
#menu:checked ~ #link li { height: 60px; opacity: 1;
}

Javascriptでのアコーディオンメニュー

See the Pen accordion1 by 古澤 良汰 (@ryotarofu) on CodePen.

HTML

 <div class="accordion"> <p class="menu js">MENU</p> <a class="link">menu1</a> <a class="link">menu2</a> <a class="link">menu3</a> </div>

CSS

Result Skip Results Iframe
EDIT ON
.accordion{ width:50%;
}
.menu { background-color: #000; color: #fff; font-size: 18px; padding: 10px; text-align: center; cursor: pointer; user-select: none;
}
.menu:hover,
.menu:active,
.menu.active { background-color: black;
}
.link { display:block; text-align: center; line-height: 0; height: 0; overflow: hidden; opacity: 0; transition-duration: 0.4s;
}
.link.open { background-color:#dfdfdf; padding: 10px; line-height: 2; height: auto; opacity: 1;
}
.link:hover{ background-color:#888;
}

JavaScript

const menu = document.querySelectorAll(".js"); function toggle() { const content = document.querySelectorAll(".link"); for (let i = 0; i < content.length; i++) { content[i].classList.toggle("active"); content[i].classList.toggle("open"); } } for (let i = 0; i < menu.length; i++) { menu[i].addEventListener("click", toggle); }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA