Voici une solution basée sur mes idées préférées de cette discussion. Elle permet de styliser un élément <select> directement sans balisage supplémentaire.
Il fonctionne avec Internet Explorer 10 (et versions ultérieures) avec une solution de repli sûre pour Internet Explorer 8/9. Pour ces navigateurs, l'image d'arrière-plan doit être positionnée et suffisamment petite pour être cachée derrière le contrôle d'expansion natif.
HTML
<select name='options'>
<option value='option-1'>Option 1</option>
<option value='option-2'>Option 2</option>
<option value='option-3'>Option 3</option>
</select>
SCSS
body {
padding: 4em 40%;
text-align: center;
}
select {
$bg-color: lightcyan;
$text-color: black;
appearance: none; // Using -prefix-free http://leaverou.github.io/prefixfree/
background: {
color: $bg-color;
image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/1255/caret--down-15.png");
position: right;
repeat: no-repeat;
}
border: {
color: mix($bg-color, black, 80%);
radius: .2em;
style: solid;
width: 1px;
right-color: mix($bg-color, black, 60%);
bottom-color: mix($bg-color, black, 60%);
}
color: $text-color;
padding: .33em .5em;
width: 100%;
}
// Removes default arrow for Internet Explorer 10 (and later)
// Internet Explorer 8/9 gets the default arrow which covers the caret
// image as long as the caret image is smaller than and positioned
// behind the default arrow
select::-ms-expand {
display: none;
}
CodePen
http://codepen.io/ralgh/pen/gpgbGx
58 votes
Je pense que c'est une question légitime, mais la réponse est "non, pas vraiment" ou "pas comme vous le souhaitez". Mais personne (ni moi) n'en est sûr à 100%, ce sentiment d'ambiguïté s'insinue dans la peau du lecteur et la légitimité de la question est remise en question.
1 votes
@Jitendra, je sais où vous voulez en venir. Nous aimerions que vous rendiez votre question plus explicite. De plus, je pense avoir trouvé ce que vous cherchez. C'est expérimental, mais regardez ça : cappuccino.org/aristo/showcase
1 votes
@jeremyosborne - Merci pour la réponse. Je sais que je peux le faire avec javascript. Votre lien eaxmple est basé sur JS. J'ai posé cette question parce que je voulais savoir si quelqu'un sait ce que l'on peut faire de mieux avec css uniquement.
1 votes
@Jitendra Merci de mettre à jour votre question. Le mieux que vous puissiez faire de manière fiable avec les contraintes dont vous disposez (CSS uniquement et pas de JS) est de modifier la police de caractères, les couleurs d'arrière-plan et de premier plan (texte), la taille des bordures, l'apparence et les couleurs, le placement et la taille (généralement via le paramètre de type via la police). Même dans ce cas, vous devrez probablement procéder à quelques ajustements pour vous assurer que l'apparence est la même dans tous les navigateurs. J'aimerais connaître une meilleure réponse que celle-là, et peut-être en existe-t-il une que j'ai manquée, mais je ne le pense pas.
0 votes
Cette tâche me rappelle étrangement quelque chose de boiteux qu'ils demanderaient dans un entretien FE... mais néanmoins très utile.
0 votes
"Mais personne (ni moi) n'en est sûr à 100%" C'est LA raison pour laquelle cette question est géniale ! Nous devons être sûrs de ce genre de choses. Elles sont fondamentales.