J'essaie de styliser un select
élément en utilisant CSS3. J'obtiens les résultats que je souhaite dans WebKit (Chrome / Safari), mais Firefox ne joue pas bien (je ne suis même pas dérangé par IE). J'utilise la appearance
propriété CSS3 , mais pour une raison quelconque, je ne peux pas secouer l'icône déroulante de Firefox.
Voici un exemple de ce que je fais: http://jsbin.com/aniyu4/2/edit
#dropdown {
-moz-appearance: none;
-webkit-appearance: none;
appearance: none;
background: transparent url('example.png') no-repeat right center;
padding: 2px 30px 2px 2px;
border: none;
}
Comme vous pouvez le voir, je n'essaye rien d'extraordinaire. Je veux simplement supprimer les styles par défaut et ajouter ma propre flèche déroulante. Comme je l'ai dit, super dans WebKit, pas génial dans Firefox. Apparemment, le -moz-appearance: none
ne supprime pas l'élément déroulant.
Des idées? Non, JavaScript n'est pas une option
-moz-appearance
propriété CSS3, j'utilise-moz-appearance: none;
et cela semble fonctionner dans la version 35.0.1.@-moz-document url-prefix() { select { width: 105%; overflow: hidden; } }
Réponses:
D'accord, je sais que cette question est vieille, mais 2 ans plus tard et Mozilla n'ont rien fait.
J'ai trouvé une solution de contournement simple.
Cela supprime essentiellement tout le formatage de la boîte de sélection dans Firefox et enveloppe un élément span autour de la boîte de sélection avec votre style personnalisé, mais ne devrait s'appliquer qu'à Firefox.
Dites que c'est votre menu de sélection:
Et supposons que la classe css 'css-select' est:
Dans Firefox, cela s'afficherait avec le menu de sélection, suivi de la vilaine flèche de sélection de Firefox, suivie de votre belle apparence personnalisée. Pas idéal.
Maintenant, pour que cela se passe dans Firefox, ajoutez un élément span avec la classe 'css-select-moz':
Ensuite, corrigez le CSS pour masquer la flèche sale de mozilla avec -moz-apparence: window et lancez la flèche personnalisée dans la classe de span 'css-select-moz', mais ne l'affichez que sur mozilla, comme ceci:
Plutôt cool de ne tomber que sur ce bug il y a 3 heures (je suis nouveau dans le webdesign et complètement autodidacte). Cependant, cette communauté m'a indirectement fourni tellement d'aide, j'ai pensé qu'il était temps que je donne quelque chose en retour.
Je ne l'ai testé que dans la version 18 de Firefox (mac), puis 22 (après la mise à jour).
Tous les commentaires sont les bienvenus.
la source
Mise à jour: cela a été corrigé dans Firefox v35. Voir l' essentiel pour plus de détails.
Je viens de comprendre comment supprimer la flèche de sélection de Firefox . L'astuce consiste à utiliser un mélange de
-prefix-appearance
,text-indent
ettext-overflow
. C'est du CSS pur et ne nécessite aucun balisage supplémentaire.Testé sur Windows 8, Ubuntu et Mac, dernières versions de Firefox.
Exemple en direct: http://jsfiddle.net/joaocunha/RUEbp/1/
En savoir plus sur le sujet: https://gist.github.com/joaocunha/6273016
la source
padding-right:10px;
à la<select>
volonté "pousser" la flèche désormais invisible vers la gauche. Bottomline: Firefox MASQUE la flèche, Chrome la SUPPRIME. Mettra à jour mes écrits en conséquence, merci pour cela.-moz-appearence: window
ne fonctionne pas avec des arrière-plans transparents (dessinez un bg laid sur place, au moins sur Firefox Linux)L'astuce qui fonctionne pour moi est de rendre la largeur de sélection supérieure à 100% et d'appliquer le débordement: hidden
C'est le seul moyen pour le moment de masquer la flèche déroulante dans FF.
BTW. si vous voulez de beaux menus déroulants, utilisez http://harvesthq.github.com/chosen/
la source
Mise à jour importante:
Depuis Firefox V35, la propriété d'apparence fonctionne désormais !!
À partir des notes de publication officielles de Firefox sur V35 :
Alors maintenant, pour masquer la flèche par défaut, c'est aussi simple que d'ajouter les règles suivantes sur notre élément de sélection:
DEMO
la source
Nous avons trouvé un moyen simple et décent de le faire. C'est cross-browser, dégradable et ne casse pas un post de formulaire. Commencez par définir la zone de sélection
opacity
sur0
.c'est pour que vous puissiez toujours cliquer dessus
Ensuite, créez un div avec les mêmes dimensions que la boîte de sélection. Le div doit se trouver sous la boîte de sélection comme arrière-plan. Utilisez
{ position: absolute }
etz-index
pour y parvenir.Mettez à jour le fichier innerHTML de la div avec javascript. Easypeasy avec jQuery:
C'est tout! Stylisez simplement votre div au lieu de la zone de sélection. Je n'ai pas testé le code ci-dessus, vous aurez donc probablement besoin de le modifier. Mais j'espère que vous comprenez l'essentiel.
Je pense que cette solution bat
{-webkit-appearance: none;}
. Ce que les navigateurs devraient tout au plus faire est de dicter l'interaction avec les éléments du formulaire, mais certainement pas la manière dont ils s'affichent initialement sur la page car cela rompt la conception du site.la source
Essayez de cette façon:
Ensuite, vous pouvez utiliser une image différente comme arrière-plan et la placer:
Il existe un autre moyen pour les navigateurs moz:
Si vous avez défini une largeur à sélectionner, cette propriété poussera le bouton de la boîte de dépôt par défaut sous la zone de sélection.
Ça marche pour moi! ;)
la source
Bien que ce ne soit pas une solution complète, j'ai trouvé que…
… Fonctionne dans une certaine mesure. Vous ne pouvez pas changer l'arrière-plan (-color ou -image) mais l'élément peut être rendu invisible avec color: transparent. Pas parfait mais c'est un début et vous n'avez pas besoin de remplacer l'élément de niveau système par un élément js.
la source
window
avait cet effet, malheureusement, j'avais besoin de définir l'image de fond. C'est dommage que ce ne soit pas très bon dans Firefox.media="print"
bloc css avecselect {-moz-appearance: window;}
et supprimera les flèches et les arrière-plans de toutes les sélections sur FF (pour les autres navigateurs, essayez apparence ou -webkit-looks) pour qu'ils ressemblent à du texte brut ou à des titresJe pense avoir trouvé la solution compatible avec FF31 !!!
Voici deux options qui sont bien expliquées sur ce lien:
http://www.currelis.com/hiding-select-arrow-firefox-30.html
J'ai utilisé l'option 1: Rodrigo-Ludgero a posté ce correctif sur Github, dont un en ligne démo. J'ai testé cette démo sur Firefox 31.0 et elle semble fonctionner correctement. Testé également sur Chrome et IE. Voici le code html:
et le css:
http://jsbin.com/pozomu/4/edit
Cela fonctionne très bien pour moi!
la source
Malheureusement pour vous c'est "quelque chose d'extraordinaire". Normalement, ce n'est pas aux auteurs Web de redessiner les éléments de formulaire. De nombreux navigateurs ne vous permettent pas de les styliser, afin que l'utilisateur puisse voir les contrôles du système d'exploitation auxquels il est habitué.
La seule façon de le faire de manière cohérente sur les navigateurs et les systèmes d'exploitation est d'utiliser JavaScript et de remplacer le
select
éléments par des éléments «DHTML».L'article suivant montre trois plugins basés sur jQuery qui vous permettent de le faire (c'est un peu vieux, mais je n'ai rien trouvé de courant pour le moment)
http://www.queness.com/post/204/25-jquery-plugins-that-enhance-and-beautify-html-form-elements#1
la source
appearance
propriété est de donner aux développeurs le contrôle sur l'apparence des éléments de formulaire, car utiliser JavaScript pour cela est une solution horrible. Les navigateurs ne devraient pas prendre de décision sur l'apparence de quelque chose dans une page - c'est une décision UX, pas une décision du fournisseur de navigateur. Malheureusement, ce n'est pas encore bien pris en charge. Peut-être dans une autre année.la source
Je stylise la sélection aime juste ça
Cela fonctionne pour moi dans FF, Safari et Chrome dans toutes les versions que j'ai testées.
Dans IE je mets:
Vous pouvez également: .yourclass :: - ms-expand {display: none; } .yourid :: - ms-exapan {affichage: aucun; }
la source
Je sais que cette question est un peu ancienne, mais comme elle apparaît sur google, et c'est une "nouvelle" solution:
appearance: normal
Semble bien fonctionner dans Firefox pour moi (version 5 maintenant). mais pas dans Opera et IE8 / 9Comme solution de contournement pour Opera et IE9, j'ai utilisé le
:before
pseudosélecteur pour créer une nouvelle boîte blanche et la placer au-dessus de la flèche.Malheureusement, dans IE8, cela ne fonctionne pas . La boîte est rendue correctement, mais la flèche dépasse de toute façon ...: - /
L'utilisation
select:before
fonctionne bien dans Opera, mais pas dans IE. Si je regarde les outils de développement, je vois qu'il lit correctement les règles, puis les ignore simplement (elles sont barrées). J'utilise donc un<span class="selectwrap">
autour du réel<select>
.Vous devrez peut-être modifier un peu cela, mais cela fonctionne pour moi!
Avis de non-responsabilité: J'utilise ceci pour obtenir une bonne copie papier d'une page Web avec des formulaires, donc je n'ai pas besoin de créer une deuxième page. Je ne suis pas un haxx0r 1337 qui veut des barres de défilement rouges, des
<marquee>
balises, etc. :-) Veuillez ne pas appliquer de style excessif aux formulaires à moins que vous n'ayez une très bonne raison.la source
-moz-appearance: normal
ne semble pas être une option valide dans le Fx 9, et-moz-appearance: none
(ce qui est valide) ne supprime pas la flèche vers le bas.<select> hi
.Utilisez la
pointer-events
propriété.L'idée ici est de superposer un élément sur la flèche déroulante native (pour créer notre flèche personnalisée), puis d'interdire les événements de pointeur dessus. [voir ce post ]
Voici un FIDDLE fonctionnel utilisant cette méthode.
De plus, dans cette réponse SO, j'ai discuté de ceci et d'une autre méthode plus en détail.
la source
Cela fonctionne (testé sur Firefox 23.0.1):
la source
radio-container
valeur d'un objet sélectionné. Parcourez la référence mozilla -moz-apparence pour obtenir une valeur appropriée (j'ai utilisémenulist-text
ce qui cache la flèche de sélection dans FF 31)en s'appuyant sur la réponse de @ JoãoCunha, un style css qui est utile pour plus d'un navigateur
la source
Suite à la réponse de Joao Cunha , ce problème est maintenant sur la liste des tâches de Mozilla et est ciblé pour la version 35.
Pour ceux qui le souhaitent, voici une solution de contournement de Todd Parker, référencée sur le blog de Cunha, qui fonctionne aujourd'hui:
http://jsfiddle.net/xvushd7x/
HTML:
CSS:
la source
Depuis Firefox 35, "
-moz-appearance:none
" que vous avez déjà écrit dans votre code, supprimez enfin le bouton fléché comme vous le souhaitez.C'était un bug résolu depuis cette version.
la source
Beaucoup de discussions se déroulent ici et là mais je ne vois pas de solution appropriée à ce problème. Enfin fini par écrire un petit code Jquery + CSS pour faire ce HACK sur IE et Firefox.
Calculez la largeur de l'élément (SELECT Element) à l'aide de Jquery. Ajoutez un wrapper autour de l'élément Select et gardez le dépassement caché pour cet élément. Assurez-vous que la largeur de ce wrapper est appox. 25px de moins que celui de SELECT Element. Cela pourrait être facilement fait avec Jquery. Alors maintenant, notre icône est partie ..! et il est temps d'ajouter notre icône d'image sur l'élément SELECT ... !!! Ajoutez simplement quelques lignes simples pour ajouter un arrière-plan et vous avez terminé .. !! Assurez-vous d'utiliser le débordement caché pour l'emballage extérieur,
Voici un exemple de code qui a été fait pour Drupal. Cependant pourrait être utilisé pour d'autres également en supprimant quelques lignes de code spécifiques à Drupal.
La solution fonctionne sur tous les navigateurs IE, Chrome et Firefox Pas besoin d'ajouter des hachages de largeurs fixes à l'aide de CSS. Tout est géré dynamiquement à l'aide de JQuery.!
Plus décrit sur: - http://northwebstudio.com/blogs/1/jquery/remove-drop-down-arrow-html-select-element-using-jquery-and-css
la source
essayez ce css
Ça marche
la source
La
appearance
propriété de CSS3 n'autorise pas lanone
valeur. Jetez un œil à la référence W3C . Donc, ce que vous essayez de faire n'est pas valide (en effet Chrome ne devrait pas l'accepter aussi).Malheureusement, nous n'avons vraiment aucune solution multi-navigateurs pour masquer cette flèche en utilisant du CSS pur. Comme indiqué, vous aurez besoin de JavaScript.
Je vous suggère d'envisager d'utiliser le plugin selectBox jQuery . C'est très léger et bien fait.
la source
none
EST une valeur que Firefox prétend prendre en charge: developer.mozilla.org/en/CSS/-moz-appearance Alors que le style des éléments de formulaire, dans le passé, n'était réalisable que via JavaScript, tout l'intérêt de laappearance
propriété est de s'éloigner à partir de ce. Les fournisseurs de navigateurs ne devraient pas prendre de décisions UX pour les développeurs. Malheureusement, il semble que ce soit encore un peu trop nouveau pour être utilisé efficacement.-moz
acceptenone
(même si cela a fonctionné) ne serait pas correct de l'utiliser. Encore plus concernant un navigateur comme Firefox, qui s'est toujours vanté de suivre exactement les normes.Vous pouvez augmenter la largeur de la boîte et rapprocher la flèche de la gauche de la flèche. cela vous permet alors de couvrir la flèche avec un div blanc vide.
Jetez un œil: http://jsbin.com/aniyu4/86/edit
la source
Accepteriez-vous des modifications mineures du code HTML?
Quelque chose comme mettre une balise div contenant la balise de sélection.
Regarde.
la source
Ou, vous pouvez couper la sélection. Quelque chose du genre:
Cela devrait couper 30px du côté droit de la boîte de sélection, en supprimant la flèche. Fournissez maintenant une image d'arrière-plan de 170 pixels et le tour est joué, sélectionnez le style
la source
C'est un énorme hack, mais
-moz-appearance: menulist-text
ça pourrait faire l'affaire.la source
J'avais le même problème. Il est facile de le faire fonctionner sur FF et Chrome, mais sur IE (8+ que nous devons prendre en charge) les choses se compliquent. La solution la plus simple que j'ai pu trouver pour les éléments de sélection personnalisés qui fonctionnent "partout où j'ai essayé", y compris IE8, utilise .customSelect ()
la source
Une astuce utile pour moi est de définir l'affichage (sélectionne) sur
inline-flex
. Coupe la flèche à droite de mon bouton de sélection. Sans tout le code ajouté.-webkit appearance
encore nécessaire pour Chrome, etc ...la source
La réponse de Jordan Young est la meilleure. Mais si vous ne pouvez pas ou ne voulez pas modifier votre code HTML, vous pouvez envisager de supprimer simplement la flèche vers le bas personnalisée servie à Chrome, Safari, etc. et de laisser la flèche par défaut de Firefox - mais sans doubles flèches. Pas idéal, mais une bonne solution rapide qui n'ajoute pas de HTML et ne compromet pas votre apparence personnalisée dans d'autres navigateurs.
CSS:
la source
hackity hack ... une solution qui fonctionne dans tous les navigateurs que j'ai testés (Safari, Firefox, Chrome). N'ayez aucun IE qui traîne, donc ce serait bien si vous pouviez tester et commenter:
CSS, avec image encodée en URL:
http://codepen.io/anon/pen/myPEBy
J'utilise l'élément: après pour couvrir la flèche laide. Puisque select ne prend pas en charge: après, j'ai besoin d'un wrapper avec lequel travailler. Maintenant, si vous cliquez sur la flèche, la liste déroulante ne l'enregistrera pas ... à moins que votre navigateur
pointer-events: none
ne le prenne en charge , ce que tout le monde sauf IE10- fait: http://caniuse.com/#feat=pointer-eventsDonc, pour moi, c'est parfait - une solution agréable, propre et sans maux de tête, du moins par rapport à toutes les autres options qui incluent javascript.
tl; dr:
Si les utilisateurs IE10 (ou inférieur) cliquent sur la flèche, cela ne fonctionnera pas. Fonctionne assez bien pour moi ...
la source
Si cela ne vous dérange pas de jouer avec JS, j'ai écrit un petit plugin jQuery qui vous aide à le faire. Avec lui, vous n'avez pas à vous soucier des préfixes des fournisseurs.
Violon ici: JS Fiddle
La condition est que vous devez styliser la sélection à partir de zéro (cela signifie définir l'arrière-plan et la bordure), mais vous voulez probablement le faire quand même.
De plus, puisque la fonction remplace la sélection d'origine par un div, vous perdrez tout style effectué directement sur le sélecteur de sélection dans votre CSS. Donnez donc à l'élément select une classe et stylisez la classe.
Prend en charge la plupart des navigateurs modernes, si vous souhaitez cibler des navigateurs plus anciens, vous pouvez essayer une ancienne version de jQuery, mais peut-être devrez-vous remplacer on () par bind () dans la fonction (non testé)
la source
Les autres réponses ne semblaient pas fonctionner pour moi, mais j'ai trouvé ce hack. Cela a fonctionné pour moi (juillet 2014)
Dans mon cas, j'avais également un champ de saisie woocommerce donc j'ai utilisé ceci
Mise à jour de ma réponse pour afficher sélectionner plutôt que saisir
la source