Je veux dire, un bouton radio lui-même se compose d'une forme ronde et d'un point au centre (lorsque le bouton est sélectionné). Ce que je veux changer, c'est la couleur des deux. Cela peut-il être fait en utilisant CSS?
Un bouton radio est un élément natif spécifique à chaque système d'exploitation/navigateur. Il n’est pas possible de changer sa couleur/son style, sauf si vous souhaitez implémenter des images personnalisées ou utiliser une bibliothèque Javascript personnalisée comprenant des images (par exemple, this - lien en cache ).
Une solution rapide consisterait à superposer le style de saisie du bouton radio à l'aide de :after
. Cependant, il est probablement préférable de créer votre propre boîte à outils personnalisée.
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"/>
Only Si vous ciblez des navigateurs Webkit (Chrome et Safari, vous développez peut-être une application Web Chrome, qui sait ...), vous pouvez utiliser les éléments suivants:
input[type='radio'] {
-webkit-appearance: none;
}
Ensuite, appelez-le comme s'il s'agissait d'un simple élément HTML, appliquant par exemple une image d'arrière-plan.
Utilisez input[type='radio']:active
lorsque l'entrée est sélectionnée pour fournir les graphiques de remplacement.
Mise à jour : À compter de 2018, vous pouvez ajouter les éléments suivants pour prendre en charge plusieurs fournisseurs de navigateurs:
input[type="radio"] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
Comme Fred l'a mentionné, il n'y a aucun moyen de créer de manière native des boutons radio en ce qui concerne la couleur, la taille, etc. Mais vous pouvez utiliser des pseudo-éléments CSS pour configurer un imposteur d'un bouton radio donné et le styler. En ce qui concerne ce que JamieD a dit, sur la façon dont nous pouvons utiliser le pseudo-élément: after, vous pouvez utiliser à la fois: before et: after pour obtenir un aspect recherché.
Avantages de cette approche:
Explication de la courte démonstration ci-dessous:
Le 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>
Le 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;
}
A courte démo pour le voir en action
En conclusion, aucun JavaScript, images ou batteries requis. CSS pur.
vous pouvez utiliser la case à cocher bidouille comme expliqué dans astuces css
http://css-tricks.com/the-checkbox-hack/
exemple de travail du bouton radio:
http://codepen.io/Angelata/pen/Eypnq
input[type=radio]:checked ~ .check {}
input[type=radio]:checked ~ .check .inside{}
Fonctionne dans IE9 +, Firefox 3.5+, Safari 1.3+, Opera 6+, Chrome, etc.
Vous pouvez créer des boutons radio personnalisés de deux manières purement CSS.
En supprimant l'apparence standard à l'aide de CSS appearance
et en appliquant une apparence personnalisée. Malheureusement, cela ne fonctionnait pas dans IE pour Desktop (mais dans IE pour Windows Phone). Démo:
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>
En masquant le radiobutton et en définissant l'aspect du radiobutton personnalisé sur le pseudosélecteur de label
Au fait, pas besoin de positionnement absolu ici (je vois le positionnement absolu dans la plupart des démos). Démo:
*,
*: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>
exemple de bouton radio personnalisé simple navigateur multi-pour vous
.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>
Eh bien, pour créer des éléments supplémentaires, nous pouvons utiliser: after,: before (nous n’avons donc pas à changer autant le code HTML). Ensuite, pour les boutons radio et les cases à cocher, nous pouvons utiliser: coché. Il existe quelques autres pseudo-éléments que nous pouvons également utiliser (tels que: survol). En utilisant un mélange de ceux-ci, nous pouvons créer des formulaires personnalisés assez sympas. vérifie ça
Comme cela a déjà été dit, il n’existe aucun moyen d’y parvenir dans tous les navigateurs. Le meilleur moyen de le faire est que crossbrowser utilise javascript de manière discrète. En gros, vous devez transformer votre radiobutton en liens (entièrement personnalisables via CSS). chaque clic sur le lien sera lié à la radiobox associée, en basculant son état et tous les autres.
Essayez ce css avec transition:
$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>
Vous aurez aussi besoin de javascript. Voir ici par exemple.
Ce n'est pas possible par CSS natif. Vous devrez utiliser des images de fond et quelques astuces javascript.
Il peut être utile de lier radio-button à une étiquette de style. Plus de détails dans cette réponse .
Un moyen astucieux de le faire serait de créer un div séparé avec une hauteur et une largeur de 50px, par exemple, puis un rayon de 50px par dessus vos boutons radio ...