【问题标题】:Search bar going outside of dropdown in boostrap collapse搜索栏在引导折叠中超出下拉菜单
【发布时间】:2019-02-13 18:52:36
【问题描述】:

我实际上有两个问题需要帮助:

  1. 由于某种原因,小屏幕上的搜索栏从导航栏折叠中退出,我不知道为什么。

  2. Awesomplete.js 或 CSS 似乎覆盖了搜索栏的宽度并将其推到左侧我也不确定为什么。

如果有人想尝试一下,这里是 jsfiddle:https://jsfiddle.net/x4vusam1/

    .bg-steel {
  /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#09c6f9+0,045de9+100 */
  /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#1e3b70+0,29539b+100 */
  background: purple;
}

.navbar-brand {
  color: white !important;
}

.btn {
  background-color: transparent !important;
}

.navbar-collapse {
  position: relative;
  padding-top: 20px !important;
  max-height: 400px;
}

.navbar-collapse form[role="search"] {
  position: absolute;
  right: 0;
  padding: 0;
  margin: 0;
  z-index: 9;
}

.navbar-collapse form[role="search"] button,
.navbar-collapse form[role="search"] input {
  padding: 8px 12px;
  border-width: 0;
  box-shadow: none;
  outline: none;
}

.navbar-collapse form[role="search"] input {
  padding: 16px 12px;
  font-size: 14pt;
  font-style: italic;
  color: rgb(160, 160, 160);
  box-shadow: none;
}

.navbar-collapse form[role="search"] button[type="reset"] {
  display: none;
}

@media (min-width: 768px) {
  .navbar-collapse {
    padding-top: 0 !important;
    padding-right: 38px !important;
  }
  .navbar-collapse form[role="search"] {
    width: 38px;
  }
  .navbar-collapse form[role="search"] input {
    font-size: 15pt;
    opacity: 0;
    display: none;
  }
  .navbar-collapse form[role="search"].active {
    width: 100% !important;
  }
  .navbar-collapse form[role="search"].active button,
  .navbar-collapse form[role="search"].active input {
    display: table-cell;
    opacity: 1;
  }
}




.awesomplete [hidden] {
    display: none;
}

.awesomplete .visually-hidden {
    position: absolute;
    clip: rect(0, 0, 0, 0);
}

.awesomplete {
    display: inline-block;
    position: relative;
}

.awesomplete > input {
    display: block;
}  

【问题讨论】:

    标签: jquery html css flexbox bootstrap-4


    【解决方案1】:

    所以我对你的代码做了以下操作:

    1. 您不需要在.navbar-collapse form[role="search"] 上的position: absolute 将其放置导航栏的右侧 - 而是使用justify-content-end#navbarTogglerDemo02 元素.
    2. 还将justify-content-end 类添加到input-group放置右侧的搜索栏。

    见下面的演示和updated fiddle:

    $(function() {
      $('body, .navbar-collapse form[role="search"] button[type="reset"]').on('click keyup', function(event) {
        //console.log(event.currentTarget);
        if (event.which === 27 && $('.navbar-collapse form[role="search"]').hasClass('active') ||
          $(event.currentTarget).attr('type') === 'reset') {
          closeSearch();
        }
      });
    
      function closeSearch() {
        let $form = $('.navbar-collapse form[role="search"].active');
        $form.find('input').val('');
        $form.removeClass('active');
      }
    
      $(document).on('click', '.navbar-collapse form[role="search"]:not(.active) button[type="submit"]', function(event) {
        event.preventDefault();
        let $form = $(this).closest('form'),
          $input = $form.find('input');
        $form.addClass('active');
        $input.focus();
    
      });
    });
    
    var aweInput = new Awesomplete(search);
    search.addEventListener('awesomplete-select', function(e) {
      var url = e.text.value; // The value associated with the selection
      // Some optional actions:
      e.preventDefault(); // Prevent the URL from appearing in the input box
      e.target.value = e.text.label; // Set the value to the selected label
      aweInput.close(); // close the drop-down
      window.location.href = url;
    });
    .bg-steel {
      /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#09c6f9+0,045de9+100 */
      /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#1e3b70+0,29539b+100 */
      background: purple;
    }
    
    .navbar-brand {
      color: white !important;
    }
    
    .btn {
      background-color: transparent !important;
    }
    
    .navbar-collapse {
      position: relative;
      padding-top: 20px !important;
      max-height: 400px;
    }
    
    .navbar-collapse form[role="search"] {
      /* position: absolute; */
      right: 0;
      padding: 0;
      margin: 0;
      z-index: 9;
    }
    
    .navbar-collapse form[role="search"] button,
    .navbar-collapse form[role="search"] input {
      padding: 8px 12px;
      border-width: 0;
      box-shadow: none;
      outline: none;
    }
    
    .navbar-collapse form[role="search"] input {
      padding: 16px 12px;
      font-size: 14pt;
      font-style: italic;
      color: rgb(160, 160, 160);
      box-shadow: none;
    }
    
    .navbar-collapse form[role="search"] button[type="reset"] {
      display: none;
    }
    
    @media (min-width: 768px) {
      .navbar-collapse {
        padding-top: 0 !important;
        padding-right: 38px !important;
      }
      .navbar-collapse form[role="search"] {
        width: 38px;
      }
      .navbar-collapse form[role="search"] input {
        font-size: 15pt;
        opacity: 0;
        display: none;
      }
      .navbar-collapse form[role="search"].active {
        width: 100% !important;
      }
      .navbar-collapse form[role="search"].active button,
      .navbar-collapse form[role="search"].active input {
        display: table-cell;
        opacity: 1;
      }
    }
    
    .awesomplete [hidden] {
      display: none;
    }
    
    .awesomplete .visually-hidden {
      position: absolute;
      clip: rect(0, 0, 0, 0);
    }
    
    .awesomplete {
      display: inline-block;
      position: relative;
    }
    
    .awesomplete>input {
      display: block;
    }
    <link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.0/css/bootstrap.min.css">
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script type="text/javascript" src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.0/js/bootstrap.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/awesomplete/1.1.4/awesomplete.js"></script>
    
    
    <nav class="navbar fixed-top navbar-light bg-steel navbar-expand-md" role="navigation">
      <div class="container">
        <a class="navbar-brand" href="{% url 'main-home' %}">What's The Update?</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
    
        <div class="collapse navbar-collapse justify-content-end" id="navbarTogglerDemo02"> <!-- ADDED class --> 
          <form class="d-flex" role="search">
            <div class="input-group justify-content-end"> <!-- ADDED class --> 
              <input class="form-control awesomplete" id="search" type="text" list="games" placeholder="Search games..." />
              <datalist id="games">
                            
                            <option value="Google.com">Google</option>
                            <option value="Yahoo.com">Yahoo</option>
                            <option value="Wikipedia.org">Wikipedia</option>
                            <option value="Bing.com">Bing</option>
                            
                        </datalist>
              <div class="input-group-append">
                <button type="reset" class="btn">
                                <span class="far fa-times-circle">
    							<span class="sr-only">Close</span>
                                </span>
                            </button>
              </div>
              <div class="input-group-append">
                <button type="submit" class="btn btn-light">
                                <span class="fas fa-search">
    						    <span class="sr-only">Search</span>
                                </span>
                            </button>
              </div>
            </div>
          </form>
        </div>
      </div>
    </nav>

    【讨论】:

    • 非常感谢。我一直在努力弄清楚为什么会这样。如果你不介意。你知道 awesomeplete.js 为什么或如何控制输入字段的宽度吗?如果您在 jfiddle 上删除 awesomplete.js 源,则输入字段会更改为容器的长度,但是当您重新安装源时,输入字段会缩小。
    • 第一次看 awesomeplete :D
    【解决方案2】:

    class="d-flex"的形式取出你的内容

    // form <form class="d-flex" role="search"> // remove the form
         <div class="input-group">
              // your content
         </div>             
    //  </form>
    

    【讨论】:

      猜你喜欢
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 2015-07-14
      • 2015-10-26
      • 1970-01-01
      相关资源
      最近更新 更多