Smooth Dropdown
HTML
<!-- Questions -->
<div class="mm-faq-content mm-section-sm">
{% for block in section.blocks %}
<div class="mm-faq-container">
<div class="mm-faq-collapsible">
<p class="mm-faq-question mm-p-big mm-bold mm-0">{{ block.settings.question }}</p>
</div>
<div class="mm-faq-text mm-0 mm-p-sm">{{ block.settings.text }}</div>
</div>
{% endfor %}
</div>JavaScript
const faqColl = document.querySelectorAll('.mm-faq-collapsible');
let q;
for (q = 0; q < faqColl.length; q++) {
faqColl[q].addEventListener('click', function () {
this.classList.toggle('active');
const content = this.nextElementSibling;
if (content.style.maxHeight) {
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + 'px';
}
});
}CSS
.mm-faq-container {
border-bottom: 1px solid var(--cream);
margin-block: 2rem;
}
.mm-faq-container:first-child {
margin-top: 0;
}
.mm-faq-container:last-child {
border: none;
}
.mm-faq-collapsible {
cursor: pointer;
}
.mm-faq-question {
text-transform: uppercase;
padding-inline: 16px;
display: flex;
width: 100%;
justify-content: space-between;
}
.mm-faq-question:after {
content: '+';
font-size: 23px;
color: var(--green);
float: right;
}
.mm-faq-collapsible.active .mm-faq-question:after {
content: '-';
font-size: 23px;
margin-right: 0.2rem;
}
.mm-faq-text {
padding-top: 1.5rem;
padding-inline: 16px;
max-height: 0;
overflow: hidden;
line-height: 16px;
transition: max-height 0.3s ease-out;
}
.mm-faq-collapsible.active + .mm-faq-text {
padding-bottom: 2rem;
}
.mm-faq-text p {
line-height: 16px;
}Explication
Ce système de dropdown smooth permet de créer des sections FAQ (ou tout autre contenu pliable) avec une animation fluide :
- Structure HTML : Utilise des blocs Shopify pour créer dynamiquement les questions/réponses
- JavaScript :
- Ajoute un écouteur d'événement sur chaque élément collapsible
- Toggle la classe
activeau clic - Ajuste dynamiquement la
maxHeightpour créer l'animation
- CSS :
- Masque le contenu avec
max-height: 0etoverflow: hidden - Affiche un indicateur
+qui devient-quand actif - Transition fluide avec
transition: max-height 0.3s ease-out
- Masque le contenu avec
Utilisation
Parfait pour créer des sections FAQ, des accordéons ou tout autre contenu pliable avec une animation douce et fluide.