Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 167 additions & 0 deletions scss/_accordion.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
//
// Base styles
//

.accordion-button {
@include font-size($font-size-base);
display: flex;
align-items: baseline;
width: 100%;
padding: $accordion-button-padding-y $accordion-button-padding-x;
color: $accordion-button-color;
text-align: left;
background-color: $accordion-button-bg;
border: $accordion-border-width solid $accordion-border-color;
border-bottom: none;
@include border-radius(0);

&:not(.collapsed) {
color: $accordion-button-active-color;
background-color: $accordion-button-active-bg;

&::after {
background-image: escape-svg($accordion-button-active-icon);
transform: $accordion-button-active-icon-transform;
}
}

// Accordion icon
&::after {
flex-shrink: 0;
width: 1.5rem;
height: 1rem;
margin-left: auto;
content: "";
background-image: escape-svg($accordion-button-icon);
background-repeat: no-repeat;
background-position: center;
background-size: 1.5rem;
transform: $accordion-button-icon-transform;
@include transition($accordion-icon-transition);
}

&:focus {
position: relative;
outline: 0;
box-shadow: $btn-focus-box-shadow;
}
}

.accordion-header {
margin-bottom: 0;
}

.accordion-item {
@include border-radius($accordion-border-radius);

&:last-of-type {
.accordion-button {
border-bottom: $accordion-border-width solid $accordion-border-color;

// Only set a border-radius on the last item if the accordion is collapsed
&.collapsed {
@include border-bottom-radius($accordion-border-radius);
}
}

.accordion-body {
border: $accordion-border-width solid $accordion-border-color;
border-top: none;
@include border-bottom-radius($accordion-border-radius);
}
}

&:first-of-type {
.accordion-button {
@include border-top-radius($accordion-border-radius);
}
}
}

.accordion-body {
padding: $accordion-body-padding-y $accordion-body-padding-x;
border: $accordion-border-width solid $accordion-border-color;
border-bottom: none;
}


// Flush accordion items
//
// Remove borders and border-radius to keep accordion items edge-to-edge.

.accordion-flush {
.accordion-button {
color: $accordion-flush-button-color;
background-color: $accordion-flush-button-bg;

&:not(.collapsed) {
color: $accordion-flush-button-active-color;
background-color: $accordion-flush-button-active-bg;
}

border-right: 0;
border-left: 0;
@include border-radius(0);
}

.accordion-body {
border-width: 0;
}

.accordion-item {
border-right-width: 0;
border-left-width: 0;
@include border-radius(0);

&:first-of-type {
.accordion-button {
border-top-width: 0;
@include border-top-radius(0);
}
}

&:last-of-type {
.accordion-button {
border-bottom-width: 0;
@include border-bottom-radius(0);
}

.accordion-body {
border-width: 0;
}
}
}
}


// Zebra-striping
//
// Default zebra-stripe styles (alternating gray and transparent backgrounds)

.accordion-striped {
.accordion-button {
color: $accordion-striped-button-color;
background-color: $accordion-striped-button-bg;

&:not(.collapsed) {
color: $accordion-striped-button-accent-active-color;
background-color: $accordion-striped-button-active-bg;
}
}

.accordion-item:nth-of-type(#{$accordion-striped-order}) {
.accordion-button {
color: $accordion-striped-button-accent-color;
background-color: $accordion-striped-button-accent-bg;

&:not(.collapsed) {
color: $accordion-striped-button-accent-active-color;
background-color: $accordion-striped-button-accent-active-bg;
}
}

.accordion-body {
background-color: $accordion-striped-body-accent-bg;
}
}
}
25 changes: 0 additions & 25 deletions scss/_card.scss
Original file line number Diff line number Diff line change
Expand Up @@ -235,28 +235,3 @@
}
}
}


//
// Accordion
//

.accordion {
> .card {
overflow: hidden;

&:not(:last-of-type) {
border-bottom: 0;
@include border-bottom-radius(0);
}

&:not(:first-of-type) {
@include border-top-radius(0);
}

> .card-header {
@include border-radius(0);
margin-bottom: -$card-border-width;
}
}
}
47 changes: 47 additions & 0 deletions scss/_variables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -962,6 +962,53 @@ $card-img-overlay-padding: 1.25rem !default;
$card-group-margin: $grid-gutter-width / 2 !default;
$card-deck-margin: $card-group-margin !default;

// Accordion
$accordion-padding-y: 1.25rem !default;
$accordion-padding-x: 1.25rem !default;

$accordion-bg: $white !default;
$accordion-color: $body-color !default;
$accordion-button-active-bg: lighten($component-active-bg, 45%) !default;
$accordion-button-active-color: $primary !default;
$accordion-accent-bg: rgba($black, .025) !default;

$accordion-button-padding-y: $accordion-padding-y !default;
$accordion-button-padding-x: $accordion-padding-x !default;
$accordion-body-padding-y: $accordion-padding-y !default;
$accordion-body-padding-x: $accordion-padding-x !default;

$accordion-button-color: $accordion-color !default;
$accordion-button-bg: $accordion-bg !default;

$accordion-border-width: $border-width !default;
$accordion-border-radius: $border-radius !default;

$accordion-border-color: rgba($black, .125) !default;
$accordion-icon-color: $accordion-color !default;
$accordion-icon-active-color: $accordion-button-active-color !default;

$accordion-icon-transition: $transition-base !default;

$accordion-button-icon-transform: rotate(0deg) !default;
$accordion-button-icon: url("data:image/svg+xml,<svg viewBox='0 0 20 20' fill='#{$accordion-icon-color}' xmlns='http://www.w3.org/2000/svg'><path fill-rule='evenodd' d='M3.646 6.646a.5.5 0 01.708 0L10 12.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z' clip-rule='evenodd'/></svg>") !default;
$accordion-button-active-icon: url("data:image/svg+xml,<svg viewBox='0 0 20 20' fill='#{$accordion-icon-active-color}' xmlns='http://www.w3.org/2000/svg'><path fill-rule='evenodd' d='M3.646 6.646a.5.5 0 01.708 0L10 12.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z' clip-rule='evenodd'/></svg>") !default;
$accordion-button-active-icon-transform: rotate(180deg) !default;

$accordion-striped-order: odd !default;

$accordion-flush-button-color: null !default;
$accordion-flush-button-bg: transparent !default;
$accordion-flush-button-active-color: null !default;
$accordion-flush-button-active-bg: $accordion-button-active-bg !default;

$accordion-striped-button-color: null !default;
$accordion-striped-button-bg: transparent !default;
$accordion-striped-button-active-bg: $accordion-button-active-bg !default;
$accordion-striped-button-accent-color: null !default;
$accordion-striped-button-accent-bg: $accordion-accent-bg !default;
$accordion-striped-button-accent-active-color: null !default;
$accordion-striped-button-accent-active-bg: $accordion-button-active-bg !default;
$accordion-striped-body-accent-bg: null !default;

// Tooltips

Expand Down
1 change: 1 addition & 0 deletions scss/bootstrap.scss
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
@import "nav";
@import "navbar";
@import "card";
@import "accordion";
@import "breadcrumb";
@import "pagination";
@import "badge";
Expand Down
139 changes: 139 additions & 0 deletions site/content/docs/4.3/components/accordion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
---
layout: docs
title: Accordion
description: Provides an accordion to collapse content vertically.
group: components
aliases:
Comment thread
gijsroge marked this conversation as resolved.
Outdated
- "/components/"
- "/docs/4.3/components/"
toc: true
---

## How it works

The accordion uses [collapse]({{< docsref "/components/collapse" >}}) internally to make it collapsible. In order to render an accordion that's expanded you need to add the `open` class on the `.accordion`

{{< callout info >}}
{{< partial "callout-info-prefersreducedmotion.md" >}}
{{< /callout >}}

## Example

Click the accordions below to expand/collapse the accordion content.

{{< example >}}
<div class="accordion" id="accordionExample">
<div class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button class="accordion-button" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Accordion Item #1
</button>
</h2>
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingTwo">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Accordion Item #2
</button>
</h2>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingThree">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Accordion Item #3
</button>
</h2>
<div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordionExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
</div>
{{< /example >}}

### Accordion flush example

Add `.accordion-flush` to remove some borders and rounded corners to render accordions items edge-to-edge.

{{< example >}}
<div class="accordion accordion-flush" id="accordionFlushExample">
<div class="accordion-item">
<h2 class="accordion-header" id="flush-headingOne">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#flush-collapseOne" aria-expanded="false" aria-controls="flush-collapseOne">
Accordion Item #1
</button>
</h2>
<div id="flush-collapseOne" class="collapse" aria-labelledby="flush-headingOne" data-parent="#accordionFlushExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="flush-headingTwo">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#flush-collapseTwo" aria-expanded="false" aria-controls="flush-collapseTwo">
Accordion Item #2
</button>
</h2>
<div id="flush-collapseTwo" class="collapse" aria-labelledby="flush-headingTwo" data-parent="#accordionFlushExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="flush-headingThree">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#flush-collapseThree" aria-expanded="false" aria-controls="flush-collapseThree">
Accordion Item #3
</button>
</h2>
<div id="flush-collapseThree" class="collapse" aria-labelledby="flush-headingThree" data-parent="#accordionFlushExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
</div>
{{< /example >}}

### Accordion striped example

Use `.accordion-striped` to add zebra-striping to any accordion.

{{< example >}}
<div class="accordion accordion-striped" id="accordionStripedExample">
<div class="accordion-item">
<h2 class="accordion-header" id="striped-headingOne">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#striped-collapseOne" aria-expanded="false" aria-controls="striped-collapseOne">
Accordion Item #1
</button>
</h2>
<div id="striped-collapseOne" class="collapse" aria-labelledby="striped-headingOne" data-parent="#accordionStripedExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="striped-headingTwo">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#striped-collapseTwo" aria-expanded="false" aria-controls="striped-collapseTwo">
Accordion Item #2
</button>
</h2>
<div id="striped-collapseTwo" class="collapse" aria-labelledby="striped-headingTwo" data-parent="#accordionStripedExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="striped-headingThree">
<button class="accordion-button collapsed" type="button" data-toggle="collapse" data-target="#striped-collapseThree" aria-expanded="false" aria-controls="striped-collapseThree">
Accordion Item #3
</button>
</h2>
<div id="striped-collapseThree" class="collapse" aria-labelledby="striped-headingThree" data-parent="#accordionStripedExample">
<div class="accordion-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
</div>
</div>
</div>
{{< /example >}}

## Accessibility

Please read the [collapse accessibility section]({{< docsref "/components/collapse#accessibility" >}}) for more information.
Loading