【问题标题】:Dropdown menu causes scrollbar下拉菜单导致滚动条
【发布时间】:2016-12-16 20:26:02
【问题描述】:

我用过这个example from W3C

<div class="dropdown">
    <button class="btn btn-sm dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">
        <span class="glyphicon glyphicon-menu-hamburger"></span>
    </button>
    <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
        <li role="presentation"><a role="menuitem" href="#">HTML</a></li>
        <li role="presentation"><a role="menuitem" href="#">CSS</a></li>
        <li role="presentation"><a role="menuitem" href="#">JavaScript</a></li>
        <li role="presentation" class="divider"></li>
        <li role="presentation"><a role="menuitem" href="#">About Us</a></li>
    </ul>
</div>

这一切都有效,除了一件事。每当打开下拉菜单时,它都会使页面出现水平滚动条。参考下面的截图(注意图像底部的水平滚动条):

解决这个问题的最“官方”方法是什么?

编辑:


添加小提琴:https://jsfiddle.net/aav5f25g/3/

【问题讨论】:

  • 如果有,请提供 CSS 和 JavaScript。
  • 标准引导程序的 CSS。除了我使用这个主题之外没有任何修改:bootswatch.com/yeti
  • 刚检查没有这个主题,同样的事情。
  • 添加小提琴:jsfiddle.net/aav5f25g/3

标签: html css twitter-bootstrap


【解决方案1】:

你可以试试这个吗?

<div class="dropdown">
    <button class="btn btn-sm dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">
        <span class="glyphicon glyphicon-menu-hamburger"></span>
    </button>
    <ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="menu1">
        <li role="presentation"><a role="menuitem" href="#">HTML</a></li>
        <li role="presentation"><a role="menuitem" href="#">CSS</a></li>
        <li role="presentation"><a role="menuitem" href="#">JavaScript</a></li>
        <li role="presentation" class="divider"></li>
        <li role="presentation"><a role="menuitem" href="#">About Us</a></li>
    </ul>
</div>

我将dropdown-menu-right 添加到dropdown-menu

如果您使用的是旧版本,您可能会发现 pull-right 有效。

【讨论】:

  • 是的,这行得通。然而并不理想,因为即使有足够的空间使其与左边框对齐,它也会在右边框对齐整个菜单。我会等待其他答案,如果有的话,然后选择一个答案。
  • 我认为,如果您在 jsfiddle 中提供代码会更好。因为没有你的css和js。我们找不到问题。或者你可以托管你的页面然后分享。
  • 我不确定你所说的有足够的空间是什么意思,在原始屏幕截图中它消失了。您的意思是文本有足够的空间,但是填充导致了它?如果是这样,我建议专门针对菜单并覆盖宽度或类似内容以使其更小。尽管老实说,我不确定在屏幕右侧对齐菜单以使其向内显示会为您带来什么好处
  • @DanielEdwards 感觉更像是我习惯的。下拉菜单通常在左侧对齐。没有额外的东西。关于“足够的空间”,我的意思是,如果你在这个小提琴中将#table 宽度减少到 50%:jsfiddle.net/aav5f25g/3 桌子为 50%,它看起来正是我想要的,而桌子的宽度为 95%,我想要它看看你的解决方案:)
  • 选择正确答案,因为丹尼尔是第一个回答的。其他人提供了类似的解决方案。
【解决方案2】:

您可以将您的代码包装在 -

中,使用类“navbar-right”。 创建了一个快速演示。您可以检查以下内容:

.wrapper {
  max-width: 95%;
  margin: 0 auto;
  padding: 10px 15px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="wrapper">

<div class="navbar-right">
  
<div class="dropdown">
    <button class="btn btn-sm dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">
        <span class="glyphicon glyphicon-menu-hamburger"></span>
    </button>
    <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
        <li role="presentation"><a role="menuitem" href="#">HTML</a></li>
        <li role="presentation"><a role="menuitem" href="#">CSS</a></li>
        <li role="presentation"><a role="menuitem" href="#">JavaScript</a></li>
        <li role="presentation" class="divider"></li>
        <li role="presentation"><a role="menuitem" href="#">About Us</a></li>
    </ul>
</div>
  
</div>
  
</div>

请全页打开演示。

更新 #2

检查修改过的小提琴 - https://jsfiddle.net/g03ta3rb/

【讨论】:

  • 是的,这在整页预览中看起来是正确的。但是,每当我修改现有代码 (jsfiddle.net/aav5f25g) 时,它都不会以这种方式工作。
  • 谢谢,但滚动条仍然出现。顺便说一句,我已经将我原来的小提琴更新为更接近真实场景的东西。
  • 更新了你的小提琴。请检查-https://jsfiddle.net/aav5f25g/6/
  • 是的,这行得通。但与@DanielEdwards 解决方案具有相同的限制。
【解决方案3】:

所以这是另一个答案:https://jsfiddle.net/xpkh0qyu/

祝你好运

HTML

    <div id="container">
      <table id="table" class="custom-class">
        <!-- NEW CLASS ADDED -->
        <tr>
          <td></td>
          <td>
            <div class="dropdown">
              <button class="btn btn-sm dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">
                <span class="glyphicon glyphicon-menu-hamburger"></span>
              </button>
              <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
                <li role="presentation"><a role="menuitem" href="#">HTML</a></li>
                <li role="presentation"><a role="menuitem" href="#">CSS</a></li>
                <li role="presentation"><a role="menuitem" href="#">JavaScript</a></li>
                <li role="presentation" class="divider"></li>
                <li role="presentation"><a role="menuitem" href="#">About Us</a></li>
              </ul>
            </div>
          </td>
        </tr>
      </table>

    </div>

CSS

      #container {
        width: 400px;
        height: 300px;
        background-color: #ccc;
        overflow: auto;
      }

      #table {
        border: 1px solid #ddd;
        width: 380px;
      }

      #table td:last-child {
        width: 1%;
      }


      /** NEW CODE ADDED **/

      .custom-class .dropdown-menu {
        right: 0;
        left: initial !important;
      }


      /** NEW CODE ADDED END **/

【讨论】:

  • 当您可以通过添加 Bootstrap 附带的一个类来实现相同的目的时,您已经将整个标题包装在一个表格中......
  • 我添加了新类,因为我需要在“下拉菜单”类中进行一些更改。如果我在核心文件中执行此操作,它将影响每个地方。所以我添加了新类来指定 CSS。我也添加了新的 CSS。此外,我在 @aleksandrmakov 中进行了更改,他在 jsfiddle 中提供的内容。
  • 对不起,也许我不清楚,您的解决方案基本上只是复制了引导程序已经提供的解决方案。 dropdown-menu-right 添加了 right: 0left: auto。当它提供一个自定义类时,不需要创建一个自定义类。
猜你喜欢
  • 2018-08-02
  • 1970-01-01
  • 2015-09-26
  • 2020-03-27
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
相关资源
最近更新 更多