【问题标题】:Grid do not have margins in bootstrap网格在引导程序中没有边距
【发布时间】:2016-08-22 21:40:32
【问题描述】:

我有一个带有引导程序的简单页面,我想在较小的屏幕上创建一个单行或两行的网格,但我总是得到一些不正确的东西:使用show-grid 选项,请参见屏幕截图 1:

Button 的 div 和 IsDescending 的 div 不会占用所有高度,所以布局看起来很丑。

没有显示网格见截图2:

所有的填充物都不见了,设计比以前更糟糕。

当所有边距正确且一切都很漂亮时,我如何才能实现像 their page 这样的行为?

我现在的标记是:

<div class="row show-grid">
    <div class="col-sm-5">
        <div class="input-group">
            <span class="input-group-addon" id="basic-addon1">Query</span>
            <input asp-for="Query" type="text" class="form-control" placeholder="Query" name="query">
        </div>
    </div>
    <div class="col-sm-5">
        <div class="input-group">
            <span class="input-group-addon">Language</span>
            <select asp-for="Language" asp-items="@Model.Languages" name="language" class="form-control">
                <option disabled>Choose language</option>
            </select>
        </div>
    </div>
    <div class="col-sm-7">
        <div class="col-sm-8">
            <div class="input-group">
                <span class="input-group-addon">Sorting field</span>
                <select asp-for="SortField" asp-items="@Model.SortFields" name="sortField" class="form-control">
                    <option disabled>Choose sorting field</option>
                </select>
            </div>
        </div>
        <div class="col-sm-4">
            <div class="input-group">
                Is Descending: <input asp-for="IsDescending" />
            </div>
        </div>
    </div>
    <div class="col-sm-1">
        <button type="submit" id="searchButton" class="btn btn-default"><i class="fa fa-search fa-fw"></i></button>
    </div>
</div>

【问题讨论】:

  • 小提琴会很有帮助。您不应该在列中嵌套列。
  • 看起来您需要更多行。每行应包含总计不超过 12 的列。很难确切知道您想要什么布局。您能描述一下您希望它的外观吗?
  • @d4rty 抱歉,我不熟悉小提琴。什么是嵌套列:想法是如果两列都可以放在第一行,它们都应该在那里,否则它们都应该放在第二行。
  • 将您的代码发布到 bootply 或 fiddle 或其他东西上,以便可以看到您的代码正在运行。

标签: html css twitter-bootstrap responsive-design


【解决方案1】:

引导规则:

交替使用行和列
行具有负边距以确保列尊重容器宽度。

container
|   row
|   |   column
|   |   |   row
|   |   |   |   column
|   |   |   |   column
|   |   |   row
|   |   |   |   column
|   |   |   |   column
|   |   column

始终在列中包含 col-xs-*
这是为了防止浮动问题。如果你的列应该是 12 宽,不要忽略 col-xs-12

<div class="row">
  <div class="col-xs-12 col-md-6">
      Some stuff
  </div>
</div>

移动优先
从最小的屏幕尺寸开始。从 xs

<div class="row">
  <div class="col-xs-12 col-sm-8 col-md-6 col-lg-4">
      Some stuff
  </div>
</div>

小列用作大列
一个 sm 列也可以作为一个 md 列,如果没有另外指定的话。

<div class="row">
  <div class="col-xs-12 col-sm-6 col-md-6">
      This is the same
  </div>

  <div class="col-xs-12 col-sm-6">
      as this one
  </div>
</div>

最后: 不要设置行和列的样式!
随意添加类来修改它们,但不要以任何方式覆盖它们!

不好的例子:

.row {
  border: 5px solid pink;
  margin: 0 10px;
}

<div class="row">
  <div class="col-xs-12">
    This is a no-go!
  </div>
</div>

好例子

.pink-bordered {
  border: 5px solid pink;
  margin: 0 10px;
}

<div class="row pink-bordered">
  <div class="col-xs-12">
    Totally fine
  </div>
</div>

【讨论】:

  • 这个小指南并不意味着您已经错误地指出了所有要点。这是一个提醒如何改善你的风格和防止问题。如果您有任何问题或改进,请随时发表评论!
【解决方案2】:

连续有 12 列,所以计算... 并放入容器中。

测试一下

https://jsfiddle.net/marcDX/33v44bw0/

    <div class="container">
  <div class="row show-grid">
    <div class="col-sm-6 one">
      <div class="input-group">
        <span class="input-group-addon" id="basic-addon1">Query</span>
        <input asp-for="Query" type="text" class="form-control" placeholder="Query" name="query">
      </div>
    </div>
    <div class="col-sm-6 one">
      <div class="input-group">
        <span class="input-group-addon">Language</span>
        <select asp-for="Language" asp-items="@Model.Languages" name="language" class="form-control">
          <option disabled>Choose language</option>
        </select>
      </div>
    </div>
  </div>
  <div class="row">
    <div class="col-sm-6 one">
      <div class="input-group">
        <span class="input-group-addon">Sorting field</span>
        <select asp-for="SortField" asp-items="@Model.SortFields" name="sortField" class="form-control">
          <option disabled>Choose sorting field</option>
        </select>
      </div>
    </div>
    <div class="col-sm-5 one">
      <div class="input-group">
        Is Descending:
        <input asp-for="IsDescending" />
      </div>
    </div>
    <div class="col-sm-1 one">
      <button type="submit" id="searchButton" class="btn btn-default"><i class="fa fa-search fa-fw"></i></button>
    </div>
  </div>

和 CSS 让小屏幕感到满意

    .one {
  margin-top: 20px;
}

【讨论】:

    【解决方案3】:

    目前,您的结构存在几处问题,因此,了解 Bootstrap 的一些基础知识似乎可以帮助您实现更美观的设计。您应该在每行中添加最多 12 个列。例如:

    <div class="container">
        <div class="row">
            <div class="col-sm-6">
                <!-- left column -->
            </div>
            <div class="col-sm-6">
                <!-- right column -->
            </div>
        </div>
    </div>
    

    如果您想要将这些列进一步划分的元素,您将需要新行,并且这些行的子行也应加起来最多 12(如果您希望右侧有空白区域,则应小于 12)。这可能看起来像这样:

    <div class="container">
        <div class="row">
            <div class="col-sm-6">
    
                <!-- left column -->
                <div class="row"><!-- Nested Row. Children columns add up to 12 -->
                    <div class="col-sm-7">
                        7/12 of the left side
                    </div>
                    <div class="col-sm-5">
                        5/12 of the left side
                    </div>
                </div>
    
            </div>
            <div class="col-sm-6">
                <!-- right column -->
            </div>
        </div>
    </div>
    

    这是最后一个示例,带有背景颜色和可视化的屏幕截图:

    <div class="container">
        <div class="row">
    
            <div class="col-sm-6" style="background-color:gray;">
                <h3>Left Column</h3>
                <div class="row"><!-- Nested Row. Children columns add up to 12 -->
                    <div class="col-sm-7" style="background-color:lightblue;">
                        This is 7/12 of the left side
                    </div>
                    <div class="col-sm-5" style="background-color:lightgreen;">
                        This is 5/12 of the left side
                    </div>
                </div>
            </div>
    
            <div class="col-sm-6" style="background-color:orange;">
                <h3>Right Column</h3>
                <div class="row"><!-- Nested Row. Children columns add up to 12 -->
                    <div class="col-sm-4" style="background-color:lightblue;">
                        This is 4/12 of the right side
                    </div>
                    <div class="col-sm-8" style="background-color:lightgreen;">
                        This is 8/12 of the right side
                    </div>
                </div>
            </div>
    
        </div>
    </div>
    

    希望这将帮助您了解如何构建您的元素。此外,正如您所指出的,默认情况下,行之间没有任何空格,因此您可以使用一些简单的 css 在行之间添加空格,例如

    .row { 
      margin-top: 10px;
      margin-bottom: 20px;
    }
    

    最后一个提示:在使用输入、复选框、选择等时,我总是查看 Bootstrap 文档here 中使用的类和结构。如果不使用正确的类和 DOM 元素结构,事情看起来就不太对劲。 Bootstrap 需要练习,祝你好运!

    【讨论】: