pemisah opsi html pilih

208

Bagaimana Anda membuat pemisah di tag pilih?

New Window
New Tab
-----------
Save Page
------------
Exit
Phillip Senn
sumber
Saya biasanya menambahkan opsi yang dinonaktifkan dengan whitespace sebagai label.
Abhi Beckert

Jawaban:

331

Pendekatan opsi yang dinonaktifkan tampaknya terlihat terbaik dan didukung terbaik. Saya juga menyertakan contoh menggunakan optgroup.

optgroup (cara ini agak menyebalkan):

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

opsi dinonaktifkan (sedikit lebih baik):

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

Dan jika Anda ingin benar-benar mewah, gunakan karakter menggambar kotak unicode horizontal.
(PILIHAN TERBAIK!)

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

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

Alex K
sumber
21
Unicode bekerja dengan baik untuk saya di jsfiddle, tetapi ketika saya mencoba menyalin / menempelkannya ke dalam kode saya, itu tidak benar menerjemahkan. Jadi bagi mereka yang memiliki masalah itu, penyandian HTML untuk karakter menggambar kotak unicode horizontal adalah & # 9472; fileformat.info/info/unicode/char/2500/index.htm dan ada juga opsi yang lebih berat di & # 9473; fileformat.info/info/unicode/char/2501/index.htm
JeffG
1
di Seluler Firefox (dan mungkin peramban seluler lainnya) disabledopsi ini ditampilkan dengan tombol radio yang dinonaktifkan di sebelah kanan ...
GoTo
tetapi optgroup dirender secara berbeda pada PC vs seluler sehingga opsi yang dinonaktifkan masih merupakan solusi terbaik.
GoTo
1
Pengkodean file html juga penting untuk karakter "─" muncul sebagai garis, bukan omong kosong. UFT8 dengan BOM mungkin merupakan pilihan yang baik.
Andreas Jansson
1
@ db0 Penampilannya tidak konsisten. grab.by/EzEi vs grab.by/EzEk (lihat tautan jsfiddle).
Alex K
76

Mencoba:

<optgroup label="----------"></optgroup>
Tina Orooji
sumber
40
Alih-alih menempatkan label pada optgroup, coba tambahkan ini ke stylesheet Anda: optgroup + optgroup {border-top: 1px hitam pekat} Terlihat jauh lebih murahan daripada sekelompok tanda hubung.
Laurence Gonsalves
2
Label Optgroup harus menggambarkan grup. Jika browser diimplementasikan sesuai screenshot di spec HTML 4.01, maka pengguna akan dihadapkan dengan deretan tanda hubung dan harus memeriksa masing-masing untuk mengetahui apa yang ada di baliknya.
Quentin
2
@Laurence: IE7 tidak mendukung gaya css pada elemen optgroup atau opsi. Setidaknya tidak berbatasan
grom
1
<optgroup style = "border-top: 1px bertitik #ccc; margin: 5px 0;"> </optgroup> - terlihat keren setidaknya di firefox!
Ben Sinclair
1
Optgroup kosong seperti ini bukan html legal. Anda akan mendapatkan kesalahan validasi jika menggunakannya. Saya lebih suka jawaban james.garriss.
Ariel
22

Ini adalah utas lama, tetapi karena tidak ada yang memposting respons yang sama, saya akan menambahkan ini karena ini adalah cara pemisahan yang saya sukai.

Saya menemukan menggunakan tanda hubung dan semacam itu agak merusak pemandangan karena bisa jatuh jauh dari lebar kotak pilihan. Jadi, saya lebih suka menggunakan CSS untuk membuat pemisah saya .. pewarnaan latar belakang yang sederhana.

<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
sumber
Bagus ! Saya menggunakan min-height: 1px; max-height: 1px; bantalan: 0; bukannya ukuran font: 1pt; untuk garis 1px
kofifus
15

Jika Anda tidak ingin menggunakan elemen optgroup, masukkan tanda hubung di elemen opsi dan berikan atribut yang dinonaktifkan. Itu akan terlihat, tetapi abu-abu.

<option disabled>----------</option>
james.garriss
sumber
Halo James, saya juga menyukai solusi ini tetapi pembaca layar akan membaca "opsi menonaktifkan dasbor dasbor dasbor ..." yang mungkin sangat membingungkan bagi pengguna yang dinonaktifkan ... apakah Anda memiliki gagasan tentang bagaimana kita bisa menghindari ini? Terima kasih!
Julio
1
Apakah mungkin untuk menambahkan kelas ke elemen visual yang tidak ingin Anda ucapkan, lalu menambahkan perintah ARIA yang menyembunyikan / menonaktifkan kelas? Mungkin sesuatu seperti salah satu teknik yang digunakan di sini? asurkov.blogspot.com/2012/02/…
james.garriss
Sebenarnya, @Julio, Anda harus memposting ini sebagai pertanyaan baru. Saya ingin tahu, tetapi saya belum pernah memprogram untuk pembaca layar sebelumnya.
james.garriss
9

Alih-alih hyphon biasa saya menggantinya menggunakan simbol bar horisontal dari set karakter yang diperluas, itu tidak akan terlihat sangat bagus jika pengguna di negara lain yang menggantikan karakter itu tetapi berfungsi dengan baik untuk saya. Ada serangkaian karakter berbeda yang dapat Anda gunakan untuk beberapa efek hebat dan tidak ada css yang terlibat.

<option value='-' disabled>――――</option>
pengguna511941
sumber
8

Tentukan kelas dalam CSS:

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

Tulis dalam HTML:

<select ...>
    <option disabled class="separator"></option>
</select>
Klaus Heyne
sumber
2
Jawaban dapat ditingkatkan dengan contoh jsfiddle. Ini sepertinya solusi paling built-in yang tidak mengandalkan efek samping atau peretasan, tetapi akan lebih baik untuk membandingkan visual dari jawaban lain.
raider33
Tidak berfungsi di banyak browser. (seperti biasa, input menjadi rasa sakit di pantat)
Empat puluh
5

Saya membuat komentar @Laurence Gonsalves menjadi jawaban karena itu satu-satunya yang bekerja secara semantik dan tidak terlihat seperti retasan.

Coba tambahkan ini ke stylesheet Anda:

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

Apalagi terlihat murahan daripada sekelompok tanda hubung.

Noumenon
sumber
2
Ini sebenarnya cara yang tepat untuk melakukannya (yang penting, itu tidak menambahkan konten yang tidak berarti). Saya suka gaya dengan cara ini (menambahkan beberapa ruang vertikal tambahan di sekitar pemisah):optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
Nicolas Le Thierry d'Ennequin
3

Cara lain adalah dengan menggunakan gambar latar belakang css 1x1 pada opsi yang sepertinya hanya bekerja dengan firefox dan memiliki 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/

atau menggunakan javascript (jquery) ke:

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


lihat juga Bagaimana cara menambahkan garis horizontal dalam kontrol pilih html?

ebricca
sumber
1

Anda dapat menggunakan tanda hubung em "-". Tidak ada spasi yang terlihat di antara setiap karakter.
(Dalam beberapa font!)

Dalam HTML:

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

Atau dalam XHTML:

<option value = "————————————" "dinonaktifkan =" dinonaktifkan "> ————————————— </option>
Tobi
sumber
1
Jarak antar karakter ditentukan oleh font dan rendering engine. Misalnya saya melihat spasi di antara tanda hubung Anda pada Chrome (Windows) tetapi tidak pada Safari (Mac).
Hank
1

Yang ini selalu yang terbaik.

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

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

Anda dapat melakukan ini juga. itu mudah dan membuat daftar pilih drop down pembagi.

DSK
sumber
0

Saya memilih warna dan latar belakang alternatif bersyarat. Mengatur urutan dan dengan vue.js, saya melakukan sesuatu seperti ini:

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