如何覆盖 Boostrap 的导航栏内联搜索栏宽度?

How to overwrite Boostrap's nav bar inline search bar width?

我正在尝试使导航栏中的搜索栏从 Bootstrap 开始变得更长。

我正在使用 Bootstrap site 中的这个示例,但我希望搜索栏足够长,以便它可以显示占位符。尽管如此,我似乎还是找不到让它变长的方法。

我是 HTML/CSS/JS/Bootstrap 的新手,所以如果您能向我解释如何实现该目标以及该解决方案的工作原理,我将不胜感激。谢谢!:D

参考图片:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</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" id="navbarTogglerDemo02">
    <ul class="navbar-nav mr-auto mt-2 mt-lg-0">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <input class="form-control mr-sm-2" type="search" placeholder="This is a quite long placeholder">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>

一种可能的解决方案是在输入中添加一个 class,在这种情况下(大输入):

<input class="form-control mr-sm-2 large-input" type="search" placeholder="This is a quite long placeholder">

并且使用CSS,您可以添加一个最小宽度属性:

.large-input{
  min-width: 300px; /*You can add the size you want here*/
}

有很多方法可以做到这一点。这是我看到的第一个。

  1. 从列表元素中删除 mr-auto(右边距:自动)class。那一直把input往右推,但是这里就麻烦了
  2. 在输入中添加ml-auto。这会将输入推到右边而不会引起其他问题。
  3. flex-fill 添加到表单和输入中以使其拉伸。
  4. 为输入的自定义最大宽度添加自定义 class。可选择将其包装在媒体查询中,以使其在移动设备上全宽。

Bootstrap Flex

@media (min-width: 992px) {
  .header-search-input {
    max-width: 400px;
  }
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</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" id="navbarTogglerDemo02">
    <ul class="navbar-nav mt-2 mt-lg-0">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>

    <form class="form-inline my-2 my-lg-0 flex-fill">
      <input class="form-control mr-sm-2 ml-auto flex-fill header-search-input" type="search" placeholder="This is a quite long placeholder">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>