Skip to content

Commit

Permalink
Add horizontal collapse support
Browse files Browse the repository at this point in the history
  • Loading branch information
mdo authored and XhmikosR committed Jun 29, 2021
1 parent d314466 commit 1fe8747
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 2 deletions.
3 changes: 2 additions & 1 deletion js/src/collapse.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_COLLAPSE = 'collapse'
const CLASS_NAME_COLLAPSING = 'collapsing'
const CLASS_NAME_COLLAPSED = 'collapsed'
const CLASS_NAME_WIDTH = 'collapse-horizontal'

const WIDTH = 'width'
const HEIGHT = 'height'
Expand Down Expand Up @@ -266,7 +267,7 @@ class Collapse extends BaseComponent {
}

_getDimension() {
return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT
return this._element.classList.contains(CLASS_NAME_WIDTH) ? WIDTH : HEIGHT
}

_getParent() {
Expand Down
2 changes: 1 addition & 1 deletion js/tests/unit/collapse.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ describe('Collapse', () => {
})

it('should show a collapsed element on width', done => {
fixtureEl.innerHTML = '<div class="collapse width" style="width: 0px;"></div>'
fixtureEl.innerHTML = '<div class="collapse collapse-horizontal" style="width: 0px;"></div>'

const collapseEl = fixtureEl.querySelector('div')
const collapse = new Collapse(collapseEl, {
Expand Down
6 changes: 6 additions & 0 deletions scss/_transitions.scss
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,11 @@
height: 0;
overflow: hidden;
@include transition($transition-collapse);

&.collapse-horizontal {
width: 0;
height: auto;
@include transition($transition-collapse-width);
}
}
// scss-docs-end collapse-classes
1 change: 1 addition & 0 deletions scss/_variables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,7 @@ $transition-base: all .2s ease-in-out !default;
$transition-fade: opacity .15s linear !default;
// scss-docs-start collapse-transition
$transition-collapse: height .35s ease !default;
$transition-collapse-width: width .35s ease !default;
// scss-docs-end collapse-transition

// stylelint-disable function-disallowed-list
Expand Down
23 changes: 23 additions & 0 deletions site/content/docs/5.0/components/collapse.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,29 @@ Generally, we recommend using a button with the `data-bs-target` attribute. Whil
</div>
{{< /example >}}

## Horizontal

The collapse plugin also supports horizontal collapsing. Add the `.collapse-horizontal` modifier class to transition the `width` instead of `height` and set a `width` on the immediate child element.

{{< callout info >}}
Please note that while the example below has a `min-height` set to avoid excessive repaints in our docs, this is not explicitly required. **Only the `width` on the child element is required.**
{{< /callout >}}

{{< example >}}
<p>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWidthExample" aria-expanded="false" aria-controls="collapseWidthExample">
Toggle width collapse
</button>
</p>
<div style="min-height: 120px;">
<div class="collapse collapse-horizontal" id="collapseWidthExample">
<div class="card card-body" style="width: 300px;">
This is some placeholder content for a horizontal collapse. It's hidden by default and shown when triggered.
</div>
</div>
</div>
{{< /example >}}

## Multiple targets

A `<button>` or `<a>` can show and hide multiple elements by referencing them with a selector in its `href` or `data-bs-target` attribute.
Expand Down

0 comments on commit 1fe8747

Please sign in to comment.