アピ子です。
コーダーのオッコ先輩より、ご指導いただいたメモになります。
【課題】
1段目のアコーディオンを開いた時、2段目のアコーディオンに設置したリンクが作動してしまう。
【解決】
クローズした時、ulを隠す
オープンした時、ulを表示
■jQuery
書き込むファイル : ec-common.js
//--------------------サイドバーアコーディオン--------------------//
$(function(){
$('#side_category01, #side_category02').on('click', function(){
- $(this).toggleClass('open', 500);
+ $(this).toggleClass('open');
if($(this).hasClass('open')) {
- $(this).find('ul').show();
+ $(this).find('ul').show(500);
} else {
- $(this).find('ul').hide();
+ $(this).find('ul').hide(500);
}
});
});
■tpl(html)
<head>
<script src="/libs/jquery/jquery/jquery-3.5.1.min.js"></script>
</head>
:
:
<div id="side_category">
<div class="side_category_box">
<nav>
<ul>
<li id="side_category01" class="side_category uk-margin-bottom">01ALL
<div class="btn">
<span></span>
<span></span>
</div>
<ul>
<li><a href="" title="side_category01-1">side_category01-1</a></li>
<li><a href="" title="side_category01-2">side_category01-2</a></li>
<li><a href="" title="side_category01-3">side_category01-3</a></li>
<li><a href="" title="side_category01-4">side_category01-4</a></li>
<li><a href="" title="side_category01-5">side_category01-5</a></li>
</ul>
</li>
<li id="side_category02" class="side_category uk-margin-bottom">02ALL
<div class="btn">
<span></span>
<span></span>
</div>
<ul>
<li><a href="" title="side_category02-1">side_category02-1</a></li>
<li><a href="" title="side_category02-2">side_category02-2</a></li>
<li><a href="" title="side_category02-3">side_category02-3</a></li>
<li><a href="" title="side_category02-4">side_category02-4</a></li>
<li><a href="" title="side_category02-5">side_category02-5</a></li>
</ul>
</li>
<li class="uk-margin-top">
<ul>
<li class="border_none"><input class="uk-checkbox" type="checkbox">03ALL</a></li>
<li class="border_none"><input class="uk-checkbox" type="checkbox">side_category03-1</a></li>
<li class="border_none"><input class="uk-checkbox" type="checkbox">side_category03-2</a></li>
<li class="border_none"><input class="uk-checkbox" type="checkbox">side_category03-3</a></li>
<li class="border_none"><input class="uk-checkbox" type="checkbox">side_category03-4</a></li>
<li class="border_none"><input class="uk-checkbox" type="checkbox">side_category03-5</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
■CSS
/* サイドバー アコーディオン */
#side_category ul ul{
padding: 0;
}
#side_category li li:first-child {
border-top: 1px solid #e5e5e5;
}
#side_category li {
list-style: none;
cursor: pointer;
}
#side_category a {
text-decoration: none;
}
#side_category {
/*margin: 6em auto;*/
}
#side_category .side_category_box {
width: 100%;
}
#side_category .side_category ul {
color: #666;
display: none;
margin: 0;
padding: 0;
position: relative;
}
#side_category .side_category li {
height: 0;
opacity: 0;
margin-bottom: 0;
}
#side_category .side_category a {
color: #666;
display: block;
margin: 0;
padding: 10px;
}
#side_category01 {
padding: 10px;
background: #fff;
color: #666;
border: 1px solid #e5e5e5;
border-radius: 5px;
}
#side_category02 {
padding: 10px;
background: #fff;
color: #666;
border: 1px solid #e5e5e5;
border-radius: 5px;
}
#side_category03 {
padding: 10px;
background: #fff;
color: #666;
border: 1px solid #e5e5e5;
border-radius: 5px;
}
#side_category01 a:hover {
background: #e5e5e5;
}
#side_category02 a:hover {
background: #e5e5e5;
}
#side_category03 a:hover {
background: #e5e5e5;
}
#side_category .open li {
height: auto;
opacity: 1;
}
#side_category .btn {
padding-top: 1.2rem;
float: right;
}
#side_category .btn span {
background: #9e9e9e;
display: block;
width: 10px;
height: 2px;
}
#side_category .btn span:nth-child(2) {
position: relative;
top: -2px;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
transform: rotate(90deg);
}
#side_category .open .btn span:first-child {
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
transform: rotate(45deg);
transition: 1.5s;
}
#side_category .open .btn span:nth-child(2) {
-webkit-transform: rotate(135deg);
-moz-transform: rotate(135deg);
transform: rotate(135deg);
transition: 1.5s;
}
#side_category .open li:first-child {
margin: 10px 0 0 0;
}
.border_none {
border-top: none !important;
}
#side_category .uk-checkbox {
margin-right: 1rem
}
トランジション (transition) は、要素の 2 つの状態間の変化を定義するためのものです。それぞれの状態は :hover や :active のような擬似クラスで定義されたり、 JavaScript を使用して動的に設定されたりします。