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

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

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

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

HTML5

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

2回答

1533閲覧

CSSテクニックについてです!

wonda

総合スコア69

CSS3

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

HTML5

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

0クリップ

投稿2017/05/27 09:54

編集2017/05/27 13:45

###初めて投稿させていただきます。
ネット上で共有されていた下記checkbox用のCSSですが、シンプル、かつ滑らかで
とても気に入っているのですが、これをradioボタンで実装出来ないかと思考錯誤していたのですが・・
どなたかお力を貸して頂けないでしょうか。
すみませんが、宜しくお願いします。

###※追記
自身で試したコードを載せてみては?と修正依頼を頂きました。
失礼致しました。
CSSコードを眺めながら考えていたのですが、そもそもcheckboxの場合input要素一つのon/offを表現しているのですが、radioボタンだとinput要素2つ(今回は3つ以上は無いものと考えています)のname属性を同一にしつつ、on/offを表現するための根本的な手段が解りません。
また、5種類のinput要素を掲載していたのですが、コード視認性を上げるため、今回実装を目指した2つ(FLAT, FLIP)以外を削除しております。

###以下、現在試しているhtmlです。

html

1<li class='tg-list-item'> 2 <h4>Flat</h4> 3 <input class='tgl tgl-flat-radio' id='radio_on' type='radio' name='radio' value='on' />ON 4 <label class='tgl-btn' for='radio_on'></label> 5 <input class='tgl tgl-flat-radio' id='radio_off' type='radio' name='radio' value='off' />OFF 6 <label class='tgl-btn' for='radio_off'></label> 7</li>

###以下、加工元のソースになります。

html

1<h2>Toggle Button</h2> 2<ul class='tg-list'> 3 <li class='tg-list-item'> 4 <h4>Flat</h4> 5 <input class='tgl tgl-flat' id='cb4' type='checkbox'> 6 <label class='tgl-btn' for='cb4'></label> 7 </li> 8 <li class='tg-list-item'> 9 <h4>Flip</h4> 10 <input class='tgl tgl-flip' id='cb5' type='checkbox'> 11 <label class='tgl-btn' data-tg-off='Nope' data-tg-on='Yeah!' for='cb5'></label> 12 </li> 13</ul>

css

1.tg-list { 2 text-align: center; 3 display: -webkit-box; 4 display: -webkit-flex; 5 display: -ms-flexbox; 6 display: flex; 7 -webkit-box-align: center; 8 -webkit-align-items: center; 9 -ms-flex-align: center; 10 align-items: center; 11} 12 13.tg-list-item { 14 margin: 0 2em; 15} 16 17.tgl { 18 display: none; 19} 20.tgl, .tgl:after, .tgl:before, .tgl *, .tgl *:after, .tgl *:before, .tgl + .tgl-btn { 21 -webkit-box-sizing: border-box; 22 -moz-box-sizing: border-box; 23 box-sizing: border-box; 24} 25.tgl::-moz-selection, .tgl:after::-moz-selection, .tgl:before::-moz-selection, .tgl *::-moz-selection, .tgl *:after::-moz-selection, .tgl *:before::-moz-selection, .tgl + .tgl-btn::-moz-selection { 26 background: none; 27} 28.tgl::selection, .tgl:after::selection, .tgl:before::selection, .tgl *::selection, .tgl *:after::selection, .tgl *:before::selection, .tgl + .tgl-btn::selection { 29 background: none; 30} 31.tgl + .tgl-btn { 32 outline: 0; 33 display: block; 34 width: 4em; 35 height: 2em; 36 position: relative; 37 cursor: pointer; 38} 39.tgl + .tgl-btn:after, .tgl + .tgl-btn:before { 40 position: relative; 41 display: block; 42 content: ""; 43 width: 50%; 44 height: 100%; 45} 46.tgl + .tgl-btn:after { 47 left: 0; 48} 49.tgl + .tgl-btn:before { 50 display: none; 51} 52.tgl:checked + .tgl-btn:after { 53 left: 50%; 54} 55 56.tgl-flat + .tgl-btn { 57 padding: 2px; 58 -webkit-transition: all .2s ease; 59 transition: all .2s ease; 60 background: #fff; 61 border: 4px solid #f2f2f2; 62 border-radius: 2em; 63} 64.tgl-flat + .tgl-btn:after { 65 -webkit-transition: all .2s ease; 66 transition: all .2s ease; 67 background: #f2f2f2; 68 content: ""; 69 border-radius: 1em; 70} 71.tgl-flat:checked + .tgl-btn { 72 border: 4px solid #7FC6A6; 73} 74.tgl-flat:checked + .tgl-btn:after { 75 left: 50%; 76 background: #7FC6A6; 77} 78 79.tgl-flip + .tgl-btn { 80 padding: 2px; 81 -webkit-transition: all .2s ease; 82 transition: all .2s ease; 83 font-family: sans-serif; 84 -webkit-perspective: 100px; 85 -ms-perspective: 100px; 86 perspective: 100px; 87} 88.tgl-flip + .tgl-btn:after, .tgl-flip + .tgl-btn:before { 89 display: inline-block; 90 -webkit-transition: all .4s ease; 91 transition: all .4s ease; 92 width: 100%; 93 text-align: center; 94 position: absolute; 95 line-height: 2em; 96 font-weight: bold; 97 color: #fff; 98 position: absolute; 99 top: 0; 100 left: 0; 101 -webkit-backface-visibility: hidden; 102 -ms-backface-visibility: hidden; 103 backface-visibility: hidden; 104 border-radius: 4px; 105} 106.tgl-flip + .tgl-btn:after { 107 content: attr(data-tg-on); 108 background: #02C66F; 109 -webkit-transform: rotateY(-180deg); 110 -ms-transform: rotateY(-180deg); 111 transform: rotateY(-180deg); 112} 113.tgl-flip + .tgl-btn:before { 114 background: #FF3A19; 115 content: attr(data-tg-off); 116} 117.tgl-flip + .tgl-btn:active:before { 118 -webkit-transform: rotateY(-20deg); 119 -ms-transform: rotateY(-20deg); 120 transform: rotateY(-20deg); 121} 122.tgl-flip:checked + .tgl-btn:before { 123 -webkit-transform: rotateY(180deg); 124 -ms-transform: rotateY(180deg); 125 transform: rotateY(180deg); 126} 127.tgl-flip:checked + .tgl-btn:after { 128 -webkit-transform: rotateY(0); 129 -ms-transform: rotateY(0); 130 transform: rotateY(0); 131 left: 0; 132 background: #7FC6A6; 133} 134.tgl-flip:checked + .tgl-btn:active:after { 135 -webkit-transform: rotateY(20deg); 136 -ms-transform: rotateY(20deg); 137 transform: rotateY(20deg); 138}

###kei344さんからの助言を基に施したほぼ解決したコード
radioの場合はname属性を同一とし、idを分ける形です。
checkboxの場合は先にhidden要素を配置しておく形で解決となりました。
回答頂いた方々、お忙しい中、有難うございました。
非常に勉強になりました。

html

1<h2>Toggle it!</h2> 2<ul class='tg-list'> 3 <li class='tg-list-item'> 4 <h4>Light (checkbox)</h4> 5 <input type='hidden' name='cb_light' value='0' /> 6 <input class='tgl tgl-light' id='cb-light' type='checkbox' name='cb_light' value='1' /> 7 <label class='tgl-btn' for='cb-light'></label> 8 </li> 9 <li class='tg-list-item'> 10 <h4>Light (radio)</h4> 11 <input class='tgl tgl-light' id='radio-light_on' type='radio' name='radio_light' value='1' /> 12 <label class='tgl-btn' for='radio-light_on' data-tg-off='OFF' data-tg-on='ON'></label> 13 <input class='tgl tgl-light' id='radio-light_off' type='radio' name='radio_light' value='0' checked='checked' /> 14 <label class='tgl-btn' for='radio-light_off' data-tg-off='OFF' data-tg-on='ON'></label> 15 </li> 16 17 <li class='tg-list-item'> 18 <h4>iOS 7 (checkbox)</h4> 19 <input type='hidden' name='cb_ios' value='0' /> 20 <input class='tgl tgl-ios' id='cb-ios' type='checkbox' name='cb_ios' value='1' /> 21 <label class='tgl-btn' for='cb-ios'></label> 22 </li> 23 <li class='tg-list-item'> 24 <h4>iOS 7 (radio)</h4> 25 <input class='tgl tgl-ios' id='radio-ios_on' type='radio' name='radio_ios' value='1' /> 26 <label class='tgl-btn' for='radio-ios_on' data-tg-off='OFF' data-tg-on='ON'></label> 27 <input class='tgl tgl-ios' id='radio-ios_off' type='radio' name='radio_ios' value='0' checked='checked' /> 28 <label class='tgl-btn' for='radio-ios_off' data-tg-off='OFF' data-tg-on='ON'></label> 29 </li> 30 31 <li class='tg-list-item'> 32 <h4>Skewed (checkbox)</h4> 33 <input type='hidden' name='cb_skewed' value='0' /> 34 <input class='tgl tgl-skewed' id='cb-skewed' type='checkbox' name='cb_skewed' value='1' /> 35 <label class='tgl-btn' data-tg-off='OFF' data-tg-on='ON' for='cb-skewed'></label> 36 </li> 37 <li class='tg-list-item'> 38 <h4>Skewed (radio)</h4> 39 <input class='tgl tgl-skewed' id='radio-skewed_on' type='radio' name='radio_skewed' value='1' /> 40 <label class='tgl-btn' for='radio-skewed_on' data-tg-off='OFF' data-tg-on='ON'></label> 41 <input class='tgl tgl-skewed' id='radio-skewed_off' type='radio' name='radio_skewed' value='0' checked='checked' /> 42 <label class='tgl-btn' for='radio-skewed_off' data-tg-off='OFF' data-tg-on='ON'></label> 43 </li> 44 45 <li class='tg-list-item'> 46 <h4>Flat (checkbox)</h4> 47 <input type='hidden' name='cb_flat' value='0' /> 48 <input class='tgl tgl-flat' id='cb-flat' type='checkbox' name='cb_flat' value='1' /> 49 <label class='tgl-btn' for='cb-flat'></label> 50 </li> 51 <li class='tg-list-item'> 52 <h4>Flat (radio)</h4> 53 <input class='tgl tgl-flat' id='radio-flat_on' type='radio' name='radio_flat' value='1' /> 54 <label class='tgl-btn' for='radio-flat_on'></label> 55 <input class='tgl tgl-flat' id='radio-flat_off' type='radio' name='radio_flat' value='0' checked='checked' /> 56 <label class='tgl-btn' for='radio-flat_off'></label> 57 </li> 58 59 <li class='tg-list-item'> 60 <h4>Flip (checkbox)</h4> 61 <input type='hidden' name='cb_flip' value='0' /> 62 <input class='tgl tgl-flip' id='cb-flip' type='checkbox' name='cb_flip' value='1' /> 63 <label class='tgl-btn' data-tg-off='OFF' data-tg-on='ON' for='cb-flip'></label> 64 </li> 65 <li class='tg-list-item'> 66 <h4>Flat (radio)</h4> 67 <input class='tgl tgl-flip' id='radio-flip_on' type='radio' name='radio_flip' value='1' /> 68 <label class='tgl-btn' for='radio-flip_on' data-tg-off='OFF' data-tg-on='ON'></label> 69 <input class='tgl tgl-flip' id='radio-flip_off' type='radio' name='radio_flip' value='0' checked='checked' /> 70 <label class='tgl-btn' for='radio-flip_off' data-tg-off='OFF' data-tg-on='ON'></label> 71 </li> 72</ul>

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

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

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

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

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

kei344

2017/05/27 10:30

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
wonda

2017/05/27 10:48

失礼致しました。ありがとうございます。
guest

回答2

0

ベストアンサー

とりあえず下記のようにしたら tgl-flat のスタイルにはなりますよ。

CSS

1 <input class='tgl tgl-flat tgl-flat-radio' id='radio_on' type='radio' name='radio' value='on' />ON 2 <label class='tgl-btn' for='radio_on'></label> 3 <input class='tgl tgl-flat tgl-flat-radio' id='radio_off' type='radio' name='radio' value='off' />OFF 4 <label class='tgl-btn' for='radio_off'></label> 5```**動くサンプル:**[https://jsfiddle.net/rLef0oyj/](https://jsfiddle.net/rLef0oyj/) 6 7--- 8 9「なぜこのCSSで切り替えが出来るのか」を考えればラジオボタンでの使用も出来るとは思います。

投稿2017/05/27 11:38

編集2017/05/27 11:39
kei344

総合スコア69398

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

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

wonda

2017/05/27 11:47

ありがとうございます。 この状態だとtoggleボタンが2つ表示されるのですが、同じname属性のonとoffのそれぞれの動きを切り分けておいて、何らかの察知方法で表示させたり非表示にしたりするような感じなのでしょうか。
kei344

2017/05/27 11:49

ラジオボタンでやりたいのは2つ以上のボタンが必要だから、というわけではないのですか? 1つでやりたいなら元のままでいいのでは。
wonda

2017/05/27 11:52

すみません、サンプルを見ました! 凄いですね! 共有頂いたソースを元にこれから解析してみて、もしうまく行けばFlipの方も試してみたいと思います。 やる気がみなぎってきました! ありがとうございます。
wonda

2017/05/27 12:01

すみません、2017/05/27 20:49に頂いた回答に対する返信なのですが、見た目のトグルボタンは一つで良いのですが、input要素を2択のradioにしたかったのです・・確かに見た目が1つなので元のcheckboxでも良いのですが、POSTした時に必ずOFFの時のvalueの取得する必要があったのです・・。
kei344

2017/05/27 12:16

labelでやっている表示切替を別のもので行って、透明のラベルをON/OFF両方かぶせて、z-indexで重ね順を変えれば出来るとは思いますが、下記のような手法で「OFFの時のvalueの取得」が出来るような気がします。 【checkboxはcheckが入っていないとサーバーに値自体送信されない - c_mutoh’s Diary】 http://d.hatena.ne.jp/c_mutoh/20130419/1366359393
wonda

2017/05/27 12:36

重ね重ね御助言、有難うございます。 なるほど。jsでhidden要素を無効化する方法だと、ブラウザでjs無効化されていたらカンマ区切りの値が送信されてしまうと言う事ですね・・。となるとフロント側でご提案頂いた透明ラベル重ねでいくか、もしくはやはりバックエンドで該当するリクエストキーが無い時の処理を入れて対応する方が確実何でしょうかね・・。
kei344

2017/05/27 12:47

> jsでhidden要素を無効化する方法 あ、例が悪かったですね。サーバ側がPHPの場合はjsを使わなくても後の値が送られる仕様(だったはず)なのでそのつもりでURL貼っていました、すみません。 <input type="hidden" id="hidden_checkboxTest1" name="checkboxTest1"/> <input type="checkbox" name="checkboxTest1" /> POSTの受け取りは言語しだいでしたね。ついPHPで考えていました。 > ブラウザでjs無効化 その特殊なユーザーために対策をする必要がある案件かどうかによると思います。公共性が高い場合はそこまで考慮すべきだと思いますが、一般的なブラウザではjsが動かないことは無いのでサイトの仕様次第だと思います。
wonda

2017/05/27 13:07

>POSTの受け取りは言語しだいでしたね。 なるほど。有難うございます。 当方もPHPでの相談だったのですが、サンプルURLの結果を鵜呑みにしてしまっていました・・。 フォーム送信も納得いくまでテストする必要がありますね。 >特殊なユーザーために対策をする必要がある案件かどうかによると思います。 有難うございます。 そのためにはクライアントとの入念なヒアリングが必要ですね! 今回は本当に有難うございました。 お陰様で、もっとフロントエンド コーディングのスキルを上げないといけないと思わされました。 御助言、有難うございました。
guest

0

radioでCSSだけでやろうとするとonとoff用の2つを用意しないと無理かも^^

投稿2017/05/27 10:53

kyunta

総合スコア350

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

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

wonda

2017/05/27 11:09

そうですね。質問文に補足しているのですが、onとoff用の`input type="radio"`を二つ並べてlabel要素で囲むのか、label要素が2つあった方が良いのか・・といろいろ悩んでいました・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問