Xóa đường viền khỏi hộp chọn trong FF


97

Có thể loại bỏ đường chấm bao quanh mục đã chọn trong phần tử được chọn không?

văn bản thay thế

Tôi đã cố gắng thêm thuộc outlinetính trong CSS nhưng nó không hoạt động, ít nhất là không trong FF.

<style>
   select { outline:none; }
</style>

Cập nhật
Trước khi bạn tiếp tục và xóa đường viền, vui lòng đọc phần này.
http://www.outlinenone.com/


ba tháng trước, tôi đã tìm kiếm thứ tương tự nhưng bằng một nút radio. Hơn năm hoặc sáu giải pháp khác nhau mà tôi đã tìm thấy, không có gì hiệu quả. Vì vậy, tôi nghi ngờ bạn không thể làm điều đó. Tôi hy vọng tôi sai.
Arseni Mourzenko

Tôi e rằng đó cũng là sự thật, nhưng vẫn hy vọng được chứng minh là sai: D
Martin

Có thực sự có con người làm việc tại mozilla nghĩ rằng đường chấm ngu ngốc đó trông đẹp không? Tại sao đây lại là thứ chúng ta phải loại bỏ?
billynoah

Câu trả lời:


74

Tôi đã tìm thấy một giải pháp, nhưng nó là mẹ của tất cả các vụ hack, hy vọng nó sẽ là điểm khởi đầu cho các giải pháp khác mạnh mẽ hơn. Nhược điểm (quá lớn theo ý kiến ​​của tôi) là bất kỳ trình duyệt nào không hỗ trợ text-shadownhưng hỗ trợrgba (IE 9) sẽ không hiển thị văn bản trừ khi bạn sử dụng một thư viện như Modernizr (không được kiểm tra, chỉ là lý thuyết).

Firefox sử dụng màu văn bản để xác định màu của đường viền chấm. Vì vậy, hãy nói nếu bạn làm ...

select {
  color: rgba(0,0,0,0);
}

Firefox sẽ hiển thị đường viền chấm trong suốt. Nhưng tất nhiên văn bản của bạn cũng sẽ trong suốt! Vì vậy, bằng cách nào đó chúng ta phải hiển thị văn bản. text-shadowđến để giải cứu:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Chúng tôi đặt một bóng văn bản không có độ lệch và không bị mờ, để thay thế văn bản. Tất nhiên trình duyệt cũ hơn không hiểu bất kỳ điều gì về điều này, vì vậy chúng tôi phải cung cấp một bản dự phòng cho màu sắc:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Đây là lúc IE9 phát huy tác dụng: nó hỗ trợ rgbanhưng không hỗ trợ text-shadow, vì vậy bạn sẽ nhận được một hộp chọn trống. Tải phiên bản Modernizr của bạn với tính text-shadownăng phát hiện và làm ...

.no-textshadow select {
  color: #000;
}

Thưởng thức.


Cảm ơn người bạn đời, tôi sẽ sớm dùng thử :)
Martin

Giải pháp duy nhất thực sự hoạt động (sử dụng FF 20). Xin chúc mừng!
Gilberto Torrezan

4
Điều này sẽ quan tâm đến mọi FF và chỉ FF:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Timo Kähkönen

Nó sẽ ảnh hưởng đến css trong chrome và các trình duyệt khác?
Dadhich Sourav

165

Chà, câu trả lời của Duopixel là hoàn hảo. Nếu chúng ta tiến thêm một bước nữa, chúng ta có thể làm cho nó chống đạn.

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

Đó là bạn, chỉ hợp lệ cho Firefox và đường viền chấm xấu xí xung quanh tùy chọn đã chọn đã biến mất.


1
Thật thú vị, giải pháp này không hoàn toàn chống đạn như câu trả lời của Duopixel. Nếu bạn sử dụng hiệu ứng chuyển tiếp với hộp chọn của mình (tức là -moz-chuyển tiếp), hộp có dấu chấm sẽ xuất hiện trong suốt thời gian chuyển đổi, sau đó biến mất. Vì vậy, tức là nếu bạn chỉ định '-moz-transfer: all 0.5s easy;', bạn sẽ thấy hộp kết hợp trong nửa giây với giải pháp này, trong khi bạn sẽ không thấy nó chút nào với câu trả lời của Duopixel. Bạn có thể giải quyết vấn đề này bằng cách đặt toàn bộ phần tử được chọn có thuộc tính màu trong suốt, nhưng sau đó bạn sẽ không thấy bất kỳ văn bản nào khi hộp không có tiêu điểm.
Jon

1
Chỉnh sửa: ở trên sẽ nói, "... bạn sẽ thấy hộp có dấu chấm trong nửa giây với giải pháp này ...". Tôi không thể chỉnh sửa nhận xét nữa. Dù sao thì, 'color: rgba (0,0,0,0);' thuộc tính là thứ sửa chữa quá trình chuyển đổi và nó phải nằm trong phần tử select; '-moz-focusring' sẽ không làm được. Cũng thật thú vị, vì một số lý do mà tôi không gặp bất kỳ vấn đề nào trong cả IE9 và Chrome với giải pháp của Duopixel, vì vậy những thứ cuối cùng anh ấy đã nói về Modernizr hoàn toàn không cần thiết đối với tôi.
Jon

Tất nhiên nó sẽ xuất hiện nếu bạn chỉ định một quá trình chuyển đổi. Sử dụng alltrong quá trình chuyển đổi giống như bắn bằng súng Gatling khi đang bay.
Người bán thịt

1
Giải pháp này hoặc giải pháp của Duopixel không hoạt động trong FF 33.0.3 trong Mac Mavericks. Thay vì đường viền chấm, có đường viền mờ màu xanh lam.
Timo Kähkönen

1
điều này phá vỡ các kiểu trình duyệt trên các tùy chọn bị vô hiệu hóa - sau khi lựa chọn trong tiêu điểm, chúng sẽ trở thành màu đen thay vì văn bản xám như chúng nên có.
billynoah

19

Đây là sự hợp tác của các giải pháp để khắc phục các vấn đề về kiểu dáng với các hộp chọn của Firefox. Sử dụng bộ chọn CSS này như một phần của quá trình đặt lại CSS thông thường của bạn.

Lớp xóa đường viền theo câu hỏi nhưng cũng xóa mọi hình nền (vì tôi thường sử dụng mũi tên thả xuống tùy chỉnh và mũi tên thả xuống của hệ thống Firefoxes hiện không thể xóa được). Nếu sử dụng hình nền cho bất kỳ thứ gì khác ngoài hình ảnh thả xuống, chỉ cần xóa dòngbackground-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}

Có cách nào để vẫn xác định màu văn bản tùy chọn bằng phương pháp này không?
user1063287

Trên thực tế, bạn có thể xóa các mũi tên Firefox được sử dụng trong nền CHỌN, bằng cách đặt thuộc tính nhà cung cấp cụ thể -moz-appearancethành none.
Emanuele Del Grande

Các câu trả lời khác thiếu select::-moz-focus-innerbộ chọn quan trọng , khiến chúng kém hiệu quả hơn. Đó là lý do tại sao cái này nhận được ⬆ của tôi.
Dave Land

select:-moz-focusringcùng với color: transparenttext-shadow: 0 0 0 #000loại bỏ đường viền khó chịu trên tiêu điểm trong Firefox v63
Jason Moore

Lưu ý: url-prefix (). fxsitecompat.dev/en-CA/docs/2018/… Đọc các liên kết tôi không thấy rõ liệu chúng có loại bỏ nó hay không. Nhưng được khuyên.
user3342816

9

Điều này sẽ nhắm mục tiêu tất cả các phiên bản firefox

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

Bạn có thể muốn xóa! Important, nếu bạn định để đường viền xuất hiện trên các trang khác trên trang web của mình sử dụng cùng một biểu định kiểu.


1
Đây phải là câu trả lời được chọn
brandonscript

9

Nói chung, các điều khiển biểu mẫu không thể tạo kiểu ở mức độ chính xác đó. Không có trình duyệt nào mà tôi biết hỗ trợ một loạt các thuộc tính hợp lý trong tất cả các điều khiển. Đó là lý do tại sao có hàng đống thư viện JavaScript "giả mạo" các điều khiển biểu mẫu bằng hình ảnh và các phần tử HTML khác và mô phỏng chức năng ban đầu của chúng bằng mã:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...


Thx, tôi đoán tôi phải "tạo danh sách lựa chọn của riêng tôi" để thực hiện điều này. Thật tệ khi các điều khiển biểu mẫu không đồng nhất trên các trình duyệt.
Martin

1
@ Martin: đây là gì so với sự cứng nhắc của một điều khiển tập tin tải lên, mà không thể theo kiểu ở tất cả trong hầu hết các trình duyệt. ;)
Arseni Mourzenko

3

<select onchange="this.blur();">

Nếu bạn sử dụng điều này, đường viền vẫn giữ nguyên cho đến khi bạn chọn một mục từ danh sách.


2
Rất tiếc, giải pháp này không tôn trọng các nguyên tắc về khả năng tiếp cận và khả năng sử dụng. Ngoài giao diện TTS cho người dùng khiếm thị, nó không cho phép điều hướng bàn phím. Các yếu tố tập trung sẽ trông khác với những yếu tố khác, vấn đề với câu hỏi hiện tại là Firefox không cho phép bạn quyết định cách thức.
Emanuele Del Grande

1

Hãy thử một trong những cách sau:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

Tài liệu tham khảo


6
Thx cho nỗ lực, nhưng tiếc là nó không hoạt động. Có thể nó hoạt động trên một aphần tử, nhưng nó không hoạt động trên một selectphần tử.
Martin

1

Đây là giải pháp

:focus {outline:none;}
::-moz-focus-inner {border:0;}

1
Thử nghiệm. Không hoạt động. Firefox nhận ra thuộc tính này nhưng nó dường như không thực hiện được gì. Đã thử đặt nó thành 10px solid redvà tôi không thể tìm thấy nó hiển thị ở đâu.
mpen

Điều này thực sự hiệu quả với tôi khi tất cả các câu trả lời được bình chọn cao hơn khác thì không.
Tashows

0

Xóa đường viền viền / đường viền chấm chấm khỏi Firefox Tất cả các Thẻ có thể Chọn.

Đặt dòng mã này vào biểu định kiểu của bạn:

*:focus{outline:none !important;}   

0

Thêm kiểu viền: không có vào lựa chọn của bạn trong CSS.

select {
border-style: none; }


-4

Thao tác này sẽ xóa tiêu điểm khỏi selectphần tử và đường viền :

$("select").click(function(){
    $(this).blur();
});

Mặc dù điều này không phải là không có thiếu sót của nó trên các trình duyệt khác. Bạn sẽ muốn kiểm tra trình duyệt mà người dùng đang sử dụng:

if (FIREFOX) {
    //implement the code
}

Vui lòng giải thích đoạn mã của bạn làm gì ngoài việc cung cấp đoạn mã.
sayan
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.