28

所以这就是 bootstrap 的导航栏表单的样子。

默认的 HTML 是:

<form class="navbar-form navbar-left" role="search">
  <div class="form-group">
    <input type="text" class="form-control" placeholder="Search for awesome stuff">
  </div>
  <button type="submit" class="btn btn-default">Search</button>
</form>

但我想像input-group. 但是,当我尝试将 input 和 button 包裹在 周围时input-group,它最终占据了整个宽度:

在此处输入图像描述

HTML:

<form class="navbar-form navbar-left" role="search">
  <div class="input-group">
    <input type="text" class="form-control" placeholder="Search for awesome stuff">
    <span class="input-group-btn"><button type="submit" class="btn btn-default">Search</button></span>
  </div>
</form>

我已经阅读了一些解决方案,但我想避免使用style: "width: 200px;"

有什么解决办法吗?提前非常感谢。

4

4 回答 4

22

我想到了一种最小的方法来解决这个问题,而无需修改 Bootstrap 文档中使用的导航栏表单的默认结构。

navbar-input-group向表单添加类

<form class="navbar-form navbar-left navbar-input-group" role="search">
  <div class="form-group">
    <input type="text" class="form-control" placeholder="Search for awesome stuff">
  </div>
  <button type="submit" class="btn btn-default">Search</button>
</form>

CSS(如有必要,放置在媒体查询中):

.navbar-input-group {
  font-size: 0px; /*removes whitespace between button and input*/
}

.navbar-input-group input {
  border-top-right-radius: 0px;
  border-bottom-right-radius: 0px;
}
.navbar-input-group .btn {
  border-top-left-radius: 0px;
  border-bottom-left-radius: 0px;
  border-left: 0px;
}

或 SCSS(保持响应完好):

@import "bootstrap-variables";

.navbar-input-group {
  @media (min-width: $screen-sm) {
    font-size: 0px; /*removes whitespace between button and input*/

    input {
      border-top-right-radius: 0px;
      border-bottom-right-radius: 0px;
    }
    .btn {
      border-top-left-radius: 0px;
      border-bottom-left-radius: 0px;
      border-left: 0px;
    }
  }
  @media (max-width: $screen-xs-max) {
    margin-top:0px;
    margin-bottom:0px;

    .btn {
      width:100%;
    }
  }
}

结果:

在此处输入图像描述

为清楚起见,我的目标是 CSS 中的后代元素。这不是定位 CSS 元素的最有效方式。如果您喜欢这个答案,请考虑为输入和按钮提供唯一的类名称,并在您的 CSS 中不使用任何后代选择器来定位它们(​​阅读:http ://csswizardry.com/2011/09/writing-efficient-css-selectors/ )

于 2013-11-10T18:40:40.693 回答
13

您的解决方案占据了整个宽度,这是一件好事。现在使用嵌套的行和列来定义您实际希望该搜索栏占用多少空间。

<div class="row">
    <div class="col-md-3">
        <form class="navbar-form navbar-left" role="search">
         <div class="input-group">
            <input type="text" class="form-control" placeholder="Search for awesome stuff">
            <span class="input-group-btn"><button type="submit" class="btn btn-default">Search</button></span>
          </div>
        </form>
    </div>
</div>
于 2013-11-10T18:13:40.560 回答
3

编辑:我没有注意到 OP 没有在 css 中手动设置宽度的情况下要求解决方案。不过,如果您不介意最大宽度,我认为这是一个不错的选择。它只为高分辨率设置最大宽度,因此您可以在平板电脑和移动设备上保持正常行为。

1) 在 div.input-group 上添加导航栏搜索框:

<form class="navbar-form navbar-left" role="search">
  <div class="input-group navbar-searchbox">
    <input type="text" class="form-control">
    <div class="input-group-btn">
      <button type="submit" class="btn btn-default">Search</button>
    </div>
  </div>
</form>

2)把它放在你的 .lass 文件中。

@media (min-width: @screen-sm-min) {
  .navbar-searchbox {
    max-width: 250px;
  }
}

3)在房间里跳来跳去喊胜利!

不需要使用行,是的,这就是您需要的所有 CSS。刚刚好,试试看。

于 2014-05-09T21:06:44.147 回答
0

我更喜欢将表单元素视为正常元素,并使用以下 CSS 规则修复其外观:

.navbar-form .input-group {
    display: inline-block;
    width: auto;
    vertical-align: middle;

    .form-control,
    .input-group-btn {
        float: left;
    }
}
于 2014-01-31T14:37:16.653 回答