Bootstrap:更改面板标题的颜色onClick

时间:2015-07-10 02:37:36

标签: html css twitter-bootstrap nav collapsable

嗨,我昨晚给自己做了一个自助式速成课程,我很开心。我在网上找到了一个可折叠的面板,它非常适合我希望在导航栏中实现的功能。但是我希望面板标题的背景颜色在展开时更改。我对bootstrap的内部工作方式还不熟悉,但我自己也不熟悉(很快!我希望)。有问题的代码如下:

            <div class="panel-group minmarg" id="accordion">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
                        OPI<b class="caret"></b>
                    </a>
                </h4>
            </div>
            <div id="collapseOne" class="panel-collapse collapse">
                <div class="panel-body minmarg">
                    <ul class="nav nav-pills nav-stacked pill-trngtheme minmarg">
                        <li role="presentation"><a href="#">OPI Main Site</a>
                        </li>
                        <li role="presentation" class="active"><a href="#">Training</a>
                        </li>
                        <li role="presentation"><a href="#">Procedures</a>
                        </li>
                        <li role="presentation"><a href="#">Corrective Action</a>
                        </li>
                        <li role="presentation"><a href="#">Human Performance Improvement</a>
                        </li>
                        <li role="presentation"><a href="#">LEAN Management</a>
                        </li>
                        <li role="presentation"><a href="#">Coduct of Operations</a>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </div>

3 个答案:

答案 0 :(得分:4)

您可以参考document

这里有代码:

$(".collapse").on('shown.bs.collapse',function(){
     // change background when expanded

});
$(".collapse").on('hidden.bs.collapse',function(){
     // change background when hide
});

答案 1 :(得分:2)

Webforwork ,你好。
如何使用toggleclass来改变课程。

CSS

 .panel-clr {
        background-color:greenyellow;
    }     
 .panel-clr.on {
        background-color:dodgerblue;
    }

JS

$( function() {
  $('.panel-clr').click( function() {
      $(this).toggleClass('on');
} )
}); 

希望这会对你有所帮助。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">

    <title>Starter Template for Bootstrap</title>

    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

<style>
body {
  padding-top: 50px;
}
.spacer {
  margin-top: 2%;
  margin-bottom: 2%;
}    
.block {
  height: 440px;
}  

.panel-clr {
    background-color:greenyellow;
} 
    
.panel-clr.on {
    background-color:dodgerblue;
}
  
</style>

</head>

<body>

    <nav class="navbar navbar-inverse navbar-fixed-top ">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand " href="#">Project name</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav navbar-right">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#about">About</a></li>
            <li><a href="#contact">Contact</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

<div class="container col-lg-12 spacer"></div>
<div class="container col-lg-12">

<div class="col-lg-10 col-md-10 col-sm-10 col-xs-10 bg-info block">
         <div class="panel-group minmarg" id="accordion">
        <div class="panel ">
            <div class="panel-heading panel-clr">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
                        OPI<b class="caret"></b>
                    </a>
                </h4>
            </div>
            <div id="collapseOne" class="panel-collapse collapse">
                <div class="panel-body minmarg">
                    <ul class="nav nav-pills nav-stacked pill-trngtheme minmarg">
                        <li role="presentation"><a href="#">OPI Main Site</a>
                        </li>
                        <li role="presentation" class="active"><a href="#">Training</a>
                        </li>
                        <li role="presentation"><a href="#">Procedures</a>
                        </li>
                        <li role="presentation"><a href="#">Corrective Action</a>
                        </li>
                        <li role="presentation"><a href="#">Human Performance Improvement</a>
                        </li>
                        <li role="presentation"><a href="#">LEAN Management</a>
                        </li>
                        <li role="presentation"><a href="#">Coduct of Operations</a>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </div> 
      
</div>
        
    </div><!-- /.container -->


    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    
<script> 
    
$( function() {
  $('.panel-clr').click( function() {
      $(this).toggleClass('on');
} )
});    
</script> 
    
</body>
</html>

答案 2 :(得分:1)

AngularJR答案是正确的但我发现我对css的知识有限以及jQuery不存在的知识有点难以理解。另外,我使用的是反应,因此在渲染DOM元素后对它们进行调整对我来说不是一个好方法。

核心原则

正在发生的基本原则是在html元素中添加了额外的类标记:

所以

<div class="panel-heading">...</div>

变为

<div class="panel-heading on">...</div>

如何添加这些额外的类并不重要,jQuery($)只是一个选项。

现在可以使用css选择器将不同的css规则应用于这两个div:

.panel-heading {
    background-color:greenyellow;
}  

.panel-heading.on {
    background-color:dodgerblue;
}

分别

请注意.panel-heading.on之间没有空格。有关详细信息,请参阅以下堆栈溢出问题:What's the difference between CSS classes .foo.bar (without space) and .foo .bar (with space)

我在使用react

时解决问题

但是,在使用react-bootstrap的情况下,"panel-heading" div由标记<Panel>自动创建,并且<div class="panel-heading">元素在找到之后无法搜索和访问渲染(反应生命周期很奇怪)。因此,不能添加额外的类。

因此需要将额外的类"on"添加到panel-heading div的父元素中:

html(或.jsx):

<div class="on">
    <Panel header="My Title">...STUFF...</Panel>
</div>

导致DOM看起来像这样(略微简化):

<div class="on">
   <div class="panel">
       <div class="panel-heading">
           My Title
       </div>
       <div class="panel-body">
           .....STUFF.....
       </div>
   </div>
</div>

现在有一个带有"on"类的外部div,其中包含"panel-heading" div。

现在可以使用以下选择器在css中设置面板标题div的样式:

.panel-heading {
    background-color:greenyellow;
}  

.on .panel-heading {
    background-color:dodgerblue;
}

注意.on选择器现在如何在.panel-heading选择器之前,两个选择器之间还有一个空格;这是因为具有.on类的元素现在是具有.panel-heading类的元素的祖先。

注意:将额外的"on"类直接添加到<Panel>而不是将该面板包含在额外的div中也会有类似的效果。

现在,“onClick”处理程序可以更改父元素的类以影响面板标题的样式,这比在DOM中搜索正确的"panel-heading div"(恕我直言)要容易得多。至关重要的是,在我使用react的情况下,可以在调用render例程时直接为元素指定此"on"类。