Изменение цвета фона заголовка панели при переключении в группу складных панелей Bootstrap - PullRequest
3 голосов
/ 10 апреля 2020

Я пытаюсь создать группу разборных панелей, используя 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/

Буду признателен за любые предложения.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Используйте .active класс вместо :active псевдокласса, который длится только до тех пор, пока пользователь удерживает нажатой кнопку мыши (или эквивалентное указывающее устройство). Вместо этого укажите целевой родительский элемент .panel-header:

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

CSS был изменен для переопределения .panel-heading с более высокой специфичностью путем удвоения класса:

.panel-heading.panel-heading {...

Некоторые Bootstrap классы не могут быть переопределены каскадным приоритетом, просто удвойте целевой класс, как показано выше - не используйте !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>
0 голосов
/ 10 апреля 2020

Вы можете добавить класс, когда пользователь нажимает на панель. А потом стиль в новый класс. давайте попробуем это.

CSS

.panel.active {background: red}

JS

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