如何忽略Bootstrap按钮组中的隐藏元素?

时间:2015-01-28 08:21:16

标签: css twitter-bootstrap

我有一个包含10个按钮的按钮组。在某些屏幕宽度(响应)下,我使用媒体查询隐藏其中一些按钮。

问题是,如果我隐藏最后一个按钮,新的最后一个按钮的边缘不会变圆。

这是一个难以描述的问题,但很容易在Fiddle中显示。

我的问题:如何将圆角添加到按钮组中的最后一个可见按钮,而不是简单地将最后一个按钮添加到当前。

根据SO的规则,来自Fiddle的代码:

<div class="btn-group" id="sortBtns" role="group">
    <button type="button" class="btn btn-default">First</button>
    <button type="button" class="btn btn-default">Second</button>
    <button type="button" class="btn btn-default">Third</button>
    <button type="button" class="btn btn-default">Fourth</button>
    <button type="button" class="btn btn-default">Fifth</button>
    <button type="button" class="btn btn-default">Sixth</button>
</div>

<div class="btn-group" id="sortBtns" role="group">
    <button type="button" class="btn btn-default">First</button>
    <button type="button" class="btn btn-default">Second</button>
    <button type="button" class="btn btn-default">Third</button>
    <button type="button" class="btn btn-default">Fourth</button>
    <button type="button" class="btn btn-default">Fifth</button>
    <button type="button" class="btn btn-default" style="display:none;">Sixth</button>
</div>

请注意第二个按钮组中“第五个”缺少圆角。

我可以通过向最后一个可见元素添加一个新类来使用JavaScript来实现这一点,但我宁愿不这样做。是否有更简洁的CSS解决方案?

3 个答案:

答案 0 :(得分:3)

如果您不介意添加依赖项,我建议使用AngularJS'ng-if。它派上了用场when using css selectors that rely on an element's position within the DOM, such as the :first-child or :last-child pseudo-classes。它将从DOM中删除元素,并允许您实现目标。

答案 1 :(得分:0)

一种选择是简单地复制代码,并将hidden-xs类添加到第一个代码块,将visible-xs添加到另一个代码块。

像这样:

<div class="btn-group hidden-xs" id="sortBtns" role="group">
    <button type="button" class="btn btn-default">First</button>
    <button type="button" class="btn btn-default">Second</button>
    <button type="button" class="btn btn-default">Third</button>
    <button type="button" class="btn btn-default">Fourth</button>
    <button type="button" class="btn btn-default">Fifth</button>
    <button type="button" class="btn btn-default">Sixth</button>
</div>

<div class="btn-group visible-xs" id="sortBtns2" role="group">
    <button type="button" class="btn btn-default">First</button>
    <button type="button" class="btn btn-default">Fifth</button>
    <button type="button" class="btn btn-default">Sixth</button>
</div>

另一个选择是将css规则应用于edgy元素:

  .edgy-right-element {
      border-top-left-radius: 0;
      border-bottom-left-radius: 0;
      border-top-right-radius: 4px;
      border-bottom-right-radius: 4px;
  }

答案 2 :(得分:0)

这是使用jQuery的解决方案:

$('.btn-group').has('.btn:hidden').find('.btn').css('border-radius', 0);
$('.btn-group').has('.btn:hidden').find('.btn:visible:first').css({
    'border-top-left-radius': '3px',
    'border-bottom-left-radius': '3px',
});
$('.btn-group').has('.btn:hidden').find('.btn:visible:last').css({
    'border-top-right-radius': '3px',
    'border-bottom-right-radius': '3px',
});

对于每个带有隐藏按钮的按钮组,这将删除其中所有按钮的边框半径,然后为第一个和最后一个可见按钮添加边框半径。

OP's Fiddle with solution