separador de opções de seleção html


208

Como você cria um separador em uma tag de seleção?

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

Normalmente, adiciono uma opção desabilitada com espaço em branco como rótulo.
— Abhi Beckert

Respostas:


331

A abordagem da opção desativada parece ter a melhor aparência e o melhor suporte. Também incluí um exemplo de uso do optgroup.

optgroup (desta maneira meio que é péssimo):

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

opção desativada (um pouco melhor):

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

E se você quiser ser realmente chique, use o caractere de desenho da caixa unicode horizontal.
(MELHOR OPÇÃO!)

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

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


21
O Unicode funcionou muito bem para mim no jsfiddle, mas quando tentei copiá-lo / colá-lo no meu código, ele não foi traduzido corretamente. Portanto, para aqueles com esse problema, a codificação HTML para o caractere de desenho da caixa unicode horizontal é & # 9472; fileformat.info/info/unicode/char/2500/index.htm e também há uma opção mais pesada em & # 9473; fileformat.info/info/unicode/char/2501/index.htm
— JeffG 10/10

1
no Mobile Firefox (e possivelmente em outros navegadores móveis), a disabledopção é mostrada com um botão de opção desabilitado à direita ...
— GoTo

mas os grupos de opções são renderizados de maneira diferente no PC e no celular, portanto a opção desativada ainda é a melhor solução.
— GoTo

1
A codificação do arquivo html também é vital para que os caracteres "─" apareçam como uma linha, em vez de sem sentido. UFT8 com BOM pode ser uma boa escolha.
— Andreas Jansson

1
@ db0 A aparência é inconsistente. grab.by/EzEi vs grab.by/EzEk (consulte o link jsfiddle).
— Alex K

76

Experimentar:

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

40
Em vez de colocar um rótulo nos grupos de opções, tente adicioná-lo à sua folha de estilo: optgroup + optgroup {border-top: 1px preto sólido} Muito menos aparência brega do que um monte de traços.
— Laurence Gonsalves

2
Os rótulos do grupo de opções devem descrever o grupo. Se um navegador fosse implementado de acordo com a captura de tela na especificação do HTML 4.01, o usuário seria confrontado com linhas de traços e teria que examinar cada um para descobrir o que estava por trás dele.
— Quentin

2
@ Laurence: O IE7 não suporta estilos CSS no optgroup ou nos elementos da opção. Pelo menos não fronteiras
— grom

1
<optgroup style = "border-top: 1px pontilhado #ccc; margin: 5px 0;"> </optgroup> - parece legal pelo menos no firefox!
— Ben Sinclair

1
Um grupo de opções vazio como este não é um html legal. Você receberá erros de validação se usá-lo. Prefiro a resposta de james.garriss.
— Ariel

22

Este é um tópico antigo, mas como ninguém postou uma resposta semelhante, adicionarei isso, pois é o meu modo preferido de separação.

Acho que usar traços e tal é um pouco desagradável, pois pode ficar aquém da largura da caixa de seleção. Então, prefiro usar CSS para criar meus separadores ... uma simples coloração de fundo.

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


ótimo ! Eu usei min-height: 1px; altura máxima: 1 px; estofamento: 0; em vez do tamanho da fonte: 1pt; para uma linha 1px
— kofifus

15

Se você não quiser usar o elemento optgroup, coloque os traços em um elemento opcional e atribua o atributo desativado. Será visível, mas acinzentado.

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

Oi James, eu também gosto dessa solução, mas os leitores de tela lêem "desativar opção traço traço traço ...", o que pode ser muito confuso para usuários com deficiência ... você tem uma idéia de como podemos evitar isso? obrigado!
— Julio

1
É possível adicionar uma classe aos elementos visuais que você não deseja falar e adicionar um comando ARIA que oculta / desativa a classe? Talvez algo como uma das técnicas usadas aqui? asurkov.blogspot.com/2012/02/…
— james.garriss

Na verdade, @Julio, você deve postar isso como uma nova pergunta. Estou curioso para saber, mas nunca tinha programado para leitores de tela antes.
— James.garriss

9

Em vez do hífon comum, substituí-lo usando um símbolo de barra horizontal do conjunto de caracteres estendidos, não ficará muito bom se o usuário estiver em outro país que substitua esse caractere, mas funcione bem para mim. Existe uma variedade de chacters diferentes que você pode usar para obter ótimos efeitos e não há CSS envolvido.

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

8

Defina uma classe em CSS:

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

Escreva em HTML:

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

2
A resposta pode ser melhorada com um exemplo do jsfiddle. Essa parece ser a solução mais integrada, sem depender de efeitos colaterais ou hacks, mas seria bom comparar visuais de outras respostas.
— raider33

Não funciona em muitos navegadores. (como de costume, entradas sendo uma dor na bunda) #
— 4040 Quarenta

5

Estou transformando o comentário de @Laurence Gonsalves em uma resposta, porque é o único que funciona semanticamente e não parece um hack.

Tente adicionar isso à sua folha de estilo:

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

Muito menos brega do que um monte de traços.


2
Essa é realmente a maneira correta de fazer isso (o mais importante é que não adiciona conteúdo sem sentido). Eu gosto de estilo desta forma (adicionando um pouco de espaço extra verticais ao redor do separador):optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
— Nicolas Le Thierry d'Ennequin

3

Outra maneira é usar uma imagem de fundo css 1x1 na opção que parece funcionar apenas com o Firefox e ter um 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/

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


consulte também Como adiciono uma linha horizontal em um controle de seleção html?



1

Você pode usar o em dash "-". Não há espaços visíveis entre cada personagem.
(Em algumas fontes!)

Em HTML:

<valor da opção = "————————————” desativado> ——————————— </option>

Ou em XHTML:

<valor da opção = "———————————" disabled = "disabled"> ———————————— </option>

1
O espaçamento entre os caracteres é determinado pela fonte e pelo mecanismo de renderização. Por exemplo, vejo espaços entre seus traços no Chrome (Windows), mas não no Safari (Mac).
— Hank

1

Este é o melhor sempre.

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


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

você pode fazer isso também. é fácil e faça com que o divisor selecione a lista suspensa.


0

Optei por alternativamente condicionalmente cor e fundo. Definindo uma ordem de classificação e com o vue.js, fiz algo assim:

<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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.