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


139

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

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

私が間違っていることはありますか?

回答:


295

.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属性を使用してそれらを関連付ける必要がありました。


2
@Johnclそのとおりです。IE8は:checkedセレクターを実装していません。
サイムVIDAS

input [type = "radio"]もinput [type = "checkbox"]も選択したくない場合。これは、1つのルールのみで実行し、実行しないようにする正しい構文です。input[type = "radio"]、input [type = "checkbox"]
fabregas88

@ fabregas88これらの要素にCSSクラスを追加してから、.foo { ... }
–ŠimeVidas 2013

4
キーボードアクセスを停止しました!すべてのユーザーが体にできることを願っています。...ここで、ラジオボタンをそのまま使用display:none;すると、ブラウザを使用せずにキーボードで問題なく動作します。
gcb 2015

1
@gcb問題は、標準のラジオボタンを非表示にする方法でした。このプロトタイプjsbin.com/miwati/edit?html,css,outputを作成しました。ラジオボタンはラベルの後ろに絶対的に配置されています。おそらく最善のアプローチではありません。
–ŠimeVidas、2015

29

ラベル内にチェックボックスを配置したい場合は、スパンタグを追加してみてください。

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
私は別のセレクターを使用しましたが、私は、このアプローチを好ん(「+」を下回ると述べたように、この質問で。私はスタイルにだけ選択した項目を望んでいたので、これは許さ私についてではない心配するfor属性。
brichins

6

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

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

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

または、マークアップを再配置します。

<input id="foo"><label for="foo"></label>

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

0

親をスタイルするCSSソリューションは現在ないので、ここでは単純なjQueryを使用して、チェック済みの入力を含むラベルにクラスを追加します。

$(document).on("change","input", function(){
 $("label").removeClass("checkedlabel");
 if($(this).is(":checked")) $(this).closest("label").addClass("checkedlabel");
});

クラス事前にチェック入力のラベルを与えることを忘れないでくださいcheckedlabel、あまりにも


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>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.