ラジオボタンをトグルボタンのように見せる方法
質問
私は、ラジオボタンのグループがトグルボタンのグループのように見えるようにしたい(しかし、ラジオボタンのようにまだ機能する)。トグルボタンのように正確に見える必要はありません。
CSSとHTMLだけでこれを行うにはどうしたらよいでしょうか。
EDIT:小さな丸を消して、ボタンがチェックされたとき/されなかったときのスタイルを変えて満足するつもりです。
どのように解決するのですか?
どのブラウザをサポートすることを目的としているかによりますが、そのために
:checked
擬似クラス
セレクタを追加し、ラジオボタンを非表示にしました。
このHTMLを使って
<input type="radio" id="toggle-on" name="toggle" checked
><label for="toggle-on">On</label
><input type="radio" id="toggle-off" name="toggle"
><label for="toggle-off">Off</label>
以下のCSSのようなものが使えると思います。
input[type="radio"].toggle {
display: none;
}
input[type="radio"].toggle:checked + label {
/* Do something special with the selected state */
}
例えば、(カスタムCSSを簡潔にするために)もしあなたが
ブートストラップ
を使用している場合、次のように追加します。
class="btn"
に
<label>
要素を追加し、適切にスタイルを設定すると、次のようなトグルが作成されます。
...これには、以下のCSSを追加するだけです。
input[type="radio"].toggle:checked + label {
background-image: linear-gradient(to top,#969696,#727272);
box-shadow: inset 0 1px 6px rgba(41, 41, 41, 0.2),
0 1px 2px rgba(0, 0, 0, 0.05);
cursor: default;
color: #E6E6E6;
border-color: transparent;
text-shadow: 0 1px 1px rgba(40, 40, 40, 0.75);
}
input[type="radio"].toggle + label {
width: 3em;
}
input[type="radio"].toggle:checked + label.btn:hover {
background-color: inherit;
background-position: 0 0;
transition: none;
}
input[type="radio"].toggle-left + label {
border-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
input[type="radio"].toggle-right + label {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
私はこれと追加のフォールバックスタイルを
ラジオボタンのトグル jsFiddleデモ
. なお
:checked
は IE 9 でしかサポートされていないので、この方法は新しいブラウザに限られることに注意してください。
しかし、IE 8 をサポートする必要があり、JavaScript* に頼ることをいとわないのであれば、擬似的に
:checked
を擬似的にサポートすることができます (ただし、その時点でラベルに直接クラスを設定することも同様に簡単にできます)。
として、いくつかの手軽で汚いjQueryのコードを使用します。 回避策の例 :
$('.no-checkedselector').on('change', 'input[type="radio"].toggle', function () {
if (this.checked) {
$('input[name="' + this.name + '"].checked').removeClass('checked');
$(this).addClass('checked');
// Force IE 8 to update the sibling selector immediately by
// toggling a class on a parent element
$('.toggle-container').addClass('xyz').removeClass('xyz');
}
});
$('.no-checkedselector input[type="radio"].toggle:checked').addClass('checked');
あとはCSSを少し変更すれば完成です。
input[type="radio"].toggle {
/* IE 8 doesn't seem to like to update radio buttons that are display:none */
position: absolute;
left: -99em;
}
input[type="radio"].toggle:checked + label,
input[type="radio"].toggle.checked + label {
/* Do something special with the selected state */
}
*Modernizrを使用している場合、以下のように
:selector
テスト
を使用して、フォールバックが必要かどうかを判断するのに役立ちます。サンプルコードではテストを "checkedselector" と呼び、その後テストが失敗したときだけ jQuery イベントハンドラが設定されるようにしています。
関連
-
[解決済み] CSS - カーソルを置いたときに塗りつぶしの色を変更する - SVG PATH
-
[解決済み] input type="file "ボタンのスタイリング
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] リンクのように動作するHTMLボタンを作成する方法
-
[解決済み] セレクトボックスのプレースホルダーを作成するにはどうすればよいですか?
-
[解決済み] 複数のノンブレイキングスペース("nbsp")ではなく、タブスペースを使用しますか?
-
[解決済み] jQueryでラジオボタンを確認する方法は?
-
[解決済み] CSS 100% height と padding/margin の関係
-
[解決済み】ラジオボタン(INPUT type="radio")のOnChangeイベントハンドラが1つの値として動作しない。
-
[解決済み] Jquery ラジオボタンがチェックされている場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
iframeフレームワークの使用
-
[解決済み] HTML 5: Is it <br>, <br/>, or <br />?
-
[解決済み] WebSocketとサーバー送信型イベントの比較/EventSource
-
[解決済み] ボディの高さをブラウザの高さの100%にする
-
[解決済み] 静的な HTML ページにファビコンを追加する
-
[解決済み] テーブル内のテキストアラインクラス
-
[解決済み] localStorage、sessionStorage、session、cookieの違いは何ですか?
-
[解決済み] CSS背景のストレッチとスケール
-
[解決済み] 残りの幅を埋めるためにdivを展開する
-
[解決済み】'#'リンクをクリックするとページのトップにジャンプするのを防ぐには?