Accordions help users see only the content they need. Accordions expand and collapse sections of content.
Accordions should be used sparingly! Content should only be hidden for well considered reasons.
Accordions are good for:
Accordion has been built in accordance with https://www.w3.org/TR/wai-aria-practices-1.1/#accordion
The heading level for each accordion heading should fit correctly within the outline of the page. Headings within the content of each accordion should follow from there.
Note: Accordions have a special class for ds-block
container ds-block-accordion
. This is to cater for Squiz Matrix implementation limitations. Each accordion is wrapped in its own ds-block ds-block-accordion
container and stacked on top of each other - this allows a content template to made for a single accordion and stacking containers for mutiple accodions.
For non-matrix implementations where it is more praticle to add, remove and reorder accordions in a group you may forgo the ds-block-accordion
class on the ds-block
container and have only one ds-block
This exmple uses the stacked ds-block-accordion structure (used in Squiz Matrix Accordion Content Template).
<div class="ds-block ds-block-accordion">
<div class="ds-accordion">
<h3>
<button id="sect1trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect1">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect1" class="ds-accordion__content" role="region" aria-labelledby="sect1trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
<div class="ds-block ds-block-accordion">
<div class="ds-accordion">
<h3>
<button id="sect2trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect2">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect2" class="ds-accordion__content" role="region" aria-labelledby="sect2trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
<div class="ds-block ds-block-accordion">
<div class="ds-accordion">
<h3>
<button id="sect3trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect3">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect3" class="ds-accordion__content" role="region" aria-labelledby="sect3trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
<div class="ds-block ds-block-accordion">
<div class="ds-accordion">
<h3>
<button id="sect4trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect4">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect4" class="ds-accordion__content" role="region" aria-labelledby="sect4trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
<div class="ds-block ds-block-accordion">
<div class="ds-accordion">
<h3>
<button id="sect5trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect5">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect5" class="ds-accordion__content" role="region" aria-labelledby="sect5trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
This example uses the one ds-block container structure.
<div class="ds-block">
<div class="ds-accordion">
<h2>
<button id="sect1trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect1">
<span class="ds-accordion__title">
1: Download and install the VPN client
</span>
</button>
</h2>
<div id="sect1" class="ds-accordion__content" role="region" aria-labelledby="sect1trigger">
<h3>Windows</h3>
<ol>
<li>Click <strong>Start</strong> and expand the <strong>Cisco</strong> folder in the applications list.</li>
<li>Click <strong>Cisco AnyConnect Secure Mobility Client</strong>.</li>
<li>Enter <strong>ltuvpn.latrobe.edu.au</strong> in the <strong>Ready to connect</strong> field and click <strong>Connect</strong>.</li>
<li>Enter your La Trobe username
<ul>
<li><strong>Staff</strong> should enter their username as <strong>JBloggs</strong></li>
<li><strong>Students</strong> should enter their username as <strong>STUDENTS\01234567</strong></li>
</ul>
</li>
<li>Enter your La Trobe account password and click <strong>OK</strong>.</li>
<li>Click <strong>Accept</strong>.</li>
</ol>
<h3>Mac OS</h3>
<ol>
<li>In Finder, click <strong>Go</strong> and select <strong>Applications</strong>.</li>
<li>Double-click the <strong>Cisco</strong> folder.</li>
<li>Double-click <strong>Cisco AnyConnect Secure Mobility Client</strong>.</li>
<li>Enter <strong>ltuvpn.latrobe.edu.au</strong> in the <strong>Ready to connect</strong> field and click <strong>Connect</strong>.</li>
<li>Enter your La Trobe username:
<ul>
<li><strong>Staff</strong> should enter their username as <strong>JBloggs</strong></li>
<li><strong>Students</strong> should enter their username as <strong>STUDENTS\01234567</strong></li>
</ul>
</li>
<li>Enter your La Trobe account password and click <strong>OK</strong>.</li>
<li>Click <strong>Accept</strong>.</li>
</ol>
<p>For mobile devices, see our guides for <a title="AnyConnect for Android" href="https://www.latrobe.edu.au/students/support/it/connecting/vpn/Install-and-run-the-VPN/android">Android</a> and <a title="AnyConnect for iOS" href="https://www.latrobe.edu.au/students/support/it/connecting/vpn/Install-and-run-the-VPN/ios">iOS(iPhone or iPad)</a>.</p>
</div>
</div>
<div class="ds-accordion">
<h2>
<button id="sect3trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect2">
<span class="ds-accordion__title">
2: Run the VPN client
</span>
</button>
</h2>
<div id="sect2" class="ds-accordion__content" role="region" aria-labelledby="sect3trigger">
<h3>Windows</h3>
<ol>
<li>Click <strong>Start</strong> and expand the <strong>Cisco</strong> folder in the applications list.</li>
<li>Click <strong>Cisco AnyConnect Secure Mobility Client</strong>.</li>
<li>Enter <strong>ltuvpn.latrobe.edu.au</strong> in the <strong>Ready to connect</strong> field and click <strong>Connect</strong>.</li>
<li>Enter your La Trobe username
<ul>
<li><strong>Staff</strong> should enter their username as <strong>JBloggs</strong></li>
<li><strong>Students</strong> should enter their username as <strong>STUDENTS\01234567</strong></li>
</ul>
</li>
<li>Enter your La Trobe account password and click <strong>OK</strong>.</li>
<li>Click <strong>Accept</strong>.</li>
</ol>
<h3>Mac OS</h3>
<ol>
<li>In Finder, click <strong>Go</strong> and select <strong>Applications</strong>.</li>
<li>Double-click the <strong>Cisco</strong> folder.</li>
<li>Double-click <strong>Cisco AnyConnect Secure Mobility Client</strong>.</li>
<li>Enter <strong>ltuvpn.latrobe.edu.au</strong> in the <strong>Ready to connect</strong> field and click <strong>Connect</strong>.</li>
<li>Enter your La Trobe username:
<ul>
<li><strong>Staff</strong> should enter their username as <strong>JBloggs</strong></li>
<li><strong>Students</strong> should enter their username as <strong>STUDENTS\01234567</strong></li>
</ul>
</li>
<li>Enter your La Trobe account password and click <strong>OK</strong>.</li>
<li>Click <strong>Accept</strong>.</li>
</ol>
<p>For mobile devices, see our guides for <a title="AnyConnect for Android" href="https://www.latrobe.edu.au/students/support/it/connecting/vpn/Install-and-run-the-VPN/android">Android</a> and <a title="AnyConnect for iOS" href="https://www.latrobe.edu.au/students/support/it/connecting/vpn/Install-and-run-the-VPN/ios">iOS(iPhone or iPad)</a>.</p>
</div>
</div>
</div>
This exmple demostrates ability of having accordion opened by setting aria-expanded="true" in HTML.
<div class="ds-block ds-block-accordion">
<div class="ds-accordion">
<h3>
<button id="sect1trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect1">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect1" class="ds-accordion__content" role="region" aria-labelledby="sect1trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
<div class="ds-block ds-block-accordion">
<div class="ds-accordion">
<h3>
<button id="sect2trigger" class="ds-accordion__trigger" aria-expanded="true" aria-controls="sect2">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect2" class="ds-accordion__content" role="region" aria-labelledby="sect2trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
This exmple demostrates abilities of setting up custom components:
<div class="ds-block ds-block-accordion">
<div class="ds-accordion ds-no-js">
<h3>
<button id="sect1trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect1">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect1" class="ds-accordion__content" role="region" aria-labelledby="sect1trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
<div class="ds-block ds-block-accordion">
<div class="ds-accordion ds-no-js">
<h3>
<button id="sect2trigger" class="ds-accordion__trigger" aria-expanded="false" aria-controls="sect2">
<span class="ds-accordion__title">
Item
</span>
</button>
</h3>
<div id="sect2" class="ds-accordion__content" role="region" aria-labelledby="sect2trigger">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis auteirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</div>
</div>
<script>
jQuery(document).ready(function($) {
LTUDS.ready(() => {
const selector = '.ds-accordion__trigger'
$(selector).click(() => {
alert('This is custom click handler!');
})
const component = LTUDS.components.accordion
component.helpers.openAccordionOnLoad(selector)
$(selector).on('click', component.eventHandlers.triggerOnClick)
})
})
</script>