aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Otto <[email protected]>2022-02-25 08:53:17 -0800
committerMark Otto <[email protected]>2022-02-28 14:02:51 -0800
commitc0f30366ace5f607e0b70a0e0034d2e8254bad9b (patch)
tree727f42db5c00eedaf2cf9c07f188f15014d2fb6a
parentefc59146671bb671993353cc1f0a0daff1bfe554 (diff)
downloadbootstrap-c0f30366ace5f607e0b70a0e0034d2e8254bad9b.tar.xz
bootstrap-c0f30366ace5f607e0b70a0e0034d2e8254bad9b.zip
Add centered dropdown and dropup options
-rw-r--r--js/src/dropdown.js12
-rw-r--r--scss/_dropdown.scss4
-rw-r--r--site/content/docs/5.1/components/dropdowns.md34
3 files changed, 49 insertions, 1 deletions
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index da56f4825..2f7ca130f 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -48,6 +48,8 @@ const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_DROPUP = 'dropup'
const CLASS_NAME_DROPEND = 'dropend'
const CLASS_NAME_DROPSTART = 'dropstart'
+const CLASS_NAME_DROPUP_CENTER = 'dropup-center'
+const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'
const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`
@@ -62,6 +64,8 @@ const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'
const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'
const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'
const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'
+const PLACEMENT_TOPCENTER = 'top'
+const PLACEMENT_BOTTOMCENTER = 'bottom'
const Default = {
offset: [0, 2],
@@ -248,6 +252,14 @@ class Dropdown extends BaseComponent {
return PLACEMENT_LEFT
}
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
+ return PLACEMENT_TOPCENTER
+ }
+
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
+ return PLACEMENT_BOTTOMCENTER
+ }
+
// We need to trim the value because custom properties can also include spaces
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'
diff --git a/scss/_dropdown.scss b/scss/_dropdown.scss
index 2a9a6646f..877579ea0 100644
--- a/scss/_dropdown.scss
+++ b/scss/_dropdown.scss
@@ -2,7 +2,9 @@
.dropup,
.dropend,
.dropdown,
-.dropstart {
+.dropstart,
+.dropup-center,
+.dropdown-center {
position: relative;
}
diff --git a/site/content/docs/5.1/components/dropdowns.md b/site/content/docs/5.1/components/dropdowns.md
index c98dd778e..4308d5c62 100644
--- a/site/content/docs/5.1/components/dropdowns.md
+++ b/site/content/docs/5.1/components/dropdowns.md
@@ -400,6 +400,23 @@ And putting it to use in a navbar:
Directions are mirrored when using Bootstrap in RTL, meaning `.dropstart` will appear on the right side.
{{< /callout >}}
+### Centered
+
+Make the dropdown menu centered below the toggle with `.dropdown-center` on the parent element.
+
+{{< example >}}
+<div class="dropdown-center">
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownCenterBtn" data-bs-toggle="dropdown" aria-expanded="false">
+ Centered dropdown
+ </button>
+ <ul class="dropdown-menu" aria-labelledby="dropdownCenterBtn">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action two</a></li>
+ <li><a class="dropdown-item" href="#">Action three</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
### Dropup
Trigger dropdown menus above elements by adding `.dropup` to the parent element.
@@ -459,6 +476,23 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
</div>
```
+### Dropup centered
+
+Make the dropup menu centered above the toggle with `.dropup-center` on the parent element.
+
+{{< example >}}
+<div class="dropup-center">
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropupCenterBtn" data-bs-toggle="dropdown" aria-expanded="false">
+ Centered dropup
+ </button>
+ <ul class="dropdown-menu" aria-labelledby="dropupCenterBtn">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action two</a></li>
+ <li><a class="dropdown-item" href="#">Action three</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
### Dropend
Trigger dropdown menus at the right of the elements by adding `.dropend` to the parent element.