Xóa đường viền màu xanh khỏi nút theo kiểu tùy chỉnh css trong Chrome


811

Tôi đang làm việc trên một trang web và tôi muốn các <button>thẻ theo kiểu tùy chỉnh . Vì vậy, với CSS, tôi đã nói : border: none. Bây giờ nó hoạt động hoàn hảo trong safari, nhưng trong chrome, khi tôi nhấp vào một trong các nút, nó đặt một đường viền màu xanh khó chịu xung quanh nó. Tôi nghĩ button:active { outline: none }hoặc button:focus { outline:none }sẽ làm việc, nhưng không làm. Có ý kiến ​​gì không?

Đây là giao diện của nó trước khi được nhấp (và cách tôi muốn nó vẫn nhìn sau khi được nhấp):

Và đây là biên giới mà tôi đang nói đến:

nhập mô tả hình ảnh ở đây

Đây là CSS của tôi:

button.launch {
    background-color: #F9A300;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.launch:hover {
    cursor: pointer;
    background-color: #FABD44;
}

button.change {
    background-color: #F88F00;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.change:hover {
    cursor: pointer;
    background-color: #F89900;
}

button:active {
    outline: none;
    border: none;
}

1
Có vẻ ổn với tôi? jsbin.com/oSAdovun/1/edit
davidpauljunior

Tôi không chắc tại sao nó hoạt động trong bản demo của bạn .. Nó đang thực hiện ở đây: jsfiddle.net/NgL8H @davidpauljunior
eshellborn

5
Tôi đã thêm quy tắc lấy nét vào phía dưới mà bạn nói không hoạt động, nhưng có vẻ như: jsfiddle.net/NgL8H/1
davidpauljunior

21
Bạn không nên xóa hoàn toàn phác thảo - những người khuyết tật - và những người như tôi thường sử dụng bàn phím vì nó nhanh - cần nó để điều hướng. Sẽ tốt hơn nhiều nếu định kiểu lại phác thảo cho thứ bạn thích.
Chris B

3
Vui lòng không đặt outline: nonenhư thế này trừ khi bạn sẵn sàng thay thế mất khả năng truy cập. Xem trang web này: outlinenone.com
Flimm

Câu trả lời:


1536

Làm điều này không được khuyến khích vì nó hồi quy khả năng truy cập trang web của bạn; để biết thêm thông tin, xem bài viết này .

Điều đó nói rằng, nếu bạn nhấn mạnh, CSS này sẽ hoạt động:

button:focus {outline:0;}

Hãy xem thử hoặc JSFiddle: http://jsfiddle.net/u4pXu/

Hoặc trong đoạn trích này:

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.change {
background-color: #F88F00;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.change:hover {
cursor: pointer;
background-color: #F89900;
}

button:active {
outline: none;
border: none;
}

button:focus {outline:0;}
<button class="launch">Launch with these ads</button> 
<button class="change">Change</button>


49
Điều này thực sự không nên outline: none;hay không quan trọng?
henrywright

2
@henrywright Vâng, OP đã thử điều đó và không làm việc cho anh ta.
diosney

58
Xin đừng bao giờ làm điều này.
Khiếu

20
Bạn chắc chắn nên tạo kiểu lại thay vì che giấu nó hoàn toàn. Trong trường hợp này, hãy thử một cái gì đó giống như button:focus{ outline-color: #A75000 }thay vì ẩn chỉ báo bạn thay đổi nó thành màu cam đậm phù hợp với phong cách.
đám mây

3
@ SeanO'Brien được cấp tình huống nhất định của OP có thể dành cho một trang web có 5 người dùng, tất cả đều có thể. Nhưng có lẽ phần lớn trong số 1123 người đã ủng hộ điều này nghĩ rằng đây là cách đúng đắn để làm mọi việc cho tình huống của họ nhưng thực tế nó không phải là phân biệt đối xử.
alexrogers

296

Chờ đợi! Có một lý do cho phác thảo xấu xí đó!

Trước khi loại bỏ phác thảo màu xanh xấu xí đó, bạn có thể muốn xem xét khả năng tiếp cận . Theo mặc định, phác thảo màu xanh đó được đặt trên các yếu tố có thể tập trung. Điều này là để người dùng có vấn đề về khả năng truy cập có thể tập trung vào nút đó bằng cách lập bảng cho nó. Một số người dùng không có kỹ năng vận động để sử dụng chuột và chỉ phải sử dụng bàn phím (hoặc một số thiết bị đầu vào khác) để tương tác với máy tính. Khi bạn xóa phác thảo màu xanh, không còn chỉ báo trực quan về yếu tố nào được tập trung. Nếu bạn định loại bỏ đường viền màu xanh, bạn nên thay thế nó bằng một loại dấu hiệu trực quan khác cho thấy nút được tập trung.

Giải pháp có thể: Làm tối các nút khi tập trung

Đối với các ví dụ bên dưới, đường viền màu xanh của Chrome lần đầu tiên được xóa bằng cách sử dụng button:focus { outline:0 !important; }

Dưới đây là các nút Bootstrap cơ bản của bạn khi chúng xuất hiện bình thường: Nút Bootstrap ở trạng thái bình thường

Dưới đây là các nút khi chúng nhận được tiêu điểm: Nút Bootstrap ở trạng thái tập trung

Đây là các nút khi chúng được nhấn: nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, các nút tối hơn một chút khi chúng lấy nét. Cá nhân, tôi khuyên bạn nên làm cho các nút tập trung thậm chí tối hơn để có sự khác biệt rất đáng chú ý giữa trạng thái tập trung và trạng thái bình thường của nút.

Nó không chỉ dành cho người dùng khuyết tật

Làm cho trang web của bạn dễ truy cập hơn là điều thường bị bỏ qua nhưng có thể giúp tạo ra trải nghiệm hiệu quả hơn trong trang web của bạn. Có nhiều người dùng bình thường sử dụng các lệnh bàn phím để điều hướng qua các trang web để giữ tay trên bàn phím.


40
Vấn đề là ở Chrome, nó xảy ra ngay cả khi nhấp chứ không phải chỉ là tab (việc triển khai logic được tìm thấy trong hầu hết các trình duyệt). Vì vậy, thực sự Google đang giảm khả năng truy cập vì hầu hết các nhà phát triển sẽ tắt tính năng này (trong Chrome)
Mất

3
Bạn đúng! Để có khả năng truy cập trong tài khoản khi xóa phác thảo, bạn cần một chút JavaScript: paciellogroup.com/blog/2012/04/ mẹo
mems

bạn thậm chí không thể định kiểu / định dạng một nhận xét theo cách mà bạn có thể trả lời, tho. khó có thể cung cấp thông tin phản hồi ở mức độ chi tiết này chỉ thông qua một bình luận.
A-Dubb

@RunLoop Làm thế nào để bạn loại bỏ hoặc thay đổi đường viền màu xanh sau khi nhấp? Nó có thể được thực hiện thông qua CSS hoặc là Javascript cần thiết?
Nick

những người có vấn đề đó chỉ có thể sử dụng vimium-ff
yukashima huksay

60

Tôi chỉ xóa phác thảo khỏi tất cả các thẻ trong trang bằng cách chọn tất cả và áp dụng phác thảo: không có gì cho mọi thứ :)

*:focus {outline:none}

Như bagofcole đã đề cập, bạn cũng có thể cần phải thêm! Quan trọng, vì vậy phong cách sẽ như thế này:

*:focus {outline:none !important}

6
Vui lòng đừng làm vậy. Người dùng điều hướng trang của bạn bằng bàn phím sẽ không thể thấy phần tử hiện đang tập trung. Thay vì ẩn đường viền, làm mờ phần tử nếu sự kiện nhấp xuất phát từ chuột.
joepio

Về cơ bản chắc chắn có một số kiểu dáng tập trung khác ...
Arziel

46

Trong trường hợp của tôi về vấn đề này, tôi đã phải xác định box-shadow: none

button:focus {
  outline:none;
  box-shadow: none;
}

4
Cảm ơn bài viết của bạn! Thuộc tính "bóng hộp" là điểm trong trường hợp của tôi.
Nightking

1
Đây là vấn đề tương tự đối với tôi. Không liên quan nhưng tôi đang sử dụng Theme Sage của Roots trong Chrome trên Ubuntu 17.10.
Spencer Hill

1
Chỉ điều này hoạt động saubox-shadow
sura2k

1
Tôi đã phải thêm! Quan trọng để làm cho nó hoạt động, có lẽ bootstrap có một định nghĩa cụ thể cho việc này ở đâu đó
webman

1
điều này làm việc cho tôi bạn đời!, cảm ơn vì đã đăng giải pháp. chúc mừng
theITideo

44

Đừng quên !importantkhai báo, để có kết quả tốt hơn

button:focus {outline:0 !important;}

Một quy tắc có thuộc tính! Quan trọng sẽ luôn được áp dụng cho dù quy tắc đó xuất hiện ở đâu trong tài liệu CSS.


14
"Cho một kết quả tốt hơn"? Bạn có thể giải thích những gì! Quan trọng không?
Popnoodles

5
Nhưng bạn có thể giải thích những gì nó làm? "Vì lý do nó tồn tại" không giải thích cho những người không biết lý do của nó là lý do của nó.
Popnoodles

48
! quan trọng nên được sử dụng hiếm khi, và chỉ để đảm bảo rằng một cái gì đó không nên bị ghi đè bởi các quy tắc tiếp theo. Bạn nên nhắm mục tiêu các yếu tố của mình với bộ chọn chính xác khi ghi đè các quy tắc trước đó.
Popnoodles

24
Việc sử dụng! Quan trọng là hiếm khi hợp lý. Bạn nên luôn luôn phạm vi các bộ chọn css của mình theo cách có ý nghĩa hơn và không sử dụng! Quan trọng chỉ vì nó mang lại cho bạn "kết quả tốt hơn".
Ronen Cypis

5
Xin đừng làm điều này. Trong khi về mặt kỹ thuật, điều này trả lời câu hỏi của OP, thu thập mọi dấu hiệu của vị trí lấy nét outline:0 !importantlà UX xấu và thực hành dev xấu. Nếu bạn đang làm điều này, vui lòng đảm bảo rằng bạn đang làm một cái gì đó khác để chỉ vị trí tiêu điểm (như thay đổi màu nền của phần tử).
đám mây

26

Loại bỏ outlinelà khủng khiếp cho khả năng tiếp cận! Lý tưởng nhất là vòng lấy nét chỉ hiển thị khi người dùng có ý định sử dụng bàn phím .

Sử dụng : tập trung-nhìn thấy . Hiện tại, đây là đề xuất của W3C về lấy nét chỉ dùng bàn phím bằng CSS và được hỗ trợ trong Firefox ( caniuse ). Cho đến khi các trình duyệt lớn khác hỗ trợ nó, bạn có thể sử dụng polyfill mạnh mẽ này .

/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
  outline: none;
}

/* Optional: Customize .focus-visible */
.focus-visible {
  outline-color: lightgreen;
}

Tôi cũng đã viết một bài chi tiết hơn chỉ trong trường hợp bạn cần thêm thông tin.


1
Tâm trí bạn, AFAIK nó không cần phải outlinenhư vậy, miễn là: tập trung nhà nước được thực hiện rõ ràng qua một số phương tiện khác, như border, background-color, box-shadowvv
Mar Örlygsson

2
Câu trả lời tốt nhất! Bài đăng của bạn đáng để đọc (và bây giờ tôi đang xem phần còn lại của blog của bạn 😅) Gói npm có thể nhìn thấy tập trung thực sự là nơi hiện tại.
FelDev

1
Đây chắc chắn là giải pháp tốt nhất. Chỉ với một vài dòng mã, tôi đã thoát khỏi đường viền màu xanh khó chịu đó khi nhấp, trong khi vẫn giữ nó khi sử dụng bàn phím. Cảm ơn!
pesta

1
Dữ liệu này có đúng không? Bộ chọn này dường như được hỗ trợ trong Chrome, không phải Firefox. developer.mozilla.org/en-US/docs/Web/CSS/ nam
Kevin Scos

Có vẻ như trong Firefox, bộ chọn được gọi :-moz-focusring, nhưng trái với những gì tài liệu nói, nó không phân biệt giữa nhấp chuột và tiêu điểm tab. Trong Chrome, tính đến thời điểm hiện tại, bạn cần kích hoạt các cờ cụ thể để nó hoạt động
phil294

12

Thêm phần này vào tệp CSS của bạn.

*{
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
}

3
cảm ơn bạn. đã hoạt động nhưng MDN cho biết: Tính năng này không chuẩn và không theo dõi tiêu chuẩn. Không sử dụng nó trên các trang web sản xuất phải đối mặt với Web: nó sẽ không hoạt động cho mọi người dùng. Cũng có thể có sự không tương thích lớn giữa việc thực hiện và hành vi có thể thay đổi trong tương lai.
Behnam Mohammadi

8

Sử dụng cái này:

:active {
    outline:none;
}

hoặc điều này nếu nó không hoạt động:

:active {
   outline:none !important;
}

Điều này làm việc cho tôi (ít nhất là FF và Chrome). Thay vì nhắm mục tiêu :focustrạng thái, chỉ cần nhắm mục tiêu :activetrạng thái và điều đó sẽ xóa phần tô sáng gây khó chịu về mặt thẩm mỹ trong trình duyệt của bạn khi người dùng nhấp vào liên kết. Nhưng nó vẫn sẽ giữ trạng thái tiêu điểm khi người dùng có các tab khuyết tật hoặc các tab dịch chuyển qua một trang. Cả hai bên đều hạnh phúc. :)


4
Tại sao phải chỉnh sửa câu trả lời của tôi nếu bạn chỉ thay thế phiên bản rút gọn của tôi bằng cùng một mã nhưng được mở rộng? Điều đó đã không làm rõ nó tốt hơn cho người dùng. Bạn có nhận được câu trả lời cho điều đó hoặc một cái gì đó? LOL ...
chuk

3
quan điểm của các trang web StackExchange như thế này là có câu trả lời giúp bất kỳ ai đọc chúng hiểu. Với mục đích đó, một câu trả lời với mã ngắn gọn, ngắn gọn không hữu ích như mã được định dạng dễ đọc. Cải thiện câu trả lời bằng cách làm cho chúng dễ đọc hơn là một cách bình thường để cải thiện trang web cho mọi người.
bignose

7

cho vấn đề này:

nhập mô tả hình ảnh ở đây

dùng cái này:

   *{
         -webkit-tap-highlight-color: rgba(0,0,0,0);
         -webkit-tap-highlight-color: transparent; /* For some Androids */
    }

kết quả:

nhập mô tả hình ảnh ở đây


7

Đối với bất kỳ ai sử dụng Bootstrap và gặp vấn đề này, họ sử dụng: active: tập trung cũng như chỉ: active và: tập trung nên bạn sẽ cần:

element:active:focus {
    outline: 0;
}

Hy vọng đã cứu ai đó một thời gian để tìm ra cái đó, đập đầu tôi một chút để tự hỏi tại sao một điều đơn giản như vậy lại không hiệu quả.


6

Hầu hết các giải pháp sẽ không hoạt động nếu bạn đang sử dụng Bootstrap 4.1 và có thể các phiên bản khác. Sau nhiều lần đập đầu, tôi phát hiện ra bạn cần phải áp dụng lớp bóng-không :

<button class="btn shadow-none">Bootstrap (4.1) button without shadow</button>


4

Bản sửa lỗi cho Chrome và các trình duyệt khác

button:focus { outline: none !important; box-shadow: none !important; }

3

thử mã này cho tất cả các yếu tố có vấn đề viền màu xanh

*{
outline: none;
}

hoặc là

*{
outline-style: none;
}

3

Một cách khác để giải quyết vấn đề tiếp cận chưa được đề cập ở đây là thông qua một chút Javascript . Tín dụng truy cập blogpost sâu sắc này từ hackernoon: https://hackernoon.com/removing-that-ugly-f Focus-rs-and -keep-it-to-6c8727fefcd2

Cách tiếp cận ở đây thực sự đơn giản nhưng hiệu quả: Thêm một lớp khi mọi người bắt đầu sử dụng phím tab để điều hướng trang (và tùy ý xóa nó khi chuyển sang chuột một lần nữa. Sau đó, bạn có thể sử dụng lớp này để hiển thị phác thảo tiêu điểm hoặc không .

function handleFirstTab(e) {
    if (e.keyCode === 9) { // the "I am a keyboard user" key
        document.body.classList.add('user-is-tabbing');
        window.removeEventListener('keydown', handleFirstTab);
    }
}

window.addEventListener('keydown', handleFirstTab);

3

Tôi gặp vấn đề tương tự vì vậy tôi đã sử dụng CSS đơn giản-

.custom-button {
    outline: none
}

2

Nếu bạn muốn xóa hiệu ứng tương tự trong đầu vào, bạn có thể thêm mã sau đây cũng như nút.

input:focus {outline:0;}

2

Cho đến khi tất cả các trình duyệt hiện đại sẽ bắt đầu hỗ trợ css-selector : có thể nhìn thấy tiêu điểm ,
cách đơn giản nhất và có thể tốt nhất để lưu khả năng truy cập là chỉ xóa tiêu điểm khó khăn này cho người dùng chuột và lưu nó cho người dùng bàn phím :

1.Sử dụng polyfill nhỏ bé này (khoảng 10kb): https://github.com/WICG/f Focus-visible 2.Thêm
mã tiếp theo ở đâu đó trong css của bạn:

.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

Hỗ trợ trình duyệt của css4-selector: tiêu điểm có thể nhìn thấy ngay bây giờ rất yếu: https://caniuse.com/#search=f Focus-visual


2

Đơn giản chỉ cần viết outline:none;. Không cần sử dụng yếu tố giảfocus


1

Đây là một vấn đề trong gia đình Chrome và đã tồn tại mãi mãi.

Một lỗi đã được nêu ra https://bugs.chromium.org/p/chromium/issues/detail?id=904208

Nó có thể được hiển thị ở đây: https://codepen.io/anon/pen/Jedvwj ngay khi bạn thêm đường viền vào bất cứ thứ gì giống nút (ví dụ như vai trò = "nút" đã được thêm vào thẻ chẳng hạn) Chrome rối tung lên và đặt trạng thái tiêu điểm khi bạn nhấp bằng chuột.

Tôi thực sự khuyên bạn nên sử dụng bản sửa lỗi này: https://github.com/wicg/f Focus -visible .

Chỉ cần làm như sau

npm install --save focus-visible

Thêm tập lệnh vào html của bạn:

<script src="/node_modules/focus-visible/dist/focus-visible.min.js"></script>

hoặc nhập vào tệp nhập chính của bạn nếu sử dụng webpack hoặc một cái gì đó tương tự:

import 'focus-visible/dist/focus-visible.min';

sau đó đặt cái này vào tập tin css của bạn:

// hide the focus indicator if element receives focus via mouse, but show on keyboard focus (on tab).
.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

// Define a strong focus indicator for keyboard focus.
// If you skip this then the browser's default focus indicator will display instead
// ideally use outline property for those users using windows high contrast mode
.js-focus-visible .focus-visible {
  outline: magenta auto 5px;
}

Bạn chỉ có thể đặt:

button:focus {outline:0;}

nhưng nếu bạn có số lượng người dùng lớn, bạn sẽ gây bất lợi cho những người không thể sử dụng chuột hoặc những người chỉ muốn sử dụng bàn phím của họ để tăng tốc.


1

Tôi đã có cùng một vấn đề với bootstrap. Tôi đã giải quyết bằng cả phác thảo và bóng hộp

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
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.