使用 css 单选按钮单击活动颜色更改
Radio button click active color change using css
当我们点击单选按钮时,背景颜色和标签颜色会改变 我已经写了 CSS 但它不起作用。谁能推荐我一下。
const handleVisibility = (e) => {
e.target.closest('.case-inner-info').querySelectorAll('.inner_div [data-ref]').forEach(i => i.style.display = i.dataset.ref === e.target.dataset.ref ? 'block' : 'none');
}
const allOnOffButtons = document.querySelectorAll("div.case-inner-info input");
allOnOffButtons.forEach(button => {
button.addEventListener('click', handleVisibility);
})
.switch-label {
position: relative;
width: 58px;
float: left;
line-height: 26px;
font-size: 16px;
font-weight: 900;
text-align: center;
cursor: pointer;
color: #051326;
z-index: 2;
}
.switch-input {
display: none;
}
.switch-input:checked .switch-label {
color: #fff;
-webkit-transition: 0.15s ease-out;
-o-transition: 0.15s ease-out;
transition: 0.15s ease-out;
-webkit-transition-property: color;
-o-transition-property: color;
transition-property: color;
}
.switch-input:checked+.switch-label-off~.switch-selection {
left: 60px;
}
.switch-selection {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
position: absolute;
left: 0;
width: 70px;
height: 40px;
border-radius: 4px;
color: #fff;
z-index: 1;
-webkit-transition: left 0.15s ease-out;
-o-transition: left 0.15s ease-out;
transition: left 0.15s ease-out;
}
.case-switch .switch-selection {
background-color: red;
}
<div class="case-inner-info">
<div class="case-switch-wrap">
<div class="inner_div">
<div class="case-info" data-ref="on">
<p> Paragrapgh1</p>
</div>
<div class="case-code-wrap" style="display: none;" data-ref="off">
<p> Paragrapgh2</p>
</div>
</div>
<div class="case-switch">
<label class="switch-label switch-label-on">
<input type="radio" class="switch-input" name="switch-toggle" data-ref="on" checked>
On</label>
<label class="switch-label switch-label-off">
<input type="radio" class="switch-input" name="switch-toggle" data-ref="off">
Off</label>
<span class="switch-selection"></span>
</div>
</div>
</div>
input
在 label
元素内,无法到达 ~.switch-selection
。
可以通过将输入移出标签来修复,但它会破坏布局。因为我不知道它应该是什么样子 - 这是一个稍微损坏的工作版本。
PS:注意这些选择器:
.switch-input[data-ref="on"]:checked ~ .switch-selection {
background: green;
}
const handleVisibility = (e) => {
e.target.closest('.case-inner-info').querySelectorAll('.inner_div [data-ref]').forEach(i => i.style.display = i.dataset.ref === e.target.dataset.ref ? 'block' : 'none');
}
const allOnOffButtons = document.querySelectorAll("div.case-inner-info input");
allOnOffButtons.forEach(button => {
button.addEventListener('click', handleVisibility);
})
.switch-label {
position: relative;
width: 58px;
float: left;
line-height: 26px;
font-size: 16px;
font-weight: 900;
text-align: center;
cursor: pointer;
color: #051326;
z-index: 2;
}
.switch-input {
display: block;
opacity: 0.5
}
.switch-input:checked .switch-label {
color: #fff;
transition: 0.15s ease-out;
transition-property: color;
}
.switch-selection {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
position: absolute;
left: 0;
width: 70px;
height: 40px;
border-radius: 4px;
color: #fff;
z-index: 1;
transition: left 0.15s ease-out;
}
.case-switch .switch-selection {
background-color: yellow;
}
// check out this selectors bellow
.switch-input[data-ref="on"]:checked ~ .switch-selection {
background: green !important;
}
.switch-input[data-ref="off"]:checked ~ .switch-selection {
background: red !important;
}
<div class="case-inner-info">
<div class="case-switch-wrap">
<div class="inner_div">
<div class="case-info" data-ref="on">
<p> Paragrapgh1</p>
</div>
<div class="case-code-wrap" style="display: none;" data-ref="off">
<p> Paragrapgh2</p>
</div>
</div>
<div class="case-switch">
<label class="switch-label switch-label-on">On</label>
<input type="radio" class="switch-input" name="switch-toggle" data-ref="on" checked>
<label class="switch-label switch-label-off"> Off</label>
<input type="radio" class="switch-input" name="switch-toggle" data-ref="off"/>
<span class="switch-selection"> </span>
</div>
</div>
</div>
UPD:替代版本
.wrap {
min-height: 3em;
min-width: 5em;
display: inline-flex;
align-items: center;
justify-content: center;
position: relative;
}
.wrap input {
opacity: 0;
position: absolute;
left:0;
right: 0;
}
.wrap span {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
border-radius: 3px;
background: silver;
z-index: -1;
}
.wrap input:checked ~ span {
background: magenta;
}
<label class="wrap">
Item 1
<input type="radio" name="radio-101fm" checked/>
<span></span>
</label>
<label class="wrap">
Item 2
<input type="radio" name="radio-101fm" checked/>
<span></span>
</label>
<label class="wrap">
Item 3
<input type="radio" name="radio-101fm" checked/>
<span></span>
</label>
当我们点击单选按钮时,背景颜色和标签颜色会改变 我已经写了 CSS 但它不起作用。谁能推荐我一下。
const handleVisibility = (e) => {
e.target.closest('.case-inner-info').querySelectorAll('.inner_div [data-ref]').forEach(i => i.style.display = i.dataset.ref === e.target.dataset.ref ? 'block' : 'none');
}
const allOnOffButtons = document.querySelectorAll("div.case-inner-info input");
allOnOffButtons.forEach(button => {
button.addEventListener('click', handleVisibility);
})
.switch-label {
position: relative;
width: 58px;
float: left;
line-height: 26px;
font-size: 16px;
font-weight: 900;
text-align: center;
cursor: pointer;
color: #051326;
z-index: 2;
}
.switch-input {
display: none;
}
.switch-input:checked .switch-label {
color: #fff;
-webkit-transition: 0.15s ease-out;
-o-transition: 0.15s ease-out;
transition: 0.15s ease-out;
-webkit-transition-property: color;
-o-transition-property: color;
transition-property: color;
}
.switch-input:checked+.switch-label-off~.switch-selection {
left: 60px;
}
.switch-selection {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
position: absolute;
left: 0;
width: 70px;
height: 40px;
border-radius: 4px;
color: #fff;
z-index: 1;
-webkit-transition: left 0.15s ease-out;
-o-transition: left 0.15s ease-out;
transition: left 0.15s ease-out;
}
.case-switch .switch-selection {
background-color: red;
}
<div class="case-inner-info">
<div class="case-switch-wrap">
<div class="inner_div">
<div class="case-info" data-ref="on">
<p> Paragrapgh1</p>
</div>
<div class="case-code-wrap" style="display: none;" data-ref="off">
<p> Paragrapgh2</p>
</div>
</div>
<div class="case-switch">
<label class="switch-label switch-label-on">
<input type="radio" class="switch-input" name="switch-toggle" data-ref="on" checked>
On</label>
<label class="switch-label switch-label-off">
<input type="radio" class="switch-input" name="switch-toggle" data-ref="off">
Off</label>
<span class="switch-selection"></span>
</div>
</div>
</div>
input
在 label
元素内,无法到达 ~.switch-selection
。
可以通过将输入移出标签来修复,但它会破坏布局。因为我不知道它应该是什么样子 - 这是一个稍微损坏的工作版本。
PS:注意这些选择器:
.switch-input[data-ref="on"]:checked ~ .switch-selection {
background: green;
}
const handleVisibility = (e) => {
e.target.closest('.case-inner-info').querySelectorAll('.inner_div [data-ref]').forEach(i => i.style.display = i.dataset.ref === e.target.dataset.ref ? 'block' : 'none');
}
const allOnOffButtons = document.querySelectorAll("div.case-inner-info input");
allOnOffButtons.forEach(button => {
button.addEventListener('click', handleVisibility);
})
.switch-label {
position: relative;
width: 58px;
float: left;
line-height: 26px;
font-size: 16px;
font-weight: 900;
text-align: center;
cursor: pointer;
color: #051326;
z-index: 2;
}
.switch-input {
display: block;
opacity: 0.5
}
.switch-input:checked .switch-label {
color: #fff;
transition: 0.15s ease-out;
transition-property: color;
}
.switch-selection {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
position: absolute;
left: 0;
width: 70px;
height: 40px;
border-radius: 4px;
color: #fff;
z-index: 1;
transition: left 0.15s ease-out;
}
.case-switch .switch-selection {
background-color: yellow;
}
// check out this selectors bellow
.switch-input[data-ref="on"]:checked ~ .switch-selection {
background: green !important;
}
.switch-input[data-ref="off"]:checked ~ .switch-selection {
background: red !important;
}
<div class="case-inner-info">
<div class="case-switch-wrap">
<div class="inner_div">
<div class="case-info" data-ref="on">
<p> Paragrapgh1</p>
</div>
<div class="case-code-wrap" style="display: none;" data-ref="off">
<p> Paragrapgh2</p>
</div>
</div>
<div class="case-switch">
<label class="switch-label switch-label-on">On</label>
<input type="radio" class="switch-input" name="switch-toggle" data-ref="on" checked>
<label class="switch-label switch-label-off"> Off</label>
<input type="radio" class="switch-input" name="switch-toggle" data-ref="off"/>
<span class="switch-selection"> </span>
</div>
</div>
</div>
UPD:替代版本
.wrap {
min-height: 3em;
min-width: 5em;
display: inline-flex;
align-items: center;
justify-content: center;
position: relative;
}
.wrap input {
opacity: 0;
position: absolute;
left:0;
right: 0;
}
.wrap span {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
border-radius: 3px;
background: silver;
z-index: -1;
}
.wrap input:checked ~ span {
background: magenta;
}
<label class="wrap">
Item 1
<input type="radio" name="radio-101fm" checked/>
<span></span>
</label>
<label class="wrap">
Item 2
<input type="radio" name="radio-101fm" checked/>
<span></span>
</label>
<label class="wrap">
Item 3
<input type="radio" name="radio-101fm" checked/>
<span></span>
</label>