Contents
アコーディオンメニューとは、クリックすると隠れているメニューがアコーディオンのように伸びて表示されるメニューのことを指します。
この記事ではCSSのみでのアコーディオンメニューの作り方と、CSSとJavaScriptの2つを用いたやり方の。2種類を紹介しています。
コピペOKなので、自分のデザインに合わせてカスタマイズしてください。
See the Pen accordion2 by 古澤 良汰 (@ryotarofu) on CodePen.
<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>
.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;
}
See the Pen accordion1 by 古澤 良汰 (@ryotarofu) on CodePen.
<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>
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);
}