Accordion
Sample html for Accordion on Product Display Page
<div class="product-info-block">
<div class="accordion">
<div class="accordion-item">
<div class="accordion-header">
<t4>DESCRIPTION</t4>
<img class="icon" src="https://res.cloudinary.com/dixyq8hvr/image/upload/v1748012635/down-arrow_tt0zzn.png">
</div>
<div class="accordion-content">
<t5>This item is made from ultra-soft fabric, designed for all-day comfort. Perfect for casual wear or lounging,
it brings effortless style to your wardrobe.</t5>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header">
<t4>SHIPPING & RETURNS</t4>
<img class="icon" src="https://res.cloudinary.com/dixyq8hvr/image/upload/v1748012635/down-arrow_tt0zzn.png">
</div>
<div class="accordion-content">
<ol>
<li>We offer free standard shipping and returns within the US. View our <a href="#">shipping policy</a>.</li>
<li>View our full <a href="#">return policy here</a>.</li>
<li>Request return/exchange within 10 days. No international exchanges.</li>
<li>Extended return policy during holidays. <a href="#">Learn more</a>.</li>
</ol>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header">
<t4>CARE INSTRUCTIONS</t4>
<img class="icon" src="https://res.cloudinary.com/dixyq8hvr/image/upload/v1748012635/down-arrow_tt0zzn.png">
</div>
<div class="accordion-content">
<t5>Machine wash cold with like colors. Do not bleach. Tumble dry low. Cool iron if needed.</t5>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header">
<t4>SIZING & FIT</t4>
<img class="icon" src="https://res.cloudinary.com/dixyq8hvr/image/upload/v1748012635/down-arrow_tt0zzn.png">
</div>
<div class="accordion-content">
<t5>Model is 5'9" and wears size Small. This item runs true to size. Refer to our <a href="#">size guide</a>.</t5>
</div>
</div>
</div>
</div>body {
padding: 0 12px;
}
.product-info-block {
max-width: 500px;
}
.accordion-header {
width: 100%;
padding: 12px 0;
font-size: 16px;
color: #111;
text-align: left;
background: none;
border: none;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
}
.accordion-header t4 {
font-weight: 500;
font-size: 15px;
}
.accordion-content {
display: none;
padding: 8px 0 8px;
}
.accordion-content t5 {
font-size: 15px;
color: #333;
line-height: 1.6;
display: block;
font-weight: 400;
}
.accordion-content ol {
padding-left: 20px;
margin-top: 0;
}
.accordion-content li {
margin-bottom: 4px;
font-size: 15px;
color: #333;
line-height: 1.6;
}
.accordion-content a {
color: #000000;
text-decoration: underline;
}
.icon {
width: 10px;
height: 10px;
}// ✅ Resize the block dynamically via SDK
async function resizeBlock(container = ".product-info-block") {
try {
await VajroSDK.actions.resizeBlock(container);
console.log("📏 resizeBlock triggered for", container);
} catch (err) {
console.error("❌ resizeBlock failed:", err);
}
}
// ✅ Handle accordion open/close interactions
const headers = document.querySelectorAll(".accordion-header");
headers.forEach((header) => {
header.addEventListener("click", () => {
const item = header.parentElement;
const isOpen = item.classList.contains("active");
// ❌ Close all other open accordions
document.querySelectorAll(".accordion-item").forEach((el) => {
el.classList.remove("active");
const icon = el.querySelector(".icon");
const content = el.querySelector(".accordion-content");
if (icon) icon.src = "https://res.cloudinary.com/dixyq8hvr/image/upload/v1748012635/down-arrow_tt0zzn.png";
if (content) content.style.display = "none";
});
// ✅ Open selected one
if (!isOpen) {
item.classList.add("active");
const icon = item.querySelector(".icon");
const content = item.querySelector(".accordion-content");
if (icon) icon.src = "https://res.cloudinary.com/dixyq8hvr/image/upload/v1748012635/up-arrow_nb4rvs.png";
if (content) content.style.display = "block";
}
});
});
// ✅ Automatically resize on any content change
const container = document.querySelector(".product-info-block");
if (container) {
const observer = new MutationObserver(() => {
console.log("🔄 Mutation observed in accordion");
resizeBlock();
});
observer.observe(container, {
childList: true,
subtree: true,
attributes: true,
characterData: true
});
} else {
console.warn("⚠️ '.product-info-block' container not found.");
}Updated 4 months ago
What’s Next