Tar*_*rik 1 css twitter-bootstrap twitter-bootstrap-3
div我们正在使用 Bootstrap 3 Dropdown,但是,当页面宽度不够大时,容器会显示一个水平滚动条,看起来就像这样。请注意,它不是浏览器窗口的滚动条。滚动条会剪切下拉列表,如下所示:

我已经检查了哪个与下拉列表元素dropdown-menu相关联,它对我来说看起来很好:ul
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0;
list-style: none;
font-size: 15px;
text-align: left;
background-color: #ffffff;
border: 1px solid #999999;
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
}
Run Code Online (Sandbox Code Playgroud)
后来我检查了容器是否div有任何z-index定义,但我找不到任何定义。但它有一个名为的类table-responsive,它看起来像这样:
@media screen and (max-width: 1600px)
.table-responsive {
margin-bottom: 15px;
overflow-x: auto;
overflow-y: hidden;
width: 100%;
}
Run Code Online (Sandbox Code Playgroud)
我已经找到答案了。首先,将btn-groupcssposition规则从更改relative为inherit.
$("#dropdownMenu").on("show.bs.dropdown", function () {
// For difference between offset and position: http://stackoverflow.com/a/3202038/44852
var dropdownButtonPosition = $(this).position();
var dropdownButtonOffset = $(this).offset();
var dropdownButtonHeight = $(this).height();
var dropdownMenu = $(this).find(".dropdown-menu:first");
var dropdownMenuHeight = dropdownMenu.height();
var scrollToTop = $(document).scrollTop();
// It seems there are some numbers that don't get included so I am using some tolerance for
// more accurate result.
var heightTolerance = 17;
// I figured that window.innerHeight works more accurate on Chrome
// but it is not available on Internet Explorer. So I am using $(window).height()
// method where window.innerHeight is not available.
var visibleWindowHeight = window.innerHeight || $(window).height();
var totalHeightDropdownOccupies = dropdownMenuHeight +
dropdownButtonOffset.top + dropdownButtonHeight + heightTolerance - scrollToTop;
// If there is enough height for dropdown to fully appear, then show it under the dropdown button,
// otherwise show it above dropdown button.
var dropdownMenuTopLocation = totalHeightDropdownOccupies < visibleWindowHeight
? dropdownButtonPosition.top + dropdownButtonHeight
: dropdownButtonPosition.top - dropdownMenuHeight - dropdownButtonHeight + heightTolerance;
dropdownMenu.css("left", dropdownButtonPosition.left)
.css("top", dropdownMenuTopLocation);
});
Run Code Online (Sandbox Code Playgroud)