Ich verwende Platzhalter für Texteingaben, was gut funktioniert. Ich möchte aber auch einen Platzhalter für meine Auswahlfelder verwenden. Natürlich kann ich nur diesen Code verwenden:
<select>
<option value="">Select your option</option>
<option value="hurr">Durr</option>
</select>
Die Option "Wählen Sie Ihre Option" ist jedoch schwarz statt hellgrau. Meine Lösung könnte also möglicherweise CSS-basiert sein. jQuery ist auch in Ordnung.
Dadurch wird die Option in der Dropdown-Liste nur grau (also nach dem Klicken auf den Pfeil):
option:first {
color: #999;
}
Die Frage ist: Wie erstellen Personen Platzhalter in Auswahlfeldern? Aber es wurde bereits beantwortet, Prost.
Wenn Sie dies verwenden, ist der ausgewählte Wert immer grau (auch nach Auswahl einer realen Option):
select {
color: #999;
}
html
css
html-select
placeholder
Thomas
quelle
quelle
Antworten:
Ein Nicht-CSS - keine JavaScript / jQuery-Antwort:
quelle
<select> <option value="" disabled selected>Select your option</option> </select>
Ich bin gerade auf diese Frage gestoßen, und hier ist, was (zumindest) in Firefox und Chrome funktioniert:
Die Option Deaktiviert stoppt die
<option>
Auswahl sowohl mit der Maus als auch mit der Tastatur, während'display:none'
der Benutzer durch einfaches Verwenden weiterhin über die Tastaturpfeile auswählen kann. Der'display:none'
Stil lässt das Listenfeld nur "schön" aussehen.Hinweis: Wenn Sie ein leeres
value
Attribut für die Option "Platzhalter" verwenden, kann die Validierung (erforderliches Attribut) den "Platzhalter" umgehen. Wenn die Option nicht geändert wird, aber erforderlich ist, sollte der Browser den Benutzer auffordern, eine Option auszuwählen von der Liste.Update (Juli 2015):
Diese Methode funktioniert in den folgenden Browsern:
Update (Oktober 2015):
Ich habe das
style="display: none"
HTML5-Attribut entfernt,hidden
das breite Unterstützung bietet. Dashidden
Element weist ähnliche Merkmale wiedisplay: none
in Safari, Internet Explorer (Projekt Spartan muss überprüft werden) auf, wobei dasoption
Element in der Dropdown-Liste sichtbar ist, jedoch nicht ausgewählt werden kann.Update (Januar 2016):
Wenn das
select
Element aktiviert istrequired
, kann die:invalid
CSS-Pseudoklasse verwendet werden, mit der Sie dasselect
Element im Status "Platzhalter" formatieren können.:invalid
funktioniert hier wegen des leeren Wertes im Platzhalteroption
.Sobald ein Wert festgelegt wurde, wird die
:invalid
Pseudoklasse gelöscht. Sie können optional auch verwenden,:valid
wenn Sie dies wünschen.Die meisten Browser unterstützen diese Pseudoklasse. Internet Explorer 10 und höher. Dies funktioniert am besten mit benutzerdefinierten
select
Elementen. In einigen Fällen, z. B. (Mac in Chrome / Safari), müssen Sie das Standardaussehen derselect
Box ändern , damit bestimmte Stile angezeigt werden, z. B.background-color
undcolor
. Einige Beispiele und mehr zur Kompatibilität finden Sie unter developer.mozilla.org .Aussehen des nativen Elements Mac in Chrome:
Verwenden des geänderten Rahmenelements Mac in Chrome:
quelle
display:none
Stil.:invalid
, bevor ich es getan habe.color
die Optionen in unterstützenden Browsern wie in dieser Geige zurückzusetzen . Dies würde dazu beitragen, zu verstärken, dass der Behinderteoption
ein Platzhalter ist. (Bearbeiten: Ich sehe, MattW hat dies bereits in seiner Antwort behandelt)Für ein erforderliches Feld gibt es in modernen Browsern eine reine CSS-Lösung:
quelle
required
, sodass es keinen Sinn macht , wenn das Feld optional sein soll.:required
Selektor in IE8 und darunter nicht unterstützt. Der:invalid
Selektor wird in IE9 und darunter nicht unterstützt. quirksmode.org/css/selectorsrequired
Bedingung bewirkt, dass der Browser die Pseudoklasse anwendet,:invalid
wenn der Platzhalter ausgewählt wird.[value=""]
funktioniert nicht als Ersatz, da durch die Benutzerinteraktion die Eigenschaft value aktualisiert wird , die CSS-Syntax jedoch auf ein (nicht vorhandenes) Attribut verweist .Etwas wie das:
HTML:
CSS:
JavaScript:
Arbeitsbeispiel: http://jsfiddle.net/Zmf6t/
quelle
Ich habe gerade ein verstecktes Attribut
option
wie folgt hinzugefügt . Es funktioniert gut für mich.quelle
Die folgende Lösung funktioniert auch in Firefox ohne JavaScript:
quelle
Ich hatte das gleiche Problem und bin bei der Suche auf diese Frage gestoßen. Nachdem ich eine gute Lösung für mich gefunden habe, möchte ich sie mit euch teilen, falls jemand davon profitieren kann.
Hier ist es:
HTML:
CSS:
JavaScript:
Nachdem der Kunde die erste Auswahl getroffen hat, ist keine graue Farbe mehr erforderlich, sodass der JavaScript-Code die Klasse entfernt
place_holder
.Dank @ user1096901 können Sie als Problemumgehung für den Internet Explorer die
place_holder
Klasse erneut hinzufügen, falls die erste Option erneut ausgewählt wird :)quelle
JavaScript oder CSS sind nicht erforderlich, nur drei Attribute:
Die Option wird überhaupt nicht angezeigt. Es wird lediglich der Wert der Option als Standard festgelegt.
Wenn Sie jedoch keinen Platzhalter mögen, der dieselbe Farbe wie der Rest hat , können Sie ihn wie folgt inline korrigieren:
Natürlich können Sie die Funktionen und zumindest das CSS der Auswahl in separate Dateien aufteilen.
Hinweis: Die Onload-Funktion korrigiert einen Aktualisierungsfehler.
quelle
Der Benutzer sollte den Platzhalter in ausgewählten Optionen nicht sehen. Ich schlage vor, das
hidden
Attribut für die Platzhalteroption zu verwenden, und Sie benötigen dasselected
Attribut für diese Option nicht. Sie können es einfach als erstes setzen.quelle
select:invalid
ist auch gültig.required
Hier habe ich Davids Antwort geändert (akzeptierte Antwort). Bei seiner Antwort hat er das deaktivierte und ausgewählte Attribut in das
option
Tag eingefügt, aber wenn wir auch ein verstecktes Tag einfügen, sieht es viel besser aus.Durch Hinzufügen eines zusätzlichen versteckten Attributs zum
option
Tag wird verhindert, dass die Option "Option auswählen" erneut ausgewählt wird, nachdem die Option "Durr" ausgewählt wurde.quelle
Hier ist mein:
quelle
<option value="" selected disabled>Please select</option>
als erste Option hinzufügen .Ich sehe Anzeichen für richtige Antworten, aber um alles zusammenzubringen, wäre dies meine Lösung:
quelle
Durr
ist grau, nachdem Sie es ausgewählt haben. Dadurch wird das geschlossene Auswahlfeld immer grau.Wenn Sie Angular verwenden, gehen Sie folgendermaßen vor:
quelle
hidden
Attribut hinzufügen , damit die Option beim Öffnen des nicht angezeigt wirdselect
. Aber danke auf jeden Fall für diese Antwort, es hat bei mir funktioniert.Diese
HTML + CSS
Lösung hat bei mir funktioniert:Viel Glück...
quelle
Eine weitere Möglichkeit in JavaScript:
JSFiddle
quelle
Ich liebe die akzeptierte Lösung und sie funktioniert hervorragend ohne JavaScript.
Ich möchte nur hinzufügen, wie ich diese Antwort für eine React-Komponente mit kontrollierter Auswahl übernommen habe , da ich einige Versuche gebraucht habe, um sie herauszufinden. Es wäre wirklich einfach zu integrieren
react-select
und damit fertig zu werden, aber wenn Sie nicht die erstaunliche Funktionalität benötigen, die dieses Repository bietet, die ich für das betreffende Projekt nicht benötige, müssen Sie meinem Bundle keine weiteren Kilobyte hinzufügen. Note,react-select
Griffe Platzhalter in wählt durch ein komplexes System von verschiedeneninputs
undhtml
Elementen.In React können Sie für eine kontrollierte Komponente das
selected
Attribut nicht zu Ihren Optionen hinzufügen . React behandelt den Status der Auswahl über einvalue
Attribut auf sichselect
selbst zusammen mit einem Änderungshandler, wobei der Wert mit einem der Wertattribute innerhalb der Optionen selbst übereinstimmen sollte.Wie zum Beispiel
selected
Was wäre dann, da es unangemessen wäre und tatsächlich einen Fehler auslösen würde, das Attribut einer der Optionen hinzuzufügen ?Die Antwort ist einfach, wenn Sie einmal darüber nachgedacht haben. Da wollen wir unsere erste
option
sein ,selected
sowiedisabled
undhidden
müssen wir drei Dinge tun:hidden
unddisabled
Attribut der erste definierteoption
.option
als leere Zeichenfolge ein.select
um auch eine leere Zeichenfolge zu sein.Jetzt können Sie die Auswahl wie oben angegeben gestalten (oder über a,
className
wenn Sie dies bevorzugen).quelle
Eingabe
[type="text"]
Stil Platzhalter für Elemente auswählenDie folgende Lösung simuliert einen Platzhalter in Bezug auf ein
input[type="text"]
Element:quelle
Ich wollte, dass SELECT grau ist, bis es für dieses HTML-Stück ausgewählt wird:
Ich habe diese CSS-Definitionen hinzugefügt:
Es funktioniert wie erwartet in Chrome / Safari und möglicherweise auch in anderen Browsern, aber ich habe es nicht überprüft.
quelle
Hier ist eine CSS- Lösung, die wunderbar funktioniert. Der Inhalt wird nach dem enthaltenden Element hinzugefügt (und absolut relativ zum Container positioniert) ( via: after pseudo-class ).
Der Text stammt aus dem Platzhalterattribut, das ich dort definiert habe, wo ich die Direktive verwendet habe ( attr (Platzhalter) ). Ein weiterer Schlüsselfaktor sind Zeigerereignisse: Keine - Dadurch können Klicks auf den Platzhaltertext an die Auswahl weitergeleitet werden. Andernfalls wird es nicht herunterfallen, wenn der Benutzer auf den Text klickt.
Ich füge die .empty- Klasse selbst in meine Select-Direktive ein, aber normalerweise finde ich, dass Angular .ng-empty für mich hinzufügt / entfernt (ich nehme an, das liegt daran, dass ich Version 1.2 von Angular in mein Codebeispiel einfüge).
(Das Beispiel zeigt auch, wie HTML-Elemente in AngularJS eingeschlossen werden, um eigene benutzerdefinierte Eingaben zu erstellen.)
quelle
Ich konnte derzeit keine davon zum Laufen bringen, da sie für mich (1) nicht erforderlich ist und (2) die Option benötigt, um zur Standardauswahl zurückzukehren. Wenn Sie jQuery verwenden, ist dies eine schwierige Option:
quelle
Ich bin nicht zufrieden mit HTML / CSS-Lösungen, daher habe ich beschlossen, eine benutzerdefinierte Lösung
select
mit JavaScript zu erstellen .Dies ist etwas, das ich in den letzten 30 Minuten geschrieben habe, daher kann es weiter verbessert werden.
Sie müssen lediglich eine einfache Liste mit wenigen Datenattributen erstellen. Der Code verwandelt die Liste automatisch in eine auswählbare Dropdown-Liste. Außerdem wird ein ausgeblendeter
input
Wert hinzugefügt , um den ausgewählten Wert zu speichern, sodass er in einem Formular verwendet werden kann.Eingang:
Ausgabe:
Der Text des Elements, das ein Platzhalter sein soll, ist ausgegraut. Der Platzhalter kann ausgewählt werden, falls der Benutzer seine Auswahl rückgängig machen möchte. Auch mit CSS können alle Nachteile
select
überwunden werden (z. B. Unfähigkeit, die Optionen zu gestalten).Code-Snippet anzeigen
Update : Ich habe dies verbessert (Auswahl mit den Tasten Auf / Ab / Eingabe), die Ausgabe ein wenig aufgeräumt und daraus ein Objekt gemacht. Aktueller Output:
Initialisierung:
Zur weiteren Prüfung: JSFiddle ,
GitHub(umbenannt).Update: Ich habe dies wieder umgeschrieben. Anstatt eine Liste zu verwenden, können wir einfach eine Auswahl verwenden. Auf diese Weise funktioniert es auch ohne JavaScript (falls es deaktiviert ist).
Eingang:
Ausgabe:
JSFiddle , GitHub .
quelle
Sie benötigen eine Formularüberprüfung, und moderne Browser bieten dies von Grund auf neu an.
Sie müssen also nicht darauf achten, dass der Benutzer das Feld nicht auswählen kann. Denn wenn er es tut, sagt ihm die Browser-Validierung, dass dies eine falsche Auswahl ist.
Der Browser hat die Validierungsfunktion checkValidity () eingebaut .
Bootstrap hat dort auch ein schönes Beispiel.
HTML
Javascript
quelle
quelle
In Angular können wir eine Option als Platzhalter hinzufügen , die in der Options-Dropdown-Liste ausgeblendet werden kann. Wir können sogar ein benutzerdefiniertes Dropdown-Symbol als Hintergrund hinzufügen , das das Dropdown- Symbol des Browsers ersetzt .
Der Trick besteht darin , Platzhalter- CSS nur zu aktivieren, wenn der Wert nicht ausgewählt ist
/ ** Meine Komponentenvorlage * /
/ ** Meine Komponente.TS * /
/**global.scss*/
quelle
Lösung für Angular 2
Erstellen Sie eine Beschriftung über der Auswahl
und wenden Sie CSS an, um es oben zu platzieren
pointer-events: none
Mit dieser Option können Sie die Auswahl anzeigen, wenn Sie auf die Beschriftung klicken. Diese Option wird ausgeblendet, wenn Sie eine Option auswählen.eckig html CSS
quelle
Hier ist mein Beitrag. Haml + CoffeeScript + SCSS
Haml
CoffeeScript
SCSS
Es ist möglich, nur CSS zu verwenden, indem Sie den Servercode ändern und nur die Klassenstile abhängig vom aktuellen Wert der Eigenschaft festlegen. Diese Methode scheint jedoch einfacher und sauberer zu sein.
Sie können mehr CSS (
select option:first-child
) hinzufügen , um den Platzhalter beim Öffnen grau zu halten, aber das war mir egal.quelle
Versuchen Sie dies zur Abwechslung:
quelle
Hier ist ein funktionierendes Beispiel, wie dies mit reinem JavaScript erreicht werden kann, das die Optionsfarbe nach dem ersten Klick verarbeitet:
quelle
Aufbauend auf der Antwort von MattW können Sie die Option Platzhalter auswählen im Dropdown-Menü sichtbar machen, nachdem eine gültige Auswahl getroffen wurde, indem Sie sie nur bedingt ausblenden, während der Platzhalter ausgewählt bleibt (und die Auswahl daher ungültig ist).
quelle
Basierend auf Albireos Antwort verwendet diese Version kein jQuery und die CSS-Spezifität ist besser.
quelle