我有一个问题...我创建了以下导航栏:
.menu {
position: fixed;
height: 100vh;
width: 150px;
background-color: #3D5021;
z-index: 0;
left: 0px;
}
nav {
margin-top: 50px;
}
nav ul {
list-style: none;
text-align: center;
}
nav ul li {
display: block;
margin: 5px 0;
width: 60px;
height: 60px;
}
input[type="checkbox"] {
display: none;
}
.menuButtonIcon {
color: #FFFFFF60;
}
.menuButtonIcon .fas {
font-size: 25px;
}
nav ul li:hover i {
color: #FFFFFF;
cursor: pointer;
}
#btnDashboard:checked~.fa-tachometer-alt {
color: #FF8A00FF;
}
#btnList:checked~.fa-list-ul {
color: #FF8A00FF;
}
#btnHeatMap:checked~.fa-map {
color: #FF8A00FF;
}
.container {
position: absolute;
width: calc(100vw - 100px);
right: 0;
border-top-left-radius: 50px;
border-bottom-left-radius: 50px;
background-color: #E1E1E1;
min-height: 100vh;
}
.normal-content {
margin-left: 50px;
margin-top: 20px;
}
.full-content {
margin: 0;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div class="menu">
<nav>
<ul class="nav-links">
<div class="selector"></div>
<li>
<label for="btnDashboard" class="menuButtonIcon" routerLink="/researcher/dashboard">
<i class="fas fa-tachometer-alt"></i>
</label>
<input type="checkbox" id="btnDashboard" checked>
</li>
<li>
<label for="btnList" class="menuButtonIcon" routerLink="/researcher/list">
<i class="fas fa-list-ul"></i>
</label>
<input type="checkbox" id="btnList">
</li>
<li>
{{checked}}
<label for="btnHeatMap" class="menuButtonIcon" [(ngModel)]="checked">
<i class="fas fa-map"></i>
</label>
<input type="checkbox" id="btnHeatMap">
</li>
</ul>
</nav>
</div>
<div class="container">
<div id="content" class="normal-content">
<router-outlet></router-outlet>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
现在,当我运行此代码时,RouterLink映射工作正常,因为内容切换到正确的页面,但导航栏中图标的颜色没有改变。我打印了热图按钮的选中属性,但该值始终为 false。首先,我认为Routerlink触发时整个导航栏会重新加载,但是当我关闭它时,我仍然没有看到任何颜色变化...如何更改导航栏中所选图标的颜色???
首先,如果您只想一次仅选择 1 个项目,请使用<input type="radio" />代替<input type="checkbox" />。
您正在使用通用兄弟组合器~:
通用同级组合器 (~) 分隔两个选择器并匹配第二个元素的所有迭代,这些迭代位于第一个元素之后(尽管不一定是立即),并且是同一父元素的子元素。
如果要更改与无线电关联的颜色label,则需要将无线电放置在其之前label。
可以通过一条规则来完成:
.menu input[type="radio"]:checked ~ .menuButtonIcon {
color: #FF8A00FF;
}
Run Code Online (Sandbox Code Playgroud)
当<input type="radio" />菜单中的一个为 时checked,后面的.menuButtonIcon元素将具有颜色#FF8A00FF。
.menu input[type="radio"]:checked ~ .menuButtonIcon {
color: #FF8A00FF;
}
Run Code Online (Sandbox Code Playgroud)
.menu {
position: fixed;
height: 100vh;
width: 150px;
background-color: #3D5021;
z-index: 0;
left: 0px;
}
nav {
margin-top: 50px;
}
nav ul {
list-style: none;
text-align: center;
}
nav ul li {
display: block;
margin: 5px 0;
width: 60px;
height: 60px;
}
input[type="radio"] {
display: none;
}
/* see above changed CSS
input[type="checkbox"] {
display: none;
} */
.menuButtonIcon {
color: #FFFFFF60;
}
.menuButtonIcon .fas {
font-size: 25px;
}
nav ul li:hover i {
color: #FFFFFF;
cursor: pointer;
}
.menu input[type="radio"]:checked ~ .menuButtonIcon {
color: #FF8A00FF;
}
/* see above changed CSS
#btnDashboard:checked~.fa-tachometer-alt {
color: #FF8A00FF;
}
#btnList:checked~.fa-list-ul {
color: #FF8A00FF;
}
#btnHeatMap:checked~.fa-map {
color: #FF8A00FF;
}
*/
.container {
position: absolute;
width: calc(100% - 140px);
right: 0;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
background-color: #E1E1E1;
min-height: 100vh;
}
.normal-content {
margin-left: 50px;
margin-top: 20px;
}
.full-content {
margin: 0;
}Run Code Online (Sandbox Code Playgroud)