web-dev-qa-db-ja.com

CSS - 選択したラジオボタンのラベルのスタイルを設定する方法

ラジオボタンの選択したラベルにスタイルを追加したいです。

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;
}

私が悪いことをしているという考え

122
AnApprentice
.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属性を使用する必要がありました。

258
Šime Vidas

本当にラベルの中にチェックボックスを入れたいのなら、余分な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;
}

選択したラジオボタンのすべての兄弟の背景が設定されます。

24
iainbeeston

要素が兄弟ではない場合は、隣接する兄弟セレクタ(+)を使用しています。ラベルは入力のであり、兄弟ではありません。

CSSには、その子孫(またはそれに続くもの)に基づいて要素を選択する方法はありません。

これを解決するにはJavaScriptを見る必要があります。

あるいは、マークアップを並べ替えます。

<input id="foo"><label for="foo">…</label>
5
Quentin

あなたはあなたの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も付けることを忘れないでください

0
Fanky