Comment puis-je style un <select> liste déroulante avec uniquement du CSS?
Est-il un CSS uniquement au style d'une <select>
déroulante?
J'ai besoin d'un style <select>
formulaire d'autant qu'il est humainement possible, sans JavaScript. Quelles sont les propriétés que je peux utiliser pour le faire en CSS?
Ce code doit être compatible avec tous les principaux navigateurs:
- Internet Explorer 6, 7, et 8
- Firefox
- Safari
Je sais que je peux le faire avec JavaScript: Exemple.
Et je ne parle pas de style simple. Je veux savoir, ce que le mieux que nous puissions faire avec CSS.
J'ai trouvé des questions similaires sur Pile Overflow.
Et cette une sur Doctype.com.
- rien trouvé sur google seulement js solution est là
- Je pense que c'est une question légitime, mais la réponse est "non, pas vraiment" ou "pas comme vous le voulez". Mais personne (ni moi) est à 100% sûr à ce sujet, ce sentiment d'ambiguïté analyses en dessous du lecteur de la peau et de la légitimité de la question interrogés.
- Je sais ce que votre obtenir. Nous serions heureux si vous faites votre question d'une manière plus explicite. De Plus, je crois que j'ai trouvé ce que vous pourriez être à la recherche pour. C'est expérimental, mais regarde ça: cappuccino.org/aristo/showcase
- Merci pour la réponse. Je sais que je peux le faire avec du javascript . votre eaxmple lien est basé sur JS. Pourquoi j'ai posé cette question parce que je voulais savoir, est ce que quelqu'un est là sait ce que nous pouvons faire mieux avec css
- Merci pour la mise à jour de votre question. Le mieux que vous pouvez de manière fiable le faire avec les contraintes que vous avez (CSS uniquement et pas de JS) est de modifier la police de caractères (font), arrière-plan et de premier plan (texte) les couleurs, la taille de la bordure, l'apparence et les couleurs de l'emplacement et de la taille (généralement par l'intermédiaire du paramètre type par le biais de la police). Même alors, vous aurez probablement besoin de faire quelques ajustements à faire de vous assurer que tout est la même sur tous les navigateurs. Je souhaite que je savais d'une meilleure réponse que cela, et peut-être il y en a un que j'ai raté, mais je ne le pense pas.
- Cette tâche me rappelle étrangement quelque chose de boiteux qu'ils aimeraient poser dans un FE interview... mais néanmoins très utile.
- "Mais personne (ni moi) est à 100% sûr à ce sujet" C'est LA raison pour laquelle c'est une bonne question! On doit être sûr de ce genre de choses. Ils sont fondamentaux.
Vous devez vous connecter pour publier un commentaire.
Voici trois solutions:
Solution #1 - apparence: aucun - avec Internet Explorer 10 - 11 solution de contournement (Démo)
--
Pour masquer le défaut flèche ensemble
appearance: none
sur sélectionnez un élément, puis ajouter votre propre flèche avecbackground-image
Prise En Charge Du Navigateur:
appearance: none
a une très bonne prise en charge du navigateur (caniuse) - sauf pour Internet Explorer 11 (et plus tard) et Firefox 34 (et plus tard).Nous pouvons améliorer cette technique et d'ajouter le support pour Internet Explorer 10 et Internet Explorer 11 par ajout de
Si Internet Explorer 9 est un sujet de préoccupation, nous n'avons aucun moyen de retrait de la direction par défaut (ce qui voudrait dire qu'on aurait maintenant deux flèches), mais, on pourrait utiliser un funky Internet Explorer 9 sélecteur.
Au moins annuler notre coutume de flèche, laisser la valeur par défaut sélectionnez la flèche intacte.
Tous ensemble:
CSS:
HTML:
Cette solution est simple et a une bonne prise en charge du navigateur - il devrait normalement suffire.
Si prise en charge du navigateur pour Internet Explorer 9 (et plus tard) et Firefox 34 (et plus tard) est nécessaire alors continuez à lire...
Solution #2 Tronquer le sélectionner l'élément à masquer le défaut de la flèche (démo)
--
(Lire la suite ici)
Envelopper le
select
élément dans un div avec un largeur fixe etoverflow:hidden
.Puis donner le
select
élément d'une largeur d'environ 20 pixels de plus que le div.Le résultat est que par défaut, la flèche de la liste déroulante de la
select
élément sera caché (en raison de laoverflow:hidden
sur le contenant), et vous pouvez placer n'importe quel fond de l'image que vous voulez sur le côté droit de la div.La avantage de cette approche est qu'il est cross-browser (Internet Explorer 8 et les versions ultérieures, WebKit, et Gecko). Cependant, la inconvénient de cette approche est que les options de la liste déroulante déborde sur le côté droit (par 20 pixels qui nous a caché... parce que l'option éléments prennent la largeur de l'élément select).
[Il convient de noter, toutefois, que si la coutume sélectionner l'élément est nécessaire uniquement pour les mobile appareils - alors le problème ci-dessus ne s'applique pas - en raison de la façon dont chaque téléphone en mode natif ouvre l'élément select. Donc pour mobile, cela peut être la meilleure solution.]
CSS:
HTML:
Si la flèche personnalisé est nécessaire sur Firefox - avant Version 35 - mais vous n'avez pas besoin de supporter les anciennes versions d'Internet Explorer - alors continuez à lire...
Solution #3 - Utiliser le
pointer-events
propriété (démo)--
(Lire la suite ici)
L'idée ici est de superposition d'un élément sur le natif de flèche déroulante (pour créer notre propre) et puis interdire les événements de pointeur sur elle.
Avantage: Il fonctionne bien dans WebKit et Gecko. Il semble bon aussi (pas de saillie
option
éléments).Inconvénient: Internet Explorer (Internet Explorer 10 et vers le bas) ne prend pas en charge
pointer-events
, ce qui signifie que vous ne pouvez pas cliquer sur la flèche personnalisé. Aussi, un autre (évident) inconvénient de cette méthode est que vous ne pouvez pas cibler votre nouvelle image de flèche avec un effet hover ou curseur en forme de main, parce que nous avons juste désactivé les événements de pointeur sur eux!Cependant, avec cette méthode, vous pouvez utiliser Moderniste ou des commentaires conditionnels pour faire de l'Internet Explorer de revenir à la norme construite en flèche.
NB: Être que Internet Explorer 10 ne prend pas en charge
conditional comments
plus: Si vous souhaitez utiliser cette approche, vous devriez probablement utiliser Modernizr. Cependant, il est toujours possible d'exclure le pointeur d'événements de la CSS à partir d'Internet Explorer 10 avec un CSS hack décrit ici.CSS:
HTML:
select
flèche dans Firefox en utilisant-moz-appearance:none
: gist.github.com/joaocunha/6273016label
élément est requis) parce que::after
sur unselect
élément ne permet pas de faire quoi que ce soit dans Firefox.outline: none;
propriété pour les éléments de formulaire, c'est presque un défaut pour moi. Pour info, il supprime le bleu-ish extérieure glow propriété de chrome ajoute par défaut. Vous devez être réfléchie sur la présentation de vos utilisateurs avec un certain type d'aide visuelle si!C'est possible, mais malheureusement pour la plupart dans WebKit, navigateurs dans la mesure où nous, en tant que développeurs, l'exigent. Voici l'exemple de CSS style recueillies à partir de Chrome panneau d'options via les outils de développement de l'inspecteur, l'amélioration de match actuellement pris en charge les propriétés CSS dans la plupart des navigateurs modernes:
Lorsque vous exécutez ce code sur toutes les pages dans un navigateur basé sur WebKit, il devrait modifier l'apparence de la zone de sélection, supprimer standard de l'OS de la flèche et ajouter un PNG-flèche, mettre de l'espacement avant et après l'étiquette, presque tout ce que vous voulez.
La partie la plus importante est
appearance
de la propriété, ce qui change la façon dont l'élément se comporte.Il fonctionne parfaitement dans presque tous les navigateur basé sur WebKit, y compris les téléphones mobiles, bien que Gecko ne prend pas en charge
appearance
ainsi que WebKit, il me semble.text-indent: 0.01px; text-overflow: "";
il fonctionnera encore mieuxL'sélectionnez l'élément et sa fonction de menu déroulant sont difficiles à coiffer.
les attributs de style pour sélectionner l'élément par Chris Heilmann confirme ce que Ryan Dohery dit dans un commentaire à la première réponse:
La plus grande incohérence que j'ai remarqué lors d'un style de sélectionner des listes déroulantes est Safari et Google Chrome rendu (Firefox est entièrement personnalisable via CSS). Après quelques recherche à travers les profondeurs obscures de l'Internet, je suis tombé sur le suivant, qui a presque complètement résout mes scrupules avec WebKit:
Safari et Google Chrome fixer:
Ce n'est, cependant, enlever la flèche de menu déroulant. Vous pouvez ajouter une flèche de menu déroulant à l'aide d'un voisin
div
avec un arrière-plan, marge négative ou absolument positionnée sur l'sélectionnez le menu déroulant.*Plus d'informations et d'autres variables sont disponibles dans Propriété CSS: -webkit-appearance.
J'ai eu exactement ce problème, sauf que je ne pouvais pas utiliser des images et n'était pas limitée par la prise en charge du navigateur. Ce doit être «spec» et avec de la chance de commencer à travailler partout finalement.
Il utilise des couches de rotation de couches de fond de «découper» une flèche de menu déroulant, comme les pseudo-éléments ne fonctionnerait pas pour la sélectionner l'élément.
Edit: Dans cette version mise à jour je suis en utilisant le CSS variables et un tout petit thématisation du système.
CSS:
HTML:
-moz-appearance: none;
<select>
balises peuvent être de style par le biais de CSS comme tout autre élément HTML sur une page HTML dans un navigateur. Ci-dessous est une (trop simple) exemple de position sélectionnez un élément sur la page, et de rendre le texte des options en bleu.Exemple de fichier HTML (selectExample.html):
Exemple de fichier CSS (selectExample.css):
Ici est une version qui fonctionne dans tous les navigateurs modernes. La clé est d'utiliser
appearance:none
qui supprime la mise en forme par défaut. Puisque l'ensemble de la mise en forme est parti, vous devez ajouter de la flèche qui différencie visuellement le sélectionner à partir de l'entrée.De travail exemple: https://jsfiddle.net/gs2q1c7p/
CSS:
HTML:
Le blog Comment CSS forme de liste déroulante style pas de JavaScript fonctionne pour moi, mais il échoue dans Opéra si:
CSS:
HTML:
Je suis à votre cas, à l'aide de Bootstrap. C'est la solution la plus simple qui fonctionne:
CSS:
HTML:
Remarque: le base64 truc est
fa-chevron-bas
en SVG.Dans les navigateurs modernes, il est relativement indolore pour le style de la
<select>
en CSS. Avecappearance: none
la seule partie délicate est de remplacer la flèche (si c'est ce que vous voulez). Voici une solution qui utilise une lignedata:
URI avec texte brut SVG:CSS:
HTML:
Le reste de la mise en plis (frontières, le rembourrage, les couleurs, etc.) est assez simple.
Cela fonctionne dans tous les navigateurs, j'ai juste essayé (Firefox 50, Chrome 55, Edge 38, et Safari 10). Une remarque à propos de Firefox, c'est que si vous voulez utiliser le
#
de caractères dans les données URI (par exemplefill: #000
), vous devez échapper (fill: %23000
).height
et/ouwidth
attribut sur la<svg>
tag, au lieu de la propriété CSSbackground-size
.Utiliser le
clip
bien de recadrer les frontières et la flèche de laselect
élément, puis ajouter vos propres styles de remplacement de l'emballage:HTML:
Utiliser une deuxième sélection avec zéro opacité pour rendre le bouton cliquable:
HTML:
Coordonnées diffèrent entre Webkit et les autres navigateurs, mais un @media query peut couvrir que.
Références
Oui. Vous pouvez le style de n'importe quel élément HTML par la balise de nom, comme ceci:
Bien sûr, vous pouvez également utiliser une classe CSS pour le style, comme tous les autres éléments:
Modifier cet élément n'est pas recommandée, mais si vous voulez essayer c'est comme tout autre élément HTML.
Exemple de modification:
Personnalisée Sélectionnez styles CSS
Testé dans Internet Explorer (10 et 11), Edge, Firefox, et Chrome
CSS:
HTML:
Il utilise une couleur d'arrière-plan pour sélectionner les éléments et j'ai enlevé l'image..
Un très bel exemple, qui utilise
:after
et:before
à faire le truc, c'est Style de Boîte de sélection avec CSS3 | CSSDeckVoici une solution basée sur mes idées favorites de cette discussion. Ce style permet un <select> élément directement, sans aucune majoration.
Il fonctionne Internet Explorer 10 (et plus tard), un coffre-fort de secours pour Internet Explorer 8/9. Une mise en garde pour ces navigateurs, c'est que l'image de fond doit être positionné et être suffisamment petit pour se cacher derrière le natif de contrôle développer.
HTML
SCSS
CodePen
http://codepen.io/ralgh/pen/gpgbGx
Comme pour Internet Explorer 10, vous pouvez utiliser le
::-ms-développez
pseudo-sélecteur d'élément de style, et de se cacher, la flèche du menu déroulant de l'élément.Le reste de style, devrait être semblable à d'autres navigateurs.
Voici une base de fourche de Danield de jsfiddle qui s'applique soutien pour IE10
Il existe une manière simple.
Vérifier ce violon, et pardonnez-moi l'overstyling: https://jsfiddle.net/dkellner/7ac9us70/
Le truc derrière: dès que le <select> tag obtient une propriété appelée "taille", il va se comporter comme un fixe-hauteur de de liste, et, soudain, pour une raison quelconque, vous permet de le style de l enfer hors de lui. Maintenant, à proprement parler, la liste fixe est un des effets secondaires - mais il nous aide simplement plus car nous l'utilisons pour le "tombé en bas de regard".
Un exemple minimal:
(pour faire simple je l'ai fait avec jQuery - mais vous pouvez faire la même sans elle)
Notes
Cette solution vous donne plus que juste un select: la valeur est également modifiable manuellement. Utilisez la propriété en lecture seule si vous préférez la valeur par défaut, sélectionnez-manière limitée.
Pour maximiser style possibilités, < "optgroup" > balises ne sont pas autour de leurs enfants, ils sont transférés avant eux. C'est intentionnel, c'est visuellement plus clair, et ils sont heureux de travailler comme ça, ne vous inquiétez pas.
Javascripts: oui, je sais que l'OP a dit "pas de Javascript" mais je l'ai compris comme s'il vous plaît ne vous embêtez pas avec les plugins, ce qui est bien. Vous n'avez pas besoin de toutes les bibliothèques pour celui-ci. Même pas jQuery, comme je l'ai dit, c'est seulement pour la clarté de l'exemple.
Vous avez certainement devraient faire comme dans Style de sélectionner, de "optgroup" et des options avec le CSS. Dans beaucoup de façons, couleur d'arrière-plan et la couleur sont juste ce dont vous avez besoin généralement d'options de style, pas la sélectionner.
Vous pouvez également ajouter un hover style à la liste déroulante.
CSS:
HTML:
Un CSS et HTML seule solution
Il semble compatible avec Chrome, Firefox et Internet Explorer 11. Mais s'il vous plaît laissez vos commentaires sur d'autres navigateurs web.
Comme suggéré par Danield réponse, j'enveloppe mes sélectionner dans un div (même deux divs pour x-compatibilité du navigateur) pour obtenir le comportement attendu.
Voir http://jsfiddle.net/bjap2/
HTML:
Avis les deux div wrapper.
Également remarquer que l'extra div ajouté à la place de la flèche vers le bas bouton où vous le souhaitez (position absolue), ici on le met sur la gauche.
CSS
La troisième méthode en Danield réponse peuvent être améliorés afin de travailler avec placez-les effets et autres événements de la souris. Assurez-vous juste que le "bouton"-élément vient juste après le sélectionner l'élément dans les balises. Ensuite, la cible à l'aide de l' + sélecteur CSS:
HTML:
CSS:
Ce sera, cependant, montrent l'effet hover quand le curseur n'importe où sur l'sélectionnez l'élément, et pas seulement sur le "bouton".
Je suis en utilisant cette méthode en combinaison avec Angulaire (depuis que mon projet se trouve être un Angulaire de l'application de toute façon), afin de couvrir l'ensemble de sélectionner des éléments, et de laisser Angulaire afficher le texte de l'option sélectionnée dans le "bouton"-élément. Dans ce cas, il est parfaitement logique que le hover-effet s'applique lorsque le curseur n'importe où sur la sélectionner.
Il ne fonctionne pas sans JavaScript, donc si vous voulez faire cela, et votre site doit fonctionner sans JavaScript, vous devez vous assurer que votre script ajoute les éléments et les classes nécessaires pour la mise en valeur. De cette façon, un navigateur sans JavaScript va tout simplement obtenir un normal, non stylé, sélectionnez, au lieu d'un style badge qui ne met pas à jour correctement.