【问题标题】:Bootstrap4 Dropdown menu fill input-groupBootstrap4 下拉菜单填充输入组
【发布时间】:2018-09-19 19:07:18
【问题描述】:

我想解决一个非常简单的引导程序问题。

根据指南 (https://getbootstrap.com/docs/4.0/components/dropdowns/),.dropdown-menu 类和下拉切换必须包含在 .dropdown 或另一个声明 position: relative; 的元素中。

但到目前为止,只有将.dropdown-menu 放在与我的切换开关相同的级别,我才能让它工作。因此,我只能像这样在右上角获得一个小下拉菜单。

但是,如果我将整个.dropdown-menu div 块向下移动两级(在.input-group .dropdown div 块内),我会达到这样的效果......

...这正是我想要的,但是,在控制台上,bootstrap/popper 会弹出一个错误,告诉我Cannot read property 'setAttribute' of undefined,并且下拉菜单将不再缩回,这就是我所在的位置卡住了。

我在底部包含了一个工作代码示例(第一张图片)供您尝试,如果我使用的下拉类有误,请告诉我?

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<div class="container">
  <div class="row">
    <div class="col-12">
      <div class="input-group dropdown">
        <input type="text" class="form-control" id="project_search" placeholder="search ...">
        <div class="input-group-append">
          <div class="btn-group">
            <button class="btn bg-primary text-white" type="button">Search</button>
            <button class="btn bg-primary text-white dropdown-toggle dropdown-toggle-split" id="searchAdvancedFilter" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
              <span class="caret"></span>
              <span class="sr-only">Toggle Dropdown</span>
            </button>
            <div class="dropdown-menu dropdown-menu-right w-100" aria-labelledby="searchAdvancedFilter">
              <h6 class="dropdown-header">Advanced Settings</h6>
              <div class="dropdown-divider"></div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

我已经找到了解决问题的方法,但是我遇到了另一个问题,首先,这是代码。

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<div class="container">
  <div class="row">
    <div class="col-12">
      <div class="input-group dropdown">
        <input type="text" class="form-control" id="project_search" placeholder="search ...">
        <button class="btn bg-primary text-white" type="button">Search</button>
        <button class="btn bg-primary text-white dropdown-toggle dropdown-toggle-split" id="searchAdvancedFilter" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          <span class="caret"></span>
          <span class="sr-only">Toggle Dropdown</span>
        </button>
        <div class="dropdown-menu dropdown-menu-right w-100" aria-labelledby="searchAdvancedFilter">
          <h6 class="dropdown-header">Advanced Settings</h6>
          <div class="dropdown-divider"></div>
        </div>
      </div>
    </div>
  </div>
</div>

我所做的是我已经删除了.input-group-append div 和.btn-group div,并将我的.dropdown-menu 放在.dropdown 的正下方,并且将切换开关置于与菜单相同的级别。一切正常...期待.input-group / .btn-group 样式现在被毁了。

如果不手动使用 CSS 类来覆盖它们,我的类结构与以前的版本有什么问题导致它无法实现我想要实现的功能吗?

【问题讨论】:

    标签: css drop-down-menu bootstrap-4 dropdown popper.js


    【解决方案1】:

    使包含btn-group position:static 像这样...

    https://www.codeply.com/go/6kJ3E53PuF

    <div class="container">
      <div class="row">
        <div class="col-12">
          <div class="input-group dropdown">
            <input type="text" class="form-control" id="project_search" placeholder="search ...">
            <div class="input-group-append">
              <div class="btn-group position-static">
                <button class="btn bg-primary text-white" type="button">Search</button>
                <button class="btn bg-primary text-white dropdown-toggle dropdown-toggle-split" id="searchAdvancedFilter" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                  <span class="caret"></span>
                  <span class="sr-only">Toggle Dropdown</span>
                </button>
                <div class="dropdown-menu dropdown-menu-right w-100" aria-labelledby="searchAdvancedFilter">
                  <h6 class="dropdown-header">Advanced Settings</h6>
                  <div class="dropdown-divider"></div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    

    工作原理:

    Bootstrap 4 中的dropdown-menuposition:absolute,默认情况下,btn-groupposition:relativeposition:relative 容器内的 position:absolute 元素将相对于容器调整大小。但是,当 position:absolute 元素放置在 position:static 容器内时,它将不再相对于容器调整大小。这允许dropdown-menu 调整dropdown 的全宽。 See this example of absolute inside relative vs. static.

    【讨论】:

    • 介意解释一下为什么使用.position-static,以及这个类在你放置它的地方是如何工作的?
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多