我试图在下拉菜单中创建Twitter Bootstrap子菜单,但是遇到了问题:我在页面的右上角有一个下拉菜单,该菜单还有一个子菜单。然而,当子菜单打开时 - 它不适合窗口并向右侧移动得太多,以至于用户只能看到前几个字母。如何使子菜单向左而不是向右打开?
我试图在下拉菜单中创建Twitter Bootstrap子菜单,但是遇到了问题:我在页面的右上角有一个下拉菜单,该菜单还有一个子菜单。然而,当子菜单打开时 - 它不适合窗口并向右侧移动得太多,以至于用户只能看到前几个字母。如何使子菜单向左而不是向右打开?
<ul class="dropdown-menu pull-right">
最终结果是菜单选项与它们所对应的按钮右对齐。
pull-right
类来实现这一点。 - FireDragon.dropdown-submenu.pull-left>.dropdown-menu { width: 100%; }
这不是一个优雅的解决方案,但似乎可以工作 http://jsfiddle.net/r1v90tas/ - Schmalzy.dropdown-submenu > .dropdown-menu
的属性为 left: 100%;
。因此,如果您希望在左侧打开子菜单,请将这些设置覆盖为负向左侧位置。例如left: -95%;
。现在,您将在左侧获得子菜单,并且您可以调整其他设置以获得完美的预览。left: -90%;
(否则我无法将鼠标移动到子菜单上,因为它会消失)。 - kovpack.dropdown-menu-right
而不是.pull-left
(没错,就是右边,请看我的jsfiddle)http://jsfiddle.net/yqt4hfbj/ - Jeroen如果你正在使用bootstrap v4,有一种新的方法可以做到这一点。
你应该在.dropdown-menu
元素上使用.dropdown-menu-right
。
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Right-aligned menu
</button>
<div class="dropdown-menu dropdown-menu-right">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
代码链接: https://getbootstrap.com/docs/4.0/components/dropdowns/#menu-items
完成任务的正确方式是:
/* Submenu placement itself */
.dropdown-submenu > .dropdown-menu { left: auto; right: 100%; }
/* Arrow position */
.dropdown-submenu { position: relative; }
.dropdown-submenu > a:after { position: absolute; left: 7px; top: 3px; float: none; border-right-color: #cccccc; border-width: 5px 5px 5px 0; }
.dropdown-submenu:hover > a:after { border-right-color: #ffffff; }
.dropdown-submenu { position: relative; text-align:right; }
将文本定位到右侧,当箭头在左侧时。 - Arvind$(document).ready(function(){
//little fix for the poisition.
var newPos = $(".fixed-menuprofile .dropdown-submenu").offset().left - $(this).width();
$(".fixed-menuprofile .dropdown-submenu").find('ul').offset({ "left": newPos });
$(".fixed-menu .dropdown-submenu").mouseover(function() {
var submenuPos = $(this).offset().left + 325;
var windowPos = $(window).width();
var oldPos = $(this).offset().left + $(this).width();
var newPos = $(this).offset().left - $(this).width();
if( submenuPos > windowPos ){
$(this).find('ul').offset({ "left": newPos });
} else {
$(this).find('ul').offset({ "left": oldPos });
}
});
});
因为我不想在每个菜单项上添加这个修复,所以我在它上面创建了一个新类。
将修复后的菜单放置在 ul 上:
<ul class="dropdown-menu fixed-menu">
我希望这对你有用。
附:Safari和Chrome中有一个小错误,第一次悬停会将其放置得太靠左,如果我修复了它,我会更新此帖子。
<ul class="dropdown-menu pull-right" role="menu">
实际上 - 如果你可以使用浮动的方法来布置下拉菜单
包装器 - 我发现只需将 navbar-right
添加到 下拉菜单
就像添加到导航栏一样容易。
这似乎有点作弊,因为它不是在导航栏中,但对我来说它也很好用。
<div class="dropdown navbar-right">
...
</div>
您可以通过在dropdown
中直接使用pull-left
来进一步自定义浮动效果...
<div class="dropdown pull-left navbar-right">
...
</div>
... 或者作为它的包装器 ...
<div class="pull-left">
<div class="dropdown navbar-right">
...
</div>
</div>
我创建了一个JavaScript函数,用于检查右侧是否有足够的空间。如果有,它将显示在右侧;否则,它将显示在左侧。如果右侧有足够的空间,它将继续显示在右侧。这是一个循环...
$(document).ready(function () {
$('body, html').css('overflow', 'hidden');
var screenWidth = $(window).width();
$('body, html').css('overflow', 'visible');
if (screenWidth > 767) {
$(".dropdown-submenu").hover(function () {
var dropdownPosition = $(this).offset().left + $(this).width() + $(this).find('ul').width();
var newPosition = $(this).offset().left - $(this).find('ul').width();
var windowPosition = $(window).width();
var oldPosition = $(this).offset().left + $(this).width();
//document.title = dropdownPosition;
if (dropdownPosition > windowPosition) {
$(this).find('ul').offset({ "left": newPosition });
} else {
$(this).find('ul').offset({ "left": oldPosition });
}
});
}
});
.dropdown-menu-shift( @num-pixels, @arrow-position: 10px ) { // mixin to shift the dropdown menu
left: @num-pixels;
&:before { left: -@num-pixels + @arrow-position; } // triangle outline
&:after { left: -@num-pixels + @arrow-position + 1px; } // triangle internal
}
例如,要移动一个带有id为dropdown-menu-x
的.dropdown-menu
,您可以执行以下操作:
#dropdown-menu-x {
.dropdown-menu-shift( -100px );
}
.dropdown
т«╣тЎеСИіТи╗тіа.pull-right
сђѓ - jbyrd