【问题标题】:How to ignore hidden elements in a Bootstrap Button Group?如何忽略引导按钮组中的隐藏元素?
【发布时间】:2015-01-28 08:21:15
【问题描述】:

我有一个包含 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 解决方案?

【问题讨论】:

  • @MartinLiversage 我正在寻找 CSS 解决方案,而不是 JS。
  • 您的问题与我所链接的问题唯一不同的是,您想要一个纯 CSS 的解决方案,而另一个只是要求一个解决方案,并且通过查看提供的答案,它似乎是一个仅 CCS 解决方案是不可能的。我相信其他有类似问题的人可以通过查看这两个问题的答案而受益。对我来说,最好的解决方案是对链接问题的最高评价。
  • @MartinLiversage 如果一个人正在寻找任何解决方案,而另一个人正在寻找仅 CSS 的解决方案,那么两者都是可行的,尤其是当投票最高的答案是 not CSS-only 时。是否可能无关紧要,因为在这种情况下,最好的答案会说不可能以及为什么不可能。

标签: css twitter-bootstrap


【解决方案1】:

如果您不介意添加依赖项,我推荐 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 中删除元素并允许您实现目标。

【讨论】:

  • 我可以很容易地在 vanilla JavaScript 中以很少的开销做到这一点,但我一直在寻找一个纯 CSS 解决方案。不幸的是,看起来并不存在。
【解决方案2】:

这是一个使用 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

【讨论】:

    【解决方案3】:

    一种选择是简单地复制代码并将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-right-element {
          border-top-left-radius: 0;
          border-bottom-left-radius: 0;
          border-top-right-radius: 4px;
          border-bottom-right-radius: 4px;
      }
    

    【讨论】:

    • 这突然出现在脑海中,但感觉不对。我也可以相对容易地使用 JavaScript 根据可见元素添加一个类(也许将类添加到开始和结束按钮),但这又感觉有点不干净
    • @mikemike 添加了另一个选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多