HTML-Optionstrennzeichen auswählen

207

Wie macht man ein Trennzeichen in einem ausgewählten Tag?

New Window
New Tab
-----------
Save Page
------------
Exit
Phillip Senn
quelle
Normalerweise füge ich eine deaktivierte Option mit Leerzeichen als Bezeichnung hinzu.
Abhi Beckert

Antworten:

330

Der Ansatz mit deaktivierten Optionen scheint am besten auszusehen und am besten unterstützt zu werden. Ich habe auch ein Beispiel für die Verwendung der optgroup beigefügt.

optgroup (auf diese Weise saugt irgendwie):

<select>
    <optgroup>
        <option>First</option>
    </optgroup>
    <optgroup label="_________">
        <option>Second</option>
        <option>Third</option>
    </optgroup>
</select>

deaktivierte Option (etwas besser):

<select>
    <option>First</option>
    <option disabled>_________</option>
    <option>Second</option>
    <option>Third</option>
</select>

Und wenn Sie wirklich ausgefallen sein möchten, verwenden Sie das horizontale Unicode-Box-Zeichen.
(BESTE OPTION!)

<select>
    <option>First</option>
    <option disabled>──────────</option>
    <option>Second</option>
    <option>Third</option>
</select>

http://jsfiddle.net/JFDgH/2/

Alex K.
quelle
21
Der Unicode hat in jsfiddle für mich hervorragend funktioniert, aber als ich versuchte, ihn in meinen Code zu kopieren / einzufügen, wurde er nicht richtig übersetzt. Für diejenigen mit diesem Problem lautet die HTML-Codierung für das Zeichen zum Zeichnen einer horizontalen Unicode-Box & # 9472; fileformat.info/info/unicode/char/2500/index.htm und es gibt auch eine schwerere Option unter & # 9473; fileformat.info/info/unicode/char/2501/index.htm
JeffG
1
Auf Mobile Firefox (und möglicherweise anderen mobilen Browsern) wird die disabledOption mit einem deaktivierten Optionsfeld rechts angezeigt ...
GoTo
Optgroups werden jedoch auf PC und Handy unterschiedlich gerendert, sodass die deaktivierte Option immer noch die beste Lösung ist.
GoTo
1
Die Codierung der HTML-Datei ist auch wichtig, damit die "─" -Zeichen anstelle von Kauderwelsch als Zeile angezeigt werden. UFT8 mit Stückliste könnte eine gute Wahl sein.
Andreas Jansson
1
@ db0 Das Erscheinungsbild ist inkonsistent. grab.by/EzEi vs grab.by/EzEk (siehe den Link jsfiddle).
Alex K
76

Versuchen:

<optgroup label="----------"></optgroup>
Tina Orooji
quelle
40
Anstatt die Optgruppen mit einer Beschriftung zu versehen, fügen Sie diese Ihrem Stylesheet hinzu: optgroup + optgroup {Rand oben: 1 Pixel festes Schwarz} Sieht viel weniger kitschig aus als ein paar Striche.
Laurence Gonsalves
2
Optgroup-Labels sollten die Gruppe beschreiben. Wenn ein Browser gemäß dem Screenshot in der HTML 4.01-Spezifikation implementiert wäre, würde der Benutzer mit Strichreihen konfrontiert und müsste jeden einzelnen untersuchen, um herauszufinden, was dahinter steckt.
Quentin
2
@Laurence: IE7 unterstützt keine CSS-Stile für Optgroup- oder Optionselemente. Zumindest nicht grenzt
Grom
1
<optgroup style = "Rahmen oben: 1 Pixel gepunktet #ccc; Rand: 5 Pixel 0;"> </ optgroup> - sieht zumindest in Firefox cool aus!
Ben Sinclair
1
Eine leere Optgruppe wie diese ist kein legaler HTML-Code. Sie erhalten Validierungsfehler, wenn Sie es verwenden. Ich bevorzuge die Antwort von james.garriss.
Ariel
22

Dies ist ein alter Thread, aber da niemand eine ähnliche Antwort gepostet hat, werde ich dies hinzufügen, da dies meine bevorzugte Art der Trennung ist.

Ich finde die Verwendung von Bindestrichen und dergleichen etwas ärgerlich, da sie die Breite des Auswahlfelds unterschreiten könnten. Daher bevorzuge ich die Verwendung von CSS, um meine Trennzeichen zu erstellen. Eine einfache Hintergrundfarbe.

<select>
  <option style="background-color: #cccccc;" disabled selected>Select An Option</option>
  <option>First Option</option>
  <option>Second</option>
  <option style="font-size: 1pt; background-color: #000000;" disabled>&nbsp;</option>
  <option>Third</option>
  <option>Fourth</option>
  <option style="font-size: 1pt; background-color: #000000;" disabled>&nbsp;</option>
  <option>Fifth</option>
  <option>Sixth</option>
</select>

Dexter Blake
quelle
großartig ! Ich habe min-height verwendet: 1px; maximale Höhe: 1px; Polsterung: 0; anstelle der Schriftgröße: 1pt; für eine 1px Linie
Kofifus
15

Wenn Sie das optgroup-Element nicht verwenden möchten, fügen Sie die Bindestriche stattdessen in ein Optionselement ein und geben Sie ihm das Attribut disabled. Es wird sichtbar, aber ausgegraut sein.

<option disabled>----------</option>
james.garriss
quelle
Hallo James, ich mag diese Lösung auch, aber Bildschirmleser lesen "Option Dash Dash Dash Dash deaktivieren ...", was für behinderte Benutzer sehr verwirrend sein kann. Haben Sie eine Idee, wie wir dies vermeiden können? Danke!
Julio
1
Ist es möglich, visuellen Elementen, die nicht gesprochen werden sollen, eine Klasse hinzuzufügen und dann einen ARIA-Befehl hinzuzufügen, der die Klasse verbirgt / deaktiviert? Vielleicht so etwas wie eine der hier verwendeten Techniken? asurkov.blogspot.com/2012/02/…
james.garriss
Eigentlich, @Julio, solltest du dies als neue Frage posten. Ich bin neugierig zu wissen, aber ich habe noch nie für Screenreader programmiert.
James.garriss
9

Anstelle des normalen Hyphons, das ich durch ein horizontales Balkensymbol aus dem erweiterten Zeichensatz ersetzt habe, sieht es nicht besonders gut aus, wenn sich der Benutzer in einem anderen Land befindet, das dieses Zeichen ersetzt, aber für mich gut funktioniert. Es gibt eine Reihe verschiedener Charaktere, die Sie für einige großartige Effekte verwenden können, und es ist kein CSS beteiligt.

<option value='-' disabled>――――</option>
user511941
quelle
8

Definieren Sie eine Klasse in CSS:

option.separator {
    margin-top:8px;
    border-top:1px solid #666;
    padding:0;
}

Schreiben Sie in HTML:

<select ...>
    <option disabled class="separator"></option>
</select>
Klaus Heyne
quelle
2
Die Antwort könnte mit einem jsfiddle-Beispiel verbessert werden. Dies scheint die am besten integrierte Lösung zu sein, die sich nicht auf Nebenwirkungen oder Hacks stützt, aber es wäre schön, die Bilder anderer Antworten zu vergleichen.
Raider33
Funktioniert nicht in vielen Browsern. (wie üblich, Eingaben sind ein Schmerz im Hintern)
Vierzig
5

Ich mache aus dem Kommentar von @Laurence Gonsalves eine Antwort, weil es die einzige ist, die semantisch funktioniert und nicht wie ein Hack aussieht.

Versuchen Sie, dies Ihrem Stylesheet hinzuzufügen:

optgroup + optgroup { border-top: 1px solid black } 

Viel weniger kitschig als ein paar Striche.

Noumenon
quelle
2
Dies ist tatsächlich der richtige Weg (wichtig, es werden keine bedeutungslosen Inhalte hinzugefügt). Ich mag es so zu gestalten (zusätzlichen vertikalen Raum um das Trennzeichen hinzufügen):optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
Nicolas Le Thierry d'Ennequin
3

Eine andere Möglichkeit besteht darin, ein CSS 1x1-Hintergrundbild für die Option zu verwenden, das nur mit Firefox zu funktionieren scheint und einen "----" - Fallback aufweist

<option value="" disabled="disabled" class="SelectSeparator">----</option> 

.SelectSeparator
    {
      background-image:  url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==);
      color:black;
      background-repeat:repeat-x;
      background-position:50% 50%;
      background-attachment:scroll;
}

http://jsfiddle.net/yNecQ/6/

oder um Javascript (jquery) zu verwenden, um:

-hide the select element and 
-show a div which can be completely styled and 
-reflect the div state onto the select for the form submit

http://tutorialzine.com/2010/11/better-select-jquery-css3/


Siehe auch Wie füge ich eine horizontale Linie in ein HTML-Auswahlsteuerelement ein?

ebricca
quelle
1

Sie können den Bindestrich "-" verwenden. Es gibt keine sichtbaren Leerzeichen zwischen den einzelnen Zeichen.
(In einigen Schriftarten!)

In HTML:

<option value = "——————————————" disabled> ————————————— </ option>

Oder in XHTML:

<option value = "—————————————" disabled = "disabled"> ———————————— </ option>
Tobi
quelle
1
Der Abstand zwischen den Zeichen wird von der Schriftart und der Rendering-Engine bestimmt. ZB sehe ich Leerzeichen zwischen Ihren Bindestrichen in Chrome (Windows), aber nicht in Safari (Mac).
Hank
1

Dieser ist immer am besten.

<option>First</option>
<option disabled>_________</option>
<option>Second</option>
<option>Third</option>

Tejashree
quelle
1
 <option  data-divider="true" disabled>______________</option>

Sie können dies auch tun. Es ist einfach und lässt den Teiler die Dropdown-Liste auswählen.

DSK
quelle
0

Ich entschied mich dafür, Farbe und Hintergrund bedingt zu wechseln. Beim Festlegen einer Sortierreihenfolge und mit vue.js habe ich Folgendes gemacht:

<style>
    .altgroup_1 {background:gray; color:white;}
    .altgroup_2{background:white; color:black;}
</style>

<option :class = {
    'altgroup_1': (country.sort_order > 25),
    'altgroup_2': (country.sort_order > 50 }"
    value="{{ country.iso_short }}">
    {{ country.short_name }}
</option
STWilson
quelle