【问题标题】:Verticaly align a group of buttons between two stacked selects in Bootstrap 3在 Bootstrap 3 中的两个堆叠选择之间垂直对齐一组按钮
【发布时间】:2014-09-27 07:32:15
【问题描述】:

我正在使用 Bootstrap 3 模式实现角色权限分配屏幕。 Please, see a demo of current state 全屏显示,因此选择不会堆叠在彼此下方,而是在一边对齐。如您所见,现在按钮粘在顶部,但我想将它们放在模态中心的一个列中:

代码很琐碎,详情check plunkr

<div class="modal-header">
  <h3 class="modal-title">Role permissions</h3>
</div>
<div class="modal-body">
  <div class="row">
    <div class="col-md-5 form-group">
      <label for="availablePermission">
        Available permissions
      </label>
      <select id="availablePermission" class="form-control" size="14">
        <optgroup label="General">
          <option value="0">Change password</option>
          ...
        </optgroup>
      </select>
    </div>
    <div class="col-md-2">
      <button class="btn btn-primary">
        <i class="fa fa-fw fa-angle-right"></i>
      </button>
      <button class="btn btn-primary">
        <i class="fa fa-fw fa-angle-left"></i>
      </button>
    </div>
    <div class="col-md-5 form-group">
      <label for="existingPermission">
        Assigned permissions
      </label>
      <select id="existingPermission" class="form-control" size="14">
        <optgroup label="General">
          <option value="1">View users</option>
          ...
        </optgroup>
      </select>
    </div>
  </div>
</div>
<div class="modal-footer">
  <button class="btn btn-primary">OK</button>
  <button class="btn btn-warning">Cancel</button>
</div>

我已经尝试使用带有display: flexflex-direction: column 的中间列的flexbox,但是按钮没有移动一个像素。 display: table-cellvertical-align: middle 也不起作用。是否可以在不使用硬编码尺寸的情况下将它们漂亮地居中?

【问题讨论】:

  • 这篇文章有什么价值吗? davidwalsh.name/css-vertical-center
  • 我知道我可以为按钮包装器指定固定高度并使用负边距,但为什么 flexbox 不起作用?我认为这是一种现代的垂直对齐方式......

标签: css twitter-bootstrap-3 vertical-alignment


【解决方案1】:

设法让它与 flexbox 一起工作,虽然失去了一点适应性:尝试改变宽度 - 选择现在不会垂直堆叠:(添加一个@media 查询(类似于那个对于 Bootstrap 的 *-md) 将解决此问题。

  @media (min-width: 992px) {
    .flex-row {
      display: flex; 
    }
  }

  .flex-col {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    align-content: center;
    justify-content: center;
  }

Plunkr

【讨论】:

  • 非常感谢你付出的无价努力,Aiwan,但我已经设法让它与 flexbox 一起工作了。
【解决方案2】:

由于您可能知道 2 个按钮的高度,您可以这样做:

position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
width: THEWIDTHpx;
height: THEHEIGHTpx;

您还需要将position: relative; 放在行中。这将使带有 2 个按钮的框完美地位于行的中间。

如果您使用浮动将 div 彼此相邻放置,请确保该行有一个 clearfix。

【讨论】:

  • 感谢您的回复,Zenorbi!从来没有想过花车。我看到引导程序使用它们。它有什么问题?
  • 如果不清除行,行的高度将为 0,因为浮动不参与容器布局。因为它的高度为 0,所以相对于行的绝对定位会产生不需要的结果。
  • 但实际上我不知道按钮块的高度。以后可能会有三个,或者四个。
  • 我可以强制第二列的高度与第三列和第一列的高度相同吗?也许那时 flexbox 会起作用?我注意到第二列只包含内容,而不是跨越整个可用高度。
  • 在这种情况下,这会有点困难。有一种方法可以在 IE9+ 中使用 top: 50%;左:50%;变换:translateX(-50%) translateY(-50%);没有宽度、高度、右边、底部和边距,但如果你需要 IE8,你需要 inline-block hack:codepen.io/GuillaumeGautier/pen/mIwhu
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 2014-02-12
  • 1970-01-01
  • 2019-01-28
  • 2013-11-18
  • 2017-07-15
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多