Modifier la couleur d'arrière-plan de l'option de la boîte de sélection


129

J'ai une selectboîte et j'essaye de changer la couleur d'arrière-plan des options quand la selectboîte a été cliquée et montre toutes les options.

Voir Fiddle

HTML:

<select>
    <option val="">Please choose</option>
    <option val="1">Option 1</option>
    <option val="2">Option 2</option>
    <option val="3">Option 3</option>
    <option val="4">Option 4</option>
</select>

CSS:

select{
    margin:40px;
    background: rgba(0,0,0,0.3);
    color:#fff;
    text-shadow:0 1px 0 rgba(0,0,0,0.4);
}

Réponses:


163

Vous devez mettre background-colorl' optionétiquette et non l' selectétiquette ...

select option {
    margin: 40px;
    background: rgba(0, 0, 0, 0.3);
    color: #fff;
    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
}

Si vous souhaitez styliser chacune des optionbalises .. utilisez le attributesélecteur css :

select option {
  margin: 40px;
  background: rgba(0, 0, 0, 0.3);
  color: #fff;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
}

select option[value="1"] {
  background: rgba(100, 100, 100, 0.3);
}

select option[value="2"] {
  background: rgba(150, 150, 150, 0.3);
}

select option[value="3"] {
  background: rgba(200, 200, 200, 0.3);
}

select option[value="4"] {
  background: rgba(250, 250, 250, 0.3);
}
<select>
  <option value="">Please choose</option>
  <option value="1">Option 1</option>
  <option value="2">Option 2</option>
  <option value="3">Option 3</option>
  <option value="4">Option 4</option>
</select>


J'ai retiré l'option rgba et semble utiliser le noir maintenant, ce qui fera l'affaire :)
ngplayground

5
Vous pouvez utiliser le :nth-child(1..n)sélecteur CSS à la place.
Samuel Liew

2
Vous ne devriez probablement pas utiliser le sélecteur d'attribut. Vous voudrez probablement utiliser le n-ième enfant ou donner à chaque option une classe à la place.
Fred

4
Ne fonctionne pas sur Firefox, ni dans Chromium (Linux Antergos)
albert

Essayez d'ajouter !imporant. Par exemple:background: red!important;
michal

19

Je ne sais pas si vous l'avez envisagé ou non, mais si votre application est basée sur la coloration de divers regroupements d'éléments, vous devriez probablement utiliser la <optgroup>balise associée à une classe pour un référencement ultérieur. Par exemple:

<select>
    <optgroup label="Numbers" class="green">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </optgroup>

    <optgroup label="Letters" class="blue">
        <option value="a">A</option>
        <option value="b">B</option>
        <option value="c">C</option>
    </optgroup>
</select>

puis dans la tête de votre document écrivez le css comme ceci:

<style type="text/css">
    .green option{
        background-color:#0F0;
    }

    .blue option{
        background-color:#00F;
    }
</style>

16

Oui, vous pouvez définir cela de manière oppisite en utilisant ceci,

option:not(:checked) { }

vérifie ça demo jsFiddle

HTML

<select>
    <option val="">Please choose</option>
    <option val="1">Option 1</option>
    <option val="2">Option 2</option>
    <option val="3">Option 3</option>
    <option val="4">Option 4</option>
</select>

CSS

select{
    margin:40px;
    background: rgba(0,0,0,0.3);
    color:#FFF;
    text-shadow:0 1px 0 rgba(0,0,0,0.4);
}
option:not(:checked) { 
    background-color: white; 
    color:#000;
}

@aswzen fonctionne actuellement pour moi dans Chrome (v65) mais pas dans Firefox Quantum (v59).
CPHPython

7

entrez la description de l'image ici

Semblable à certaines des réponses, mais pas vraiment énoncées, est d'ajouter une classe à la balise option réelle et d'utiliser des classes css ... cela fonctionne actuellement pour moi sans problème sur IE (voir ci-dessus ss).

<select id="reviewAction">
<option class="greenColor">Accept and Advance Status</option>
<option class="redColor">Return for Modifications</option>
</select>

CSS:

.greenColor{
    background-color: #33CC33;
}
.redColor{
    background-color: #E60000;
}

3

Mes sélections ne coloreraient pas l'arrière-plan jusqu'à ce que j'aie ajouté! Important au style.

    input, select, select option{background-color:#FFE !important}

2

Si vous voulez vraiment styliser le dans un, envisagez de passer à une liste déroulante basée sur Javascript / CSS telle que http://getbootstrap.com/2.3.2/components.html#dropdowns ou https://silviomoreto.github.io/ bootstrap-select / examples / . En effet, les navigateurs tels que IE n'autorisent pas le style des options dans les éléments . Chrome / OSX a également ce problème - vous ne pouvez pas styliser les options.

Cependant, un avertissement est attaché à cette approche. Ces types de menus fonctionnent très différemment sur les plates-formes mobiles car les éléments natifs ne sont pas utilisés. Ils peuvent également avoir des bizarreries ennuyeuses sur le bureau. Mon conseil est 1) n'écrivez pas la vôtre et 2) trouvez une bibliothèque qui a été vraiment bien testée.


1

Voilà ce que j'ai appris sur le sujet!

La spécification CSS 2 n'a pas abordé le problème de la façon dont les éléments de formulaire doivent être présentés aux utilisateurs période!

Lire ici: le magazine fracassant

Finalement , vous ne trouverez jamais aucun article technique du w3c ou autre adressé à ce sujet. Le style des éléments de formulaire, en particulier les zones de sélection, n'est pas entièrement pris en charge, mais vous pouvez vous déplacer ... avec un peu d'effort!

Stylisation des éléments de formulaire HTML

Création de widgets personnalisés

Ne perdez pas de temps avec des hacks, lisez les liens et découvrez comment les pros font le travail!


1

Changez simplement la couleur bg

select { background: #6ac17a; color:#fff; }


0

Une autre option consiste à utiliser Javascript:

if (document.getElementById('selectID').value == '1') {
       document.getElementById('optionID').style.color = '#000';

(Pas aussi propre que le sélecteur d'attribut CSS, mais plus puissant)


0
$htmlIngressCss='<style>';
$multiOptions = array("" => "All");
$resIn = $this->commonDB->getIngressTrunk();
while ($row = $resIn->fetch()) {
    if($row['IsActive']==0){
        $htmlIngressCss .= '.ingressClass select, option[value="'.$row['TrunkInfoID'].'"] {color:red;font-weight:bold;}';
    }
    $multiOptions[$row['TrunkInfoID']] = $row['IngressTrunkName'];
}
$htmlIngressCss.='</style>';

ajoutez $htmlIngressCssvotre partie html :)

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.