在 Bootstrap 可折叠面板组中切换时更改面板标题的背景颜色

Change background colour of panel heading when toggled in Bootstrap collapsible panel group

我正在尝试使用 Bootstrap 创建一个可折叠面板组,我希望面板组未折叠时面板标题更改背景颜色(一种颜色用于折叠面板组,一种用于展开).我试过使用 :active 选择器,但这只会在单击时改变颜色,它不会持续更长时间:

 <div class="panel-group">
  <div class="panel panel-default">
    <div class="panel-heading">
      <a data-toggle="collapse" class="panel-title" href="#collapse1">Title</a>
    </div>
    <div id="collapse1" class="panel-collapse collapse">
      <ul class="list-group">
        <li class="list-group-item">item 1</li>
        <li class="list-group-item">item 2</li>
      </ul> 
    </div>
  </div>
</div>
.panel-heading a:active {
  background: red;
}

https://jsfiddle.net/s625dgty/

如有任何建议,我将不胜感激。

您可以在用户单击面板时添加 class。然后样式为 new class。让我们试试这个。

CSS

.panel.active {background: red}

JS

$('.panel').on('click', function(){
    $(this).toggleClass('active')    
})

使用 .active class 而不是 :active 伪 class 伪 class 只有在用户按下鼠标按钮(或等效的指点设备)时才会持续.将 link 的父级 .panel-header 作为目标:

$('.panel-heading').on('click', function(e) {
  $(this).toggleClass('active');
});

CSS 已修改为通过将 class:

加倍来以更高的特异性覆盖 .panel-heading
.panel-heading.panel-heading {...

有些Bootstrap class无法通过级联优先级覆盖,如上所示在目标class上加倍 - 不要使用!important

此外,将 <link> 放在 <head> 中。将 <script> 放在结束 </body> 标记之前。请参阅演示。


演示

.panel-heading.panel-heading.active {
  background: red;
}

.panel-title {
  display: inline-block;
  width: 100%;
}

.panel-heading.panel-heading.active .panel-title {
  color: white;
  font-weight: 900;
}
<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
</head>

<body>
  <div class="panel-group">
    <div class="panel panel-default">
      <div class="panel-heading">
        <a data-toggle="collapse" class="panel-title" href="#collapse1">Title</a>
      </div>
      <div id="collapse1" class="panel-collapse collapse">
        <ul class="list-group">
          <li class="list-group-item">item 1</li>
          <li class="list-group-item">item 2</li>
        </ul>
      </div>
    </div>
  </div>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
  <script>
    $('.panel-heading').on('click', function(e) {
      $(this).toggleClass('active');
    });
  </script>
</body>

</html>