html chọn phân cách tùy chọn


207

Làm thế nào để bạn tạo một dấu phân cách trong một thẻ chọn?

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

Tôi thường thêm một tùy chọn bị vô hiệu hóa với khoảng trắng làm nhãn.
Abhi Beckert

Câu trả lời:


330

Phương pháp tùy chọn bị vô hiệu hóa có vẻ như tốt nhất và được hỗ trợ tốt nhất. Tôi cũng đã bao gồm một ví dụ về việc sử dụng optgroup.

optgroup (cách này hơi tệ):

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

tùy chọn bị vô hiệu hóa (tốt hơn một chút):

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

Và nếu bạn muốn thực sự lạ mắt, hãy sử dụng ký tự vẽ hộp unicode ngang.
(LỰA CHỌN TỐT NHẤT!)

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

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


21
Unicode hoạt động rất tốt đối với tôi trong jsfiddle, nhưng khi tôi cố sao chép / dán nó vào mã của mình, nó đã không được dịch đúng. Vì vậy, đối với những người có vấn đề đó, mã hóa HTML cho ký tự vẽ hộp unicode ngang là & # 9472; fileformat.info/info/unicode/char/2500/index.htm và cũng có một tùy chọn nặng hơn tại & # 9473; fileformat.info/info/unicode/char/2501/index.htm
JeffG

1
trên Firefox di động (và có thể cả các trình duyệt di động khác), disabledtùy chọn được hiển thị với nút radio bị tắt ở bên phải ...
GoTo

nhưng optgroups được hiển thị khác nhau trên PC so với di động nên tùy chọn bị vô hiệu hóa vẫn là giải pháp tốt nhất.
GoTo

1
Việc mã hóa tệp html cũng rất quan trọng đối với các ký tự "─" hiển thị dưới dạng một dòng, thay vì vô nghĩa. UFT8 với BOM có thể là một lựa chọn tốt.
Andreas Jansson

1
@ db0 Sự xuất hiện không nhất quán. Grab.by/EzEi vs Grab.by/EzEk (xem liên kết jsfiddle).
Alex K

76

Thử:

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

40
Thay vì đặt nhãn trên các nhóm optgroup, hãy thử thêm nhãn này vào biểu định kiểu của bạn: optgroup + optgroup {Border-top: 1px solid black} Nhìn ít bị chê hơn so với một loạt dấu gạch ngang.
Laurence Gonsalves

2
Nhãn Optgroup nên mô tả nhóm. Nếu một trình duyệt được triển khai theo ảnh chụp màn hình trong thông số HTML 4.01, thì người dùng sẽ phải đối mặt với các hàng gạch ngang và sẽ phải kiểm tra từng cái để tìm ra cái gì đằng sau nó.
Quentin

2
@Laurence: IE7 không hỗ trợ kiểu css trên optgroup hoặc các thành phần tùy chọn. Ít nhất là không biên giới
grom

1
<optgroup style = "Border-top: 1px rải rác #ccc; lề: 5px 0;"> </ optgroup> - trông tuyệt nhất ít nhất trong firefox!
Ben Sinclair

1
Một optgroup trống như thế này không phải là html hợp pháp. Bạn sẽ nhận được lỗi xác nhận nếu bạn sử dụng nó. Tôi thích câu trả lời của james.garriss.
Ariel

22

Đây là một chủ đề cũ, nhưng vì không ai đăng một phản hồi tương tự, tôi sẽ thêm nó như là cách tách ưa thích của tôi.

Tôi thấy việc sử dụng dấu gạch ngang và như vậy sẽ hơi mỏi mắt vì nó có thể thiếu chiều rộng của hộp lựa chọn. Vì vậy, tôi thích sử dụng CSS để tạo các dấu phân cách của mình .. một màu nền đơn giản.

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


tuyệt quá ! Tôi đã sử dụng min-height: 1px; chiều cao tối đa: 1px; đệm: 0; thay vì cỡ chữ: 1pt; cho dòng 1px
kofifus

15

Nếu bạn không muốn sử dụng phần tử optgroup, thay vào đó hãy đặt dấu gạch ngang trong một phần tử tùy chọn và cung cấp cho nó thuộc tính bị vô hiệu hóa. Nó sẽ được nhìn thấy, nhưng màu xám.

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

Xin chào James, tôi cũng thích giải pháp này nhưng những người đọc màn hình sẽ đọc "vô hiệu hóa tùy chọn dash dash dash dash ..." có thể rất khó hiểu đối với người dùng bị vô hiệu hóa ... bạn có biết làm thế nào chúng ta có thể tránh điều này không? cảm ơn bạn!
Julio

1
Có thể thêm một lớp vào các yếu tố trực quan mà bạn không muốn nói, sau đó thêm lệnh ARIA ẩn / vô hiệu hóa lớp không? Có lẽ một cái gì đó giống như một trong những kỹ thuật được sử dụng ở đây? asurkov.blogspot.com/2012/02/ Khăn
james.garriss

Trên thực tế, @Julio, bạn nên đăng bài này như một câu hỏi mới. Tôi tò mò muốn biết, nhưng tôi chưa bao giờ lập trình cho người đọc màn hình trước đây.
james.garriss

9

Thay vì dấu gạch ngang thông thường tôi đã thay thế nó bằng biểu tượng thanh ngang từ bộ ký tự mở rộng, nó sẽ trông rất đẹp nếu người dùng ở một quốc gia khác thay thế ký tự đó nhưng hoạt động tốt với tôi. Có một loạt các nhân vật khác nhau mà bạn có thể sử dụng cho một số hiệu ứng tuyệt vời và không có css liên quan.

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

8

Xác định một lớp trong CSS:

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

Viết bằng HTML:

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

2
Câu trả lời có thể được cải thiện với một ví dụ jsfiddle. Đây có vẻ như là giải pháp tích hợp nhất không dựa vào tác dụng phụ hoặc hack, nhưng sẽ rất tuyệt khi so sánh hình ảnh của các câu trả lời khác.
raider33 24/2/2015

Không hoạt động trong nhiều trình duyệt. (như thường lệ, đầu vào là một cơn đau ở mông)
Bốn mươi

5

Tôi đang đưa ra nhận xét của @Laurence Gonsalves vì ​​đây là câu duy nhất hoạt động theo ngữ nghĩa và không giống như một bản hack.

Hãy thử thêm phần này vào biểu định kiểu của bạn:

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

Ít nhìn hơn cheesy hơn một loạt các dấu gạch ngang.


2
Đây thực sự là cách đúng đắn để làm điều đó (quan trọng là nó không thêm nội dung vô nghĩa). Tôi thích tạo kiểu theo cách này (thêm một số không gian theo chiều dọc xung quanh dải phân cách):optgroup { padding-bottom: 8px; } optgroup:not(:first-child) { padding-top: 8px; border-top: solid 1px #666; }
Nicolas Le Thierry d'Enơc

3

một cách khác là sử dụng hình nền css 1x1 trên tùy chọn dường như chỉ hoạt động với firefox và có dự phòng "----"

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

hoặc sử dụng javascript (jquery) để:

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


xem thêm Làm cách nào để thêm một đường ngang trong điều khiển chọn html?



1

Bạn có thể sử dụng dấu gạch ngang "-". Nó không có khoảng trống có thể nhìn thấy giữa mỗi nhân vật.
(Trong một số phông chữ!)

Trong HTML:

<tùy chọn giá trị = "Bẻ khóa

Hoặc trong XHTML:

<tùy chọn giá trị = "Đầm cùi, vui vẻ, vui vẻ" bị vô hiệu hóa "

1
Khoảng cách giữa các ký tự được xác định bởi phông chữ và công cụ kết xuất. Ví dụ: tôi thấy khoảng trắng giữa dấu gạch ngang của bạn trên Chrome (Windows) nhưng không phải trên Safari (Mac).
Hank

1

Cái này là tốt nhất luôn.

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


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

bạn cũng có thể làm điều này nó là dễ dàng và làm cho chia ngăn chọn danh sách thả xuống.


0

Tôi đã chọn để thay thế màu sắc và nền. Đặt thứ tự sắp xếp và với vue.js, tôi đã làm một cái gì đó như thế này:

<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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.