ラジオボタンの選択したラベルにスタイルを追加したいです。
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;
}
私が悪いことをしているという考え
.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
属性を使用する必要がありました。
本当にラベルの中にチェックボックスを入れたいのなら、余分な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;
}
選択したラジオボタンのすべての兄弟の背景が設定されます。
要素が兄弟ではない場合は、隣接する兄弟セレクタ(+
)を使用しています。ラベルは入力の親であり、兄弟ではありません。
CSSには、その子孫(またはそれに続くもの)に基づいて要素を選択する方法はありません。
これを解決するにはJavaScriptを見る必要があります。
あるいは、マークアップを並べ替えます。
<input id="foo"><label for="foo">…</label>
あなたはあなたの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;
}
現在、親をスタイルするCSSソリューションはありませんので、ここではチェックインプットを持つクラスをラベルに追加するために単純なjQueryを使用します。
$(document).on("change","input", function(){
$("label").removeClass("checkedlabel");
if($(this).is(":checked")) $(this).closest("label").addClass("checkedlabel");
});
事前にチェックされた入力のラベルにクラスcheckedlabel
も付けることを忘れないでください