すぐに使える!アコーディオンメニュー
前置き
アコーディオンと聞いたらふつうは何を思い浮かべるのでしょうか。
私は以前までは楽器を思い浮かべていたのですが、コーダーになってからはアコーディオンメニューが真っ先に頭に浮かぶようになりました。
個人的に、アコーディオンを実装すると考えたら少しやだなぁ…と感じてしまうので、私のように困っている方が少しでも実装しやすくなるように3種類のアコーディオンコードをまとめてみましたので、参考にしていただければと思います!
内容を開くとボタンも一緒に移動するアコーディオン
コードは下記↓
<div class="component-detail">
<div class="detail-element">
テキストテキストテキストテキスト<br>
テキストテキストテキストテキスト<br>
テキストテキストテキストテキスト<br>
テキストテキストテキストテキスト
</div>
</div>
<div class="btnset">
<a href="#" class="button boxopen">開く</a>
</div>
<style>
/* アコーディオンの内容 */
.component-detail {
width: 90%;/* 要素の横幅指定 btnsetと数値を合わせる */
margin: 15px auto 0px;
padding: 0;
text-align: center;
}
.component-detail .detail-element {
font-size: 16px;
}
/* アコーディオン */
.btnset {
width: 90%;/* 要素の横幅指定 component-detailと数値を合わせる */
margin: 0 auto;
}
/* アコーディオンのボタン */
.btnset .button {
background-color: #000;
padding: 9px 0 7px 0;
text-align: center;
display: inline-block;
width: 100%;
box-sizing: border-box;
position: relative;
text-decoration: none;
font-size: 17px;
color: #fff;
}
/* アコーディオンの+,- */
.boxopen:before {
display: block;
content: "";
position: absolute;
top: 37%;
right: 325px;
width: 6px;
height: 13px;
border-left: solid 1px #fff;
}
.boxopen:after {
display: block;
content: "";
position: absolute;
top: 50%;
right: 325px;
width: 13px;
height: 6px;
border-top: solid 1px #fff;
}
.boxclose:after {
display: block;
content: "";
position: absolute;
top: 50%;
right: 325px;
width: 13px;
height: 6px;
border-top: solid 1px #fff;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function () {
$('.btnset').prev().hide();
$('.btnset').click(function (e) {
e.preventDefault();
if ($(this).prev().is(':hidden')) {
$(this).prev().slideDown();
$(this).find('.button').text('閉じる').addClass('boxclose').removeClass('boxopen');
} else {
$(this).prev().slideUp();
$(this).find('.button').text('開く').removeClass('boxclose').addClass('boxopen');
}
});
});
</script>
タイトルボタンのほかに閉じるボタンが出てくるアコーディオン
コードは下記↓
<section class="accordion_one">
<h3 class="accordion_header" id="ac1">
タイトル
</h3>
<div class="inner accordion_inner">
<div class="inner_area">
テキストテキストテキストテキスト<br>
テキストテキストテキストテキスト<br>
テキストテキストテキストテキスト<br>
テキストテキストテキストテキスト
</div>
<div class="closeArea">
<div class="close_box"><a href="#ac1" class="close_btn">閉じる</a></div>
</div>
</div>
</section>
<style>
/* アコーディオンのタイトルボタン */
.accordion_one .accordion_header {
position: relative;
z-index: +1;
cursor: pointer;
transition-duration: 0.2s;
background: #000;
font-size: 28px;
text-align: center;
margin: 0;
line-height: 100%;
padding: 23px 0;
font-weight: 300;
color: #fff;
}
.accordion_one .accordion_header:hover {
opacity: .8;
}
.accordion_one .accordion_header::before{
content: "";
position: absolute;
right: 25%;
top: 24px;
width: 18px;
height: 18px;
border-top: 2px solid #fff;
border-right: 2px solid #fff;
-webkit-transform: rotate(135deg);
transform: rotate(135deg);
}
.accordion_header::before{
right: 28%;
}
.accordion_header::before{
right: 8%;
top: 50px;
}
/* アコーディオンの内容 */
.accordion_one .inner{
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
.accordion_one .inner_area{
padding: 15px 0;
}
.accordion_one .accordion_header.open:before {
content: none;
}
.accordion_one .accordion_inner {
display: none;
text-align: center;
}
/* アコーディオンの閉じるボタン */
.accordion_one .accordion_inner .closeArea .close_box a.close_btn {
display: flex;
justify-content: center;
align-items: center;
background: #000;
text-decoration: none;
text-align: center;
margin: 0;
line-height: 100%;
padding: 23px 0;
font-size: 28px;
position: relative;
cursor: pointer;
transition-duration: 0.2s;
}
.accordion_one .accordion_inner .closeArea .close_box a.close_btn::before{
content: "";
position: absolute;
right: 42%;
top: 36px;
width: 18px;
height: 18px;
border-top: 2px solid #fff;
border-right: 2px solid #fff;
-webkit-transform: rotate(315deg);
transform: rotate(315deg);
}
.accordion_one .accordion_inner .closeArea .close_box a.close_btn:hover {
opacity: .8;
}
a.close_btn{
color: #fff;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
// .accordion_one
$(function(){
//.accordion_oneの中の.accordion_headerがクリックされたら
$('.accordion_one .accordion_header').click(function(){
//クリックされた.accordion_oneの中の.accordion_headerに隣接する.accordion_innerが開いたり閉じたりする。
$(this).next('.accordion_inner').slideToggle();
$(this).toggleClass("open");
});
//閉じるボタンがクリックされたら
$('a.close_btn').click(function () {
//クリックされたa.close_btnの親要素.accordion_innerを閉じる。
$(this).parents('.accordion_inner').slideUp();
//クリックされたa.close_btnの親要素.accordion_innerの前要素にクラスopenがなければ追加し、あれば削除する。
$(this).parents('.accordion_inner').prev().toggleClass("open");
});
});
</script>
タイトルの横に+,-ボタンがあるアコーディオン
コードは下記↓
<section class="accordion">
<dl>
<dt class="title"><span>タイトル1</span></dt>
<dd class="anser"><span>内容1</span></dd>
</dl>
<dl>
<dt class="title"><span>タイトル2</span></dt>
<dd class="anser"><span>内容2</span></dd>
</dl>
<dl>
<dt class="title"><span>タイトル3</span></dt>
<dd class="anser"><span>内容3</span></dd>
</dl>
</section>
<style>
/* アコーディオンコンテンツの詳細 */
.accordion dl {
font-size: 18px;
margin: 30px auto;
background: #000;
width: 80%;
}
/* アコーディオンのタイトル*/
.accordion dt.title {
position: relative;
display: inline-block;
font-weight: normal;
padding: 25px 36px 26px 90px;
position: relative;
text-decoration: none;
width: 80%;
color: #fff;
cursor: pointer;
}
/* アコーディオンのタイトル横の+,-*/
.accordion dt.title:after {
content: "";
width: 20px;
height: 2px;
background: #fff;
position: absolute;
top: 50%;
right: 10px;
transform: translate(-50%, -50%) rotate(-90deg);
transition: all .5s;
}
.accordion dt.title.active:after {
transform: translate(-50%, -50%) rotate(0deg);
background: none;
}
.accordion dt.title span:after {
content: "";
width: 20px;
height: 2px;
background: #fff;
position: absolute;
top: 50%;
right: 10px;
-webkit-transform: translate(-50%, -50%) rotate(-180deg);
-ms-transform: translate(-50%, -50%) rotate(-180deg);
transform: translate(-50%, -50%) rotate(-180deg);
transition: all .5s;
}
/* アコーディオンの内容 */
.accordion dd.anser {
display: none;
padding: 35px 36px 35px 90px;
background: #fff;
position: relative;
border-bottom: solid 1px #ddd;
border-right: solid 1px #ddd;
border-left: solid 1px #ddd;
}
.accordion dd {
margin: 0;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
// アコーディオン
$('.title').on('click', function () {
$(this).toggleClass('active');
$(this).next(".anser").slideToggle();
});
});
</script>
おわりに
私自身がまだまだひよっこコーダーのため、もっとコードの短縮はできると思います。これは現時点での私のレベルになりますので、これから見返したときにもっと短いコードへ修正できるように励んでいきます。
また、このままコードを差し込んでも創造と異なったり色が違ったり~、等の問題は生じると思いますので、右クリック > 検証モードも試しながら自分の思い描いたアコーディオンメニューを作成していただければと思います。
この記事が気に入ったらサポートをしてみませんか?