209 votes

Comment ajouter une image dans une liste de sélection

J'ai une liste sélective de genres.

Code :

<select>
<option>male</option>
<option>female</option>
<option>others</option>
</select>  

Je veux utiliser une image dans la liste déroulante comme drop-down-icon.jpeg.

Je veux ajouter un bouton à la place de l'icône de la liste déroulante.

Comment faire ?

6 votes

Comme solution générale : si vous le pouvez, rassemblez vos icônes sous forme de SVG, importez-les dans une police de votre choix dans la gamme Unicode personnelle, utilisez cette police dans vos <option> s ; supporté par tout ce qui existe à partir de IE 8.0, petit et simple.

201voto

vartec Points 53382

Sur Firefox vous pouvez simplement ajouter une image de fond à l'option :

<select>
  <option style="background-image:url(male.png);">male</option>
  <option style="background-image:url(female.png);">female</option>
  <option style="background-image:url(others.png);">others</option>
</select> 

Mieux encore, vous pouvez séparer HTML et CSS comme ceci

HTML

<select id="gender">
  <option>male</option>
  <option>female</option>
  <option>others</option>
</select>  

CSS

select#gender option[value="male"]   { background-image:url(male.png);   }
select#gender option[value="female"] { background-image:url(female.png); }
select#gender option[value="others"] { background-image:url(others.png); }

Sur autres navigateurs le seul moyen de le faire serait d'utiliser une bibliothèque de widgets JS, comme par exemple jQuery UI en utilisant, par exemple Sélectionnable .

De jQuery UI 1.11, Selectmenu Un widget est disponible, qui est très proche de ce que vous voulez.

23 votes

Et avez-vous une solution validée par le W3C en 2015 ? Sans réimplémenter la boîte de sélection ?

42 votes

@IvanKuckir - Pffff. Le W3C est toujours en train de "discuter" des raisons pour lesquelles cela devrait être fait ou non, et après avoir mis en œuvre une étude sur le sujet, un comité discutera ensuite des avantages et inconvénients potentiels de cette activation. Une fois cela fait, il y aura une étude de terrain sur la rétrocompatibilité. Une étude sera ensuite réalisée pour les daltoniens. Une fois la recommandation faite, il y aura une étude sur les effets secondaires potentiels sur d'autres éléments (comme la case à cocher). Après tout cela, il y aura une étude pour décider si toutes ces études étaient nécessaires.

31 votes

Firefox ne prend plus en charge la méthode susmentionnée.

49voto

Tim Points 1759

Pour les pays, les langues ou les devises, vous pouvez utiliser des émojis.

Fonctionne avec pratiquement tous les navigateurs/OS qui prennent en charge l'utilisation des emojis.

select {
 height: 50px;
 line-height: 50px;
 font-size: 12pt;
}

<select name="countries">
    <option value="NL">

22 votes

"Fonctionne avec à peu près tous les navigateurs/OS qui supportent l'utilisation des emojis" .... sauf que Windows ne supporte pas les drapeaux emoji.

5 votes

...et Google Chrome non plus, même sous Windows :(

0 votes

@MohammadKermani fonctionne bien.

33voto

Tarik Points 2174

Ma solution est d'utiliser FontAwesome et d'ajouter les images de la bibliothèque en tant que texte ! Vous avez juste besoin des Unicodes et ils se trouvent ici : Fichier de référence FontAwesome pourUnicodes

Voici un exemple de filtre d'état :

<select name='state' style='height: 45px; font-family:Arial, FontAwesome;'>
<option value=''>&#xf039; &nbsp; All States</option>
<option value='enabled' style='color:green;'>&#xf00c; &nbsp; Enabled</option>
<option value='paused' style='color:orange;'>&#xf04c; &nbsp; Paused</option>
<option value='archived' style='color:red;'>&#xf023; &nbsp; Archived</option>
</select>

Notez le font-family:Arial, FontAwesome ; doit être assigné dans le style de la sélection comme dans l'exemple !

1 votes

Cette solution ne fonctionne pas sur l'option, seulement lorsqu'elle est sélectionnée (stylo : codepen.io/wtfgraciano/pen/YMwWqK )

0 votes

Cela fonctionne mais la fonctionnalité dépend du navigateur. Elle fonctionne bien sur Chrome sous Windows par exemple.

0 votes

Que voulez-vous dire par "ajouter des images de bibliothèque en tant que texte" ? Désolé, je ne comprends pas bien, pouvez-vous m'expliquer ?

32voto

bugra ozden Points 171

Vous pouvez utiliser iconselect.js ; Sélection d'icônes/image (combobox, dropdown)

Démonstration et téléchargement ; http://bug7a.github.io/iconselect.js/

enter image description here

Utilisation du HTML ;

<div id="my-icon-select"></div>

Utilisation de Javascript ;

    var iconSelect;

    window.onload = function(){

        iconSelect = new IconSelect("my-icon-select");

        var icons = [];
        icons.push({'iconFilePath':'images/icons/1.png', 'iconValue':'1'});
        icons.push({'iconFilePath':'images/icons/2.png', 'iconValue':'2'});
        icons.push({'iconFilePath':'images/icons/3.png', 'iconValue':'3'});

        iconSelect.refresh(icons);

    };

45 votes

Ce plugin a la "condition" la plus bizarre que j'ai jamais vue ; Le CSS et la fonctionnalité de défilement se cassent si vous avez <!doctype html> défini.

31voto

Alvaro Montoro Points 7782

Vous avez déjà plusieurs réponses qui suggèrent d'utiliser JavaScript/jQuery. Je vais ajouter une alternative qui utilise uniquement HTML et CSS sans aucun JS.

L'idée de base est d'utiliser un ensemble de boutons radio et d'étiquettes (qui activeront/désactiveront les boutons radio), et avec le contrôle CSS que seule l'étiquette associée au bouton radio sélectionné sera affichée. Si vous souhaitez permettre la sélection de plusieurs valeurs, vous pouvez le faire en utilisant des cases à cocher au lieu de boutons radio.

Voici un exemple. Le code peut être un peu plus désordonné (surtout par rapport aux autres solutions) :

.select-sim {
  width:200px;
  height:22px;
  line-height:22px;
  vertical-align:middle;
  position:relative;
  background:white;
  border:1px solid #ccc;
  overflow:hidden;
}

.select-sim::after {
  content:"▼";
  font-size:0.5em;
  font-family:arial;
  position:absolute;
  top:50%;
  right:5px;
  transform:translate(0, -50%);
}

.select-sim:hover::after {
  content:"";
}

.select-sim:hover {
  overflow:visible;
}

.select-sim:hover .options .option label {
  display:inline-block;
}

.select-sim:hover .options {
  background:white;
  border:1px solid #ccc;
  position:absolute;
  top:-1px;
  left:-1px;
  width:100%;
  height:88px;
  overflow-y:scroll;
}

.select-sim .options .option {
  overflow:hidden;
}

.select-sim:hover .options .option {
  height:22px;
  overflow:hidden;
}

.select-sim .options .option img {
  vertical-align:middle;
}

.select-sim .options .option label {
  display:none;
}

.select-sim .options .option input {
  width:0;
  height:0;
  overflow:hidden;
  margin:0;
  padding:0;
  float:left;
  display:inline-block;
  /* fix specific for Firefox */
  position: absolute;
  left: -10000px;
}

.select-sim .options .option input:checked + label {
  display:block;
  width:100%;
}

.select-sim:hover .options .option input + label {
  display:block;
}

.select-sim:hover .options .option input:checked + label {
  background:#fffff0;
}

<div class="select-sim" id="select-color">
  <div class="options">
    <div class="option">
      <input type="radio" name="color" value="" id="color-" checked />
      <label for="color-">
        <img src="http://placehold.it/22/ffffff/ffffff" alt="" /> Select an option
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="red" id="color-red" />
      <label for="color-red">
        <img src="http://placehold.it/22/ff0000/ffffff" alt="" /> Red
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="green" id="color-green" />
      <label for="color-green">
        <img src="http://placehold.it/22/00ff00/ffffff" alt="" /> Green
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="blue" id="color-blue" />
      <label for="color-blue">
        <img src="http://placehold.it/22/0000ff/ffffff" alt="" /> Blue
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="yellow" id="color-yellow" />
      <label for="color-yellow">
        <img src="http://placehold.it/22/ffff00/ffffff" alt="" /> Yellow
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="pink" id="color-pink" />
      <label for="color-pink">
        <img src="http://placehold.it/22/ff00ff/ffffff" alt="" /> Pink
      </label>
    </div>
    <div class="option">
      <input type="radio" name="color" value="turquoise" id="color-turquoise" />
      <label for="color-turquoise">
        <img src="http://placehold.it/22/00ffff/ffffff" alt="" /> Turquoise
      </label>
    </div>
  </div>
</div>

9 votes

Il faut déplacer la souris pour qu'elle se ferme. Peut-on le faire en cliquant et non en déplaçant ou en survolant la souris ? Cela fonctionnerait-il sur les appareils mobiles ou sans souris ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X