séparateur d'options de sélection html


209

Comment faites-vous un séparateur dans une balise de sélection?

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

J'ajoute généralement une option désactivée avec des espaces comme étiquette.
Abhi Beckert

Réponses:


332

L'approche de l'option désactivée semble être la meilleure et être la mieux prise en charge. J'ai également inclus un exemple d'utilisation de l'optgroup.

optgroup (de cette façon suce un peu):

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

option désactivée (un peu mieux):

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

Et si vous voulez vraiment être fantaisiste, utilisez le caractère de dessin de la boîte Unicode horizontale.
(MEILLEURE OPTION!)

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

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


21
L'Unicode a très bien fonctionné pour moi dans jsfiddle, mais quand j'ai essayé de le copier / coller dans mon code, il ne s'est pas traduit correctement. Donc, pour ceux qui ont ce problème, le codage HTML du caractère de dessin de la boîte Unicode horizontale est & # 9472; fileformat.info/info/unicode/char/2500/index.htm et il existe également une option plus lourde à & # 9473; fileformat.info/info/unicode/char/2501/index.htm
JeffG

1
sur Mobile Firefox (et peut-être d'autres navigateurs mobiles), l' disabledoption est affichée avec un bouton radio désactivé à droite ...
GoTo

mais les optgroups sont rendus différemment sur PC et sur mobile, donc l'option désactivée reste la meilleure solution.
GoTo

1
L'encodage du fichier html est également essentiel pour que les caractères "─" apparaissent sous forme de ligne, au lieu de charabia. UFT8 avec BOM pourrait être un bon choix.
Andreas Jansson

1
@ db0 L'apparence est incohérente. grab.by/EzEi vs grab.by/EzEk (voir le lien jsfiddle).
Alex K

76

Essayer:

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

41
Au lieu de mettre une étiquette sur les optgroups, essayez d'ajouter ceci à votre feuille de style: optgroup + optgroup {border-top: 1px solid black} Beaucoup moins ringard qu'un tas de tirets.
Laurence Gonsalves

2
Les étiquettes des groupes optiques doivent décrire le groupe. Si un navigateur implémenté selon la capture d'écran dans la spécification HTML 4.01, l'utilisateur serait confronté à des rangées de tirets et devrait examiner chacun pour découvrir ce qui se trouvait derrière.
Quentin

2
@Laurence: IE7 ne prend pas en charge les styles CSS sur les éléments optgroup ou option.
Du

2
<optgroup style = "border-top: 1px dotted #ccc; margin: 5px 0;"> </optgroup> - ça a l'air cool au moins dans firefox!
Ben Sinclair

1
Un optgroup vide comme celui-ci n'est pas du HTML légal. Vous obtiendrez des erreurs de validation si vous l'utilisez. Je préfère la réponse de james.garriss.
Ariel

22

C'est un vieux fil, mais comme personne n'a posté une réponse similaire, je vais l'ajouter car c'est mon moyen de séparation préféré.

Je trouve que l'utilisation de tirets et autres est quelque peu gênante car elle pourrait ne pas correspondre à la largeur de la zone de sélection. Donc, je préfère utiliser CSS pour créer mes séparateurs .. une simple coloration de fond.

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


génial ! J'ai utilisé min-height: 1px; hauteur max: 1px; rembourrage: 0; au lieu de la taille de la police: 1 pt; pour une ligne 1px
kofifus

15

Si vous ne souhaitez pas utiliser l'élément optgroup, placez les tirets dans un élément option et donnez-lui l'attribut désactivé. Il sera visible, mais grisé.

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

Salut James, j'aime aussi cette solution mais les lecteurs d'écran liront "désactiver l'option dash dash dash dash ..." ce qui peut être très déroutant pour les utilisateurs handicapés ... avez-vous une idée de comment nous pourrions éviter cela? Merci!
Julio

1
Est-il possible d'ajouter une classe à des éléments visuels dont vous ne voulez pas parler, puis d'ajouter une commande ARIA qui masque / désactive la classe? Peut-être quelque chose comme l'une des techniques utilisées ici? asurkov.blogspot.com/2012/02/…
james.garriss

En fait, @Julio, vous devez poster ceci comme une nouvelle question. Je suis curieux de savoir, mais je n'ai jamais programmé de lecteurs d'écran auparavant.
james.garriss

9

Au lieu du trait d'union normal, je l'ai remplacé à l'aide d'un symbole de barre horizontale du jeu de caractères étendu, il ne sera pas très agréable si l'utilisateur est dans un autre pays qui remplace ce caractère mais fonctionne bien pour moi. Il existe une gamme de différents chapitres que vous pouvez utiliser pour de superbes effets et aucun CSS n'est impliqué.

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

9

Définissez une classe en CSS:

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

Écrivez en HTML:

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

2
La réponse pourrait être améliorée avec un exemple jsfiddle. Cela semble être la solution la plus intégrée ne reposant pas sur des effets secondaires ou des hacks, mais ce serait bien de comparer les visuels d'autres réponses.
raider33

Ne fonctionne pas dans de nombreux navigateurs. (comme d'habitude, les entrées étant une douleur dans le cul)
Quarante

5

Je fais du commentaire de @Laurence Gonsalves une réponse parce que c'est le seul qui fonctionne sémantiquement et ne ressemble pas à un hack.

Essayez d'ajouter ceci à votre feuille de style:

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

Beaucoup moins ringard qu'un tas de tirets.


2
C'est en fait la bonne façon de le faire (surtout, cela n'ajoute pas de contenu vide de sens). J'aime le styler de cette façon (en ajoutant un espace vertical supplémentaire autour du séparateur):optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
Nicolas Le Thierry d'Ennequin

3

une autre façon est d'utiliser une image d'arrière-plan css 1x1 sur l'option qui ne semble fonctionner qu'avec firefox et avoir un repli "----"

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

ou d'utiliser javascript (jquery) pour:

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


voir aussi Comment ajouter une ligne horizontale dans un contrôle de sélection html?



1

Vous pouvez utiliser le tiret cadratin "-". Il n'a pas d'espaces visibles entre chaque personnage.
(Dans certaines polices!)

En HTML:

<option value = "—————————————" désactivé> ————————————— </option>

Ou en XHTML:

<option value = "—————————————" désactivé = "désactivé"> ————————————— </option>

1
L'espacement entre les caractères est déterminé par la police et le moteur de rendu. Par exemple, je vois des espaces entre vos tirets sur Chrome (Windows) mais pas sur Safari (Mac).
Hank

1

Celui-ci est toujours meilleur.

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


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

vous pouvez le faire aussi. c'est facile et faites diviseur sélectionner la liste déroulante.


0

J'ai choisi d'alterner conditionnellement la couleur et l'arrière-plan. En définissant un ordre de tri et avec vue.js, j'ai fait quelque chose comme ceci:

<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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.