【问题标题】:Need help in aligning items together in Bootstrap grid layout在 Bootstrap 网格布局中对齐项目时需要帮助
【发布时间】:2015-10-05 21:56:19
【问题描述】:

我正在尝试在网格布局中对齐 7 个项目,以便每个元素都固定在它的位置,目前我能够实现如下图所示。这是相同代码的plunker(但有些在 plunker 上看起来不太好)。

我当前状态的问题是 minutes 被包装到第二行。另外,我如何利用 Agent: 标签区域和 Reset 按钮区域的额外空间,以便利用空间?

代码

<div class="row">
    <div class="col-md-1" style="padding-right:0px; padding-left:0px; margin-top:5px">
        <div ng-show="!loadinga">
            <b>Agent: </b>
        </div>
    </div>
    <div class="col-md-2" style="padding-left:0px;">
        <div class="dropdown " ng-show="!loadinga">
            <button class="btn btn-default btn-block dropdown-toggle whiteDropdown" ng-disabled="loading" style="background-color: #fff; border-color: #C3C3C3" type="button" id="dropdownMenu1" aria-expanded="true">
                {{dropDownTitle}}
                <span class="caret"></span>
            </button>
            <ul class="dropdown-menu scroll-menu nav" role="menu" aria-labelledby="dropdownMenu1">
                <li ng-repeat="agent in agentListData">
                    <a role="menuitem" href="#" ng-click="">{{agent}}</a>
                </li>
            </ul>
        </div>
    </div>
    <div class="col-md-2" style="padding-left:0px;">
        <div class="dropdown " ng-show="!loadinga">
            <button class="btn btn-default btn-block dropdown-toggle whiteDropdown" ng-disabled="loading" type="button" id="dropdownMenu2" aria-expanded="true">
                {{dropDownAllTaskStatusTitle}}
                <span class="caret"></span>
            </button>
            <ul class="dropdown-menu scroll-menu nav" role="menu" aria-labelledby="dropdownMenu2">
                <li ng-repeat="task in taskStatusListData">
                    <a role="menuitem" href="#" ng-click="">{{task.title}}</a>
                </li>
            </ul>
        </div>
    </div>
    <div class="col-md-2" style="padding-right: 0px; padding-left:0px;">
        <div ng-show="!loadinga">
            <input id="autoComplete" ng-model="selected" typeahead="task.name for task in taskList | filter:$viewValue | limitTo:20" class="form-control" typeahead-on-select="" placeholder="Search Tasks" typeahead-focus-first="true" ng-disabled="loading" type="text" ng-blur="" />
        </div>
    </div>
    <div class="col-md-2 divGridText" ng-show="!loadinga" style="padding-right: 0px; padding-left:0px; margin-right:0px" align="right">
        <input ng-model="isChecked" ng-click="checkboxClicked(isChecked)" ng-disabled="loading" type="checkbox" />
        <label for="excludeMinutesStep" style="font-weight:normal">Exclude tasks running &lt; </label>
        <input id="excludeMinutesStep" min="0" max="10" ng-disabled="!isChecked || loading" ng-model="excludeValue" ng-change="" size="2" style="width:40px" type="number" /> minutes
    </div>
    <div class="col-md-2 divGridText" ng-show="!loadinga" style="padding-right: 0px; padding-left:0px;" align="centr">
        <input id="datalabels" ng-model="isLabelShowChecked" ng-click="" ng-disabled="loading" type="checkbox" />
        <label for="datalabels" style="font-weight:normal;">Show Task Labels</label>
    </div>
    <div class="col-md-1 divGridImage" ng-show="!loadinga" align="center" style="padding-right: 0px; padding-left:0px;">
        <button style="margin-left:3px" class="btn btn-custom" ng-click="">Reset</button>
    </div>
</div>

更新

或者有没有办法保持 Agent: 标签并在同一行下拉而不用单独的 divcol-md-1 类给标签?

需要类似下面的截图

【问题讨论】:

  • 这是全屏吗?还是盒装布局?例如。该导航栏是附加到屏幕左侧的侧边栏吗?

标签: html css angularjs twitter-bootstrap


【解决方案1】:

好吧,我尝试解决这个问题的方法如下,我不会给你同样的正文,因为你可以在previous post.中查看它

Here 是包含您要求的所有部分的完整网格,它的布局也更好。 (它并不像要求的那样对设备真正友好)。

我更新了示例以正常工作

代码:

<head>
  <script data-require="jquery@*" data-semver="2.1.4" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script data-require="angular.js@1.x" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular.js"></script>
  <script data-require="ui-bootstrap@*" data-semver="0.13.0" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.13.0.min.js"></script>
  <link data-require="bootstrap-css@*" data-semver="3.3.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
  <link rel="stylesheet" href="style.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.min.js"></script>
  <script src="script.js"></script>
</head>

<body ng-app="myApp" ng-controller="MainController">
  <div class="container-fluid">
    <div class="row">
      <div class="hidden-xs col-sm-2 sidebar">
        <div class="sidebar-nav" style="height:100% !important;min-height: 100% !important">
            <div class="navbar navbar-custom" role="navigation">
              <ul class="nav recommendation-nav">
                <li class="active">
                  <a href="#/"><img style="padding-right: 5px" /> Side bar</a>
                </li>
                <li >
                  <a href="#/"><img style="padding-right: 5px" />Side bar</a>
                </li>
                <li >
                  <a href="#/"><img style="padding-right: 5px" />Side bar</a>
                </li>
                <li >
                  <a href="#/"><img style="padding-right: 5px"  />Side bar 1</a>
                </li>
                <li >
                  <a href="#/"><img style="padding-right: 5px" />Side bar 2</a>
                </li>
                <li >
                  <a href="#/"><img style="padding-right: 5px"/>Side bar 3</a>
                </li>
              </ul>
            </div>
          </div>
      </div>
      <div class="col-xs-12 col-sm-8 col-sm-offset-1 report-area">
        <div class="panel panel-default">
          <div class="panel-body">
            <div class="row">
              <div class="col-xs-12 col-sm-2">
                <div class="dropdown" ng-show="!loadinga">
                  <button class="btn btn-default btn-block dropdown-toggle whiteDropdown" ng-disabled="loading" style="background-color: #fff; border-color: #C3C3C3" type="button" id="dropdownMenu1" aria-expanded="true">
                    {{dropDownTitle}}
                    <span class="caret"></span>
                  </button>
                  <ul class="dropdown-menu scroll-menu nav" role="menu" aria-labelledby="dropdownMenu1">
                    <li ng-repeat="agent in agentListData">
                      <a role="menuitem" href="#" ng-click="">{{agent}}</a>
                    </li>
                  </ul>
                </div>
              </div>
              <div class="col-xs-12 col-sm-2">
                <div class="dropdown " ng-show="!loadinga">
                  <button class="btn btn-default btn-block dropdown-toggle whiteDropdown" ng-disabled="loading" type="button" id="dropdownMenu2" aria-expanded="true">
                    {{dropDownAllTaskStatusTitle}}
                    <span class="caret"></span>
                  </button>
                  <ul class="dropdown-menu scroll-menu nav" role="menu" aria-labelledby="dropdownMenu2">
                    <li ng-repeat="task in taskStatusListData">
                      <a role="menuitem" href="#" ng-click="">{{task.title}}</a>
                    </li>
                  </ul>
                </div>
              </div>
              <div class="col-xs-12 col-sm-2">
                <div ng-show="!loadinga">
                  <input id="autoComplete" ng-model="selected" typeahead="task.name for task in taskList | filter:$viewValue | limitTo:20" class="form-control" typeahead-on-select="" placeholder="Search Tasks" typeahead-focus-first="true" ng-disabled="loading" type="text"
                  ng-blur="" />
                </div>
              </div>
              <div class="col-xs-12 col-sm-4 divGridText" ng-show="!loadinga">
                <input ng-model="isChecked" ng-click="checkboxClicked(isChecked)" ng-disabled="loading" type="checkbox" />
                <label for="excludeMinutesStep" style="font-weight:normal">Exclude tasks running &lt; </label>
                <input id="excludeMinutesStep" min="0" max="10" ng-disabled="!isChecked || loading" ng-model="excludeValue" ng-change="" size="2" style="width:40px" type="number" /> minutes
              </div>
              <div class="col-xs-12 col-sm-1 divGridText" style="width:9.33%" ng-show="!loadinga" >
                <input id="datalabels" ng-model="isLabelShowChecked" ng-click="" ng-disabled="loading" type="checkbox" />
                <label for="datalabels" style="font-weight:normal;">Task Labels</label>
              </div>
              <div class="col-xs-1 col-sm-1 divGridImage" ng-show="!loadinga">
                <button style="margin-left:3px" class="btn btn-custom" ng-click="">Reset</button>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>

</html>

预览:

【讨论】:

  • 感谢您的解决方案和tagette的解决方案帮助了我。
【解决方案2】:

如果您不需要在其他屏幕尺寸上使用该应用程序,您可以尝试将 Agent: 对齐到其容器的右侧,并将重置按钮对齐到容器的左侧。您可以为该行设置负边距,这将为您的内容提供更多空间。

否则,bootstrap 可以让您将每列细分为 12 个新列,您可以尝试这样的操作:

<div class="row">
   <div class="col-md-6">
      <!-- you can put here the 4 first elements as you like, on a 12 columns layout -->
   </div>
   <div class="col-md-6">
      <!-- you have again a 12 columns layout for the 3 lasts elements -->
   </div>
</div>

查看“两列和两列嵌套列”部分中的http://getbootstrap.com/examples/grid/ 以获得直观示例

【讨论】:

  • 这也是正确的,嵌套列也会给你很好的控制,不幸的是,由于每列内容的大小,所需的内容会输出丑陋的 UI/UX,你需要覆盖使其符合要求的样式。为正确的回答 +1。
  • 谢谢,现在我得到了嵌套列。由于 Zacharia 的回答帮助我解决了同一个问题中的更多问题,因此我将他的回答标记为正确(希望用户可以选择 2 个答案)。
  • 没问题,Zacharia 的解决方案很好,我很高兴能帮上忙。
【解决方案3】:

您的父 div(列)应设置为 0 填充和 0 边距,子元素应具有您想要的任何填充/边距。这可以防止溢出。

例如,如果您有 4 列(每列等于 25% 的宽度)并且即使其中一列的左右填充为 10 像素,那么第 4 列将被推到下一行,因为它们现在是超过 100% 的宽度。

不好的例子:

HTML:

<div class="col-1">
    //content
</div>
<div class="col-2">
    //content
</div>

CSS:

.col-1, .col-2 { width: 50%; display: inline-block; padding-left: 15px }

由于 15px 的 padding-left ,上面的代码将第二列流到下一行,您也可以在自己的代码中使用它。

好例子:

HTML:

<div class="col-1">
    <div class="inner-col-1">
        //content
    </div>
</div>
<div class="col-2">
    <div class="inner-col-2">
        //content
    </div>
</div>

CSS:

.col-1, .col-2 { width: 50%; display: inline-block }
.inner-col-1, .inner-col-2 { padding: 0 15px }

上面的代码将确保您的列在同一行,并且内部内容现在可以使用您想要的任何填充/边距,因为它们不会影响父母的宽度。

【讨论】:

  • 我在 chrome 调试器中检查了父 divs 没有左右填充,但整个元素都占据了列
  • 检查新的编辑,看看是否能解决您的问题。如果他们使用设置的宽度并充当其中子 div 的父级,请确保“好示例”与您的内部内容相同。
  • 好例子是坏例子,因为嵌套存在于 bootstrapcdn 中,它不仅打破了 不要重复自己,我相信 bootstrap 可以更好地处理它..
  • 我向他展示了如何和为什么。该代码没有使用 Bootstrap,而是使用我自己创建的网格系统向他解释出了什么问题以及他如何解决它。
【解决方案4】:

简单但不是很有吸引力的解决方案

<span>minutes</span>

PS:我不确定我是否完全理解了你的问题

【讨论】:

  • 我需要让 1 行上的所有 7 个元素尽可能均匀分布。我还添加了最终结果应该是什么样子的预期屏幕截图。
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
相关资源
最近更新 更多