質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

2回答

2681閲覧

ラジオボタンでcheckしたところのlabel要素にcssを当てたい

odennkunn

総合スコア16

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2020/10/25 01:38

ラジオボタンのチェックしたところのlabel要素にcssを当てたいです。

HTML

1<input type="radio" id="hoge1" class="hoge" name="hoge"> 2<label for="hoge1">test</label>

今回はラジオボタンのデフォルトのCSSを変更したいため、inputにはdisplay:none;を当て、labelの疑似要素でラジオボタンを表示しているとします。
上記のような場合チェックされたところにcssを当てる場合下記のように隣接セレクタを使ってcssを当てると思います。

css

1.hoge { 2 display: none; 3} 4 5label::before { 6//ラジオボタンのcss 7} 8 9label::after { 10//ラジオボタンのcss 11} 12 13input[type=radio]:checked + label::before { 14//チェックした時のcss 15} 16 17input[type=radio]:checked + label::after { 18//チェックした時のcss 19}

ただHTMLの構造が下記のようにlabelタグ内にinputタグを入れるときはどのようにcssを記述すれば良いのでしょうか?

html

1<label for="hoge1">test<input type="radio" id="hoge1" class="hoge" name="hoge"></label>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

疑似要素:has() で親要素を参照できますが、まだ対応しているブラウザはないです。

:has() - CSS: カスケーディングスタイルシート | MDN

document.querySelector() では使えるのでJavaScriptでの対応になります。

追記

ただHTMLの構造が下記のようにlabelタグ内にinputタグを入れるときはどのようにcssを記述すれば良いのでしょうか?

よく考えたら、方法を思いつきました。

input は width: 0 で非表示にして、input自体の疑似要素でラジオボタンを表現すればいいだけでした。

html

1<div class="radio"> 2 <label for="hoge1">test1<input type="radio" id="hoge1" class="hoge" name="hoge"></label> 3 <label for="hoge2">test2<input type="radio" id="hoge2" class="hoge" name="hoge"></label> 4</div>

css

1.radio > label { 2 position: relative; 3 display: block; 4 padding-left: 30px; 5} 6 7.hoge { 8 width: 0; 9 position: absolute; 10 left: 0; 11} 12 13.hoge::before, .hoge:checked::after { 14 content: ""; 15 display: block; 16 position: absolute; 17 top: 0; 18 left: 0; 19 border-radius: 50%; 20} 21 22.hoge::before { 23 width: 15px; 24 height: 15px; 25 border: 1px solid #999; 26} 27 28.hoge:checked::after { 29 top: 3px; 30 left: 3px; 31 width: 11px; 32 height: 11px; 33 background: #d01137; 34}

CodePenサンプル

投稿2020/10/25 02:08

編集2020/10/25 05:10
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

odennkunn

2020/10/25 04:25

やはりそうなりますよね... ご協力ありがとうございました!
hatena19

2020/10/25 05:24

方法を思いつきましたので、回答に追記しました。ご参照ください。
guest

0

ベストアンサー

こんな感じでどうでしょう

html

1<style> 2[name=hoge]{display:none;} 3 4[name=hoge][data-index="1"]:checked ~ * label[data-index="1"]::before, 5[name=hoge][data-index="2"]:checked ~ * label[data-index="2"]::before, 6[name=hoge][data-index="3"]:checked ~ * label[data-index="3"]::before 7{ 8content:"●"; 9} 10 11[name=hoge][data-index="1"]:not(:checked) ~ * label[data-index="1"]::before, 12[name=hoge][data-index="2"]:not(:checked) ~ * label[data-index="2"]::before, 13[name=hoge][data-index="3"]:not(:checked) ~ * label[data-index="3"]::before 14{ 15content:"○"; 16} 17</style> 18<input type="radio" id="hoge1" name="hoge" data-index="1"> 19<input type="radio" id="hoge2" name="hoge" data-index="2"> 20<input type="radio" id="hoge3" name="hoge" data-index="3"> 21<div> 22<label for="hoge1" data-index="1">test1</label> 23<label for="hoge2" data-index="2">test2</label> 24<label for="hoge3" data-index="3">test3</label> 25</div>

投稿2020/10/25 03:14

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

odennkunn

2020/10/25 04:24

なるほど、こういった方法もあるんですね!参考にさせていただきます。 ご協力ありがとうございました!
hatena19

2020/10/25 04:36

質問の「HTMLの構造が下記のようにlabelタグ内にinputタグを入れるとき」という条件に合致していないと思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問