Cách xóa tiêu điểm xung quanh các nút bấm


225

Các nút của tôi đều có một điểm nổi bật xung quanh chúng sau khi tôi nhấp vào chúng. Đây là trong Chrome.

Không được chọn Đã chọn

<button class="btn btn-primary btn-block">
    <span class="icon-plus"></span> Add Page
</button>

Tôi đang sử dụng Bootstrap với một chủ đề, nhưng tôi khá chắc chắn rằng đó không phải là: Tôi đã nhận thấy điều này trước đây trong một dự án khác.

Nó sẽ biến mất nếu tôi sử dụng một <a>thẻ thay vì <button>. Tại sao? Nếu tôi muốn sử dụng, <button>làm thế nào để tôi biến mất?


12
phác thảo: 0; có thể bạn quan tâm
Wiggler Jtag

Có lớp nào được thêm sau khi nhấp không?
Kuzgun

1
phác thảo: 0 dường như không giúp ích gì, cũng không xuất hiện webkit
Sean Clark Hess

7
28 câu trả lời cho tất cả các phương pháp khác nhau để giải quyết vấn đề này là minh chứng cho tình trạng đáng tiếc của phát triển web front end hiện nay.
deltanine

3
Những người coi tính năng trợ năng này là một vấn đề là minh chứng cho tình trạng đáng tiếc của phát triển web front end hiện nay.
Quentin

Câu trả lời:


292

Tôi đã tìm thấy Q và A này trên một trang khác và ghi đè lên kiểu lấy nét nút làm việc cho tôi. Vấn đề này có thể cụ thể đối với MacOS với Chrome.

.btn:focus {
  outline: none;
  box-shadow: none;
}

Lưu ý rằng điều này có ý nghĩa đối với khả năng truy cập và không được khuyên dùng cho đến khi bạn có trạng thái tập trung nhất quán tốt cho các nút và đầu vào của mình. Theo các bình luận dưới đây, có những người dùng không thể sử dụng chuột.


33
Tôi cũng nghĩ về điều này, nhưng không loại bỏ các phác thảo có vấn đề tiếp cận?
silvenon

10
Tôi đoán chúng ta không có lựa chọn nào khác. Bạn cũng có thể thêm .btn:active:focusbộ chọn để loại bỏ nó khỏi trạng thái hoạt động.
silvenon

45
Loại bỏ các phác thảo từ một nút chắc chắn là xấu cho khả năng truy cập. Có những người dùng không thể điều khiển chuột và cần có thể tab thông qua một trang bằng bàn phím. Loại bỏ các phác thảo làm cho điều đó rất khó khăn. Có lẽ tốt hơn để ngăn nút nhận được tập trung vào nhấp chuột.
Murphy Randle

Đối với khách du lịch trong tương lai, mã này thay thế hoàn toàn tất cả các kiểu trên tất cả các trạng thái nút cho nút mặc định (không phải tất cả các nút):.btn-default, .btn-default:hover, .btn-default:active, .btn-default:active:focus, .btn-default:visited, .btn-default:focus { color: #dcdcdc; background-color: #232323; outline: none; }
Geordie

1
nếu sử dụng các biến bootstrap tích hợp, người ta có thể đạt được điều này bằng cách đặt hai vars này thành: $ btn-Focus-width: 0; $ btn-Focus-box-bóng: không có;
đấu bò

109

Bạn muốn một cái gì đó như:

<button class="btn btn-primary btn-block" onclick="this.blur();">...

Phương thức .blur () loại bỏ chính xác việc tô sáng tiêu điểm và không làm rối các kiểu của Bootstraps.


9
Điều này sẽ hiển thị phác thảo trong một khoảnh khắc ngắn, vẫn làm hỏng nó: /
silvenon

2
Tôi không thấy bất kỳ nhấp nháy nào nếu tôi kích hoạt sự kiện tập trung thay vì sự kiện nhấp chuột.
Charles

2
Điều này làm việc tuyệt vời! Sẽ có vấn đề tiềm ẩn nếu tôi cố gắn một trình xử lý sự kiện click () khác (tức là mã thực thi khi bạn nhấp vào nút nói) vào cùng một nút?
Nils_e

4
Nếu bất cứ ai ở đây tự hỏi nếu điều này hoạt động trong bootstrap v4, thì không. Trả lời vẫn còn hiệu lực trong năm 2018, chúc mừng!
tham lam

4
Có khả năng truy cập - OK, so với câu hỏi được bình chọn hàng đầu?
CharlesM

47

sự hiểu biết của tôi là trọng tâm được áp dụng đầu tiên sau onMouseDownsự kiện này, vì vậy gọi e.preventDefault()vào onMouseDowncó thể là một giải pháp sạch tùy thuộc vào nhu cầu của bạn. Đây chắc chắn là một giải pháp thân thiện với khả năng truy cập, nhưng rõ ràng nó điều chỉnh hành vi của các nhấp chuột có thể không tương thích với dự án web của bạn.

Tôi hiện đang sử dụng giải pháp này (trong một react-bootstrapdự án) và tôi không nhận được tiêu điểm nhấp nháy hoặc giữ lại tiêu điểm của các nút sau khi nhấp, nhưng tôi vẫn có thể đánh dấu tiêu điểm của mình và trực quan hóa trọng tâm của các nút tương tự.


2
Đúng. giải pháp của bạn hoạt động. Cảm ơn vì tiền hỗ trợ. Đây là Fiddle cho giải pháp. Nhưng nó đòi hỏi một trình xử lý javascript phải được gắn vào mỗi nút. Sẽ thật tuyệt nếu chúng ta có thể đạt được điều này thông qua giải pháp chỉ CSS.
Galeel Bhasha

1
Tôi nghĩ mọi người mong đợi sự tập trung vào một yếu tố khi bạn nhấp vào nó và giải pháp này ngăn chặn điều đó. Tôi thường nhấp vào một yếu tố và sau đó di chuyển đi trước khi thả chuột để tập trung vào nó để tôi có thể tab từ đó trở đi.
Michael Tontchev

7
Đối với bất kỳ ai đang tìm kiếm một đoạn trích, điều này sẽ hoạt động và bảo tồn trên Click:onMouseDown={e => e.preventDefault()}
Adam K Dean

1
Điều này ngăn thanh không gian và phím quay lại "bấm" nút. Có lẽ một giải pháp đầy đủ hơn là thêm lại điều này bằng : onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}.
jfbloom22

Bạn không nên gọi e.preventDefault () trong onKeyUpsự kiện. Hóa ra nếu bạn làm điều đó, thì nút vẫn tập trung sau khi nhấn phím cách hoặc phím quay lại và lập bảng hoặc nhấp vào bất cứ đâu.
jfbloom22

30

Không thể tin được là chưa có ai đăng cái này.

Sử dụng nhãn thay vì nút.

<label type="button" class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</label>

Vĩ cầm


11
Điều này hoạt động tốt đối với hầu hết người dùng, nhưng phương pháp này không thân thiện với trình đọc màn hình hoặc bàn phím và sẽ khiến người dùng mù và người dùng có kỹ năng vận động bị xâm phạm, không thể tương tác với nút.
Murphy Randle

8
1. Thay thế nhãn bằng thẻ <a>. để nó có thể truy cập thông qua bàn phím. 2. thêm aria-vai trò = "nút" để cải thiện khả năng truy cập cho người dùng trình đọc màn hình. Fiddle cập nhật
Galeel Bhasha

giải pháp tốt đẹp, giúp tôi, nhưng bằng cách nào đó không làm việc cho chỉ thị góc, ngay cả với một wrapper, ví dụ:<a class="btn"><my-directive/></a>
ya_dimon

2
Các nhãn hoàn toàn bị bỏ qua cho người dùng không sử dụng chuột khi lập bảng xung quanh, không tốt cho khả năng truy cập
Felipe

1
Trong Bootstrap 4, nó dường như thay đổi giao diện của nút.
Jason Kim

30

Mặc dù thật dễ dàng để loại bỏ phác thảo cho tất cả các nút tập trung (như trong câu trả lời của người dùng1933897 ), nhưng giải pháp đó rất tệ từ quan điểm về khả năng truy cập (ví dụ: xem Ngừng gây rối với phác thảo Tiêu điểm mặc định của Trình duyệt )

Mặt khác, có lẽ không thể thuyết phục trình duyệt của bạn ngừng tạo kiểu cho nút đã nhấp của bạn là tập trung nếu nó nghĩ rằng nó tập trung sau khi bạn nhấp vào nó (Tôi đang nhìn bạn, Chrome trên OS X).

Vậy chúng ta có thể làm gì? Một vài lựa chọn đến với tâm trí của tôi.

1) Javascript (jQuery): $('.btn').mouseup(function() { this.blur() })

Bạn đang hướng dẫn trình duyệt của mình xóa tiêu điểm xung quanh bất kỳ nút nào ngay sau khi nhấp vào nút. Bằng cách sử dụng mouseupthay vì clickchúng tôi giữ hành vi mặc định cho các tương tác dựa trên bàn phím ( mouseupkhông được kích hoạt bằng bàn phím).

2) CSS: .btn:hover { outline: 0 !important }

Ở đây bạn tắt đề cương cho dao động chỉ nút. Rõ ràng nó không lý tưởng, nhưng có thể là đủ trong một số tình huống.


4
Số 1 là một mẹo hữu ích. Nó sẽ vô hiệu hóa tiêu điểm khi nút không được nhấn, tuy nhiên nó sẽ để nó hiển thị trong khi nhấn. Tôi đã vô hiệu hóa tập trung vào yếu tố hoạt động được nhấp với :active:focus {outline:none;}.
chắc chắn

Các hàm tốc ký liên kết các trình lắng nghe sự kiện không được dùng trong jQuery, vì vậy sẽ tốt hơn nếu bạn sử dụng .on('mouseup', function() { ... })thay vì.mouseup()
Crazy Redd

16

Điều này làm việc cho tôi. Tôi đã tạo một lớp tùy chỉnh ghi đè CSS cần thiết.

.custom-button:focus {
    outline: none !important;
    border: none !important;
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
}

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

-Webkit-box-Shadow sẽ hoạt động cho các trình duyệt Chrome và safari.


hoạt động với tôi nhưng tôi đã phải gỡ bỏ border: none !important;nút để duy trì kích thước tương tự
Emeka Mbah

1
Tôi đang tìm cách loại bỏ onClick tập trung ở trên các câu trả lời không hoạt động nhưng "box-Shadow: none! Quan trọng;" công việc của tôi cảm ơn @Menaka
Zaif Ấm

11

Điều này làm việc cho tôi, một giải pháp khác không được đề cập. Chỉ cần ném nó trong sự kiện nhấp chuột ...

$(this).trigger("blur");

Hoặc gọi nó từ một sự kiện / phương pháp khác ...

$(".btn_name").trigger("blur");

Vấn đề với điều này là khi người dùng bàn phím "bấm" nút (bằng cách lấy nét rồi nhấn phím cách), nó sẽ mất tiêu điểm. Sau đó, bạn phải quay trở lại mọi nơi. 😡
Tamlyn

8

Nếu bạn sử dụng quy tắc :focus { outline: none; }để xóa các phác thảo, liên kết hoặc điều khiển sẽ có thể được lấy nét nhưng không có dấu hiệu tập trung cho người dùng bàn phím. Các phương thức để loại bỏ nó như thế với JS onfocus="blur()"thậm chí còn tệ hơn và sẽ dẫn đến việc người dùng bàn phím không thể tương tác với điều khiển.

Các bản hack bạn có thể sử dụng, đó là loại OK , bao gồm thêm :focus { outline: none; }các quy tắc khi người dùng tương tác với chuột và xóa chúng một lần nữa nếu phát hiện tương tác bàn phím. Lindsay Evans đã thực hiện một lib cho điều này: https://github.com/lindsayevans/outline.js

Nhưng tôi muốn đặt một lớp trên thẻ html hoặc thẻ body. Và có quyền kiểm soát trong tệp CSS khi nào nên sử dụng.

Ví dụ: (trình xử lý sự kiện nội tuyến chỉ dành cho mục đích trình diễn):

<html>
<head>
<style>
  a:focus, button:focus {
    outline: 3px solid #000;
  }
  .no-focus a, .no-focus button {
    outline: none;
  } 
</style>
</head>
<body id="thebody" 
onmousedown="document.getElementById('thebody').classList.add('no-focus');"
onkeydown="document.getElementById('thebody').classList.remove('no-focus');">
    <p>This her is <a href="#">a link</a></p>   
    <button>Click me</button>
</body>
</html>

Tôi đã đặt bút togheter: http://codepen.io/snobojohan/pen/RWXXmp

Nhưng hãy cẩn thận có vấn đề hiệu suất. Điều này buộc phải sơn lại mỗi khi người dùng chuyển đổi giữa chuột và bàn phím. Tìm hiểu thêm về việc tránh các loại sơn không cần thiết http://www.html5rocks.com/en/tutorials/speed/unn cần thiết-sơn /


6

Tôi đã nhận thấy điều tương tự và mặc dù nó thực sự làm tôi khó chịu, tôi tin rằng không có cách xử lý nào thích hợp.

Tôi sẽ khuyên bạn nên chống lại tất cả các giải pháp khác được đưa ra bởi vì chúng hoàn toàn tiêu diệt khả năng truy cập của nút, vì vậy bây giờ, khi bạn nhấn vào nút, bạn sẽ không nhận được trọng tâm mong đợi.

Điều này nên tránh!

.btn:focus {
  outline: none;
}

Tôi không nghĩ điều này là sai, bởi vì bạn vẫn có nút chớp hơi khác khi tập trung, vì vậy ngay cả người dùng bàn phím vẫn có thể nhận ra điều đó. Nhưng điều này không đủ, bởi vì bạn vẫn sẽ nhận được khung viền khi bạn nhấn và giữ nút chuột trái
apocalypz

6

Tôi tìm một giải pháp. Khi chúng tôi tập trung, bootstrap sử dụng bóng hộp, vì vậy chúng tôi chỉ vô hiệu hóa nó (không đủ danh tiếng, không thể tải lên hình ảnh :().

Tôi thêm

.btn:focus{
    box-shadow:none !important;
}

nó hoạt động.


6

TÙY CHỌN 1: Sử dụng lớp :focus-visiblegiả

Lớp :focus-visiblegiả có thể được sử dụng để tiêu diệt các đường viền khó coi và vòng lấy nét trên các nút và các yếu tố khác nhau cho người dùng KHÔNG điều hướng qua bàn phím (ví dụ: qua chạm hoặc nhấp chuột).

/** 
 * The default focus style is likely provided by Bootstrap or the browser
 * but here we override everything else with a visually appealing cross-
 * browser solution that works well on all focusable page elements
 * including buttons, links, inputs, textareas, and selects.
 */
*:focus { 
  outline: 0 !important;
  box-shadow:
    0 0 0 .2rem #fff, /* use site bg color to create whitespace for faux focus ring */
    0 0 0 .35rem #069 !important; /* faux focus ring color */
}

/**
 * Undo the above focused button styles when the element received focus
 * via mouse click or touch, but not keyboard navigation.
 */
*:focus:not(:focus-visible) {
  outline: 0 !important;
  box-shadow: none !important;
}

Cảnh báo: Kể từ năm 2020, lớp :focus-visiblegiả không được hỗ trợ rộng rãi trên các trình duyệt . Tuy nhiên, polyfill rất dễ sử dụng; xem hướng dẫn dưới đây.


TÙY CHỌN 2: Sử dụng .focus-visiblepolyfill

Giải pháp này sử dụng một lớp CSS bình thường thay vì lớp giả được đề cập ở trên và có hỗ trợ trình duyệt rộng vì đây là một polyfill dựa trên Javascript chính thức .

Bước 1: Thêm các phụ thuộc Javascript vào trang HTML của bạn

Lưu ý: polyfill có thể nhìn thấy tập trung yêu cầu một polyfill bổ sung cho một số trình duyệt cũ không hỗ trợ classList :

<!-- place this code just before the closing </html> tag -->
<script src="https://cdn.polyfill.io/v2/polyfill.js?features=Element.prototype.classList"></script>
<script src="https://unpkg.com/focus-visible"></script>

Bước 2: Thêm CSS sau vào biểu định kiểu của bạn

Sau đây là phiên bản sửa đổi của giải pháp CSS được ghi lại kỹ lưỡng hơn ở trên.

/**
 * Custom cross-browser styles for keyboard :focus overrides defaults.
 */
*:focus { 
  outline: 0 !important;
  box-shadow:
    0 0 0 .2rem #fff,
    0 0 0 .35rem #069 !important;
}

/**
 * Remove focus styles for non-keyboard :focus.
 */
*:focus:not(.focus-visible) {
  outline: 0 !important;
  box-shadow: none !important;
}

Bước 3 (tùy chọn): sử dụng lớp 'tiêu điểm có thể nhìn thấy' khi cần thiết

Nếu bạn có bất kỳ mục nào mà bạn thực sự muốn hiển thị vòng lấy nét khi ai đó nhấp hoặc sử dụng cảm ứng, thì chỉ cần thêm focus-visiblelớp vào phần tử DOM.

<!-- This example uses Bootstrap classes to theme a button to appear like
     a regular link, and then add a focus ring when the link is clicked --->
<button type="button" class="btn btn-text focus-visible">
  Clicking me shows a focus box
</button>

Nguồn:

Bản giới thiệu:


Nhưng nếu ngay cả Chrome vẫn chưa hỗ trợ thì có lẽ đó không phải là giải pháp tốt nhất (hiện tại)
Elijah Mock

Bạn đề nghị gì thay thế?
JamesWilson

Ẩn đề cương như các câu trả lời khác nói cho đến khi giải pháp này được chuẩn hóa hơn
Elijah Mock

Theo cách đọc của tôi, nếu khả năng tiếp cận là một mối quan tâm, thì việc che giấu bản phác thảo carte <whatever>:focus { outline: none }là một ý tưởng tồi tệ hơn giải pháp này. Thực tế, có những người trong cộng đồng trợ năng thay vì bạn KHÔNG BAO GIỜ xóa phác thảo và thay vào đó làm cho mọi thứ có kiểu: tiêu điểm (phác thảo hoặc bóng hộp) và không muốn hỗ trợ: hiển thị tiêu điểm cho đến khi trình duyệt thực hiện theo cách cho phép người dùng chỉ định tùy chọn người dùng về việc liệu tất cả các mục có thể tập trung được hay không. Tôi thích nghĩ: tập trung-nhìn thấy là một phương tiện hạnh phúc giữa mối quan tâm thiết kế và a11y.
JamesWilson

5

Nếu cách trên không phù hợp với bạn, hãy thử điều này:

.btn: tập trung {phác thảo: none; hộp-bóng: none; đường viền: 2px solid trong suốt;}

Như user1933897 đã chỉ ra, điều này có thể dành riêng cho MacOS với Chrome.


Tuy nhiên, điều này vẫn hợp lệ khi sử dụng bootstrap 4.0- trong windows
3gwebtrain

5

Muộn, nhưng ai biết nó có thể giúp được ai đó. CSS sẽ trông như sau:

.rhighlight{
   outline: none !important;
   box-shadow:none
}

HTML sẽ trông như sau:

<button type="button" class="btn btn-primary rHighlight">Text</button> 

Bằng cách này bạn có thể giữ btn và đó là hành vi liên quan.


1
element:focus { box-shadow: none; }loại bỏ phác thảo màu xanh / bóng.
user435421

3

Tôi đã đề cập điều này trong một bình luận ở trên, nhưng nó đáng để liệt kê như một câu trả lời riêng biệt cho rõ ràng. Miễn là bạn không cần phải thực sự tập trung vào nút, bạn có thể sử dụng sự kiện tiêu điểm để xóa nó trước khi nó có thể áp dụng bất kỳ hiệu ứng CSS nào:

$('buttonSelector').focus(function(event) {
    event.target.blur();
});

Điều này tránh hiện tượng nhấp nháy có thể nhìn thấy khi sử dụng sự kiện nhấp chuột. Điều này không giới hạn giao diện và bạn sẽ không thể chuyển sang nút, nhưng đó không phải là vấn đề trong tất cả các ứng dụng.


Điều này đã làm một nửa mẹo cho tôi. Tôi đang sử dụng React và React-Bootstrap. Sau khi nhấp chuột, nút vẫn được tô sáng với ánh sáng xung quanh này. Thêm e.target.blur (); loại bỏ ánh sáng, nhưng nút vẫn giữ một màu khác.
pixelwiz

3

Phong cách

.not-focusable:focus {
    outline: none;
    box-shadow: none;
}

Sử dụng

<button class="btn btn-primary not-focusable">My Button</button>

Giải pháp này khác với các câu trả lời khác như thế nào?
apaul

2
Chỉ có một chút khác biệt - bạn có thể xóa tiêu điểm cho các yếu tố bạn cần với việc chỉ định lớp "không thể lấy nét" mà không ghi đè hành vi của tất cả các nút, liên kết, v.v.
Bogdan Kanteruk

3

Hãy thử giải pháp này để loại bỏ đường viền xung quanh nút. Thêm mã này trong css.

Thử

button:focus{
outline:0px;
}

Nếu không hoạt động thì sử dụng dưới đây.

button:focus{
 outline:none !important;
 }

Cái thứ hai hoạt động ngay cả với nút UI React Material
Geek Guy

3

Đối với những người muốn một cách css thuần túy để làm điều đó:

:focus:not(:focus-visible) { outline: none }

Điều này cũng có thể hoạt động cho liên kết và như vậy, và phần thưởng, nó giữ cho khả năng truy cập bàn phím. Cuối cùng, nó bị bỏ qua bởi các trình duyệt không hỗ trợ: có thể nhìn thấy tiêu điểm


4
Điều này sẽ chỉ hoạt động trên Chrome với các tính năng thử nghiệm được bật, theo nhà phát
Justin Kahn

focus-visiblebây giờ có một polyfill chính thức. Câu trả lời của tôi stackoverflow.com/a/60219624/413538 về câu hỏi này xây dựng về cách thực sự có ý nghĩa của tất cả điều này.
JamesWilson

2

Chúng tôi đã gặp phải một vấn đề tương tự và nhận thấy rằng Bootstrap 3 không có vấn đề trên các tab của họ (trong Chrome). Có vẻ như họ đang sử dụng kiểu phác thảo cho phép trình duyệt quyết định những gì tốt nhất để làm và Chrome dường như làm những gì bạn muốn: hiển thị phác thảo khi tập trung trừ khi bạn chỉ cần nhấp vào yếu tố.

Hỗ trợ outline-stylerất khó để xác định vì trình duyệt phải quyết định điều đó có nghĩa là gì. Tốt nhất để kiểm tra trong một vài trình duyệt và có quy tắc dự phòng.


2

Một giải pháp khả thi khác là thêm một lớp bằng trình nghe Javascript khi người dùng nhấp vào nút và sau đó xóa lớp đó theo tiêu điểm với một trình nghe khác. Điều này duy trì khả năng truy cập (hiển thị tab) đồng thời ngăn chặn hành vi kỳ quặc của Chrome khi xem xét một nút tập trung khi nhấp vào.

JS:

$('button').click(function(){
    $(this).addClass('clicked');
});
$('button').focus(function(){
    $(this).removeClass('clicked');
});

CSS:

button:focus {
    outline: 1px dotted #000;
}
button.clicked {
    outline: none;
}

Ví dụ đầy đủ tại đây: https://jsfiddle.net/4bbb37fh/


Sử dụng mouseDown thay vì nhấp chuột. Khi nhấp vào phác thảo xuất hiện trong khi chuột được nhấn (mà không giải phóng nó) ban đầu.
Vincent Hoch-Drei


2
.btn:focus:active {
  outline: none;
}

điều này loại bỏ phác thảo khi nhấp, nhưng vẫn giữ tiêu điểm khi lập bảng (đối với a11y)


Điều này chỉ loại bỏ các phác thảo trên chuột xuống. Sau khi chuột lên, phác thảo xuất hiện.
Wellspring

2

Cái này hoạt động tốt nhất

.btn-primary.focus, .btn-primary:focus {
-webkit-box-shadow: none!important;
box-shadow: none!important;
}

1
  .btn:focus,.btn:active, a{
        outline: none !important;
        box-shadow: none;
     }

phác thảo này: không cái nào hoạt động cho cả nút và thẻ


Làm thế nào để trả lời câu hỏi này? Vui lòng thêm một số giải thích.
André Kool

1

Thêm phần này vào CSS:

*, ::after, ::before {
    box-sizing: border-box;
    outline: none !important;
    border: none !important;
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
}

1

Tôi tìm thấy một giải pháp chỉ cần thêm dòng dưới đây trong mã css của bạn.

button:focus { outline: none }

0

Tôi vừa gặp vấn đề tương tự trên MacOS và Chrome khi sử dụng nút để kích hoạt sự kiện "chuyển tiếp". Nếu bất cứ ai đọc điều này đã sử dụng một trình lắng nghe sự kiện, bạn có thể giải quyết nó bằng cách gọi .blur()sau hành động của bạn.

Thí dụ:

 nextQuestionButtonEl.click(function(){
    if (isQuestionAnswered()) {
        currentQuestion++;
        changeQuestion();
    } else {
        toggleNotification("invalidForm");
    }
    this.blur();
});

Mặc dù nếu bạn chưa sử dụng trình lắng nghe sự kiện, việc thêm một trình giải quyết vấn đề này có thể thêm chi phí không cần thiết và một giải pháp tạo kiểu như các câu trả lời trước cung cấp sẽ tốt hơn.


0

Bạn có thể thiết lập tabIndex="-1". Nó sẽ khiến trình duyệt bỏ qua nút này khi bạn TAB thông qua các điều khiển có thể lấy nét.

Các "sửa lỗi" khác được đề xuất ở đây, chỉ xóa phác thảo tiêu điểm, nhưng vẫn để các nút có thể tab. Tuy nhiên, từ quan điểm khả năng sử dụng, bạn đã loại bỏ ánh sáng, vì vậy người dùng của bạn sẽ không biết nút nào hiện đang được tập trung, bằng mọi cách.

Mặt khác, làm cho nút không thể lập bảng có ý nghĩa về khả năng truy cập.

Tôi đang sử dụng nó để xóa phác thảo tiêu điểm khỏi nút X, nút bootstrap modalnày có nút "Đóng" trùng lặp ở phía dưới, vì vậy giải pháp của tôi không ảnh hưởng đến khả năng truy cập.


0

Nếu bạn đang sử dụng trình duyệt webkit (và có khả năng là trình duyệt tương thích với tiền tố của nhà cung cấp webkit), thì đường viền đó thuộc về giả của nút -webkit-focus-ring. Đơn giản chỉ cần đặt nó outlinethành none:

*:-webkit-focus-ring {
  outline: none;
}

Chrome là một trình duyệt webkit và hiệu ứng này cũng xảy ra với Linux (không chỉ là một thứ macOS, mặc dù một số kiểu Chrome chỉ là macOS)


0

Tôi đã gặp vấn đề tương tự khi sử dụng <a>hoạt động như nút và tôi phát hiện ra mình đang thiếu một cách giải quyết bằng cách thêm attr type="button"làm cho nó hoạt động bình thường đối với tôi ít nhất.

<a type="button" class="btn btn-primary">Release Me!</a>


Các typethuộc tính nên không có hiệu lực về vấn đề này, và buttonlà một giá trị không hợp lệ cho nó. Thuộc tính chấp nhận một kiểu MIME và nói với khách hàng những gì sắp xếp của dữ liệu mà nó nên mong đợi để nhận được nếu nó sau liên kết (ví dụ <a type="application/pdf" ...>.
Quentin

@Quentin Cảm ơn. Vâng, tôi biết điều đó. Tôi đã bắt đầu với role="button"nhưng nó không hoạt động (sau khi sử dụng <button>thay thế <a>). Việc thực hiện của tôi đặc biệt đòi hỏi một <a>và không <button>. Vì vậy, sau khi mày mò nhiều, tôi phát hiện ra cách giải quyết này (rất có thể là lỗi BS)!
spcsLrg

0

trực tiếp trong thẻ html (trong trường hợp bạn có thể muốn để lại chủ đề bootstrap ở vị trí khác trong thiết kế của mình) ..

ví dụ để thử ..

<button style="border: transparent;">
<button style="border: 1px solid black;">

..Vân vân,. tùy thuộc vào hiệu quả mong muốn.

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.