HTML wybierz opcję separatora opcji


208

Jak zrobić separator w tagu select?

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

Zazwyczaj dodaję wyłączoną opcję z białymi znakami.
Abhi Beckert,

Odpowiedzi:


331

Opcja wyłączonej opcji wydaje się wyglądać najlepiej i najlepiej obsługiwana. Podałem również przykład użycia grupy optgroup.

optgroup (w ten sposób trochę do bani):

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

opcja wyłączona (nieco lepiej):

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

A jeśli chcesz być naprawdę fantazyjny, użyj poziomej postaci do rysowania w polu unicode.
(NAJLEPSZA OPCJA!)

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

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


21
Unicode pracował dla mnie wielka jsfiddle, ale kiedy próbowałem skopiować / wkleić go do mojego kodu, to nie poprawnie przetłumaczyć. Więc dla tych z tym problemu, HTML kodowania Unicode na polu poziomym rysunku charakter jest & # 9472;

1
w Mobile Firefox (i ewentualnie w innych przeglądarkach mobilnych) disabledopcja jest wyświetlana z wyłączonym przyciskiem po prawej stronie ...
GoTo

ale grupy optyczne są renderowane inaczej na PC niż na urządzeniach mobilnych, więc wyłączona opcja jest nadal najlepszym rozwiązaniem.
GoTo

1
Kodowanie pliku html jest również niezbędne, aby znaki „─” były wyświetlane jako linia zamiast bełkotu. UFT8 z BOM może być dobrym wyborem.
Andreas Jansson,

1
@ db0 Wygląd jest niespójny. grab.by/EzEi vs grab.by/EzEk (patrz link jsfiddle).
Alex K

76

Próbować:

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

40
Zamiast umieszczać etykietę na optgroups, spróbuj dodać to do swojego arkusza stylów: optgroup + optgroup {border-top: 1px solid black} O wiele mniej tandetny wygląd niż kilka kresek.
Laurence Gonsalves

2
Etykiety Optgroup powinny opisywać grupę. Jeśli przeglądarka została zaimplementowana zgodnie ze zrzutem ekranu w specyfikacji HTML 4.01, użytkownik musiałby skonfrontować się z rzędami myślników i musiałby zbadać każdą z nich, aby dowiedzieć się, co za nią stoi.
Quentin

2
@Laurence: IE7 nie obsługuje stylów css na optgroup lub elementach opcji. Przynajmniej nie granice
grom

1
<optgroup style = "border-top: 1px z kropkami #ccc; margin: 5px 0;"> </optgroup> - wygląda fajnie przynajmniej w Firefoksie!
Ben Sinclair,

1
Taka pusta grupa optyczna nie jest zgodna z prawem HTML. Otrzymasz błędy sprawdzania poprawności, jeśli go użyjesz. Wolę odpowiedź james.garriss.
Ariel

22

To jest stary wątek, ale ponieważ nikt nie opublikował podobnej odpowiedzi, dodam to, ponieważ jest to mój preferowany sposób separacji.

Uważam, że używanie myślników i tego rodzaju jest trochę mętlikiem, ponieważ może nie być szerszy niż pole wyboru. Wolę więc używać CSS do tworzenia moich separatorów .. prostego kolorowania tła.

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


świetny ! Użyłem min-wysokość: 1px; maksymalna wysokość: 1px; wypełnienie: 0; zamiast rozmiaru czcionki: 1pt; dla linii 1px
kofifus

15

Jeśli nie chcesz używać elementu optgroup, umieść myślniki w elemencie opcji i nadaj mu atrybut disabled. Będzie widoczny, ale wyszarzony.

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

Cześć James, Podoba mi się również to rozwiązanie, ale czytniki ekranu czytają „wyłącz opcję kreska kreska kreska kreska ...”, co może być bardzo mylące dla niepełnosprawnych użytkowników ... czy masz pomysł, jak możemy tego uniknąć? Dziękuję Ci!
Julio,

1
Czy można dodać klasę do elementów wizualnych, których nie chcesz wypowiadać, a następnie dodać polecenie ARIA, które ukrywa / wyłącza klasę? Być może coś w rodzaju jednej z zastosowanych tutaj technik? asurkov.blogspot.com/2012/02/...
james.garriss

Właściwie, @Julio, powinieneś opublikować to jako nowe pytanie. Jestem ciekawy, ale nigdy wcześniej nie programowałem dla czytników ekranu.
james.garriss

9

Zamiast zwykłego hyphon zastąpiłem go za pomocą symbolu poziomego paska z rozszerzonego zestawu znaków, nie będzie wyglądać ładnie, jeśli użytkownik będzie w innym kraju, który zastępuje ten znak, ale działa dobrze dla mnie. Istnieje wiele różnych postaci, których można użyć do uzyskania świetnych efektów i nie wymaga udziału css.

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

8

Zdefiniuj klasę w CSS:

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

Napisz w HTML:

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

2
Odpowiedź można poprawić na przykładzie jsfiddle. To wydaje się być najbardziej wbudowanym rozwiązaniem, które nie opiera się na efektach ubocznych lub hakowaniu, ale byłoby miło porównać efekty wizualne innych odpowiedzi.
raider33

Nie działa w wielu przeglądarkach. (jak zwykle wkład jest bólem w tyłek)
Forty

5

Zamieniam komentarz @Laurence Gonsalves w odpowiedź, ponieważ jest to jedyny, który działa semantycznie i nie wygląda na włamanie.

Spróbuj dodać to do swojego arkusza stylów:

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

O wiele mniej tandetny wygląd niż kilka kresek.


2
Jest to właściwie właściwy sposób na zrobienie tego (co ważne, nie dodaje treści pozbawionych znaczenia). Lubię to stylizować w ten sposób (dodając trochę dodatkowego miejsca w pionie wokół separatora):optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
Nicolas Le Thierry d'Ennequin

3

innym sposobem jest użycie obrazu tła 1x1 css na opcji, która wydaje się działać tylko z Firefoksem i ma awarię „----”

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

lub użyć javascript (jquery) do:

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


zobacz także Jak dodać poziomą linię w kontrolce wyboru HTML?



1

Możesz użyć em myślnika „-”. Nie ma widocznych spacji między każdą postacią.
(W niektórych czcionkach!)

W HTML:

<wartość opcji = "—————————————" wyłączone> ————————————— </option>

Lub w XHTML:

<wartość opcji = "—————————————" disabled = "disabled"> ————————————— </option>

1
Odstępy między znakami są określane przez czcionkę i silnik renderujący. Np. Widzę spacje między twoimi myślnikami w Chrome (Windows), ale nie w Safari (Mac).
Hank

1

Ten jest zawsze najlepszy.

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


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

możesz to zrobić również. jest to łatwe i sprawia, że ​​lista rozwijana wybierz dzielnik.


0

Wybrałem warunkowo naprzemiennie kolor i tło. Ustawiając porządek sortowania i przy pomocy vue.js, zrobiłem coś takiego:

<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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.