Comment changer la taille du bouton radio en utilisant CSS?


Réponses:


50

Oui, vous devriez pouvoir définir sa hauteur et sa largeur, comme pour n'importe quel élément. Cependant, certains navigateurs ne prennent pas vraiment en compte ces propriétés.

Cette démo donne un aperçu de ce qui est possible et de la manière dont il est affiché dans différents navigateurs: https://www.456bereastreet.com/lab/styling-form-controls-revisited/radio-button/

Comme vous le verrez, le style des boutons radio n'est pas facile :-D

Une solution de contournement consiste à utiliser JavaScript et CSS pour remplacer les boutons radio et autres éléments de formulaire par des images personnalisées:


5
définir à la fois la largeur et la hauteur et utiliser une métrique comme: width: 1.2em; hauteur: 1,2em;
Iman

2
Vous pouvez maintenant utiliser CSS3 et cela fonctionne.
João Pimentel Ferreira

37

Ce css semble faire l'affaire:

input[type=radio] {
    border: 0px;
    width: 100%;
    height: 2em;
}

La définition de la bordure à 0 semble permettre à l'utilisateur de modifier la taille du bouton et de demander au navigateur de le rendre dans cette taille, par exemple. la hauteur ci-dessus: 2em rendra le bouton à deux fois la hauteur de la ligne. Cela fonctionne également pour les cases à cocher ( input[type=checkbox]). Certains navigateurs rendent mieux que d'autres.

À partir d'une fenêtre Windows, il fonctionne dans IE8 +, FF21 +, Chrome29 +.


Fait le petit pour moi en chrome.
Pocketsand

30

Ancienne question mais maintenant il existe une solution simple, compatible avec la plupart des navigateurs, qui est à utiliser CSS3. J'ai testé dans IE, Firefox et Chrome et cela fonctionne.

input[type="radio"] {
    -ms-transform: scale(1.5); /* IE 9 */
    -webkit-transform: scale(1.5); /* Chrome, Safari, Opera */
    transform: scale(1.5);
}

Modifiez la valeur 1.5, dans ce cas un incrément de 50% de taille, selon vos besoins. Si le ratio est très élevé, cela peut rendre le bouton radio flou. L'image suivante montre un rapport de 1,5.

entrez la description de l'image ici

entrez la description de l'image ici


4
Cette solution, bien que fonctionne, rend les boutons radio flous. Ne l'utilisez pas.
Vadim le

2
Cela dépendra de la quantité d'échelle. Avec un rapport de 1,5, c'est OK.
João Pimentel Ferreira

Vous ne pouvez pas contrôler la quantité d'échelle. Un utilisateur peut décider de zoomer (sur un ordinateur de bureau ou un appareil mobile), auquel cas les boutons radio sembleraient terribles.
Vadim

1
@Vadim j'ai testé maintenant dans Chrome, ratio de 1,5 et zoom 300% et c'est parfaitement OK.
João Pimentel Ferreira

3
Sur mon moniteur à résolution relativement basse (1920 x 1080), le bouton radio est assez flou même au niveau de zoom de 100%. Sur les écrans Retina, ce sera encore plus flou. De nos jours, même certains téléphones portables ont une résolution plus élevée que mon moniteur. Comme je l'ai dit plus tôt, vous ne pouvez pas contrôler la mise à l'échelle d'une image. Cela peut sembler correct sur certains écrans. Cela peut sembler correct sur le vôtre, mais la solution n'est pas universelle.
Vadim

5

Vous pouvez contrôler la taille du bouton radio avec le style css:

style = "hauteur: 35px; largeur: 35px;"

Cela contrôle directement la taille du bouton radio.

<input type="radio" name="radio" value="value" style="height:35px; width:35px; vertical-align: middle;">

1
Pour éviter sa suppression, veuillez modifier et expliquer pourquoi cela fonctionne.
Rohit Gupta

@Rohit Gupta Vous pouvez changer le style = "height: 35px; width: 35px;" pour contrôler la taille du bouton radio.
Tarik

J'ai essayé cela et je suis assez surpris que cela fonctionne bien sur IE, Edge et Chrome. Firefox, pas tellement.
zippy72

4

Pas directement. En fait, les éléments de formulaire en général sont problématiques ou impossibles à styliser en utilisant uniquement CSS. la meilleure approche consiste à:

  1. cachez le bouton radio en utilisant javascript.
  2. Utilisez javascript pour ajouter / afficher du HTML qui peut être stylé comme vous le souhaitez, par exemple
  3. Définissez des règles css pour un état sélectionné, qui est déclenché en ajoutant une classe «sélectionnée» à votre étendue.
  4. Enfin, écrivez javascript pour que l'état du bouton radio réagisse aux clics sur la plage et, vice versa, pour que la plage réagisse aux changements d'état du bouton radio (lorsque les utilisateurs utilisent le clavier pour accéder au formulaire). la deuxième partie peut être difficile à mettre en œuvre sur tous les navigateurs. J'utilise quelque chose comme ce qui suit (qui utilise également jQuery. J'évite également d'ajouter des étendues supplémentaires en stylisant et en appliquant la classe "selected" directement aux étiquettes d'entrée).

javascript

var labels = $("ul.radioButtons).delegate("input", "keyup", function () { //keyboard use
        if (this.checked) {
            select($(this).parent());
        }
    }).find("label").bind("click", function (event) { //mouse use
        select($(this));
    });

function select(el) {
    labels.removeClass("selected");
    el.addClass("selected");
}

html

<ul class="radioButtons">
    <li>
        <label for="employee1">
            employee1
            <input type="radio" id="employee1" name="employee" />
        </label>
    </li>
    <li>
        <label for="employee2">
            employee1
            <input type="radio" id="employee2" name="employee" />
        </label>
    </li>
</ul>

3

Le redimensionnement du widget par défaut ne fonctionne pas dans tous les navigateurs, mais vous pouvez créer des boutons radio personnalisés avec JavaScript. L'un des moyens consiste à créer des boutons radio masqués, puis à placer vos propres images sur votre page. Cliquer sur ces images change les images (remplace l'image cliquée par une image avec un bouton radio dans un état sélectionné et remplace les autres images par des boutons radio dans un état non sélectionné) et sélectionne le nouveau bouton radio.

Quoi qu'il en soit, il existe de la documentation à ce sujet. Par exemple, lisez ceci: Styliser les cases à cocher et les boutons radio avec CSS et JavaScript .


3

Voici une approche. Par défaut, les boutons radio étaient environ deux fois plus grands que les étiquettes.
(Voir le code CSS et HTML en fin de réponse)


Safari: 10.0.3

entrez la description de l'image ici


Chrome: 56.0.2924.87

entrez la description de l'image ici


Firefox: 50.1.0

entrez la description de l'image ici


Internet Explorer: 9 (Le flou n'est pas la faute d'IE, test hébergé sur netrenderer.com)

entrez la description de l'image ici


CSS:

.sortOptions > label {
    font-size:          8px;
}

.sortOptions > input[type=radio] {
    width:              10px;
    height:             10px;
}

HTML:

<div class="rightColumn">Answers
    <span class="sortOptions">
        <input type="radio" name="answerSortList" value="credate"/>
        <label for="credate">Creation</label>

        <input type="radio" name="answerSortList" value="lastact"/>
        <label for="lastact">Activity</label>

        <input type="radio" name="answerSortList" value="score"/>
        <label for="score">Score</label>

        <input type="radio" name="answerSortList" value="upvotes"/>
        <label for="upvotes">Up votes</label>

        <input type="radio" name="answerSortList" value="downvotes"/>
        <label for="downvotes">Down Votes</label>

        <input type="radio" name="answerSortList" value="accepted"/>
        <label for="downvotes">Accepted</label>

    </span>
</div>                

3

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <style>
input[type="radio"] {
    -ms-transform: scale(1.5); /* IE 9 */
    -webkit-transform: scale(1.5); /* Chrome, Safari, Opera */
    transform: scale(1.5);
}
  </style>
</head>
<body>

<div class="container">
  <h2>Form control: inline radio buttons</h2>
  <p>The form below contains three inline radio buttons:</p>
  <form>
    <label class="radio-inline">
      <input type="radio" name="optradio">Option 1
    </label>
    <label class="radio-inline">
      <input type="radio" name="optradio">Option 2
    </label>
    <label class="radio-inline">
      <input type="radio" name="optradio">Option 3
    </label>
  </form>
</div>

</body>
</html>


1
Merci d'avoir fourni une réponse, quelques explications seraient bien :)
Tha'er M. Al-Ajlouni

1

Directement, vous ne pouvez pas faire cela. [Selon ma connaissance].

Vous devriez utiliser imagespour remplacer les boutons radio. Vous pouvez les faire fonctionner de la même manière que les boutons radio dans la plupart des cas, et vous pouvez les faire de la taille de votre choix.


Cette réponse est extrêmement mal informée - bien sûr, vous pouvez le faire directement. Et non, vous ne devriez pas essayer d'utiliser des images en premier lieu - cela causerait un
ballonnement

0

Vous pouvez également utiliser la propriété transform, avec la valeur requise dans l'échelle:

input[type=radio]{transform:scale(2);}

2
Duplicata de la réponse de João Pimentel Ferreira
GlennG

0

Cela fonctionne bien pour moi dans tous les navigateurs:

(style en ligne pour plus de simplicité ...)

<label style="font-size:16px;">
    <input style="height:1em; width:1em;" type="radio">
    <span>Button One</span>
</label>

La taille du bouton radio et du texte changera avec la taille de la police de l'étiquette.


-2

essayez ce code ... c'est peut-être le et ce que vous cherchez exactement

body, html{
  height: 100%;
  background: #222222;
}

.container{
  display: block;
  position: relative;
  margin: 40px auto;
  height: auto;
  width: 500px;
  padding: 20px;
}

h2 {
	color: #AAAAAA;
}

.container ul{
  list-style: none;
  margin: 0;
  padding: 0;
	overflow: auto;
}

ul li{
  color: #AAAAAA;
  display: block;
  position: relative;
  float: left;
  width: 100%;
  height: 100px;
	border-bottom: 1px solid #333;
}

ul li input[type=radio]{
  position: absolute;
  visibility: hidden;
}

ul li label{
  display: block;
  position: relative;
  font-weight: 300;
  font-size: 1.35em;
  padding: 25px 25px 25px 80px;
  margin: 10px auto;
  height: 30px;
  z-index: 9;
  cursor: pointer;
  -webkit-transition: all 0.25s linear;
}

ul li:hover label{
	color: #FFFFFF;
}

ul li .check{
  display: block;
  position: absolute;
  border: 5px solid #AAAAAA;
  border-radius: 100%;
  height: 25px;
  width: 25px;
  top: 30px;
  left: 20px;
	z-index: 5;
	transition: border .25s linear;
	-webkit-transition: border .25s linear;
}

ul li:hover .check {
  border: 5px solid #FFFFFF;
}

ul li .check::before {
  display: block;
  position: absolute;
	content: '';
  border-radius: 100%;
  height: 15px;
  width: 15px;
  top: 5px;
	left: 5px;
  margin: auto;
	transition: background 0.25s linear;
	-webkit-transition: background 0.25s linear;
}

input[type=radio]:checked ~ .check {
  border: 5px solid #0DFF92;
}

input[type=radio]:checked ~ .check::before{
  background: #0DFF92;
}
<ul>
  <li>
    <input type="radio" id="f-option" name="selector">
    <label for="f-option">Male</label>
    
    <div class="check"></div>
  </li>
  
  <li>
    <input type="radio" id="s-option" name="selector">
    <label for="s-option">Female</label>
    
    <div class="check"><div class="inside"></div></div>
  </li>
  
  <li>
    <input type="radio" id="t-option" name="selector">
    <label for="t-option">Transgender</label>
    
    <div class="check"><div class="inside"></div></div>
  </li>
</ul>


2
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la façon et / ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse. Veuillez lire cette réponse pratique pour fournir une réponse de qualité.
thewaywewere

merci pour votre commentaire et vos conseils .im nouveau bie de stack overflow. alors je le poste ici ...
Mausumi

@Mausumi Oui, mais une explication supplémentaire sur comment et pourquoi cela fonctionne en ferait une bien meilleure réponse au débordement de pile :-)
starbeamrainbowlabs

-3
<html>
    <head>
    </head>
    <body>

<style>
.redradio {border:5px black solid;border-radius:25px;width:25px;height:25px;background:red;float:left;}
.greenradio {border:5px black solid;border-radius:25px;width:29px;height:29px;background:green;float:left;}
.radiobuttons{float:left;clear:both;margin-bottom:10px;}
</style>
<script type="text/javascript">
<!--
function switchON(groupelement,groupvalue,buttonelement,buttonvalue) {
    var groupelements = document.getElementById(groupelement);
    var buttons = groupelements.getElementsByTagName("button");
    for (i=0;i<buttons.length;i++) {
        if (buttons[i].id.indexOf("_on") != -1) {
            buttons[i].style.display="none";
        } else {
            buttons[i].style.display="block";
        }
    }
    var buttonON = buttonelement + "_button_on";
    var buttonOFF = buttonelement + "_button_off";
    document.getElementById(buttonON).style.display="block";
    document.getElementById(buttonOFF).style.display="none";
    document.getElementById(groupvalue).value=buttonvalue;
}
// -->
</script>

<form>
    <h1>farbige Radiobutton</h1>
    <div id="button_group">
        <input type="hidden" name="button_value" id="button_value" value=""/>
        <span class="radiobuttons">
            <button type="button" value="OFF1" name="button1_button_off" id="button1_button_off" onclick="switchON('button_group','button_value','button1',this.value)" class="redradio"></button>
            <button type="button" value="ON1" name="button1_button_on" id="button1_button_on" style="display:none;" class="greenradio"></button>
            <label for="button1_button_on">&nbsp;&nbsp;Ich will eins</label>
        </span><br/>
        <span class="radiobuttons">
            <button type="button" value="OFF2" name="button2_button_off" id="button2_button_off" onclick="switchON('button_group','button_value','button2',this.value)" class="redradio"></button>
            <button type="button" value="ON2" name="button2_button_on" id="button2_button_on" style="display:none;" class="greenradio"></button>
            <label for="button2_button_on">&nbsp;&nbsp;Ich will zwei</label>
        </span><br/>
        <span class="radiobuttons">
            <button type="button" value="OFF3" name="button3_button_off" id="button3_button_off" onclick="switchON('button_group','button_value','button3',this.value)" class="redradio"></button>
            <button type="button" value="ON3" name="button3_button_on" id="button3_button_on" style="display:none;" class="greenradio"></button>
            <label for="button3_button_on">&nbsp;&nbsp;Ich will drei</label>
        </span><br/>
        <span class="radiobuttons">
            <button type="button" value="OFF4" name="button4_button_off" id="button4_button_off" onclick="switchON('button_group','button_value','button4',this.value)" class="redradio"></button>
            <button type="button" value="ON4" name="button4_button_on" id="button4_button_on" style="display:none;" class="greenradio"></button>
            <label for="button4_button_on">&nbsp;&nbsp;Ich will vier</label>
        </span>
    </div>
</form>

    </body>
</html>

1
Il aurait été utile d'avoir des commentaires ou une description sur la façon dont cela fonctionne.
James A Mohler

2
Et il aurait été utile de ne pas avoir d'erreurs structurelles dès le début de votre source.
Mr Lister
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.