実務経験でもよくある質問セクションを作成することが多いです。下記は以前にも記事でご紹介したよくある質問のアコーディオンになります。
よくある質問パターン01
よくある質問のアコーディオンメニューのHTML・CSS・JavaScriptのソースコードを紹介しています。またjQueryを使用しないパターンも紹介しています。
よくある質問パターン02
よくある質問のアコーディオンを作成しました。HTML・CSS・JSソースコードも紹介しています。さらにjQueryを使用しないパターンも紹介しています。
今回はそのよくある質問セクションをJavaScriptなしで作成したのでご紹介します。
実際の表示
A1
回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト
A2
回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト
A3
回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト
ソースコード例
PR
<div class="faq__list">
<div class="faq__item">
<input type="checkbox" id="faq1" class="faq__checkbox">
<label for="faq1" class="faq-q">
<div class="faq__mark">Q1</div>
<div class="faq-q__txt">質問テキスト質問テキスト質問テキスト質問テキスト?</div>
<div class="faq_toggle">
<span></span>
<span></span>
</div>
</label>
<div class="faq-a">
<div class="faq__mark">A1</div>
<div class="faq-a__content">
<p>回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト</p>
</div>
</div>
</div>
<div class="faq__item">
<input type="checkbox" id="faq2" class="faq__checkbox">
<label for="faq2" class="faq-q">
<div class="faq__mark">Q2</div>
<div class="faq-q__txt">質問テキスト質問テキスト質問テキスト質問テキスト質問テキスト質問テキスト質問テキスト?</div>
<div class="faq_toggle">
<span></span>
<span></span>
</div>
</label>
<div class="faq-a">
<div class="faq__mark">A2</div>
<div class="faq-a__content">
<p>回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト</p>
</div>
</div>
</div>
<div class="faq__item">
<input type="checkbox" id="faq3" class="faq__checkbox">
<label for="faq3" class="faq-q">
<div class="faq__mark">Q3</div>
<div class="faq-q__txt">質問テキスト質問テキスト質問テキスト質問テキスト質問テキスト?</div>
<div class="faq_toggle">
<span></span>
<span></span>
</div>
</label>
<div class="faq-a">
<div class="faq__mark">A3</div>
<div class="faq-a__content">
<p>回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト回答テキスト</p>
</div>
</div>
</div>
</div>
.faq__list {
padding: 20px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}
.faq__checkbox {
display: none;
}
.faq__item {
border-bottom: 1px solid #ddd;
}
.faq-q {
position: relative;
padding: 15px;
display: flex;
align-items: center;
cursor: pointer;
transition: all 0.3s;
}
.faq-q__txt {
flex-grow: 1;
font-weight: 700;
}
.faq__mark {
width: 40px;
height: 40px;
line-height: 40px;
color: #fff;
font-weight: 700;
border-radius: 50%;
margin-right: 10px;
text-align: center;
flex-shrink: 0;
}
.faq-q .faq__mark {
background-color: #007bff;
}
.faq-a .faq__mark {
background-color: #dc3545;
}
.faq_toggle {
width: 50px;
height: 50px;
position: relative;
transition: all 0.3s;
flex-shrink: 0;
}
.faq_toggle span {
display: inline-block;
position: absolute;
transition: all 0.3s;
background-color: #191919;
}
.faq_toggle span:nth-of-type(1) {
width: 30px;
height: 4px;
top: 23px;
left: 10px;
}
.faq_toggle span:nth-of-type(2) {
width: 4px;
height: 30px;
top: 10px;
left: 23.5px;
}
.faq__checkbox:checked + .faq-q .faq_toggle {
transform: rotate(90deg);
}
.faq__checkbox:checked + .faq-q .faq_toggle span:nth-of-type(1) {
opacity: 0;
transform: rotate(90deg);
}
.faq-a {
padding: 15px;
background-color: #f7f7f7;
display: none;
}
.faq-a__content {
margin-top: 10px;
}
.faq__checkbox:checked + .faq-q + .faq-a {
display: block;
}
@media screen and (min-width: 768px) {
.faq-q:hover {
background-color: #f0f0f0;
}
}
@media screen and (max-width: 480px) {
.content .faq__list .faq-q__txt {
margin-top: 10px;
}
.faq__list {
padding: 0;
box-shadow: none;
}
.faq-q {
flex-wrap: wrap;
}
.faq-q__txt {
margin-top: 10px;
}
.faq_toggle {
position: absolute;
top: 10px;
right: 0;
}
}
まとめ
この記事では、JavaScriptを使わずによくある質問アコーディオンを作成する方法をご紹介しました。HTMLとCSSのみを使用することで、Webサイトのロード時間を短くしたり、サーバー処理の負担を軽減することができるので、パフォーマンスの向上という点でメリットがあります。JavaScriptを使用しなくても良い部分はなるべく使用しないようにした方が良いと思うので、ぜひ参考にしてください!