嗨,我昨晚给自己做了一个自助式速成课程,我很开心。我在网上找到了一个可折叠的面板,它非常适合我希望在导航栏中实现的功能。但是我希望面板标题的背景颜色在展开时更改。我对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>
答案 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-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"
类。