HTML selezionare l'opzione separatore


208

Come si crea un separatore in un tag select?

New Window
New Tab
-----------
Save Page
------------
Exit

Di solito aggiungo un'opzione disabilitata con spazi bianchi come etichetta.
Abhi Beckert,

Risposte:


331

L'approccio per le opzioni per disabili sembra essere il migliore ed essere il migliore supportato. Ho anche incluso un esempio di utilizzo dell'optgroup.

optgroup (in questo modo fa schifo):

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

opzione disabilitata (un po 'meglio):

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

E se vuoi essere davvero fantasioso, usa il carattere di disegno della casella unicode orizzontale.
(MIGLIORE OPZIONE!)

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

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


21
L'Unicode ha funzionato perfettamente per me in jsfiddle, ma quando ho provato a copiarlo / incollarlo nel mio codice, non si è tradotto correttamente. Quindi, per quelli con quel problema, la codifica HTML per il carattere di disegno della casella unicode orizzontale è & # 9472; fileformat.info/info/unicode/char/2500/index.htm e c'è anche un'opzione più pesante su & # 9473; fileformat.info/info/unicode/char/2501/index.htm
JeffG

1
su Firefox per dispositivi mobili (e possibilmente altri browser per dispositivi mobili) l' disabledopzione è mostrata con un pulsante di opzione disabilitato a destra ...
Vai

ma gli optgroup sono resi in modo diverso su PC rispetto a dispositivi mobili, quindi l'opzione disabilitata è ancora la soluzione migliore.
Vai

1
La codifica del file html è anche vitale affinché i caratteri "─" vengano visualizzati come una linea, invece di essere incomprensibili. UFT8 con BOM potrebbe essere una buona scelta.
Andreas Jansson,

1
@ db0 L'aspetto è incoerente. grab.by/EzEi vs grab.by/EzEk (vedi il link jsfiddle).
Alex K,

76

Provare:

<optgroup label="----------"></optgroup>

40
Invece di mettere un'etichetta sugli optgroup, prova ad aggiungere questo al tuo foglio di stile: optgroup + optgroup {border-top: 1px solid black} Molto meno sdolcinato di un mucchio di trattini.
Laurence Gonsalves,

2
Le etichette Optgroup dovrebbero descrivere il gruppo. Se un browser implementato come da screenshot nella specifica HTML 4.01, l'utente dovrebbe confrontarsi con file di trattini e dovrebbe esaminare ciascuno di essi per scoprire cosa c'era dietro.
Quentin,

2
@Laurence: IE7 non supporta gli stili CSS su optgroup o elementi opzione. Almeno non confina
Grom

1
<optgroup style = "border-top: 1px #ccc punteggiato; margin: 5px 0;"> </optgroup> - sembra interessante almeno in Firefox!
Ben Sinclair,

1
Un optgroup vuoto come questo non è html legale. Riceverai errori di convalida se lo usi. Preferisco la risposta di james.garriss.
Ariel,

22

Questo è un vecchio thread, ma poiché nessuno ha pubblicato una risposta simile, lo aggiungerò perché è il mio modo preferito di separazione.

Trovo che usare i trattini e un po 'come un pugno nell'occhio in quanto potrebbe non essere all'altezza della larghezza della casella di selezione. Quindi, preferisco usare i CSS per creare i miei separatori ... una semplice colorazione di sfondo.

<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>


grande ! Ho usato l'altezza minima: 1px; max-height: 1px; padding: 0; invece della dimensione del carattere: 1pt; per una linea
1px

15

Se non si desidera utilizzare l'elemento optgroup, inserire invece i trattini in un elemento opzione e assegnargli l'attributo disabilitato. Sarà visibile, ma disattivato.

<option disabled>----------</option>

Ciao James, mi piace anche questa soluzione, ma i lettori di schermo leggeranno "disabilita trattino trattino trattino trattino ..." che può essere molto confuso per gli utenti disabili ... hai idea di come potremmo evitarlo? grazie!
Julio

1
È possibile aggiungere una classe agli elementi visivi che non si desidera pronunciare, quindi aggiungere un comando ARIA che nasconde / disabilita la classe? Forse qualcosa come una delle tecniche utilizzate qui? asurkov.blogspot.com/2012/02/…
james.garriss

In realtà, @Julio, dovresti pubblicare questo come una nuova domanda. Sono curioso di saperlo, ma non ho mai programmato prima per gli screen reader.
james.garriss,

9

Invece del normale hyphon l'ho sostituito usando un simbolo a barra orizzontale dal set di caratteri esteso, non sembrerà molto bello se l'utente si trova in un altro paese che sostituisce quel personaggio ma funziona bene per me. C'è una serie di diversi capitoli che potresti usare per alcuni grandi effetti e non ci sono css coinvolti.

<option value='-' disabled>――――</option>

8

Definire una classe in CSS:

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

Scrivi in ​​HTML:

<select ...>
    <option disabled class="separator"></option>
</select>

2
La risposta potrebbe essere migliorata con un esempio di jsfiddle. Questa sembra la soluzione più integrata che non si basa su effetti collaterali o hack, ma sarebbe bello confrontare elementi visivi di altre risposte.
raider33,

Non funziona in molti browser. (come al solito, input sono un dolore nel culo)
Quaranta

5

Sto trasformando il commento di @Laurence Gonsalves in una risposta perché è l'unico che funziona semanticamente e non sembra un hack.

Prova ad aggiungere questo al tuo foglio di stile:

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

Aspetto molto meno sdolcinato di un mucchio di trattini.


2
Questo è in realtà il modo giusto per farlo (soprattutto, non aggiunge contenuti privi di significato). Mi piace optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
modellare in

3

un altro modo è quello di utilizzare un'immagine di sfondo css 1x1 sull'opzione che sembra funzionare solo con Firefox e avere un fallback "----"

<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/

o per usare javascript (jquery) per:

-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/


vedi anche Come posso aggiungere una linea orizzontale in un controllo di selezione html?



1

È possibile utilizzare il trattino "-". Non ha spazi visibili tra ogni personaggio.
(In alcuni caratteri!)

In HTML:

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

O in XHTML:

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

1
La spaziatura tra i caratteri è determinata dal carattere e dal motore di rendering. Ad esempio, vedo spazi tra i trattini su Chrome (Windows) ma non su Safari (Mac).
Hank

1

Questo è sempre il migliore.

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


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

puoi fare anche questo. è facile e fai in modo che il divisore selezioni l'elenco a discesa.


0

Ho scelto di alternare condizionatamente il colore e lo sfondo. Impostando un ordinamento e con vue.js, ho fatto qualcosa del genere:

<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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.