もくじ
JavaScript(jQuery未使用)でアコーディオン(開閉ボタン)を実装する方法を紹介します。時々jQueryを使用できな案件があるため、アコーディオンをJavaScriptで実装できるようメモしておきます。
アコーディオンをjQueryで実装する方法は以下の記事で紹介してます。
【jQuery】アコーディオン(開閉ボタン)を実装する方法
もくじjQueryを使用したアコーディオンサンプルjQueryを使用したアコーディオンコピペ用コード使用方法 Q&A動かないのですが、どうすれば良いですか?アコーディオンの追加方法は?レスポンシブに対 ...
アコーディオンをHTMLのみで実装する方法は以下の記事で紹介してます。
【CSS不要】HTMLのみでアコーディオン(開閉ボタン)を実装する方法
もくじ【サンプル】HTMLのみでアコーディオンメニューを実装【実装コード】HTMLのみでアコーディオンメニューを実装detailsタグとsummaryタグにCSS当ててデザインを調整【サンプル】CSS ...
アコーディオンをHTMLとCSSのみで実装する方法は以下の記事で紹介してます。
【HTML・CSS】アコーディオンメニューをHTMLとCSSのみで実装する方法
もくじ【単体用】アコーディオン(折りたたみメニュー)【単体用】HTML・CSS【単体用】アコーディオン(折りたたみメニュー)を複数利用する場合【2段用】アコーディオン(折りたたみメニュー)【2段用】H ...
JavaScriptを使用したアコーディオンサンプル
Q. JavaScriptでアコーディオン(開閉ボタン)を実装する方法は?
A. 下記「JavaScriptを使用したアコーディオンコピペ用コード」より、HTML・CSS・JavaScriptをコピペするこでアコーディオン(開閉ボタン)を実装することができます。
Q. 使用方法は?
A. 下記「使用方法 Q&A」をご参照ください。
JavaScriptを使用したアコーディオンコピペ用コード
下記HTML・CSS・JavaSctiptをコピペすることでアコーディオンを実装することができます。
Copyボタンをクリックするとコピーできます。
<div class="accordion">
<div class="accordion_row js_accordion_row">
<div class="accordion_header js_accordion_btn">
<p>Q. テキスト</p>
<span class="accordion_barBox">
<span class="accordion_bar"></span>
<span class="accordion_bar"></span>
</span>
</div>
<div class="accordion_content js_accordion_content">
<div class="accordion_content-inner">
<div class="accordion_content-bg">
<p>A. テキスト</p>
<p> ※テキスト</p>
</div>
</div>
</div>
</div>
<div class="accordion_row js_accordion_row">
<div class="accordion_header js_accordion_btn">
<p>Q. テキスト</p>
<span class="accordion_barBox">
<span class="accordion_bar"></span>
<span class="accordion_bar"></span>
</span>
</div>
<div class="accordion_content js_accordion_content">
<div class="accordion_content-inner">
<div class="accordion_content-bg">
<p>A. テキスト</p>
<p> ※テキスト</p>
</div>
</div>
</div>
</div>
</div>
.accordion * {
box-sizing: border-box;
}
.accordion_row {
margin-bottom: 15px;
border-radius: 10px;
overflow: hidden;
position: relative;
}
.accordion_row:last-child {
margin-bottom: 0;
}
.accordion_header {
padding: 1em 2.8em 1em 2em;
background: #d4e6f9;
cursor: pointer;
position: relative;
}
.accordion_barBox {
display: block;
width: 1em;
height: 1em;
position: absolute;
top: 50%;
right: 1.5em;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
.accordion_bar {
display: block;
width: 0.8em;
height: 2px;
background: #444;
position: absolute;
top: 50%;
left: 50%;
}
.accordion_bar:nth-of-type(1) {
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.accordion_bar:nth-of-type(2) {
-webkit-transform: translate(-50%, -50%) rotate(90deg);
-ms-transform: translate(-50%, -50%) rotate(90deg);
transform: translate(-50%, -50%) rotate(90deg);
transition: 0.3s linear;
}
.accordion_content {
display: none;
width: 100%;
height: 0;
background: #d4e6f9;
transition: 0.3s linear;
}
.accordion_content-inner {
padding: 0 1em 1em;
}
.accordion_content-bg {
padding: 1em;
background: #fff;
border-radius: 10px;
}
.accordion_header p,
.accordion_content p {
margin: 0;
}
/* アコーディオンが開いている時 */
.accordion_row.-active .accordion_bar:nth-of-type(2) {
opacity: 0;
}
const js_accordion_row = document.querySelectorAll('.js_accordion_row');
const js_accordion_btn = document.querySelectorAll('.js_accordion_btn');
const js_accordion_content = document.querySelectorAll('.js_accordion_content');
js_accordion_btn.forEach(function (el, i) {
el.addEventListener('click', function () {
let js_accordion_content_height = js_accordion_content[i].offsetHeight
if(js_accordion_content_height === 0){
slide_down(i);
} else {
slide_up(i);
}
});
});
function slide_down(i) {
js_accordion_content[i].style.display = 'block';
let clone = js_accordion_content[i].cloneNode(true);
js_accordion_content[i].parentNode.appendChild(clone);
clone.style.cssText = 'display:block; height:auto; position:absolute';
let clone_height = clone.offsetHeight;
js_accordion_content[i].parentNode.removeChild(clone);
js_accordion_row[i].classList.add('-active');
js_accordion_content[i].style.height = clone_height + 'px';
}
function slide_up(i) {
js_accordion_row[i].classList.remove('-active');
js_accordion_content[i].style.height = '0';
}
//画面リサイズ時
window.addEventListener('resize', function() {
js_accordion_content.forEach(function (el) {
content_height(el);
});
});
//ページ読み込み時
js_accordion_content.forEach(function (el) {
content_height(el);
});
function content_height(el) {
let elHeight = getComputedStyle(el).height.replace('px', '');
if (elHeight > 0 || elHeight === 'auto') {
let clone = el.cloneNode(true);
el.parentNode.appendChild(clone);
clone.style.cssText = 'display:block; height:auto; position:absolute';
let clone_height = clone.offsetHeight;
el.parentNode.removeChild(clone);
el.style.height = clone_height + 'px';
}
}
使用方法 Q&A
アコーディオンの追加方法は?
下記<div class="accordion_row js_accordion_row"></div>
ブロックを<div class="accordion"></div>
内に挿入することでアコーディオンを追加できます。
<div class="accordion_row js_accordion_row">
<div class="accordion_header js_accordion_btn">
<p>Q. テキスト</p>
<span class="accordion_barBox">
<span class="accordion_bar"></span>
<span class="accordion_bar"></span>
</span>
</div>
<div class="accordion_content js_accordion_content">
<div class="accordion_content-inner">
<div class="accordion_content-bg">
<p>A. テキスト</p>
<p> ※テキスト</p>
</div>
</div>
</div>
</div>
一つ目のアコーディオンを開いた状態にする方法は?
HTMLとCSSに下記記述を追加することで可能です。
1.一つ目の<div class="accordion_row js_accordion_row"></div>
の「class」に-active
を追加
2.CSSに下記記述を追加
.accordion_row:first-child .accordion_content {
display: block;
height: auto;
}
レスポンシブに対応してますか?
対応してます。
HTMLとCSSの知識がありJavaScriptを学びたいという方におすすめの1冊
JavaScriptのフロントエンドエンジニアを目指している方におすすめの1冊
もみじ
この本はJavaScript初心者からフロントエンドエンジニアを目指す方にぴったりの1冊です。
非同期処理やAJAXなど、現代の開発で必要なスキルがわかりやすく解説されており、実務で役立つスキルを学ぶことができます。
アコーディオンをjQueryで実装する方法は以下の記事で紹介してます。
【jQuery】アコーディオン(開閉ボタン)を実装する方法
もくじjQueryを使用したアコーディオンサンプルjQueryを使用したアコーディオンコピペ用コード使用方法 Q&A動かないのですが、どうすれば良いですか?アコーディオンの追加方法は?レスポンシブに対 ...
アコーディオンをHTMLのみで実装する方法は以下の記事で紹介してます。
【CSS不要】HTMLのみでアコーディオン(開閉ボタン)を実装する方法
もくじ【サンプル】HTMLのみでアコーディオンメニューを実装【実装コード】HTMLのみでアコーディオンメニューを実装detailsタグとsummaryタグにCSS当ててデザインを調整【サンプル】CSS ...
アコーディオンをHTMLとCSSのみで実装する方法は以下の記事で紹介してます。
【HTML・CSS】アコーディオンメニューをHTMLとCSSのみで実装する方法
もくじ【単体用】アコーディオン(折りたたみメニュー)【単体用】HTML・CSS【単体用】アコーディオン(折りたたみメニュー)を複数利用する場合【2段用】アコーディオン(折りたたみメニュー)【2段用】H ...
もみじ
HTMLとCSSの知識がありJavaScriptを学びたいという方に入門書としておすすめの書籍です。
実務で役立つサンプルを手を動かしながら学ぶことができ、実践的なスキルを身に付けることができます。