我想在单选按钮中添加一个样式标签:
HTML:
<div class="radio-toolbar">
<label><input type="radio" value="all" checked>All</label>
<label><input type="radio" value="false">Open</label>
<label><input type="radio" value="true">Archived</label>
</div>
CSS
.radio-toolbar input[type="radio"] {display:none;}
.radio-toolbar label {
background:Red;
border:1px solid green;
padding:2px 10px;
}
.radio-toolbar label + input[type="radio"]:checked {
background:pink !important;
}
任何想法我做错了什么?
答案 0 :(得分:254)
.radio-toolbar input[type="radio"] {
display: none;
}
.radio-toolbar label {
display: inline-block;
background-color: #ddd;
padding: 4px 11px;
font-family: Arial;
font-size: 16px;
cursor: pointer;
}
.radio-toolbar input[type="radio"]:checked+label {
background-color: #bbb;
}
<div class="radio-toolbar">
<input type="radio" id="radio1" name="radios" value="all" checked>
<label for="radio1">All</label>
<input type="radio" id="radio2" name="radios" value="false">
<label for="radio2">Open</label>
<input type="radio" id="radio3" name="radios" value="true">
<label for="radio3">Archived</label>
</div>
首先,您可能希望在单选按钮上添加name
属性。否则,它们不属于同一组,可以检查多个单选按钮。
此外,由于我将标签作为兄弟姐妹(单选按钮)放置,我必须使用id
和for
属性将它们关联在一起。
答案 1 :(得分:24)
如果您确实要将复选框放在标签内,请尝试添加额外的span标记,例如
<强> HTML 强>
<div class="radio-toolbar">
<label><input type="radio" value="all" checked><span>All</span></label>
<label><input type="radio" value="false"><span>Open</span></label>
<label><input type="radio" value="true"><span>Archived</span></label>
</div>
<强> CSS 强>
.radio-toolbar input[type="radio"]:checked ~ * {
background:pink !important;
}
这将为所选单选按钮的所有兄弟姐妹设置背景。
答案 2 :(得分:5)
当元素不是兄弟元素时,您正在使用相邻的兄弟选择器(+
)。标签是输入的父,而不是它的兄弟。
CSS没有办法根据它的后代选择一个元素(也不是任何跟随它的东西)。
你需要寻找JavaScript来解决这个问题。
或者,重新排列标记:
<input id="foo"><label for="foo">…</label>
答案 3 :(得分:1)
您可以在html和css中添加范围。
以下是我的代码中的一个例子......
HTML(JSX):
<input type="radio" name="AMPM" id="radiostyle1" value="AM" checked={this.state.AMPM==="AM"} onChange={this.handleChange}/>
<label for="radiostyle1"><span></span> am </label>
<input type="radio" name="AMPM" id="radiostyle2" value="PM" checked={this.state.AMPM==="PM"} onChange={this.handleChange}/>
<label for="radiostyle2"><span></span> pm </label>
CSS使标准单选按钮在屏幕上消失并叠加自定义按钮图像:
input[type="radio"] {
opacity:0;
}
input[type="radio"] + label {
font-size:1em;
text-transform: uppercase;
color: white ;
cursor: pointer;
margin:auto 15px auto auto;
}
input[type="radio"] + label span {
display:inline-block;
width:30px;
height:10px;
margin:1px 0px 0 -30px;
cursor:pointer;
border-radius: 20%;
}
input[type="radio"] + label span {
background-color: #FFFFFF
}
input[type="radio"]:checked + label span{
background-color: #660006;
}
答案 4 :(得分:0)
由于目前尚无CSS解决方案来设置父项样式,因此我在这里使用了一个简单的jQuery,将一个类添加到标签中,并在其中带有经过检查的输入。
$(document).on("change","input", function(){
$("label").removeClass("checkedlabel");
if($(this).is(":checked")) $(this).closest("label").addClass("checkedlabel");
});
别忘了给预先检查的输入标签加上checkedlabel
类
答案 5 :(得分:0)
这是一个易于访问的解决方案
label {
position: relative;
}
label input {
position: absolute;
opacity: 0;
}
label:focus-within {
outline: 1px solid orange;
}
<div class="radio-toolbar">
<label><input type="radio" value="all" checked>All</label>
<label><input type="radio" value="false">Open</label>
<label><input type="radio" value="true">Archived</label>
</div>
答案 6 :(得分:0)
只需使用 label:focus-within {}
设置带有选中单选框或复选框的标签样式。