つまり、ラジオボタン自体は丸い形と中央のドットで構成されます(ボタンが選択されている場合)。私が変えたいのは、両方の色です。これはCSSを使用して実行できますか?
ラジオボタンは、各OS /ブラウザに固有のネイティブ要素です。カスタム画像を実装するか、画像を含むカスタムJavascriptライブラリを使用する場合を除き、色/スタイルを変更する方法はありません(例 this - cached link )
簡単な修正は、:after
を使用してラジオボタン入力スタイルをオーバーレイすることですが、おそらく独自のカスタムツールキットを作成することをお勧めします。
input[type='radio']:after {
width: 15px;
height: 15px;
border-radius: 15px;
top: -2px;
left: -1px;
position: relative;
background-color: #d1d3d1;
content: '';
display: inline-block;
visibility: visible;
border: 2px solid white;
}
input[type='radio']:checked:after {
width: 15px;
height: 15px;
border-radius: 15px;
top: -2px;
left: -1px;
position: relative;
background-color: #ffa500;
content: '';
display: inline-block;
visibility: visible;
border: 2px solid white;
}
<input type='radio' name="gender"/>
<input type='radio' name="gender"/>
のみ Webkitベースのブラウザ(ChromeとSafari、おそらくChrome WebAppを開発している...)をターゲットにしている場合、次を使用できます。
input[type='radio'] {
-webkit-appearance: none;
}
そして、背景画像を適用するなど、単純なHTML要素のようにスタイルを設定します。
入力が選択されたときにinput[type='radio']:active
を使用して、代替グラフィックを提供します
更新:2018年以降、以下を追加して複数のブラウザーベンダーをサポートできます。
input[type="radio"] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
フレッドが述べたように、色、サイズなどに関してラジオボタンをネイティブにスタイル設定する方法はありません。ただし、CSS Pseudo要素を使用して、特定のラジオボタンの詐称者を設定し、スタイルを設定できます。 JamieDが言ったことに触れ、:after Pseudo要素をどのように使用できるかについて、:beforeと:afterの両方を使用して望ましい外観を実現できます。
このアプローチの利点:
以下の短いデモの説明:
HTML
<div class="radio-item">
<input type="radio" id="ritema" name="ritem" value="ropt1">
<label for="ritema">Option 1</label>
</div>
<div class="radio-item">
<input type="radio" id="ritemb" name="ritem" value="ropt2">
<label for="ritemb">Option 2</label>
</div>
CSS
.radio-item {
display: inline-block;
position: relative;
padding: 0 6px;
margin: 10px 0 0;
}
.radio-item input[type='radio'] {
display: none;
}
.radio-item label {
color: #666;
font-weight: normal;
}
.radio-item label:before {
content: " ";
display: inline-block;
position: relative;
top: 5px;
margin: 0 5px 0 0;
width: 20px;
height: 20px;
border-radius: 11px;
border: 2px solid #004c97;
background-color: transparent;
}
.radio-item input[type=radio]:checked + label:after {
border-radius: 11px;
width: 12px;
height: 12px;
position: absolute;
top: 9px;
left: 10px;
content: " ";
display: block;
background: #004c97;
}
短いデモ 動作を確認する
結論として、JavaScript、画像、またはバッテリーは必要ありません。純粋なCSS。
あなたはCSSのトリックで説明されているようにチェックボックスハックを使用することができます
http://css-tricks.com/the-checkbox-hack/
ラジオボタンの動作例:
http://codepen.io/Angelata/pen/Eypnq
input[type=radio]:checked ~ .check {}
input[type=radio]:checked ~ .check .inside{}
IE9 +、Firefox 3.5 +、Safari 1.3 +、Opera 6 +、Chromeなんでも動作します。
2つの純粋なCSSの方法でカスタマイズされたラジオボタンを実現できます。
CSS appearance
を使用して標準の外観を削除し、カスタムの外観を適用します。残念ながら、これはデスクトップのIEでは機能しませんでした(Windows PhoneのIEでは機能します)。デモ:
input[type="radio"] {
/* remove standard background appearance */
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
/* create custom radiobutton appearance */
display: inline-block;
width: 25px;
height: 25px;
padding: 6px;
/* background-color only for content */
background-clip: content-box;
border: 2px solid #bbbbbb;
background-color: #e7e6e7;
border-radius: 50%;
}
/* appearance for checked radiobutton */
input[type="radio"]:checked {
background-color: #93e026;
}
/* optional styles, I'm using this for centering radiobuttons */
.flex {
display: flex;
align-items: center;
}
<div class="flex">
<input type="radio" name="radio" id="radio1" />
<label for="radio1">RadioButton1</label>
</div>
<div class="flex">
<input type="radio" name="radio" id="radio2" />
<label for="radio2">RadioButton2</label>
</div>
<div class="flex">
<input type="radio" name="radio" id="radio3" />
<label for="radio3">RadioButton3</label>
</div>
ラジオボタンを非表示にし、カスタムラジオボタンの外観をlabel
の擬似セレクターに設定します。ちなみに、ここでは絶対配置の必要はありません(ほとんどのデモで絶対配置を参照)。デモ:
*,
*:before,
*:after {
box-sizing: border-box;
}
input[type="radio"] {
display: none;
}
input[type="radio"]+label:before {
content: "";
/* create custom radiobutton appearance */
display: inline-block;
width: 25px;
height: 25px;
padding: 6px;
margin-right: 3px;
/* background-color only for content */
background-clip: content-box;
border: 2px solid #bbbbbb;
background-color: #e7e6e7;
border-radius: 50%;
}
/* appearance for checked radiobutton */
input[type="radio"]:checked + label:before {
background-color: #93e026;
}
/* optional styles, I'm using this for centering radiobuttons */
label {
display: flex;
align-items: center;
}
<input type="radio" name="radio" id="radio1" />
<label for="radio1">RadioButton1</label>
<input type="radio" name="radio" id="radio2" />
<label for="radio2">RadioButton2</label>
<input type="radio" name="radio" id="radio3" />
<label for="radio3">RadioButton3</label>
あなたのためのシンプルなクロスブラウザカスタムラジオボタンの例
.checkbox input{
display: none;
}
.checkbox input:checked + label{
color: #16B67F;
}
.checkbox input:checked + label i{
background-image: url('http://kuzroman.com/images/jswiddler/radio-button.svg');
}
.checkbox label i{
width: 15px;
height: 15px;
display: inline-block;
background: #fff url('http://kuzroman.com/images/jswiddler/circle.svg') no-repeat 50%;
background-size: 12px;
position: relative;
top: 1px;
left: -2px;
}
<div class="checkbox">
<input type="radio" name="sort" value="popularity" id="sort1">
<label for="sort1">
<i></i>
<span>first</span>
</label>
<input type="radio" name="sort" value="price" id="sort2">
<label for="sort2">
<i></i>
<span>second</span>
</label>
</div>
余分な要素を作成するには、:after、:beforeを使用できます(したがって、HTMLをそれほど変更する必要はありません)。次に、ラジオボタンとチェックボックスに:checkedを使用できます。他にも使用できる疑似要素がいくつかあります(:hoverなど)。これらを組み合わせて使用すると、かなりクールなカスタムフォームを作成できます。 チェックしてください
このCSSを移行してみてください:
$DarkBrown: #292321;
$Orange: #CC3300;
div {
margin:0 0 0.75em 0;
}
input[type="radio"] {
display:none;
}
input[type="radio"] + label {
color: $DarkBrown;
font-family:Arial, sans-serif;
font-size:14px;
}
input[type="radio"] + label span {
display:inline-block;
width:19px;
height:19px;
margin:-1px 4px 0 0;
vertical-align:middle;
cursor:pointer;
-moz-border-radius: 50%;
border-radius: 50%;
}
input[type="radio"] + label span {
background-color:$DarkBrown;
}
input[type="radio"]:checked + label span{
background-color:$Orange;
}
input[type="radio"] + label span,
input[type="radio"]:checked + label span {
-webkit-transition:background-color 0.4s linear;
-o-transition:background-color 0.4s linear;
-moz-transition:background-color 0.4s linear;
transition:background-color 0.4s linear;
}
HTML:
<div>
<input type="radio" id="radio01" name="radio" />
<label for="radio01"><span></span>Radio Button 1</label>
</div>
<div>
<input type="radio" id="radio02" name="radio" />
<label for="radio02"><span></span>Radio Button 2</label>
</div>
他の人が言ったように、すべてのブラウザでこれを達成する方法はないので、クロスブラウザを行う最善の方法は控えめにjavascriptを使用することです。基本的に、ラジオボタンをリンクに変更する必要があります(CSSで完全にカスタマイズ可能)。リンクをクリックするたびに、関連するラジオボックスにバインドされ、彼の状態とその他すべての状態が切り替わります。
また、javascriptも必要になります。 here を参照してください。
これは、ネイティブCSSでは不可能です。背景画像といくつかのjavascriptトリックを使用する必要があります。
ラジオボタンをスタイルラベルにバインドすると役立つ場合があります。詳細は この回答 で。
それを行う巧妙な方法は、たとえば50pxの高さと幅の別のdivを作成し、次に50pxの半径をラジオボタンの上に置くことです...