JSFiddle - React, Tailwind, and code Playground
HTML
<section class="faq">
<h1 class="title">FAQ</h1>
<ul>
<li>
<div class="question">如何辨理退換貨</div>
<div class="answer">請參考退貨服務業面</div>
</li>
<li>
<div class="question">退貨方式與退款時間</div>
<div class="answer">約7-8個工作天完成退款作業</div>
</li>
<li>
<div class="question">未退回的退款,是否可直接折抵新訂單?</div>
<div class="answer">很抱歉,重新訂購時無法接於新訂單扣抵</div>
</li>
<li>
<div class="question">發票遺失是否仍能辦理退換貨</div>
<div class="answer">很抱歉,需要有發票才能辦理退換貨</div>
</li>
</ul>
</section>
CSS
* {
box-sizing: border-box;
}
.title {
font-size: 36px;
text-align: center;
padding: 20px 0;
border-bottom: 1px solid #000;
margin-bottom: 20px;
font-weight: bold;
}
li {
max-width: 550px;
margin: 0 auto;
font-size: 24px;
}
li + li {
font-size: 24px;
}
.question {
padding: 0 50px 0 10px;
position: relative;
color: #4fbe84;
cursor: pointer;
}
.question:hover {
background-color: #cafff4;
}
.question::before {
content: 'Q: ';
font-weight: bold;
}
.question::after {
content: "+";
position: absolute;
top: -5px;
right: 10px;
font-size: 36px;
width: fit-content;
transition: transform 0.5s linear;
}
.answer {
max-height: 0;
overflow: hidden;
background-color: #eafff4;
padding: 0 10px;
visibility: hidden;
transition: max-height 0.3s ease, visibility 0s 0.3s;
}
li.open .answer {
max-height: 200px; /* Enough space to display the answer */
visibility: visible;
transition: max-height 0.3s ease, visibility 0s 0s;
}
li.open .question::after {
transform: rotate(405deg);
}
A
JavaScript
const questions = document.querySelectorAll('.question');
for (let question of questions) {
question.onclick = toggleOpen;
}
function toggleOpen() {
const list = event.target.closest('li');
const answer = list.querySelector('.answer');
if (list.className.includes('open')) {
answer.classList.remove('slide-down');
answer.classList.add('slide-up');
list.classList.remove('open')
} else {
answer.classList.remove('slide-up');
answer.classList.add('slide-down');
list.classList.add('open');
}
}