J'utilise des espaces réservés pour les entrées de texte, ce qui fonctionne très bien. Mais j'aimerais également utiliser un espace réservé pour mes boîtes de sélection. Bien sûr, je peux simplement utiliser ce code:
<select>
<option value="">Select your option</option>
<option value="hurr">Durr</option>
</select>
Mais le "Sélectionnez votre option" est en noir au lieu de gris clair. Donc, ma solution pourrait éventuellement être basée sur CSS. jQuery est très bien aussi.
Cela ne fait que griser l'option dans la liste déroulante (donc après avoir cliqué sur la flèche):
option:first {
color: #999;
}
La question est: comment les gens créent-ils des espaces réservés dans des boîtes de sélection? Mais il a déjà été répondu, applaudissements.
Et en utilisant cela, la valeur sélectionnée est toujours grise (même après avoir sélectionné une option réelle):
select {
color: #999;
}
html
css
html-select
placeholder
Thomas
la source
la source
Réponses:
Une réponse non CSS - pas de JavaScript / jQuery:
la source
<select> <option value="" disabled selected>Select your option</option> </select>
Je suis juste tombé sur cette question, et voici ce qui fonctionne dans Firefox et Chrome (au moins):
L' option Désactivé arrête d'
<option>
être sélectionnée à la fois avec la souris et le clavier, tandis que le simple fait d'utiliser'display:none'
permet à l'utilisateur de toujours sélectionner via les flèches du clavier. Le'display:none'
style rend simplement la zone de liste «belle».Remarque: L'utilisation d'un
value
attribut vide sur l'option "espace réservé" permet à la validation (attribut requis) de contourner le fait d'avoir "l'espace réservé", donc si l'option n'est pas modifiée, mais est requise, le navigateur doit inviter l'utilisateur à choisir une option de la liste.Mise à jour (juillet 2015):
Il est confirmé que cette méthode fonctionne dans les navigateurs suivants:
Mise à jour (octobre 2015):
J'ai supprimé l'
style="display: none"
attribut en faveur de HTML5hidden
qui a un large soutien. L'hidden
élément a des traits similaires à ceuxdisplay: none
de Safari, Internet Explorer, (Project Spartan doit être vérifié) où leoption
est visible dans la liste déroulante, mais il n'est pas sélectionnable.Mise à jour (janvier 2016):
Lorsque l'
select
élément est,required
il permet d'utiliser la:invalid
pseudo-classe CSS qui vous permet de styliser l'select
élément lorsqu'il est dans son état "espace réservé".:invalid
fonctionne ici en raison de la valeur vide dans l'espace réservéoption
.Une fois qu'une valeur a été définie, la
:invalid
pseudo-classe sera supprimée. Vous pouvez également éventuellement utiliser:valid
si vous le souhaitez.La plupart des navigateurs prennent en charge cette pseudo-classe. Internet Explorer 10 et versions ultérieures. Cela fonctionne mieux avec des
select
éléments de style personnalisé ; dans certains cas, c'est-à-dire (Mac dans Chrome / Safari), vous devrez modifier l'apparence par défaut de laselect
boîte afin que certains styles s'affichent, c'est-à-direbackground-color
etcolor
. Vous pouvez trouver des exemples et plus sur la compatibilité sur developer.mozilla.org .Apparence d'élément natif Mac dans Chrome:
Utilisation de l'élément de bordure modifié Mac dans Chrome:
la source
display:none
style.:invalid
avant moi.color
les options de prise en charge des navigateurs comme dans ce violon . Cela contribuerait à renforcer le fait que le disbledoption
est un espace réservé. (Edit: Je vois que MattW a déjà couvert cela dans sa réponse)Pour un champ obligatoire, il existe une solution purement CSS dans les navigateurs modernes:
la source
required
pour fonctionner donc c'est inutile si vous voulez que le champ soit optionnel.:required
sélecteur n'est pas pris en charge dans IE8 et les versions antérieures. Le:invalid
sélecteur n'est pas pris en charge dans IE9 et versions antérieures. quirksmode.org/css/selectorsrequired
condition est ce qui amène le navigateur à appliquer la:invalid
pseudo-classe lorsque l'espace réservé est sélectionné.[value=""]
ne fonctionnera pas comme un remplacement car ce qui est mis à jour par l'interaction de l'utilisateur est la propriété value mais cette syntaxe CSS fait référence à un attribut (inexistant) .Quelque chose comme ça:
HTML:
CSS:
JavaScript:
Exemple de travail: http://jsfiddle.net/Zmf6t/
la source
Je viens d'ajouter un attribut caché dans un
option
comme ci-dessous. Cela fonctionne bien pour moi.la source
La solution ci-dessous fonctionne également dans Firefox, sans JavaScript:
la source
J'ai eu le même problème et pendant la recherche, je suis tombé sur cette question, et après avoir trouvé une bonne solution pour moi, je voudrais la partager avec vous au cas où quelqu'un pourrait en bénéficier.
C'est ici:
HTML:
CSS:
JavaScript:
Une fois que le client a fait la première sélection, il n'y a plus besoin de couleur grise, donc le code JavaScript supprime la classe
place_holder
.Grâce à @ user1096901, comme solution de contournement pour le navigateur Internet Explorer, vous pouvez à nouveau ajouter la
place_holder
classe au cas où la première option serait à nouveau sélectionnée :)la source
Il n'y a aucun besoin de JavaScript ou CSS, juste trois attributs:
Il ne montre pas du tout l'option; il définit simplement la valeur de l'option comme valeur par défaut.
Cependant, si vous n'aimez tout simplement pas un espace réservé de la même couleur que le reste , vous pouvez le corriger en ligne comme ceci:
De toute évidence, vous pouvez séparer les fonctions et au moins le CSS de la sélection dans des fichiers séparés.
Remarque: la fonction onload corrige un bogue de rafraîchissement.
la source
L'utilisateur ne doit pas voir l'espace réservé dans les options sélectionnées. Je suggère d'utiliser l'
hidden
attribut pour l'option d'espace réservé, et vous n'avez pas besoin de l'selected
attribut pour cette option. Vous pouvez simplement le mettre en premier.la source
select:invalid
est également valide.required
Ici, j'ai modifié la réponse de David (réponse acceptée). Sur sa réponse, il a mis l'attribut désactivé et sélectionné sur la
option
balise, mais lorsque nous mettons également la balise cachée, cela sera beaucoup mieux.En ajoutant un attribut caché supplémentaire sur la
option
balise, cela empêchera l'option "Sélectionnez votre option" d'être resélectionnée après que l'option "Durr" soit sélectionnée.la source
Voici le mien:
la source
<option value="" selected disabled>Please select</option>
comme première option.Je vois des signes de réponses correctes, mais pour tout rassembler, ce serait ma solution:
la source
Durr
est en gris après l'avoir sélectionné. Cela force toujours la case de sélection fermée à être grise.Si vous utilisez Angular, procédez comme suit:
la source
hidden
attribut afin que cette option ne s'affiche pas lors de l'ouverture deselect
. Mais merci pour cette réponse, ça a marché pour moi.Cette
HTML + CSS
solution a fonctionné pour moi:Bonne chance...
la source
Une autre possibilité en JavaScript:
JSFiddle
la source
J'adore la solution acceptée et elle fonctionne très bien sans JavaScript.
Je veux juste ajouter comment j'ai adopté cette réponse pour un composant React à sélection contrôlée , car il m'a fallu quelques essais pour le comprendre. Ce serait vraiment simple à intégrer
react-select
et à en finir, mais à moins que vous n'ayez besoin des fonctionnalités incroyables de ce référentiel, ce que je n'ai pas pour le projet en question, il n'est pas nécessaire d'ajouter plus de kilo-octets à mon bundle. Note,react-select
poignées dans des espaces réservés sélectionne grâce à un système complexe de diversinputs
ethtml
éléments.Dans React, pour un composant contrôlé , vous ne pouvez pas ajouter l'
selected
attribut à vos options. React gère l'état de la sélection via unvalue
attribut surselect
lui - même, avec un gestionnaire de changement, où la valeur doit correspondre à l'un des attributs de valeur dans les options elles-mêmes.Tels que, par exemple
Puisqu'il serait inapproprié et en fait, une erreur serait ajoutée pour ajouter l'
selected
attribut à l'une des options, que faire alors?La réponse est simple une fois que vous y pensez. Puisque nous voulons que notre premier
option
soitselected
aussi bien quedisabled
ethidden
, nous devons faire trois choses:hidden
etdisabled
au premier définioption
.option
comme une chaîne vide.select
pour être également une chaîne vide.Vous pouvez maintenant styliser la sélection comme indiqué ci-dessus (ou via un
className
si vous préférez).la source
Espace
[type="text"]
réservé de style d' entrée pour les éléments sélectionnésLa solution suivante simule un espace réservé en ce qui concerne un
input[type="text"]
élément:la source
Je voulais que SELECT soit gris jusqu'à ce qu'il soit sélectionné, donc pour ce morceau de HTML:
J'ai ajouté ces définitions CSS:
Cela fonctionne comme prévu dans Chrome / Safari et peut-être aussi dans d'autres navigateurs, mais je n'ai pas vérifié.
la source
Voici une solution CSS qui fonctionne à merveille. Le contenu est ajouté (et absolument positionné par rapport au conteneur) après l'élément conteneur ( via: après la pseudo-classe ).
Il tire son texte de l'attribut d'espace réservé que j'ai défini où j'ai utilisé la directive ( attr (espace réservé) ). Un autre facteur clé est les événements de pointeur: aucun - cela permet aux clics sur le texte de l'espace réservé de passer à la sélection. Sinon, il ne tombera pas si l'utilisateur clique sur le texte.
J'ajoute moi-même la classe .empty dans ma directive select, mais normalement je trouve que angular ajoute / supprime .ng-empty pour moi (je suppose que c'est parce que j'injecte la version 1.2 d'Angular dans mon exemple de code).
(L'exemple montre également comment encapsuler des éléments HTML dans AngularJS pour créer vos propres entrées personnalisées)
la source
Je n'ai pas pu faire fonctionner ces éléments pour le moment, car pour moi ce n'est (1) pas requis et (2) j'ai besoin de l'option pour revenir à la sélection par défaut. Voici donc une option lourde si vous utilisez jQuery:
la source
Je ne me contente pas de solutions HTML / CSS uniquement, j'ai donc décidé de créer une personnalisation en
select
utilisant JavaScript.C'est quelque chose que j'ai écrit au cours des 30 dernières minutes, il peut donc être encore amélioré.
Tout ce que vous avez à faire est de créer une liste simple avec peu d'attributs de données. Le code transforme automatiquement la liste en une liste déroulante sélectionnable. Il ajoute également un caché
input
pour contenir la valeur sélectionnée, de sorte qu'il peut être utilisé dans un formulaire.Contribution:
Production:
Le texte de l'élément censé être un espace réservé est grisé. L'espace réservé est sélectionnable, au cas où l'utilisateur souhaite revenir sur son choix. En utilisant également CSS, tous les inconvénients de
select
peuvent être surmontés (par exemple, l'incapacité de styliser les options).Afficher l'extrait de code
Mise à jour : j'ai amélioré cela (sélection en utilisant les touches haut / bas / entrée), j'ai rangé un peu la sortie et je l'ai transformée en objet. Sortie courant:
Initialisation:
Pour un examen plus approfondi: JSFiddle ,
GitHub(renommé).Mise à jour: je l'ai réécrit. Au lieu d'utiliser une liste, nous pouvons simplement utiliser une sélection. De cette façon, cela fonctionnera même sans JavaScript (au cas où il serait désactivé).
Contribution:
Production:
JSFiddle , GitHub .
la source
Vous avez besoin d'une validation de formulaire et les navigateurs modernes le proposent à partir de zéro.
Il n'est donc pas nécessaire de veiller à ce que l'utilisateur ne puisse pas sélectionner le champ. Parce que quand il le fait, la validation du navigateur lui dira que c'est une mauvaise sélection.
Le navigateur intégré à la fonction de validation checkValidity () .
Bootstrap a également un bel exemple.
HTML
Javascript
la source
la source
Dans Angular, nous pouvons ajouter une option comme espace réservé qui peut être masquée dans la liste déroulante des options. Nous pouvons même ajouter une icône de liste déroulante personnalisée en arrière-plan qui remplace l' icône de liste déroulante du navigateur .
L' astuce consiste à activer l'espace réservé css uniquement lorsque la valeur n'est pas sélectionnée
/ ** Mon modèle de composant * /
/ ** Mon composant.TS * /
/**global.scss*/
la source
Solution pour Angular 2
Créez une étiquette au-dessus de la sélection
et appliquez CSS pour le placer sur le dessus
pointer-events: none
vous permet d'afficher la sélection lorsque vous cliquez sur l'étiquette, qui est masquée lorsque vous sélectionnez une option.angulaire html css
la source
Voici ma contribution. Haml + CoffeeScript + SCSS
Haml
CoffeeScript
SCSS
Il est possible d'utiliser uniquement CSS en modifiant le code du serveur et en définissant uniquement les styles de classe en fonction de la valeur actuelle de la propriété, mais cette méthode semble plus simple et plus propre.
Vous pouvez ajouter plus de CSS (
select option:first-child
) pour garder l'espace réservé gris lorsqu'il s'ouvre, mais je m'en fichais.la source
Essayez ceci pour un changement:
la source
Voici un exemple pratique pour y parvenir avec du JavaScript pur qui gère la couleur des options après le premier clic:
la source
En vous basant sur la réponse de MattW , vous pouvez rendre l'option de sélection d'espace réservé visible dans le menu déroulant après qu'une sélection valide a été effectuée, en la masquant conditionnellement uniquement pendant que l'espace réservé reste sélectionné (et la sélection est donc: non valide).
la source
D'après la réponse d'Albireo , cette version n'utilise pas de jQuery et la spécificité CSS est meilleure.
la source