0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-01 13:24:25 +01:00

Reset Popper.js styles for Dropdowns in navbar

This commit is contained in:
Johann-S 2017-06-04 17:56:51 +02:00 committed by Mark Otto
parent ce98a1da5b
commit af93db294b
2 changed files with 70 additions and 20 deletions

View File

@ -96,10 +96,11 @@ const Dropdown = (($) => {
class Dropdown {
constructor(element, config) {
this._element = element
this._popper = null
this._config = this._getConfig(config)
this._menu = this._getMenuElement()
this._element = element
this._popper = null
this._config = this._getConfig(config)
this._menu = this._getMenuElement()
this._inNavbar = this._detectNavbar()
this._addEventListeners()
}
@ -153,17 +154,7 @@ const Dropdown = (($) => {
element = parent
}
}
this._popper = new Popper(element, this._menu, {
placement : this._getPlacement(),
modifiers : {
offset : {
offset : this._config.offset
},
flip : {
enabled : this._config.flip
}
}
})
this._popper = new Popper(element, this._menu, this._getPopperConfig())
// if this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
@ -253,10 +244,54 @@ const Dropdown = (($) => {
} else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
placement = AttachmentMap.BOTTOMEND
}
return placement
}
_detectNavbar() {
return $(this._element).closest('.navbar').length > 0
}
_navbarPositioning() {
const $parentNavbar = $(this._element).closest('.navbar')
if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
if (!$parentNavbar.hasClass('navbar-expand')) {
return {
position: 'static',
transform: '',
float: 'none'
}
}
}
return {}
}
_getPopperConfig() {
const popperConfig = {
placement : this._getPlacement(),
modifiers : {
offset : {
offset : this._config.offset
},
flip : {
enabled : this._config.flip
}
}
}
if (this._inNavbar) {
popperConfig.modifiers.AfterApplyStyle = {
enabled: true,
order: 901, // ApplyStyle order + 1
fn: () => {
// reset Popper styles
$(this._menu).attr('style', '')
}
}
}
return popperConfig
}
// static
static _jQueryInterface(config) {

View File

@ -77,9 +77,8 @@
}
.dropdown-menu {
position: static !important;
position: static;
float: none;
transform: unset !important;
}
}
@ -142,6 +141,13 @@
&#{$infix} {
@include media-breakpoint-down($breakpoint) {
.navbar-nav {
.dropdown-menu {
position: static;
float: none;
}
}
> .container,
> .container-fluid {
padding-right: 0;
@ -158,8 +164,17 @@
flex-direction: row;
.dropdown-menu {
position: absolute !important;
top: 100% !important;
position: absolute;
}
.dropdown-menu-right {
right: 0;
left: auto; // Reset the default from `.dropdown-menu`
}
.dropdown-menu-left {
right: auto;
left: 0;
}
.nav-link {