html - 颜色不会更改对应于纯 CSS 选项卡布局中选中的单选
问题描述
我想只用 HTML 和 CSS制作一个选项卡布局,没有任何 JavaScript/jQuery 或其他东西,我在互联网上看到过一些类似这样的教程。但是,根据当前选项卡的颜色更改不起作用。我不知道导致此类问题的代码有什么问题。下面我的代码有什么问题?非常感谢任何输入/建议/更正。谢谢你。
.restaurant-detail__tabs {
width: 100%;
margin: 70px auto;
}
.restaurant-detail__tabs-labels {
width: 100%;
list-style: none;
padding: 0;
display: block;
}
.restaurant-detail__tabs-label {
display: inline;
padding: 10px 20px;
font-size: 24px;
font-weight: normal;
cursor: pointer;
}
.restaurant-detail__tabs-label:hover,
label:hover {
color: red;
cursor: pointer;
}
.restaurant-detail__tabs__tab-content {
display: none;
width: 100%;
border-top: 2px solid #aaa;
}
input[type="radio"] {
display: none;
}
#tab1:checked ~ #tab-content1,
#tab2:checked ~ #tab-content2 {
display: block;
}
#tab1:checked ~ #li-label1,
#tab2:checked ~ #li-label2 {
border-bottom: 5px solid red;
box-sizing: border-box;
background-color: red;
color: red;
}
#tab1:checked ~ #label1,
#tab2:checked ~ #label2 {
border-bottom: 5px solid red;
box-sizing: border-box;
background-color: red;
color: red;
}
<div class="restaurant-detail__tabs">
<input type="radio" checked name="tabs" id="tab1" />
<input type="radio" name="tabs" id="tab2" />
<ul class="restaurant-detail__tabs-labels" role="tablist">
<li class="restaurant-detail__tabs-label" id="li-label1">
<label for="tab1" id="label1">Menu</label>
</li>
<li class="restaurant-detail__tabs-label tab2" id="li-label2">
<label for="tab2" id="label2">Reviews</label>
</li>
</ul>
<div id="tab-content1" class="restaurant-detail__tabs__tab-content">
This is Menu
</div>
<div id="tab-content2" class="restaurant-detail__tabs__tab-content">
<div class="restaurant-detail__review">
<div class="restaurant-detail__review-items">
This is Review
</div>
</div>
</div>
</div>
解决方案
您需要ul
在访问的选择器中指定li
状态:checked
。因为~
运算符在当前级别的元素有效,但对子级无效。
像那样:
#tab1:checked ~ ul #li-label1,
#tab2:checked ~ ul #li-label2 {
...
}
通用兄弟组合
(~)
器分隔两个选择器并匹配第二个元素的所有迭代,它们在第一个元素之后(尽管不一定立即),并且是同一父元素的子元素。
.restaurant-detail__tabs {
width: 100%;
margin: 70px auto;
}
.restaurant-detail__tabs-labels {
width: 100%;
list-style: none;
padding: 0;
display: block;
}
.restaurant-detail__tabs-label {
display: inline;
padding: 10px 20px;
font-size: 24px;
font-weight: normal;
cursor: pointer;
}
.restaurant-detail__tabs-label:hover,
label:hover {
color: red;
cursor: pointer;
}
.restaurant-detail__tabs__tab-content {
display: none;
width: 100%;
border-top: 2px solid #aaa;
}
input[type="radio"] {
display: none;
}
#tab1:checked ~ #tab-content1,
#tab2:checked ~ #tab-content2 {
display: block;
}
#tab1:checked ~ ul #li-label1,
#tab2:checked ~ ul #li-label2 {
border-bottom: 5px solid red;
box-sizing: border-box;
background-color: red;
color: white;
}
#tab1:checked ~ #label1,
#tab2:checked ~ #label2 {
border-bottom: 5px solid red;
box-sizing: border-box;
background-color: red;
color: red;
}
<div class="restaurant-detail__tabs">
<input type="radio" checked name="tabs" id="tab1" />
<input type="radio" name="tabs" id="tab2" />
<ul class="restaurant-detail__tabs-labels" role="tablist">
<li class="restaurant-detail__tabs-label" id="li-label1">
<label for="tab1" id="label1">Menu</label>
</li>
<li class="restaurant-detail__tabs-label tab2" id="li-label2">
<label for="tab2" id="label2">Reviews</label>
</li>
</ul>
<div id="tab-content1" class="restaurant-detail__tabs__tab-content">
This is Menu
</div>
<div id="tab-content2" class="restaurant-detail__tabs__tab-content">
<div class="restaurant-detail__review">
<div class="restaurant-detail__review-items">
This is Review
</div>
</div>
</div>
</div>
推荐阅读
- python - 如何指定我想要输出的位置?
- ruby-on-rails - 联接表中的 ActiveRecord 自定义外键只在一个方向起作用
- reactjs - React 组件确实挂载了,但实际上声明为未挂载
- apache-flink - 有状态的函数 Flink 与 Hbase 和 Redis 的交互
- python - 从按钮显示多个图像
- django - git push Heroku main - 错误:src refspec main 不匹配任何
- java - 偏移量 369250 处的预期 ='endstream' 实际 ='' 错误出现在某些 pdf 中
- powershell - 动力外壳 | 通过使用 csv 或 txt 导入用户获取文件夹 ACL
- c# - 使用 InsightDb 更新到 .Net core 3.1 后,sql 事务无法正常工作
- javascript - 以单个表单发送多个 DIV 容器内容