チェックされたラジオボタンのラベルにcss(3)スタイルを適用することは可能ですか?
次のようなマークアップがあります。
<input type="radio" id="rad" name="radio"/>
<label for="rad">A Label</label>
私が望んでいたのはそれです
label:checked { font-weight: bold; }
何かをするだろうが、残念ながらそうはならない(私の予想通り)。
このような機能を実現できるセレクターはありますか?それが役立つ場合はdivなどで囲むことができますが、最善の解決策はラベル '' for ''属性を使用するものです。
私は自分のアプリケーション用にブラウザを指定することができるので、クラスcss3などを使ってください。
input[type="radio"]:checked+label{ font-weight: bold; }
//a label that immediately follows an input of type radio that is checked
次のマークアップで非常にうまく機能します。
<input id="rad1" type="radio" name="rad"/><label for="rad1">Radio 1</label>
<input id="rad2" type="radio" name="rad"/><label for="rad2">Radio 2</label>
...ラベルがラジオ入力に続く限り、divなどの有無にかかわらず、どのような構造でも機能します。
例:
input[type="radio"]:checked+label { font-weight: bold; }
<input id="rad1" type="radio" name="rad"/><label for="rad1">Radio 1</label>
<input id="rad2" type="radio" name="rad"/><label for="rad2">Radio 2</label>
私はこれは古い質問ですが、<input>
を分離するのではなく<label>
の子にしたい場合は、これを実現するための純粋なCSSの方法があります。
:checked + span { font-weight: bold; }
それからテキストを<span>
で囲むだけです。
<label>
<input type="radio" name="test" />
<span>Radio number one</span>
</label>
JSFiddle をご覧ください。
最初に述べた箇所は忘れていますが、for=
属性が設定されている限り、ラベルを他の場所のコンテナに実際に埋め込むことができます。それでは、SOのサンプルをチェックしましょう。
* {
padding: 0;
margin: 0;
background-color: #262626;
color: white;
}
.radio-button {
display: none;
}
#filter {
display: flex;
justify-content: center;
}
.filter-label {
display: inline-block;
border: 4px solid green;
padding: 10px 20px;
font-size: 1.4em;
text-align: center;
cursor: pointer;
}
main {
clear: left;
}
.content {
padding: 3% 10%;
display: none;
}
h1 {
font-size: 2em;
}
.date {
padding: 5px 30px;
font-style: italic;
}
.filter-label:hover {
background-color: #505050;
}
#featured-radio:checked~#filter .featured,
#personal-radio:checked~#filter .personal,
#tech-radio:checked~#filter .tech {
background-color: green;
}
#featured-radio:checked~main .featured {
display: block;
}
#personal-radio:checked~main .personal {
display: block;
}
#tech-radio:checked~main .tech {
display: block;
}
<input type="radio" id="featured-radio" class="radio-button" name="content-filter" checked="checked">
<input type="radio" id="personal-radio" class="radio-button" name="content-filter" value="Personal">
<input type="radio" id="tech-radio" class="radio-button" name="content-filter" value="Tech">
<header id="filter">
<label for="featured-radio" class="filter-label featured" id="feature-label">Featured</label>
<label for="personal-radio" class="filter-label personal" id="personal-label">Personal</label>
<label for="tech-radio" class="filter-label tech" id="tech-label">Tech</label>
</header>
<main>
<article class="content featured tech">
<header>
<h1>Cool Stuff</h1>
<h3 class="date">Today</h3>
</header>
<p>
I'm showing cool stuff in this article!
</p>
</article>
<article class="content personal">
<header>
<h1>Not As Cool</h1>
<h3 class="date">Tuesday</h3>
</header>
<p>
This stuff isn't nearly as cool for some reason :(;
</p>
</article>
<article class="content tech">
<header>
<h1>Cool Tech Article</h1>
<h3 class="date">Last Monday</h3>
</header>
<p>
This article has awesome stuff all over it!
</p>
</article>
<article class="content featured personal">
<header>
<h1>Cool Personal Article</h1>
<h3 class="date">Two Fridays Ago</h3>
</header>
<p>
This article talks about how I got a job at a cool startup because I rock!
</p>
</article>
</main>
うわー。これは「サンプル」には非常に役に立ちましたが、それが実際に効果とポイントを生み出すと感じています。それは兄弟でなくても確認済み入力コントロールのラベルを確実に選択できるということです。その秘密は、input
タグを必要なものだけにすることです(この場合はbody
要素のみ)。
label
要素は実際には:checked
疑似セレクターを利用しないので、ラベルがheader
に格納されていても問題ありません。 header
は兄弟要素なので、~
汎用兄弟セレクタを使用してinput[type=radio]:checked
DOM要素からheader
コンテナに移動してから、子孫/子セレクタを使用してlabel
s自体にアクセスできるという追加の利点もありますそれぞれのラジオボックス/チェックボックスが選択されているときにそれらをスタイルする機能を許可します。
ラベルにスタイルを設定できるだけでなく、すべてのinput
に関連して兄弟コンテナの子孫になる可能性がある他のコンテンツもスタイル設定できます。そして今、皆さんが待っていた瞬間、 JSFIDDLE !そこに行って、それで遊んで、それをあなたのために機能させ、それが機能する理由を見つけ、それを壊し、あなたがしていることをしなさい!
うまくいけば、すべてが理にかなっていて、質問とおそらく生じるかもしれないどんなフォローアップにでも完全に答えます。
入力がlabel
の子要素で、複数のラベルがある場合は、 @ Mike's trick とFlexbox
+ order
を組み合わせることができます。
<label class="switchLabel">
<input type="checkbox" class="switch"/>
<span class="left">Left</span>
<span class="right">Right</span>
</label>
label.switchLabel {
display: flex;
justify-content: space-between;
width: 150px;
}
.switchLabel .left { order: 1; }
.switchLabel .switch { order: 2; }
.switchLabel .right { order: 3; }
/* sibling selector ~ */
.switchLabel .switch:not(:checked) ~ span.left { color: lightblue }
.switchLabel .switch:checked ~ span.right { color: lightblue }
JSFiddle をご覧ください。
注:兄弟セレクタは同じ親内でのみ機能します。これを回避するには、 @ Nathan Blair hackを使用して入力を最上位レベルで非表示にすることができます。