Bootstrap:更改面板标题的颜色 onClick
Bootstrap: Change Color of Panel Heading onClick
嗨,我昨晚在 bootstrap 给自己上了速成班,我玩得很开心。我在网上找到了一个可折叠面板,它非常适合我希望在导航栏中实现的功能。但是,我希望面板标题的背景颜色在展开时发生变化。我对 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>
可以参考document
这里是你的代码:
$(".collapse").on('shown.bs.collapse',function(){
// change background when expanded
});
$(".collapse").on('hidden.bs.collapse',function(){
// change background when hide
});
Webforwork,您好。
用 toggleclass
.
改变 class 怎么样?
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>
AngularJR 的答案是正确的,但我发现以我对 css 和 non-existent 对 jQuery 的有限了解有点难以理解。另外,我正在使用 React,因此在渲染 DOM 元素后调整它们对我来说不是一个好方法。
核心原则
发生的事情的基本原理是将额外的 class 标记添加到 html 元素:
所以
<div class="panel-heading">...</div>
变成
<div class="panel-heading on">...</div>
如何添加这些额外的 class 并不重要,jQuery ($
) 只是一个选项。
现在可以使用 css 选择器将不同的 css 规则应用于这两个 div:
.panel-heading {
background-color:greenyellow;
}
和
.panel-heading.on {
background-color:dodgerblue;
}
分别。
请注意 .panel-heading
和 .on
之间没有 space。有关详细信息,请参阅以下堆栈溢出问题: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">
元素不能在呈现后搜索和访问(反应生命周期很奇怪)。所以不能添加额外的classes。
因此需要将额外的 class、"on"
添加到 panel-heading
div:
的 parent 元素中
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>
现在有一个外部 div 和 "on"
class 并且 "panel-heading"
div 包含在其中。
panel-heading div 现在可以使用以下选择器在 css 中设置样式:
.panel-heading {
background-color:greenyellow;
}
和
.on .panel-heading {
background-color:dodgerblue;
}
注意 .on
选择器现在如何位于 .panel-heading
选择器之前,并且两个选择器之间还有一个 space;这是因为具有 .on
class 的元素现在是具有 .panel-heading
class 的元素的祖先。
注意:将额外的 "on"
class 直接添加到 <Panel>
而不是将面板包含在额外的 div 中的效果类似。
现在 "onClick" 处理程序可以更改 parent 元素的 class 以影响 panel-heading 的样式,这比搜索 DOM 为正确的 "panel-heading div"
(恕我直言)。至关重要的是,在我使用 React 的情况下,可以在调用渲染例程时直接为元素指定此 "on"
class。
嗨,我昨晚在 bootstrap 给自己上了速成班,我玩得很开心。我在网上找到了一个可折叠面板,它非常适合我希望在导航栏中实现的功能。但是,我希望面板标题的背景颜色在展开时发生变化。我对 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>
可以参考document
这里是你的代码:
$(".collapse").on('shown.bs.collapse',function(){
// change background when expanded
});
$(".collapse").on('hidden.bs.collapse',function(){
// change background when hide
});
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>
AngularJR 的答案是正确的,但我发现以我对 css 和 non-existent 对 jQuery 的有限了解有点难以理解。另外,我正在使用 React,因此在渲染 DOM 元素后调整它们对我来说不是一个好方法。
核心原则
发生的事情的基本原理是将额外的 class 标记添加到 html 元素:
所以
<div class="panel-heading">...</div>
变成
<div class="panel-heading on">...</div>
如何添加这些额外的 class 并不重要,jQuery ($
) 只是一个选项。
现在可以使用 css 选择器将不同的 css 规则应用于这两个 div:
.panel-heading {
background-color:greenyellow;
}
和
.panel-heading.on {
background-color:dodgerblue;
}
分别。
请注意 .panel-heading
和 .on
之间没有 space。有关详细信息,请参阅以下堆栈溢出问题: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">
元素不能在呈现后搜索和访问(反应生命周期很奇怪)。所以不能添加额外的classes。
因此需要将额外的 class、"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>
现在有一个外部 div 和 "on"
class 并且 "panel-heading"
div 包含在其中。
panel-heading div 现在可以使用以下选择器在 css 中设置样式:
.panel-heading {
background-color:greenyellow;
}
和
.on .panel-heading {
background-color:dodgerblue;
}
注意 .on
选择器现在如何位于 .panel-heading
选择器之前,并且两个选择器之间还有一个 space;这是因为具有 .on
class 的元素现在是具有 .panel-heading
class 的元素的祖先。
注意:将额外的 "on"
class 直接添加到 <Panel>
而不是将面板包含在额外的 div 中的效果类似。
现在 "onClick" 处理程序可以更改 parent 元素的 class 以影响 panel-heading 的样式,这比搜索 DOM 为正确的 "panel-heading div"
(恕我直言)。至关重要的是,在我使用 React 的情况下,可以在调用渲染例程时直接为元素指定此 "on"
class。