separador de opciones de selección html

209

¿Cómo se hace un separador en una etiqueta de selección?

New Window
New Tab
-----------
Save Page
------------
Exit
Phillip Senn
fuente
Por lo general, agrego una opción deshabilitada con espacios en blanco como etiqueta.
Abhi Beckert

Respuestas:

332

El enfoque de opción deshabilitada parece verse mejor y ser el mejor soportado. También he incluido un ejemplo de uso de optgroup.

optgroup (de esta manera apesta):

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

opción deshabilitada (un poco mejor):

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

Y si quieres ser realmente elegante, usa el carácter de dibujo de cuadro unicode horizontal.
(¡MEJOR OPCIÓN!)

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

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

Alex K
fuente
21
El Unicode me funcionó muy bien en jsfiddle, pero cuando intenté copiarlo / pegarlo en mi código, no se tradujo correctamente. Entonces, para aquellos con ese problema, la codificación HTML para el carácter de dibujo de cuadro unicode horizontal es & # 9472; fileformat.info/info/unicode/char/2500/index.htm y también hay una opción más pesada en & # 9473; fileformat.info/info/unicode/char/2501/index.htm
JeffG
1
en Mobile Firefox (y posiblemente en otros navegadores móviles), la disabledopción se muestra con un botón de opción deshabilitado a la derecha ...
GoTo
pero los grupos ópticos se representan de manera diferente en PC frente a dispositivos móviles, por lo que la opción deshabilitada sigue siendo la mejor solución.
Ir al
1
La codificación del archivo html también es vital para que los caracteres "─" aparezcan como una línea, en lugar de galimatías. UFT8 con BOM podría ser una buena opción.
Andreas Jansson
1
@ db0 La apariencia es inconsistente. grab.by/EzEi vs grab.by/EzEk (ver el enlace jsfiddle).
Alex K
76

Tratar:

<optgroup label="----------"></optgroup>
Tina Orooji
fuente
41
En lugar de poner una etiqueta en los optgroups, intente agregar esto a su hoja de estilo: optgroup + optgroup {border-top: 1px solid black} Mucho menos cursi que un montón de guiones.
Laurence Gonsalves
2
Las etiquetas de Optgroup deberían describir el grupo. Si un navegador implementado según la captura de pantalla en la especificación HTML 4.01, el usuario se enfrentaría a filas de guiones y tendría que examinar cada una para descubrir qué había detrás.
Quentin
2
@Laurence: IE7 no admite estilos CSS en optgroup o elementos de opción. Por lo menos no las fronteras
Grom
2
<optgroup style = "border-top: 1px dotted #ccc; margin: 5px 0;"> </optgroup> - ¡se ve genial al menos en firefox!
Ben Sinclair
1
Un optgroup vacío como este no es html legal. Obtendrá errores de validación si lo usa. Prefiero la respuesta de james.garriss.
Ariel
22

Este es un hilo antiguo, pero como nadie publicó una respuesta similar, agregaré esto, ya que es mi forma preferida de separación.

Considero que usar guiones y demás es algo molesto, ya que podría estar por debajo del ancho del cuadro de selección. Por lo tanto, prefiero usar CSS para crear mis separadores ... un simple color de fondo.

<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
fuente
estupendo ! Usé min-height: 1px; altura máxima: 1px; relleno: 0; en lugar de tamaño de fuente: 1pt; para una línea de 1
px
15

Si no desea utilizar el elemento optgroup, coloque los guiones en un elemento de opción y dele el atributo deshabilitado. Será visible, pero atenuado.

<option disabled>----------</option>
james.garriss
fuente
Hola James, también me gusta esta solución, pero los lectores de pantalla leerán "deshabilitar opción guión guión guión guión ...", lo cual puede ser muy confuso para los usuarios discapacitados ... ¿Tienes una idea de cómo podríamos evitar esto? ¡gracias!
Julio
1
¿Es posible agregar una clase a elementos visuales que no desea que se hablen y luego agregar un comando ARIA que oculta / deshabilita la clase? Tal vez algo como una de las técnicas utilizadas aquí? asurkov.blogspot.com/2012/02/…
james.garriss
En realidad, @Julio, deberías publicar esto como una nueva pregunta. Tengo curiosidad por saberlo, pero nunca antes había programado para lectores de pantalla.
james.garriss
9

En lugar del hyphon normal, lo reemplacé usando un símbolo de barra horizontal del conjunto de caracteres extendido, no se verá muy bien si el usuario está en otro país que reemplaza ese carácter pero funciona bien para mí. Existe una gama de diferentes capítulos que puede usar para obtener algunos efectos excelentes y no hay CSS involucrados.

<option value='-' disabled>――――</option>
usuario511941
fuente
9

Definir una clase en CSS:

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

Escribe en HTML:

<select ...>
    <option disabled class="separator"></option>
</select>
Klaus Heyne
fuente
2
La respuesta podría mejorarse con un ejemplo de jsfiddle. Esta parece ser la solución más integrada que no se basa en efectos secundarios o hacks, pero sería bueno comparar imágenes de otras respuestas.
raider33
No funciona en muchos navegadores. (como de costumbre, las entradas son un dolor en el trasero)
Cuarenta
5

Estoy haciendo el comentario de @Laurence Gonsalves en una respuesta porque es la única que funciona semánticamente y no parece un truco.

Intente agregar esto a su hoja de estilo:

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

Mucho menos cursi que un montón de guiones.

Noumenon
fuente
2
Esta es realmente la forma correcta de hacerlo (lo más importante, no agrega contenido sin sentido). Me gusta optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
diseñarlo de
3

otra forma es usar una imagen de fondo css 1x1 en la opción que solo parece funcionar con firefox y tener un "----" respaldo

<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 usar javascript (jquery) para:

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


vea también ¿Cómo agrego una línea horizontal en un control de selección html?

ebricca
fuente
1

Podrías usar el guión em "-". No tiene espacios visibles entre cada personaje.
(¡En algunas fuentes!)

En HTML:

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

O en XHTML:

<option value = "—————————————" disabled = "disabled"> ————————————— </option>
Tobi
fuente
1
El espacio entre caracteres está determinado por la fuente y el motor de representación. Por ejemplo, veo espacios entre los guiones de em en Chrome (Windows) pero no en Safari (Mac).
Hank
1

Este es el mejor siempre.

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

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

Puedes hacer este también. es fácil y hace que la lista desplegable de selección de divisor.

DSK
fuente
0

Elegí alternar condicionalmente el color y el fondo. Al establecer un orden de clasificación y con vue.js, hice algo como esto:

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