aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Otto <[email protected]>2021-06-14 23:25:11 +0300
committerMark Otto <[email protected]>2021-07-05 17:22:29 -1000
commit359ed099e5b2f82bd602f2a6c45f43af8f2c87e8 (patch)
treeda343e462e97568af72c13d0d7571fa94e5cf083
parent8bc89b273d078f57c2a11e9b9b0ff60daf7f8e21 (diff)
downloadbootstrap-359ed099e5b2f82bd602f2a6c45f43af8f2c87e8.tar.xz
bootstrap-359ed099e5b2f82bd602f2a6c45f43af8f2c87e8.zip
Add horizontal collapse support
-rw-r--r--js/src/collapse.js3
-rw-r--r--js/tests/unit/collapse.spec.js2
-rw-r--r--scss/_transitions.scss6
-rw-r--r--scss/_variables.scss1
-rw-r--r--site/content/docs/5.0/components/collapse.md23
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.