Accordion
Definition
An accordion is a vertical list of items, including text, tables, or images, in expandable tabs, one item per tab. The default behavior expands the first item with other items collapsed and displays the items in the order they are entered. The accordion can also be displayed as a numbered list, and the default behavior can be altered to "collapse all" on page load. Users can expand or contract an accordion with one click.
Usage and Specifications
Accordions can improve user experience by folding text into sections that are easy to scan, especially on mobile devices. Accordions are thus ideal for long pages such as FAQs.
Each accordion includes a list of subtitles, with each subtitle having its own text, images, or both; the accordion may also have a group title for the entire component. Accordion subtitles, which should describe the content users will see when the accordion title, or item, is expanded, are designated by an icon. When carets are used, the carets should change direction when the accordion is open and closed. Numbers can also be used to create an accordion that is a numbered list.
Examples
Numeric Accordion
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. Duis aute irure 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.
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. Duis aute irure 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.
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. Duis aute irure 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.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
(function($){
$(document).ready(function() {
$('button.accordion').click(function() {
this.classList.toggle("active");
var expanded = 'false';
if ($(this).hasClass('active')) {
expanded = 'true';
}
$(this).attr('aria-expanded', expanded);
$(this).next().slideToggle(200, function() {
$(this).toggleClass("show");
});
$(this).parents(".cu-accordion:eq(0)").find(".accordion-expand-all-option").removeClass("active");
$(this).parents(".cu-accordion:eq(0)").find(".accordion-collapse-all-option").removeClass("active");
});
$(".accordion-expand-all-option").click(function() {
$(this).addClass("active");
$(this).parents(".cu-accordion:eq(0)").find('.accordion-collapse-all-option').removeClass("active");
$.each($(this).parents(".cu-accordion:eq(0)").find("button.accordion"), function() {
this.classList.add("active");
$(this).attr('aria-expanded', 'true');
$(this).next().slideDown(200, function() {
$(this).addClass("show");
});
});
});
$('.accordion-collapse-all-option').click(function() {
$(this).addClass("active");
$('.accordion-expand-all-option').removeClass("active");
$.each($(this).parents(".cu-accordion:eq(0)").find("button.accordion"), function() {
this.classList.remove("active");
$(this).attr('aria-expanded', 'false');
$(this).next().slideUp(200, function() {
$(this).removeClass("show");
});
});
});
$(".cu-accordion[data-collapse=1]").each(function() {
$(this).find('.accordion-collapse-all-option').click();
});
});
})(jQuery);
</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" integrity="sha512-Kc323vGBEqzTmouAECnVceyQqyqdsSiqLQISBL29aUW4U/M7pSPA/gEUZQqv1cwx4OnYxTxve5UMg5GT6L4JJg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<style type="text/css">
button.accordion {
background: none;
border: none;
color: #0e5a90;
cursor: pointer;
font-size: 1.5em;
outline: none;
padding: 5px 0;
text-align: left;
transition: .4s;
width: 100%;
}
button.accordion .accordion-icon {
color: #555;
float: left;
font-size: .7em;
min-width: 2.5em;
text-align: center;
transition: all .2s;
vertical-align: middle;
}
button.accordion.active .accordion-icon {
transform: rotate(90deg);
}
button.accordion h3 {
align-items: baseline;
display: flex;
font-family: 'Proxima Nova', san-serif;
font-size: 1em;
font-weight: 300;
margin: 0;
color: #555555;
}
.cu-accordion-item {
border-bottom: 1px solid #ebebeb;
margin-bottom: 24px;
padding: 10px 0;
}
div.accordion {
display: none;
margin: 5px 0 0 2.5em;
padding: 5px 0;
}
div.accordion.show {
display: block;
}
.accordion-checkboxes {
display: flex;
float: right;
margin: 0 0 10px;
}
.accordion-checkboxes button {
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
color: #333;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: normal;
line-height: 1.42857143;
margin-bottom: 0;
padding: 6px 12px;
text-align: center;
touch-action: manipulation;
user-select: none;
vertical-align: middle;
white-space: nowrap;
}
.accordion-checkboxes button.active {
background-color: #e6e6e6;
border-color: #adadad;
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
color: #333;
}
.accordion-checkboxes button:first-child:not(:last-child):not(.dropdown-toggle) {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
margin-right: -1px;
}
.accordion-checkboxes button:last-child:not(:first-child) {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
</style>
<div class="cu-accordion" data-collapse="0">
<div class="accordion-checkboxes" id="accordion-checkboxes-691" role="group">
<button class="accordion-expand-all-option" name="accordion-expand" type="button">Expand all</button>
<button class="accordion-collapse-all-option" name="accordion-collapse" type="button">Collapse all</button>
</div>
<h2 class="accordion-title">Simple Accordion</h2>
<div class="cu-accordion-content">
<div class="cu-accordion-item anchored" id="cu_accordion_item-661">
<button class="accordion active show">
<h3>
<i class="accordion-icon fa-solid fa-chevron-right"></i>
Item 1
</h3>
</button>
<div class="accordion active show">
<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.</p>
</div>
</div>
<div class="cu-accordion-item anchored" id="cu_accordion_item-667">
<button class="accordion">
<h3>
<i class="accordion-icon fa-solid fa-chevron-right"></i>
Item 2
</h3>
</button>
<div class="accordion">
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure 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 class="cu-accordion-item anchored" id="cu_accordion_item-688">
<button class="accordion">
<h3>
<i class="accordion-icon fa-solid fa-chevron-right"></i>
Item 3
</h3>
</button>
<div class="accordion">
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<figure class="field field--name-field-cu-image field--type-image field--label-hidden image-with-borders image-wrapper cap-bot" id="bar-graph-of-favorite-types-of-movies-682"><img alt="Bar graph of favorite types of movies" class="img-responsive" data-entity-type="" data-entity-uuid="" height="394" src="https://visualidentity.columbia.edu/sites/default/files/styles/cu_crop/public/private/favortie%20type%20of%20movies%20graph.png?itok=akfKKKP-" typeof="foaf:Image" width="600" /></figure>
<p>Accordions can also be used as a numbered list.</p>
</div>
</div>
</div>
</div>