diff options
| author | Mark Otto <[email protected]> | 2021-06-14 23:25:11 +0300 |
|---|---|---|
| committer | Mark Otto <[email protected]> | 2021-07-05 17:22:29 -1000 |
| commit | 359ed099e5b2f82bd602f2a6c45f43af8f2c87e8 (patch) | |
| tree | da343e462e97568af72c13d0d7571fa94e5cf083 | |
| parent | 8bc89b273d078f57c2a11e9b9b0ff60daf7f8e21 (diff) | |
| download | bootstrap-359ed099e5b2f82bd602f2a6c45f43af8f2c87e8.tar.xz bootstrap-359ed099e5b2f82bd602f2a6c45f43af8f2c87e8.zip | |
Add horizontal collapse support
| -rw-r--r-- | js/src/collapse.js | 3 | ||||
| -rw-r--r-- | js/tests/unit/collapse.spec.js | 2 | ||||
| -rw-r--r-- | scss/_transitions.scss | 6 | ||||
| -rw-r--r-- | scss/_variables.scss | 1 | ||||
| -rw-r--r-- | site/content/docs/5.0/components/collapse.md | 23 |
5 files changed, 33 insertions, 2 deletions
diff --git a/js/src/collapse.js b/js/src/collapse.js index 8831510df..22bd31f9b 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -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_HORIZONTAL = 'collapse-horizontal' const WIDTH = 'width' const HEIGHT = 'height' @@ -266,7 +267,7 @@ class Collapse extends BaseComponent { } _getDimension() { - return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT + return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT } _getParent() { diff --git a/js/tests/unit/collapse.spec.js b/js/tests/unit/collapse.spec.js index 11d8d52bf..9bce3f0bb 100644 --- a/js/tests/unit/collapse.spec.js +++ b/js/tests/unit/collapse.spec.js @@ -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, { diff --git a/scss/_transitions.scss b/scss/_transitions.scss index 2905df45c..bfb26aa8a 100644 --- a/scss/_transitions.scss +++ b/scss/_transitions.scss @@ -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 diff --git a/scss/_variables.scss b/scss/_variables.scss index aa4d4ff2f..7f93df4e3 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -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 diff --git a/site/content/docs/5.0/components/collapse.md b/site/content/docs/5.0/components/collapse.md index ac84ca964..3704fb636 100644 --- a/site/content/docs/5.0/components/collapse.md +++ b/site/content/docs/5.0/components/collapse.md @@ -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. Feel free to write your own custom Sass, use inline styles, or use our [width utilities]({{< docsref "/utilities/sizing" >}}). + +{{< 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. |
