Maison interface Web tutoriel CSS Comment changer la couleur du bouton radio en utilisant CSS (code ci-joint)

Comment changer la couleur du bouton radio en utilisant CSS (code ci-joint)

Oct 12, 2018 pm 04:58 PM
css css3

Le contenu de cet article concerne l'implémentation de la méthode CSS pour changer la couleur du bouton radio (avec du code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Le vendeur vous a-t-il déjà demandé : "Pouvez-vous changer la couleur de ce bouton radio ! Laissez-le correspondre à la couleur du thème !", et vous avez ensuite souffert du fait que la couleur native ne prend pas en charge le changement. la couleur, et finalement vous avez été obligé d'en fabriquer une de fortune par vous-même. Si nous abandonnons input[type=radio] et en développons un nouveau, nous constatons qu'il est très fastidieux de simuler des états sélectionnés, non sélectionnés, indisponibles et autres, et c'est encore plus ennuyeux lorsqu'il s'agit de groupes de boutons radio. peut utiliser label, ::before, : vérifié et tabindex, puis l'ajout d'une petite quantité de script JavaScript peut simuler un bouton radio "natif" de style plus riche. Essayons ensemble !

En savoir plus sur le bouton radio

Étant donné que notre objectif est de changer la couleur du bouton radio et d'autres fonctionnalités et comportements d'apparence pour être cohérents avec le bouton radio d'origine, alors nous devons d'abord comprendre les caractéristiques d'apparence et les comportements d'origine du bouton radio.
1. Caractéristiques d'apparence
1.1. Style normal

margin: 3px 3px 0px 5px;
border: none 0;
padding: 0;
box-sizing: border-box;
display: inline-block;
line-height: normal;
position: static;
Copier après la connexion

Remarque : nous devons nous assurer que les caractéristiques de mise en page sont conformes à l'apparence d'origine, sinon il y a de fortes chances d'utiliser une radio personnalisée. remplacement du bouton Cela affectera la disposition globale et conduira finalement à être obligé d'ajuster les caractéristiques de disposition des autres éléments pour obtenir une coordination globale, élargissant ainsi la portée de la modification.

1.2. Style ciblé

outline-offset: 0px;
outline: -webkit-focu-ring-color auto 5px;
Copier après la connexion

Remarque : Le style ciblé ici ne prend effet que via la touche Tab du clavier. Si vous cliquez sur la souris, bien que le bouton radio ait obtenu le focus, Les styles ci-dessus ne prendront pas effet.

1.3. Style défini sur désactivé

color: rgb(84, 84, 84);
Copier après la connexion

2. Caractéristiques comportementales
Les caractéristiques comportementales du bouton radio sont évidemment sélectionnées ou non, et l'événement de changement d'état sélectionné, Nous devons donc continuer à proposer des change événements en externe.
Il convient également de noter que lorsque le bouton radio est sélectionné à l'aide de la touche Tab du clavier, appuyer sur la touche Space sélectionnera le bouton radio.

Avec la compréhension ci-dessus, nous pouvons commencer à coder !

Pas de bêtises, juste du code

Comment changer la couleur du bouton radio en utilisant CSS (code ci-joint)

Dans l'image ci-dessus, le côté gauche est la radio native et le côté droit Sur le côté se trouve notre bouton radio personnalisé. De haut en bas, les styles sont non sélectionnés, sélectionnés, concentrés et désactivés.

Partie CSS

label.radio {
  /* 保证布局特性保持一致 */
  margin: 3px 3px 0px 5px;
  display: inline-block;
  box-sizing: border-box;

  width: 12px;
  height: 12px;
}

.radio__appearance{
  display: block; /* 设置为block则不受vertical-align影响,从而不会意外影响到.radio的linebox高度 */
  position: relative;
  box-shadow: 0 0 0 1px tomato; /* box-shadow不像border那样会影响盒子的框高 */
  border-radius: 50%;
  height: 90%;
  width: 90%;
  text-align: center;
}
label.radio [type=radio] + .radio__appearance::before{
  content: "";
  display: block;
  border-radius: 50%;
  width: 85%;
  height: 85%;

  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);

  transition: background .3s;
}
label.radio [type=radio]:checked + .radio__appearance::before{
  background: tomato;
}
label.radio [type=radio][disabled] + .radio__appearance{
  opacity: .5;
}
label.radio:focus{
  outline-offset: 0px;
  outline: #999 auto 5px;
}
/* 通过鼠标单击获得焦点时,outline效果不生效 */
label.radio.clicked{
  outline: none 0;
}
/* 自定义单选框的行为主要是基于原生单选框的,因此先将原生单选框隐藏 */
label.radio input {
  display: none;
}
Copier après la connexion

Partie HTML

<!-- 未选中状态 -->
<label>
  <input>
  <i></i>
</label>

<br>

<!-- 选中状态 -->
<label>
  <input>
  <i></i>
</label>

<br>

<!-- disabled状态 -->
<label>
  <input>
  <i></i>
</label>
Copier après la connexion

Partie JavaScript

var radios = document.querySelectorAll(".radio")
radios.forEach(radio => {
  // 模拟鼠标点击后:focus样式无效
  radio.addEventListener("mousedown", e => {
    var tar = e.currentTarget
    tar.classList.add("clicked")
    var fp = setInterval(function(){
      if (document.activeElement != tar){
        tar.classList.remove("clicked")
        clearInterval(fp)
      }
    }, 400)
  })
  // 模拟通过键盘获得焦点后,按`Space`键执行选中操作
  radio.addEventListener("keydown", e => {
    if (e.keyCode === 32){
      e.target.click()
    }
  })
})
Copier après la connexion

Cette implémentation comporte 3 points à noter :

1. Transmettez l'événement de clic de souris à l'entrée associée[type=radio] via l'étiquette, afin que vous puissiez masquer le bouton radio en toute sécurité et utiliser ses propres caractéristiques. Cependant, en raison des limitations du contrôle d'étiquette lui-même, par exemple, il ne s'agit pas d'un élément focalisable par défaut, donc les événements des touches du clavier ne peuvent pas être transférés au bouton radio. Même si la fonctionnalité tabindex est ajoutée, un JS manuscrit est nécessaire pour l'implémenter. it;

2. Lorsque tabindex est supérieur ou égal à When 0, cela signifie que l'élément peut obtenir le focus. Lorsqu'il est égal à 0, cela signifie que l'ordre d'obtention du focus est organisé en fonction de l'emplacement de. l'élément. S'il est supérieur à 0, cela signifie que plus l'élément est petit, le focus sera obtenu en premier

3 Puisque l'affichage du bouton radio est en ligne, donc le bouton radio le sera ; affecter la hauteur de la boîte de ligne. Lorsque les éléments du bouton radio personnalisé sont en bloc, si le paramètre d'alignement vertical est légèrement imprudent, la zone de ligne où se trouve l'élément interne sera surélevée, ce qui entraînera la hauteur de la zone de ligne où se trouve le bouton radio personnalisé. pour devenir plus grand. Par conséquent, l'affichage des éléments internes est réglé sur blocage, ce qui désactive directement l'alignement vertical et améliore la contrôlabilité.

Obtenu grâce à l'opacité :0

Ci-dessus, nous associons display:none's input[type=radio] à l'étiquette pour simplifier l'ordre personnalisé en utilisant input[type=radio] Le implémentation de la zone de sélection, mais nécessite toujours l'écriture manuscrite JS pour implémenter les caractéristiques comportementales d'appuyer sur la touche Espace pour sélectionner. Existe-t-il un autre moyen d'éviter des problèmes ? Nous voulons simplement que les utilisateurs ne voient pas le bouton radio natif, alors pouvons-nous simplement le définir sur opacity:0 ? !

Partie CSS

.radio {
  /* 保证布局特性保持一致 */
  margin: 3px 3px 0px 5px;
  display: inline-block;
  box-sizing: border-box;

  width: 13px;
  height: 13px;
}
/* 自定义单选框的行为主要是基于原生单选框的,因此先将原生单选框透明,且沾满整个父元素 */
.radio input {
  opacity: 0;
  position: absolute;
  z-index: 1; /* 必须覆盖在.radio__appearance上才能响应鼠标事件 */
  width: 100%;
  height: 100%;
}
.radio__container-box{
  position: relative;
  width: 100%;
  height: 100%;
}
.radio__appearance{
  display: block; /* 设置为block则不受vertical-align影响,从而不会意外影响到.radio的linebox高度 */
  position: relative;
  box-shadow: 0 0 0 1px tomato; /* box-shadow不像border那样会影响盒子的框高 */
  border-radius: 50%;
  height: 90%;
  width: 90%;
  text-align: center;
}
.radio [type=radio] + .radio__appearance::before{
  content: "";
  display: block;
  border-radius: 50%;
  width: 85%;
  height: 85%;

  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);

  transition: background .3s;
}
.radio [type=radio]:checked + .radio__appearance::before{
  background: tomato;
}
.radio [type=radio][disabled] + .radio__appearance{
  opacity: .5;
}
.radio:focus-within .radio__appearance{
  outline-offset: 0px;
  outline: #999 auto 5px;
}
/* 通过鼠标单击获得焦点时,outline效果不生效 */
.radio.clicked .radio_appearance{
  outline: none 0;
}
Copier après la connexion

Partie HTML

<!-- 未选中状态 -->
<span>
  <span>
    <input>
    <i></i>
  </span>
</span>

<br>

<!-- 选中状态 -->
<span>
  <span>
    <input>
    <i></i>
  </span>
</span>

<br>

<!-- disabled状态 -->
<span>
  <span>
    <input>
    <i></i>
  </span>
</span>
Copier après la connexion

Partie JavaScript

var radios = document.querySelectorAll(".radio")
radios.forEach(radio => {
  // 模拟鼠标点击后:focus样式无效
  radio.addEventListener("mousedown", e => {
    var tar = e.currentTarget
    tar.classList.add("clicked")
    var fp = setInterval(function(){
      if (!tar.contains(document.activeElement){
        tar.classList.remove("clicked")
        clearInterval(fp)
      }
    }, 400)
  })
})
Copier après la connexion

Résumé

Pour case à cocher Nous pouvons modifiez-le simplement légèrement, puis encapsulez-le un peu via des frameworks tels que VUE et React pour fournir une API plus simple, qui sera plus pratique à utiliser.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans quelle langue le plug-in du navigateur est-il écrit ? Dans quelle langue le plug-in du navigateur est-il écrit ? May 08, 2024 pm 09:36 PM

Les plug-ins de navigateur sont généralement écrits dans les langages suivants : Langages front-end : JavaScript, HTML, CSS Langages back-end : C++, Rust, WebAssembly Autres langages : Python, Java

Comment définir des attributs inconnus dans vscode Méthode vscode pour définir des attributs inconnus Comment définir des attributs inconnus dans vscode Méthode vscode pour définir des attributs inconnus May 09, 2024 pm 02:43 PM

1. Tout d'abord, ouvrez l'icône des paramètres dans le coin inférieur gauche et cliquez sur l'option des paramètres. 2. Ensuite, recherchez la colonne CSS dans la fenêtre sautée. 3. Enfin, remplacez l'option déroulante dans le menu Propriétés inconnues par le bouton d'erreur. .

Étapes graphiques pour définir les propriétés par défaut de CSS dans Visual Studio 2019 Étapes graphiques pour définir les propriétés par défaut de CSS dans Visual Studio 2019 May 09, 2024 pm 02:01 PM

1. Ouvrez Visual Studio 2019, recherchez ses paramètres d'options et cliquez sur CSS. 2. Ici vous pouvez voir les paramètres techniques des attributs suivants. 3. Vous pouvez maintenant définir le texte et remplir les bordures ici. 4. À ce stade, vous pouvez également définir le positionnement flottant ici. 5. À ce moment, vous pouvez également définir ici la bordure et l'arrière-plan pour terminer l'opération. 6. Enfin, cliquez sur le bouton OK ici pour définir les propriétés CSS par défaut.

Comment isoler les styles dans les composants en vue Comment isoler les styles dans les composants en vue May 09, 2024 pm 03:57 PM

L'isolation des styles dans les composants Vue peut être réalisée de quatre manières : Utilisez des styles étendus pour créer des étendues isolées. Utilisez les modules CSS pour générer des fichiers CSS avec des noms de classe uniques. Organisez les noms de classe à l’aide des conventions BEM pour maintenir la modularité et la réutilisabilité. Dans de rares cas, il est possible d'injecter des styles directement dans le composant, mais cela n'est pas recommandé.

Comment envelopper l'alerte en javascript Comment envelopper l'alerte en javascript May 08, 2024 pm 10:00 PM

Comment envelopper la boîte d'alerte en JavaScript : utilisez le caractère d'échappement \n : const myString = "Première ligne\nDeuxième ligne\nTroisième ligne" ; alert(myString);Utilisez la balise HTML <br> : const myString = " Première ligne<br> Deuxième ligne<br>Troisième ligne"; alert(myString); Définissez la propriété CSS d'espace blanc : const myString = Première ligne, Deuxième ligne, Troisième ligne; alert(myString);

Comment s'inscrire à Bitstamp Exchange Pro ? Est-ce sécuritaire? Est-ce formel ? Comment s'inscrire à Bitstamp Exchange Pro ? Est-ce sécuritaire? Est-ce formel ? Aug 13, 2024 pm 06:36 PM

Comment s'inscrire BitstampPro ? Visitez le site Web BitstampPro. Remplissez vos informations personnelles et votre adresse e-mail. Créez un mot de passe et acceptez les conditions. Vérifiez l'adresse e-mail. BitstampPro est-il sûr ? Authentification requise. Imposez l’utilisation de l’authentification à deux facteurs. La plupart des actifs sont stockés dans des chambres froides. Utilisez HTTPS pour crypter la communication. Effectuer des audits de sécurité réguliers. BitstampPro est-il légitime ? Enregistré au Luxembourg. Réglementé par le Comité luxembourgeois de surveillance financière. Respectez les réglementations en matière de lutte contre le blanchiment d'argent et de connaissance de vos clients.

La différence entre v-show et v-if dans vue La différence entre v-show et v-if dans vue May 09, 2024 pm 01:48 PM

La principale différence entre v-show et v-if dans Vue est la suivante : v-show : contrôle l'affichage des éléments en modifiant l'attribut de style d'affichage. Il est léger et convivial pour les éléments qui passent fréquemment en affichage/masquage ; conservera l'espace occupé par les éléments, peut provoquer un scintillement. v-if : insérer ou supprimer des éléments via des conditions, affectant le flux de mise en page et évitant le scintillement. Cependant, le coût de destruction et de recréation d'éléments est élevé et ne convient pas pour changer fréquemment d'éléments affichés/cachés ;

Comment introduire des images dans vue Comment introduire des images dans vue May 08, 2024 pm 05:21 PM

Il existe deux manières principales d'introduire des images dans Vue : Chemins relatifs : placez l'image dans le même répertoire que le composant Vue, en utilisant des références de chemin relatif. Chemin absolu : utilisez des chemins absolus pour référencer des images à partir du répertoire racine du projet.

See all articles