🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

1084閲覧

CSS トグルスイッチ プロの方教えて下さい

zawa0

総合スコア1

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/01/15 12:18

編集2021/01/15 13:03

前提・実現したいこと

トグルスイッチを作ってます
スイッチを2個置いて、それぞれ別の画像を設定したいんですが、
下記コードだとlabelという部分のCSSの書き方を変えるんだと思いますが、
書き方がわからずにいます
別々の画像を設定するにはどうしたらいいでしょうか?

現在のコード

<style> body,html{ background-color:black; height:100%; } .a { position: absolute; left: 0; top: 0%; width: 100%; height: 100%; z-index: 5; opacity: 0; cursor: pointer; } label { background-color:red; width: 90%; height: 75%; position: relative; display: inline-block; border-radius: 5px; transition: 0.2s; box-sizing: border-box; } #toggle1 + label:after { background-image:url('https://pics.prcm.jp/63a6a9d594d2a/77587568/png/77587568_480x480.png'); background-repeat:no-repeat; background-position:100%; background-size:80% 80%; content: ""; position: absolute; width: 30%; height: 100%; border-radius: 50%; left: 0; top: 0; z-index: 2; transition: .1s; } #toggle2 + label:after { background-image:url('https://pics.prcm.jp/63a6a9d594d2a/77587568/png/77587568_480x480.png'); background-repeat:no-repeat; background-position:100%; background-size:80% 80%; content: ""; position: absolute; width: 30%; height: 100%; border-radius: 50%; left: 0; top: 0; z-index: 2; transition: .1s; } #toggle1 +.a:checked + label:after { content: ""; background-image:url('https://cdn0.iconfinder.com/data/icons/small-n-flat/24/678087-heart-512.png'); background-repeat:no-repeat; background-position:100%; background-size:80% 80%; left: 75%; } #toggle2 +.a:checked + label:after { content: ""; background-image:url('https://cdn0.iconfinder.com/data/icons/small-n-flat/24/678087-heart-512.png'); background-repeat:no-repeat; background-position:100%; background-size:80% 80%; left: 75%; } .toggle-switch { position: relative; width: 80%; height: 20%; } </style> <div class="toggle-switch"> <input id="toggle1" class="a" type="checkbox"> <label for="toggle1"></label> </div> <div class="toggle-switch"> <input id="toggle2" class="a" type="checkbox"> <label for="toggle2"></label> </div>

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

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

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

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

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

guest

回答2

0

ベストアンサー

まず、提示のHTMLですが、idは重複できないので、input の id はそれぞれ別にする必要がありますね。
labelのforもそれに合わせます。

html

1<div class="toggle-switch"> 2 <input id="toggle1" class="a" type="checkbox"> 3 <label for="toggle1"></label> 4</div> 5 6<div class="toggle-switch"> 7 <input id="toggle2" class="a" type="checkbox"> 8 <label for="toggle2"></label> 9</div>

そのうえで、CSSではidを基準にしたセレクタでそれぞれ画像を設定すればいいでしょう。

css

1#toggle1 + label:after { 2 background-image: url('img1.png'); 3} 4#toggle2 + label:after { 5 background-image: url('img2.png'); 6}

CodePenサンプル

投稿2021/01/15 12:56

編集2021/01/15 13:04
hatena19

総合スコア34073

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

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

zawa0

2021/01/15 13:04

追記しました 画像を別に設定できていない、checkedが動かない形になってしまいました
zawa0

2021/01/15 13:06

わざわざありがとうございます しっかり動いています 参考にして勉強させていただきます
hatena19

2021/01/15 13:06

CodePenのサンプルへのリンクを回答に追記しましたので、確認ください。
zawa0

2021/01/15 13:26

<div class="toggle-switch"> <input id="toggle1" class="a" type="checkbox"> <label for="toggle2"></label> </div> <div class="toggle-switch"> <input id="toggle2" class="a" type="checkbox"> <label for="toggle2"></label> </div> <input id="toggle1" class="a" type="checkbox"> <label for="toggle2"></label>になってるのはなぜでしょうか? <input id="toggle1" class="a" type="checkbox"> <label for="toggle1"></label>ではないんでしょうか?
zawa0

2021/01/15 13:36

onにした場合にcontentでon offの時はoff、画像も切り替えたいのですが、 下記では動かないのはなぜでしょうか? .a:checked + label:after { content: "on"; background-image: url('https://placehold.jp/150/1ce375/ffffff/480x480.png?text=on'); left: 75%; } .toggle-switch { position: relative; width: 80%; height: 20%; } #toggle1 + label:after { content: "off"; background-image: url('https://placehold.jp/150/1ce375/ffffff/480x480.png?text=off'); }
zawa0

2021/01/15 13:37

&#39;に変換されましたが'です
zawa0

2021/01/16 01:55

お手数をおかけします。。。 動きました 後手で申し訳ないのですが、 2個あるトグルスイッチの文字もそれぞれ別にしたいと考えてます 1個目ON1 OFF1 2個目ON2 OFF2 のようにすることは可能でしょうか?
hatena19

2021/01/16 02:33 編集

画像の設定と同じ考え方でいけます。 idで始まるセレクタで content を設定します。 #toggle1 + label:after { content: "OFF1"; background-image: url('img1-off'); } #toggle1:checked + label:after { content: "ON1"; background-image: url('img1-on'); }
guest

0

CSS も HTML も、label1、label2 というように、classやid、labelを分けて記述すれば良いと思いますよ。

CSS も HTML も、toggle1、toggle2 というように、classやid、labelを分けて記述すれば良いと思いますよ。

投稿2021/01/15 12:34

編集2021/01/15 12:47
_whitecat_22

総合スコア1305

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

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

zawa0

2021/01/15 12:40 編集

追記しました
_whitecat_22

2021/01/15 12:46

失礼しました。修正するのは、class やid label(for)の toggle のほうですね。 ⇒ toggle1、toggle2 ※回答も修正しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問