Bootstrap 右侧导航栏下拉菜单项
Bootstrap Navbar Dropdown Menu Items Right
如下图所示,当我点击铃铛图标时,图标右下角会出现一个下拉菜单。我希望这个下拉菜单出现在左下角而不是右下角。我该怎么办?
<nav class="navbar">
<div class="container">
<div class="navbar-nav d-flex flex-row">
...
</div>
</div>
</nav>
Bootstrap 5(2021 年更新)
使用 dropdown-menu
上的 dropdown-menu-end
class 将菜单内的项目右对齐..
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
</div>
https://codeply.com/p/kWLLKdjdpC
Bootstrap 4(原答案)
使用 dropdown-menu-right
class 将菜单中的项目右对齐..
<div class="dropdown-menu dropdown-menu-right text-right">
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
</div>
Bootstrap4-Beta 更新:
因为有一个 bug in bootstrap4 beta 我不得不添加
.dropdown-menu-right {
right: 0;
left: auto;
}
使其发挥作用。
如果 .dropdown-menu-right
class 在 .navbar
内,则其行为不同。您可以在此处阅读文档中的 "Heads up":
https://getbootstrap.com/docs/4.0/components/dropdowns/#menu-alignment
实际上我用这个 class:
来解决
.navbar .dropdown-menu-right {
right: 0;
left: auto;
}
我遇到了同样的问题,但有一个额外的困难,因为我的菜单是在 PHP 中创建的 - 元素的数量和下拉内容不固定。
这是一个解决方案,可以尽可能使下拉菜单居中,否则将它们左对齐或右对齐以防止它们不会超出视口:
var $maxWidthElement = $('.navbar'),
maxWidth = $maxWidthElement.width();
var positionDropdowns = function() {
$('.dropdown-menu').each(function() {
var $navItem = $(this).closest('.dropdown'),
dropdownWidth = $(this).outerWidth(),
dropdownOffsetLeft = $navItem.offset().left,
dropdownOffsetRight = maxWidth - (dropdownOffsetLeft + dropdownWidth),
linkCenterOffsetLeft = dropdownOffsetLeft + $navItem.outerWidth() / 2;
if ((linkCenterOffsetLeft - dropdownWidth / 2 > 0) & (linkCenterOffsetLeft + dropdownWidth / 2 < maxWidth)) {
// center the dropdown menu if possible
$(this).css('left', -(dropdownWidth / 2 - $navItem.outerWidth() / 2));
} else if ((dropdownOffsetRight < 0) & (dropdownWidth < dropdownOffsetLeft + $navItem.outerWidth())) {
// set the dropdown menu to left if it exceeds the viewport on the right
$(this).addClass('dropdown-menu-right');
} else if (dropdownOffsetLeft + dropdownWidth > maxWidth) {
// full width if the dropdown is too large to fit on the right
$(this).css({
left: 0,
right: 0,
width:
$(this)
.closest('.container')
.width() + 'px'
});
}
});
};
var resizeTimer;
$(window).on('resize', function(e) {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
maxWidth = $maxWidthElement.width();
positionDropdowns();
}, 250);
});
positionDropdowns();
window.onresize = positionDropdowns;
boostrap 4 变化不大。
要将导航栏对齐到右侧,您只需进行两处更改。
他们是:
- 在
navbar-nav
class中添加w-100
作为navbar-nav w-100
使宽度为100
- 在
nav-item dropdown
class 中添加 ml-auto
作为 nav-item dropdown ml-auto
使留边距为自动。
如有不明白,请参考此
我通过添加 din="rtl"
更改了它
<div class="dropdown-menu " dir="rtl" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item " href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
Bootstrap 5
@Zim 的回答可能是最正确的 as suggested in the docs。
尽管如此,我设法让它工作的唯一方法是改用 end-0
class。
<ul class="dropdown-menu end-0">
<li><a class="dropdown-item" href="#">Save</a></li>
<li><a class="dropdown-item" href="#">Fetch</a></li>
</ul>
如下图所示,当我点击铃铛图标时,图标右下角会出现一个下拉菜单。我希望这个下拉菜单出现在左下角而不是右下角。我该怎么办?
<nav class="navbar">
<div class="container">
<div class="navbar-nav d-flex flex-row">
...
</div>
</div>
</nav>
Bootstrap 5(2021 年更新)
使用 dropdown-menu
上的 dropdown-menu-end
class 将菜单内的项目右对齐..
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
</div>
https://codeply.com/p/kWLLKdjdpC
Bootstrap 4(原答案)
使用 dropdown-menu-right
class 将菜单中的项目右对齐..
<div class="dropdown-menu dropdown-menu-right text-right">
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
<a class="dropdown-item" href="#">Link</a>
</div>
Bootstrap4-Beta 更新:
因为有一个 bug in bootstrap4 beta 我不得不添加
.dropdown-menu-right {
right: 0;
left: auto;
}
使其发挥作用。
.dropdown-menu-right
class 在 .navbar
内,则其行为不同。您可以在此处阅读文档中的 "Heads up":
https://getbootstrap.com/docs/4.0/components/dropdowns/#menu-alignment
实际上我用这个 class:
来解决.navbar .dropdown-menu-right {
right: 0;
left: auto;
}
我遇到了同样的问题,但有一个额外的困难,因为我的菜单是在 PHP 中创建的 - 元素的数量和下拉内容不固定。
这是一个解决方案,可以尽可能使下拉菜单居中,否则将它们左对齐或右对齐以防止它们不会超出视口:
var $maxWidthElement = $('.navbar'),
maxWidth = $maxWidthElement.width();
var positionDropdowns = function() {
$('.dropdown-menu').each(function() {
var $navItem = $(this).closest('.dropdown'),
dropdownWidth = $(this).outerWidth(),
dropdownOffsetLeft = $navItem.offset().left,
dropdownOffsetRight = maxWidth - (dropdownOffsetLeft + dropdownWidth),
linkCenterOffsetLeft = dropdownOffsetLeft + $navItem.outerWidth() / 2;
if ((linkCenterOffsetLeft - dropdownWidth / 2 > 0) & (linkCenterOffsetLeft + dropdownWidth / 2 < maxWidth)) {
// center the dropdown menu if possible
$(this).css('left', -(dropdownWidth / 2 - $navItem.outerWidth() / 2));
} else if ((dropdownOffsetRight < 0) & (dropdownWidth < dropdownOffsetLeft + $navItem.outerWidth())) {
// set the dropdown menu to left if it exceeds the viewport on the right
$(this).addClass('dropdown-menu-right');
} else if (dropdownOffsetLeft + dropdownWidth > maxWidth) {
// full width if the dropdown is too large to fit on the right
$(this).css({
left: 0,
right: 0,
width:
$(this)
.closest('.container')
.width() + 'px'
});
}
});
};
var resizeTimer;
$(window).on('resize', function(e) {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
maxWidth = $maxWidthElement.width();
positionDropdowns();
}, 250);
});
positionDropdowns();
window.onresize = positionDropdowns;
boostrap 4 变化不大。 要将导航栏对齐到右侧,您只需进行两处更改。 他们是:
- 在
navbar-nav
class中添加w-100
作为navbar-nav w-100
使宽度为100 - 在
nav-item dropdown
class 中添加ml-auto
作为nav-item dropdown ml-auto
使留边距为自动。
如有不明白,请参考此
我通过添加 din="rtl"
更改了它<div class="dropdown-menu " dir="rtl" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item " href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
Bootstrap 5
@Zim 的回答可能是最正确的 as suggested in the docs。
尽管如此,我设法让它工作的唯一方法是改用 end-0
class。
<ul class="dropdown-menu end-0">
<li><a class="dropdown-item" href="#">Save</a></li>
<li><a class="dropdown-item" href="#">Fetch</a></li>
</ul>