我试图在下拉菜单中创建twitter bootstrap子菜单,但我遇到了一个问题:我在页面的右上角有下拉菜单,该菜单还有一个子菜单。但是,当子菜单打开时 - 它不适合窗口并向右移动太多,因此用户只能看到第一个字母。如何使该子菜单不向右打开,而向左打开?
答案 0 :(得分:114)
如果我理解这一点,bootstrap就为这种情况提供了一个CSS类。将'pull-right'添加到菜单'ul':
<ul class="dropdown-menu pull-right">
..最终结果是菜单选项显示为右对齐,与他们下拉的按钮一致。
答案 1 :(得分:107)
答案 2 :(得分:25)
Curent班.dropdown-submenu > .dropdown-menu
有left: 100%;
。因此,如果要打开左侧的子菜单,请将这些设置覆盖到负左侧位置。例如left: -95%;
。现在,您将在左侧获得子菜单,并且您可以调整其他设置以获得完美的预览。
这是DEMO
编辑:OP的问题和我的回答是从2012年8月开始。同时,Bootstrap改变了,所以现在你有.pull-left类。那时候,我的回答是正确的。现在你不必手动设置css,你就有了.pull-left类。 编辑2:演示不起作用,因为Bootstrap改变了他们的URL。只需更改jsfiddle中的外部资源,并用新的替换它们。答案 3 :(得分:15)
如果您使用的是bootstrap v4,则有一种新的方法可以做到这一点。
您应该在.dropdown-menu-right
元素上使用.dropdown-menu
。
代码链接:http://v4-alpha.getbootstrap.com/components/dropdowns/#menu-alignment
答案 4 :(得分:12)
执行任务的正确方法是:
/* 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; }
答案 5 :(得分:4)
我创建了一个javascript函数,看看他是否有足够的空间在右侧。 如果有,他将在右侧显示,否则他将在左侧显示
测试:
使用Javascript:
$(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">
我希望这对你有用。
PS。在safari和chrome中的小bug,如果我修复它,第一个悬停将它放到mutch左边将更新这篇文章。
答案 6 :(得分:4)
如果您只有一个级别而且使用bootstrap 3将pull-right
添加到ul
元素
<ul class="dropdown-menu pull-right" role="menu">
答案 7 :(得分:1)
实际上 - 如果您可以悬浮dropdown
包装器 - 我发现将navbar-right
添加到dropdown
非常简单。
这似乎是作弊,因为它不在导航栏中,但对我来说效果很好。
<div class="dropdown navbar-right">
...
</div>
然后,您可以直接在pull-left
...
dropdown
进一步自定义浮动
<div class="dropdown pull-left navbar-right">
...
</div>
......或作为它的包装......
<div class="pull-left">
<div class="dropdown navbar-right">
...
</div>
</div>
答案 8 :(得分:1)
我创建了一个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 });
}
});
}
});
答案 9 :(得分:0)
您使用的是最新版本的bootstrap吗?我已经调整了the Fluid Layout example中的html,如下所示。我添加了一个下拉列表,并通过添加pull-right
类将它放在最右侧。当鼠标悬停在下拉菜单上时,它会自动拉到左侧并且不会隐藏任何内容 - 所有菜单文本都可见。我没有使用任何自定义CSS。
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="#">Project name</a>
<div class="nav-collapse collapse">
<ul class="nav pull-right">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
<li class="dropdown open">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li class="nav-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul>
<p class="navbar-text pull-right">
Logged in as <a href="#" class="navbar-link">Username</a>
</p>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
答案 10 :(得分:0)
如果你正在使用LESS CSS,我写了一点mixin来移动带有连接箭头的下拉列表:
.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
}
然后移动身份为.dropdown-menu
的{{1}},您可以执行以下操作:
dropdown-menu-x
答案 11 :(得分:0)
您只需要做的
<ul style='left:-100%'>
您要在右侧显示的菜单的。