Eines der neuen Eingabetypen in HTML5 ist search.
<input type=search name=s>
In den meisten Browsern tut es absolut nichts. Es verhält sich einfach wie ein Textfeld. Das ist kein Problem. Die Spezifikation verlangt nicht, dass es etwas Besonderes tut. WebKit-Browser behandeln es jedoch etwas anders, hauptsächlich in Bezug auf das Styling.
Ein Suchfeld in WebKit hat standardmäßig einen Innenrand, abgerundete Ecken und eine strenge typografische Kontrolle.
Die Styling-Beschränkungen
WebKit hat erhebliche Einschränkungen bei dem, was Sie an einem Suchfeld ändern können. Ich vermute, die Idee ist Konsistenz. Insbesondere in Safari sehen Suchfelder genauso aus wie die Suchleiste oben rechts im Browser. Die folgenden CSS-Regeln werden in WebKit „egal was“ ignoriert, d. h. Sie können sich nicht einmal mit !important-Regeln dagegen wehren.
input[type=search] {
padding: 30px; /* Overridden by padding: 1px; */
font-family: Georgia; /* Overridden by font: -webkit-small-control; */
border: 5px solid black; /* Overridden by border: 2px inset; */
background: red; /* Overridden by background-color: white; */
line-height: 3; /* Irrelevant, I guess */
}
Mit anderen Worten, seien Sie **extrem vorsichtig** bei der Verwendung von CSS-Eigenschaften für ein Suchfeld, es sei denn, Sie sind damit einverstanden, dass das Suchfeld in anderen Browsern **sehr** anders aussieht.
Erlaubtes Styling
Die folgenden CSS-Regeln funktionieren wie erwartet. Die letzten drei sollten meiner Meinung nach wie die oben genannten Eigenschaften gesperrt werden, da das Styling dieser Eigenschaften fast immer schlechter aussieht, als wenn man sie nicht hätte.
input[type=search] {
color: red;
text-align: right;
cursor: pointer;
display: block;
width: 100%;
letter-spacing: 4px;
text-shadow: 0 0 2px black;
word-spacing: 20px;
}
Verhindertes Styling
Seien Sie vorsichtig bei der Verwendung von text-indent bei Suchfeldern. Die Ergebnisse sind ziemlich seltsam und inkonsistent. Hier ist ein Beispiel
Manchmal ist der Text darunter, so wie hier. Manchmal ist er gar nicht sichtbar. Es scheint mit den umgebenden Elementen sowie mit der Einrückungshöhe zusammenzuhängen (niedrige Werte funktionieren manchmal gut).
Vorherige Suchanfragen anzeigen
Dies ist meines Wissens nach nirgends dokumentiert, auch nicht in der Spezifikation, aber wenn Sie einen results-Parameter zum Eingabefeld hinzufügen, wendet WebKit eine kleine Lupe mit einem Dropdown-Pfeil an, der frühere Ergebnisse anzeigt. (Danke an Mike Taylor)
<input type=search results=5 name=s>
Der Ganzzahlwert, den Sie dem results-Attribut geben, bestimmt, wie viele aktuelle Suchanfragen in diesem Dropdown angezeigt werden, falls diese Anzahl vorhanden ist.
Ich mag die kleine Lupe sehr. Sie unterstreicht die Suchfunktionalität des Feldes, aber ich halte die Funktionalität selbst für ziemlich mickrig. Beim Neuladen der Seite werden die letzten Suchanfragen gelöscht, sodass dieses Dropdown fast immer „Keine letzten Suchanfragen“ anzeigt, es sei denn, Sie haben eine Art von Ajax-Suche implementiert (und selbst das habe ich nicht wirklich getestet).
Update: Sie können den autosave-Parameter verwenden, um die Werte im Dropdown-Menü über Seitenaufrufe hinweg zu speichern.
<input type=search results=5 autosave=some_unique_value name=s>
Größenbeschränkungen
Es gibt nur drei verschiedene „Größen“, die WebKit-Suchfelder haben können, und diese werden durch die auf ihnen deklarierte Schriftgröße bestimmt.
| Ergebnisgröße | CSS Schriftgröße |
|---|---|
| Klein | <= 10px |
| Mittel | 11px – 15px |
| Groß | >= 16px |

Dieses Klein-, Mittel- und Groß-Geschäft kann äußerst frustrierend sein, da selbst bei identischen Schriftwerten, die minimal für einen „Schub“ erforderlich sind, Unterschiede in der Schriftgröße zwischen den Browsern zu sehen sind.

Beachten Sie das (x) auf der rechten Seite der Suchfelder auf der WebKit-Seite. Dies ist ein zusätzliches Feature dieser Suchfelder in WebKit. Wenn das Eingabefeld einen Wert hat (kein Platzhalter, ein echter Wert), wird das (x) angezeigt, was eine funktionale UI-Steuerung zum Löschen des Eingabefeldes ist.
Apropos Platzhaltertext: Suchfelder sind dafür ein hervorragender Kandidat.
<input type=search results=5 placeholder=Search... name=s>
Und falls hellgrau nicht Ihr Geschmack ist, können Sie den Platzhaltertext stylen
::-webkit-input-placeholder {
color: orangered;
}
Styling von grafischen Such-Widgets
Zum Beispiel der kleine (x)-Button, der angezeigt wird, wenn Sie Text in ein Suchfeld eingegeben haben. Dieser kann gestylt werden, indem zuerst die -webkit-appearance auf das spezielle Pseudo-ähnliche Element (nennen wir es so?) entfernt und dann Ihr eigenes Styling angewendet wird.
input[type="search"]::-webkit-search-cancel-button {
/* Remove default */
-webkit-appearance: none;
/* Now your own custom styles */
height: 10px;
width: 10px;
background: red;
/* Will place small red box on the right of input (positioning carries over) */
}
Spezielle JavaScript-Ereignisse bei Suchfeldern
Ich werde dies aktualisieren, sobald ich mehr Informationen habe, aber vorerst habe ich diesen Kommentar auf Ajaxian von „maccman“ gesehen
Es gibt auch einige benutzerdefinierte Ereignisse – wie z. B. 'search', das ausgelöst wird, wenn der Benutzer mit dem Tippen aufhört (stellen Sie 'incremental' auf true).
Schöne Zusammenfassung Chris. Ich habe dies in einem kürzlichen Projekt verwendet. Sie können die Styling-Beschränkungen mit den folgenden CSS umgehen
Auch dafür kann ich keine Anerkennung beanspruchen, ich erinnere mich nur, wo ich es gefunden habe… CSS Webkit Appearance
Es reicht nicht. Um überflüssige Abstände zu entfernen, müssen Sie WebKits proprietäre Pseudo-Elemente wie folgt deaktivieren
Ich stelle normalerweise den Typ des Suchfeldes auf textfield. Das scheint viele meiner Styling-Probleme zu lösen: -webkit-appearance: textfield;
input[type=search] {
-webkit-appearance: textfield;
}
Gut gemacht, es ist bereits in meinen Favoriten, danke!
Ich habe gerade Ihre Demo mit Chrome 7 und 5 ausprobiert und sie sieht nicht so aus, wie Sie sie hier beschrieben haben. Vielleicht ist das nur etwas, das Safari macht?
Eröffnungsparagraph
Chrome ist ein WebKit-Browser.
Ich habe kürzlich mit Suchfeldern herumgespielt und Sie haben Recht bei Chrome – dieses spezielle Feature wurde kürzlich in Webkit implementiert, daher glaube ich, dass Chrome noch ein Upgrade auf die neueste Webkit-Version benötigt, um es zu haben (Chrome hat auch noch keinen Text-Stroke, obwohl das neueste Safari ihn hat).
Ich mag das Feature des Suchfeldes, aber ich wollte pixelgenaues Styling und konnte es nicht bekommen, also habe ich es letztendlich verworfen. Möglicherweise kehre ich irgendwann zurück, aber noch nicht jetzt…
Ich habe Ihre Demo auf Chrome 5 und Safari 5 unter Windows XP ausprobiert und sie sieht unter Windows nicht so raffiniert aus wie auf Mac. Es scheint, dass die abgerundeten Kanten unter Windows nicht funktionieren.
Hier ist ein Screenshot.
Das. Die Ecken sind unter Windows XP in beiden Browsern nicht abgerundet. Es wäre sehr interessant zu erfahren, ob sie nur unter Safari 5 Mac abgerundet sind. D. h. mich würde interessieren, ob sie auch unter Chrome 5 Mac oder in einem der Browser auf anderen Windows-Plattformen abgerundet sind.
Wie von Ben angemerkt, können die meisten dieser CSS-Probleme durch Ändern der -webkit-appearance-Eigenschaft (auf none oder textfield) behoben werden.
Ich habe dies kürzlich in einem Projekt verwendet
input[type=”search”] { -webkit-appearance: textfield; }
Ich erinnere mich gerade an ein Problem mit innerem Box-Shadow bei Chrome (nur Windows-Versionen).
Warum ist es so, dass, wenn WebKit etwas tut, das gegen die Spezifikation verstößt und sich selbst in verschiedenen Versionen unterschiedlich verhält, es als in Ordnung angesehen wird, aber wenn andere Browser-Engines dies tun, sie als sehr falsch und etwas angesehen werden, das gemieden werden muss?
Dave, da muss ich zustimmen. Wenn das ein IE-Verhalten wäre, würden die Leute aus allen Löchern kriechen, um es niederzumachen. Allerdings verwendet Apple WebKit, daher ist es irgendwie in Ordnung.
…weil, wenn WebKit etwas anders macht, es funktional solide ist und eine Verbesserung darstellt, anstatt dass Microsoft Dinge anders macht, nur weil sie es können.
Gut ausgedrückt – wenn WebKit etwas anders macht, dann zur Verbesserung, wenn Microsoft etwas anders macht, dann um zu versuchen, alle dazu zu bringen, das zu tun, was sie tun. Leider haben sie jahrelang ihren Willen bekommen!
Als ich den Artikel las, war ich irgendwie verärgert, aber vielleicht, da WebKit so viele andere Dinge richtig macht, ist es leichter zu verzeihen?
Ich denke, das ist ein guter Punkt und eine interessante Diskussion. Ich denke, in diesem speziellen Fall handelt es sich technisch gesehen um eine optionale Ergänzung, die Sie nach eigenem Ermessen verwenden oder nicht verwenden können. Die Implementierung ist auch nicht fehlerhaft oder gegen die Spezifikation, wofür IE hauptsächlich kritisiert wird. IE hat einige Implementierungen, die andere Browser nicht haben und die es recht gut macht. Zum Beispiel funktioniert die „orphans“-Eigenschaft (verhindert einzelne Wörter in einer neuen Zeile am Ende von Textblöcken) derzeit nur in IE und Opera, und ich verwende sie ständig. Also sollte die Kritik in diesem Fall fast in die andere Richtung fliegen.
Danke für den Überblick über Webkit HTML5 Suchfelder. LT
gute Arbeit, danke vielmals
danke:))
danke:)) gut:))
Hallo
Ich mochte den Artikel, aber Sie vergleichen WebKit-Browser immer mit etwas – womit?
Ich vermute IE oder Firefox, aber es könnte eine ganze Gruppe von Browsern sein – könnten Sie das bitte klären?
Danke :-)
„results“ ist dort (kurz) dokumentiert: http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/Attributes.html#//apple_ref/doc/uid/TP40008058-results
Weißt du was, das ist einfach nur scheiße. Also toll, das Suchfeld ist cool, aber all diese Styling-Beschränkung… wessen Idee war das? Sehr dumm meiner Meinung nach.
Ich muss den Styling-Beschränkungen zustimmen. Es ist mir egal, ob ein Browser standardmäßig etwas anders macht, aber es ist ein Problem, wenn ich nicht per CSS etwas anwenden kann, ohne durch Sprünge hindurchgehen zu müssen.
Wie andere bereits erwähnt haben, ist der Weg darum herum, die -webkit-appearance-Eigenschaft zu setzen. Diese Technik funktioniert auch für andere Eingabetypen, wie z. B. Kontrollkästchen oder Optionsfelder.
Hmm…
Ich bin hin- und hergerissen, ob dieses Verhalten gut oder schlecht ist (teilweise oder vollständig). Wie andere bereits angemerkt haben, hält mich meine leichte Pro-Apple-Voreingenommenheit vielleicht davon ab, dies einfach als schlecht zu bezeichnen. ABER, ich erinnere mich auch an die frühen Tage von Firefox, als viel darüber diskutiert wurde, dass es eine schlechte Praxis für Autoren sei, das Aussehen von Fenstern zu ändern, damit es mit dem Betriebssystem und bestimmten Browserkonventionen konsistent bleibt. (IE-Scrollbalken, ich schaue Sie an).
Ich habe auch einiges über Reset-Stylesheets gelesen, bei denen darauf geachtet wird, Formulare aus ähnlichen Gründen nicht zu verändern. Wenn Apple diese Argumentation verwendet, um das zu rechtfertigen, was sie mit „Such“-Formularen tun, dann denke ich, kann ich es akzeptieren.
Einige von uns möchten gerne alles kontrollieren können, aber ich sehe auch die andere Seite, wo User-Agent-Anbieter möchten, dass ihre Plattform bestimmte Dinge tut und die Features zeigen können, die sie für wichtig halten.
Apple konzentriert sich vielleicht auf die OS-Konsistenz und seine besondere Designästhetik. Firefox auf Erweiterbarkeit, Chrome auf reine Geschwindigkeit, Opera darauf, besser als IE zu sein und immer noch eine Menge Features und viele Symbolleisten integriert zu haben. IE auf… Silverlight pushen?
zustimm. aber wo sollte die grenze zwischen OS-konsistenz und designerfreiheit gezogen werden?
Toller Artikel (wie immer) Chris. Werde es bei meinem nächsten Projekt definitiv verwenden +=]
Tippfehler im vorletzten Code-Beispiel
placholder sollte placeholder sein.
Danke fürs Teilen
Wie andere bereits sagten, setzen Sie einfach die webkit-appearance auf none. Aber es gibt noch ein paar andere Eigenschaften, die Sie ändern müssen.
http://anthonyshort.com.au/post/1016795820/styling-the-search-input-in-webkit
Webkit ändert auch die box-sizing-Eigenschaft bei Suchfeldern, daher müssen Sie diese zurücksetzen, und Sie müssen nur ein einziges Pseudo-Element deaktivieren, um den zusätzlichen Abstand zu entfernen.
Danke Chris… : )
Ich wusste, dass du noch mehr tolle Infos in dir hattest
Du bist der Mann
@results? Aber das sind keine „Ergebnisse“. Das sind zuvor eingegebene Suchbegriffe.
Es sollte @prevterms oder so etwas sein.
Ich stimme zu.
-webkit-appearance: inputübrigensSieht toll aus, aber wird es auch mit dem alten IE 6 oder sogar 7 funktionieren? Ich habe versucht, Eingabefelder zu gestalten und stoße bei IE immer wieder auf große Probleme, vielleicht wird HTML5 die Barriere durchbrechen, ich hoffe es :)
Nette Tricks, Chris, danke.
Gute Arbeit, Chris
In Safari können Sie die Liste der letzten Suchanfragen über Browsersitzungen hinweg beibehalten.
Fügen Sie einfach autosave=”Any Unique Identifier” hinzu.
Chrome sollte diese Usability-Funktion schnell implementieren.
Die Padding-, Hintergrund- und Randfehler haben mich über eine halbe Stunde lang gequält, um es zum Laufen zu bringen…
Ich wünschte, ich hätte Ihren Blogbeitrag früher gesehen!
Guter Blog und auch nützlich für Entwickler und Designer, um Webkit zu nutzen und die perfekte Suchleiste mit der Funktionalität von letzten Suchanfragen wie Autosuggestion mit verschiedenen Browsern zu erstellen.
Danke.:)
Dies sind großartige Informationen, wie man eine bessere Suche erstellt. Was mich jedoch neugierig macht, ist, wie Sie WordPress verwenden, um verschiedene Bereiche Ihrer Website zu durchsuchen.
Es scheint, dass
-webkit-appearance: none;die abgerundeten Ecken auf iOS nicht mehr entfernt. Das Hinzufügen vonborder-radius: 0;tut jedoch den Trick!Beachten Sie die folgenden Probleme
http://blog.yorkxin.org/posts/2013/07/03/universal-hover-triggers-double-tap-bug-in-ios-safari
und
http://help.symbolset.com/customer/portal/questions/828932-conflict-with-symbolset-ios-search-inputs-and-javascript
Ich war überrascht, wie viele Probleme ein einfaches Eingabefeld unter iOS Safari verursachen kann…..
Ich habe es mit iOS 7 auf einem iPhone 5 getestet und -webkit-appearance: none; hat den Trick gemacht! :)
Weiß jemand, ob es möglich ist, das Styling der Liste der vorherigen Suchverläufe zu ändern, die erscheint?
Es ist ziemlich nervig, wenn es ein greller weißer Hintergrund auf einer schönen, dezenten dunklen Seite ist!
Hallo Chris,
ich habe noch eine weitere Anforderung.
Ich möchte eine Abbrechen-Schaltfläche im Suchfeld sehen. sie ist in Desktop-WebKit-Browsern sichtbar.
Aber irgendwie sehe ich das im iOS Safari Browser.
Können Sie mir sagen, was das Problem sein könnte?
Mit freundlichen Grüßen,
Jesudas