Performance: Accordion component
This affects page load speed and interaction responsiveness by controlling how much content is rendered and how often layout recalculations happen when toggling sections.
<div class="accordion"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Section 1 </button> </h2> <div id="collapseOne" class="accordion-collapse collapse show"> <div class="accordion-body"> <!-- Content loaded or rendered only when expanded --> <img src="large-image.jpg" alt="Large image" loading="lazy"> <p>Lots of text and media here...</p> </div> </div> </div> <!-- More accordion items with lazy loading or conditional rendering --> </div>
<div class="accordion"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Section 1 </button> </h2> <div id="collapseOne" class="accordion-collapse collapse show"> <div class="accordion-body"> <!-- Large heavy content always rendered --> <img src="large-image.jpg" alt="Large image"> <p>Lots of text and media here...</p> </div> </div> </div> <!-- More accordion items with heavy content --> </div>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Render all content upfront | High (many nodes rendered) | Multiple reflows on toggle | High paint cost due to large content | [X] Bad |
| Lazy load images and defer content | Lower (only visible nodes rendered) | Single reflow per toggle | Lower paint cost | [OK] Good |
Accordion component in Bootstrap?div with class accordion and an ID for reference.div.accordion as the wrapper, not accordion tag or other classes like accordion-item or accordion-collapse alone.<div class='accordion-item'>
<h2 class='accordion-header' id='headingOne'>
<button class='accordion-button' type='button' data-bs-toggle='collapse' data-bs-target='#collapseOne' aria-expanded='true' aria-controls='collapseOne'>
Section 1
</button>
</h2>
<div id='collapseOne' class='accordion-collapse collapse show' aria-labelledby='headingOne' data-bs-parent='#myAccordion'>
<div class='accordion-body'>Content 1</div>
</div>
</div>data-bs-toggle='collapse' and data-bs-target='#collapseOne', linking it to the collapsible content.collapse show, meaning it is visible initially and will toggle on button click.<div class='accordion' id='accordionExample'>
<div class='accordion-item'>
<h2 class='accordion-header' id='headingOne'>
<button class='accordion-button' type='button' data-bs-toggle='collapse' data-bs-target='#collapseOne' aria-expanded='false' aria-controls='collapseOne'>
Accordion Item #1
</button>
</h2>
<div id='collapseOne' class='accordion-collapse' aria-labelledby='headingOne' data-bs-parent='#accordionExample'>
<div class='accordion-body'>Content for item 1</div>
</div>
</div>
</div>collapse to enable Bootstrap's collapse behavior.aria-expanded attribute on the button is correct and data-bs-parent belongs on the collapse div. The container has an ID.accordion-collapse div is missing the collapse class -> Option Adata-bs-parent on collapse divs to ensure only one section is open at a time.show class to the first collapse div makes it open by default on page load.data-bs-toggle='accordion', data-bs-multiple, or data-bs-single do not exist in Bootstrap 5 for this purpose.Pass the test and this pattern moves unknown