Semua tombol saya memiliki highlight di sekitarnya setelah saya mengkliknya. Ini ada di Chrome.
<button class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</button>
Saya menggunakan Bootstrap dengan tema, tapi saya cukup yakin bukan itu: Saya memperhatikan ini sebelumnya di proyek lain.
Itu hilang jika saya menggunakan <a>
tag bukan <button>
. Mengapa? Jika saya ingin menggunakan <button>
bagaimana saya membuatnya pergi?
html
css
twitter-bootstrap
Sean Clark Hess
sumber
sumber
Jawaban:
Saya menemukan Q dan A ini di halaman lain, dan mengesampingkan gaya fokus tombol bekerja untuk saya. Masalah ini mungkin khusus untuk MacOS dengan Chrome.
Perhatikan bahwa ini memiliki implikasi untuk aksesibilitas dan tidak disarankan hingga Anda memiliki status fokus yang konsisten dan baik untuk tombol dan input Anda. Sesuai komentar di bawah, ada pengguna di luar sana yang tidak dapat menggunakan mouse.
sumber
.btn:active:focus
pemilih untuk menghapusnya dari status aktif juga..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; }
Anda menginginkan sesuatu seperti:
Metode .blur () benar menghapus sorotan fokus dan tidak mengacaukan gaya Bootstraps.
sumber
pemahaman saya adalah bahwa fokus pertama kali diterapkan mengikuti
onMouseDown
acara, sehingga memanggile.preventDefault()
dionMouseDown
dapat menjadi solusi yang bersih tergantung pada kebutuhan Anda. Ini tentu saja merupakan solusi ramah aksesibilitas, tetapi jelas itu menyesuaikan perilaku klik mouse yang mungkin tidak kompatibel dengan proyek web Anda.Saat ini saya menggunakan solusi ini (dalam suatu
react-bootstrap
proyek) dan saya tidak menerima flicker fokus atau mempertahankan fokus tombol setelah klik, tetapi saya masih dapat menabrak fokus saya dan secara visual memvisualisasikan fokus tombol yang sama.sumber
onMouseDown={e => e.preventDefault()}
onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}
.onKeyUp
acara tersebut. Ternyata jika Anda melakukan itu, maka tombol tetap fokus setelah menekan tombol spasi atau tombol kembali dan tab atau mengklik di mana saja.Tidak percaya tidak ada yang memposting ini.
Gunakan label, bukan tombol.
Biola
sumber
<a class="btn"><my-directive/></a>
Meskipun mudah untuk hanya menghapus garis besar untuk semua tombol yang difokuskan (seperti dalam jawaban user1933897 ), tetapi solusi itu buruk dari sudut pandang aksesibilitas (misalnya, lihat Berhenti Bergaul dengan Garis Besar Fokus Default Browser )
Di sisi lain, mungkin tidak mungkin meyakinkan browser Anda untuk berhenti mendisain tombol yang diklik sebagai fokus jika berpikir bahwa itu fokus setelah Anda mengkliknya (Saya sedang melihat Anda, Chrome di OS X).
Jadi apa yang bisa kita lakukan? Beberapa pilihan muncul di benak saya.
1) Javascript (jQuery):
$('.btn').mouseup(function() { this.blur() })
Anda menginstruksikan browser Anda untuk menghapus fokus di sekitar tombol apa pun segera setelah tombol diklik. Dengan menggunakan
mouseup
alih-alihclick
kami menjaga perilaku default untuk interaksi berbasis keyboard (mouseup
tidak dipicu oleh keyboard).2) CSS:
.btn:hover { outline: 0 !important }
Di sini Anda mematikan garis besar hanya untuk tombol melayang . Jelas itu tidak ideal, tetapi mungkin cukup dalam beberapa situasi.
sumber
:active:focus {outline:none;}
..on('mouseup', function() { ... })
alih-alih.mouseup()
Ini berhasil untuk saya. Saya membuat kelas khusus yang menimpa CSS yang diperlukan.
-Webkit-box-shadow akan berfungsi untuk Chrome dan browser safari.
sumber
border: none !important;
tombol untuk mempertahankan dimensi yang samaIni bekerja untuk saya, solusi lain yang tidak disebutkan. Lemparkan saja ke event klik ...
Atau telepon dari acara / metode lain ...
sumber
Jika Anda menggunakan aturan
:focus { outline: none; }
untuk menghapus garis besar, tautan atau kontrol akan menjadi fokus tetapi tanpa indikasi fokus untuk pengguna keyboard. Metode untuk menghapusnya seperti dengan JSonfocus="blur()"
bahkan lebih buruk dan akan mengakibatkan pengguna keyboard tidak dapat berinteraksi dengan kontrol.Peretasan yang dapat Anda gunakan, yang semacam OK , termasuk menambahkan
:focus { outline: none; }
aturan ketika pengguna berinteraksi dengan mouse dan menghapusnya lagi jika interaksi keyboard terdeteksi. Lindsay Evans telah membuat lib untuk ini: https://github.com/lindsayevans/outline.jsTetapi saya lebih suka mengatur kelas pada html atau tag tubuh. Dan memiliki kontrol dalam file CSS kapan harus menggunakan ini.
Misalnya (penangan event sebaris hanya untuk tujuan demonstrasi):
Saya memang menulis Pena: http://codepen.io/snobojohan/pen/RWXXmp
Namun waspadalah ada masalah kinerja. Hal ini memaksa pengecatan ulang setiap kali pengguna beralih antara mouse dan keyboard. Lebih lanjut tentang Menghindari Cat yang Tidak Perlu http://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/
sumber
Saya telah memperhatikan hal yang sama dan meskipun itu benar-benar mengganggu saya, saya percaya tidak ada cara yang tepat untuk menangani ini.
Saya akan merekomendasikan terhadap semua solusi lain yang diberikan karena mereka membunuh aksesibilitas tombol sepenuhnya, jadi sekarang, ketika Anda tab ke tombol, Anda tidak akan mendapatkan fokus yang diharapkan.
Ini harus dihindari!
sumber
Saya menemukan solusinya. ketika kita fokus, bootstrap menggunakan bayangan kotak, jadi kita cukup menonaktifkannya (tidak cukup reputasi, tidak dapat mengunggah gambar :().
saya menambahkan
berhasil.
sumber
OPSI 1: Gunakan
:focus-visible
pseudo-classThe
:focus-visible
pseudo-class dapat digunakan untuk membunuh garis tak sedap dipandang dan fokus cincin pada tombol dan berbagai elemen untuk pengguna yang tidak menavigasi melalui keyboard (yaitu, melalui sentuhan atau klik mouse).OPSI 2: Gunakan
.focus-visible
polyfillSolusi ini menggunakan kelas CSS normal dan bukan pseudo-class yang disebutkan di atas, dan memiliki dukungan browser yang luas karena merupakan polyfill berbasis Javascript resmi .
Langkah 1: Tambahkan dependensi Javascript ke halaman HTML Anda
Catatan: polyfill fokus-terlihat memerlukan polyfill tambahan untuk beberapa browser lama yang tidak mendukung classList :
Langkah 2: Tambahkan CSS berikut ke stylesheet Anda
Berikut ini adalah versi modifikasi dari solusi CSS yang didokumentasikan lebih teliti di atas.
Langkah 3 (opsional): gunakan kelas 'fokus-terlihat' jika perlu
Jika Anda memiliki item di mana Anda ingin menunjukkan cincin fokus ketika seseorang mengklik atau menggunakan sentuhan, maka tambahkan saja
focus-visible
kelas ke elemen DOM.Sumber:
Demo:
sumber
<whatever>:focus { outline: none }
adalah ide yang lebih buruk daripada solusi ini. Sebenarnya ada orang-orang di komunitas aksesibilitas yang lebih suka Anda TIDAK PERNAH menghapus garis besar dan sebaliknya membuat semuanya memiliki: gaya fokus (baik garis besar atau bayangan kotak), dan tidak ingin mendukung: fokus-terlihat sampai browser menerapkan cara untuk membiarkan pengguna menentukan preferensi pengguna pada apakah semua item harus fokus atau tidak. Saya suka berpikir: fokus-terlihat adalah media bahagia antara keprihatinan desain dan a11y.Jika hal di atas tidak berhasil untuk Anda, coba ini:
Seperti yang ditunjukkan oleh user1933897, ini mungkin khusus untuk MacOS dengan Chrome.
sumber
bootstrap 4.0
- di windowsTerlambat, tetapi siapa tahu itu bisa membantu seseorang. CSS akan terlihat seperti:
HTML akan terlihat seperti:
Dengan cara ini Anda dapat menjaga btn dan perilaku yang terkait.
sumber
element:focus { box-shadow: none; }
dihapus garis biru / bayangan.Saya menyebutkan hal ini dalam komentar di atas, tetapi perlu dicantumkan sebagai jawaban terpisah untuk kejelasan. Selama Anda tidak perlu benar-benar fokus pada tombol, Anda dapat menggunakan acara fokus untuk menghapusnya sebelum dapat menerapkan efek CSS:
Ini menghindari flicker yang dapat dilihat saat menggunakan event klik. Ini memang membatasi antarmuka, dan Anda tidak akan bisa menabrak tombol, tetapi itu bukan masalah di semua aplikasi.
sumber
Gaya
Menggunakan
sumber
Coba solusi ini untuk menghilangkan batas di sekitar tombol. Tambahkan kode ini di css.
Mencoba
Jika tidak berfungsi, gunakan di bawah ini.
sumber
Bagi orang yang menginginkan cara css murni untuk melakukan itu:
Ini juga bisa berfungsi untuk tautan dan sebagainya, dan bonus, itu menjaga aksesibilitas keyboard. Terakhir itu diabaikan oleh browser yang tidak mendukung: fokus-terlihat
sumber
focus-visible
sekarang memiliki polyfill resmi. Jawaban saya stackoverflow.com/a/60219624/413538 pada pertanyaan ini menguraikan tentang bagaimana sebenarnya memahami semua ini.Kami mengalami masalah serupa dan memperhatikan bahwa Bootstrap 3 tidak memiliki masalah pada tab mereka (di Chrome). Sepertinya mereka menggunakan gaya garis besar yang memungkinkan peramban untuk memutuskan apa yang terbaik untuk dilakukan dan Chrome tampaknya melakukan apa yang Anda inginkan: perlihatkan garis besar ketika fokus kecuali Anda mengklik elemen tersebut.
Dukungan untuk
outline-style
sulit dijabarkan karena browser dapat memutuskan apa artinya itu. Terbaik untuk memeriksa di beberapa browser dan memiliki aturan back-back.sumber
Solusi lain yang mungkin adalah menambahkan kelas menggunakan pendengar Javascript ketika pengguna mengklik tombol dan kemudian menghapus kelas itu fokus dengan pendengar lain. Ini menjaga aksesibilitas (tabbing terlihat) sambil juga mencegah perilaku unik Chrome dalam mempertimbangkan tombol yang difokuskan saat diklik.
JS:
CSS:
Contoh lengkap di sini: https://jsfiddle.net/4bbb37fh/
sumber
Ini berhasil, saya harap membantu Anda
sumber
ini menghilangkan garis besar pada klik, tetapi tetap fokus saat menabrak (untuk a11y)
sumber
Ini yang terbaik
sumber
garis besar ini: tidak ada yang berfungsi untuk tombol dan tag
sumber
Tambahkan ini dalam CSS:
sumber
Saya menemukan solusi cukup tambahkan baris di bawah ini dalam kode css Anda.
sumber
Saya baru saja mengalami masalah yang sama pada MacOS dan Chrome saat menggunakan tombol untuk memicu acara "transisi". Jika ada orang yang membaca ini sudah menggunakan pendengar acara, Anda dapat menyelesaikannya dengan menelepon
.blur()
setelah tindakan Anda.Contoh:
Meskipun jika Anda belum menggunakan pendengar acara, menambahkan satu hanya untuk menyelesaikan ini mungkin menambahkan overhead yang tidak perlu dan solusi gaya seperti jawaban sebelumnya memberikan lebih baik.
sumber
Anda bisa mengatur
tabIndex="-1"
. Ini akan membuat browser untuk melewati tombol ini ketika Anda TAB melalui kontrol yang dapat fokus."Perbaikan" lain yang disarankan di sini, hanya menghapus garis besar fokus, tetapi masih menyisakan tombol. Namun, dari sudut pandang kegunaan, Anda sudah menghapus cahaya, jadi pengguna Anda tidak akan tahu tombol apa yang saat ini fokus.
Di sisi lain, membuat tombol tidak dapat ditabrak memiliki implikasi aksesibilitas.
Saya menggunakannya untuk menghapus garis fokus dari tombol X di
bootstrap modal
, yang memiliki duplikat tombol "Tutup" di bagian bawah dengan cara apa pun, jadi solusi saya tidak berdampak pada aksesibilitas.sumber
Jika Anda menggunakan browser webkit (dan berpotensi browser yang kompatibel dengan awalan vendor webkit), garis besar itu milik
-webkit-focus-ring
pseudoclass tombol . Cukup seteloutline
kenone
:Chrome adalah seperti browser webkit, dan efek ini terjadi di Linux juga (bukan hanya MacOS hal, meskipun beberapa gaya Chrome adalah MacOS saja)
sumber
Saya mengalami masalah yang sama menggunakan
<a>
akting sebagai tombol dan saya menemukansaya kehilangansolusi dengan menambahkan ATTRtype="button"
membuatnya berperilaku normal untuk saya setidaknya.<a type="button" class="btn btn-primary">Release Me!</a>
sumber
type
atribut seharusnya tidak berpengaruh pada ini, danbutton
adalah nilai yang tidak valid untuk itu. Atribut menerima tipe MIME dan memberi tahu klien jenis data apa yang diharapkan didapat jika mengikuti tautan (mis<a type="application/pdf" ...>
.role="button"
tetapi itu tidak berhasil (setelah menggunakan<button>
bukan<a>
). Implementasi saya secara khusus menuntut<a>
dan tidak<button>
. Jadi setelah bermain-main, saya menemukan solusi ini (kemungkinan besar bug BS)!langsung di tag html (dalam skenario di mana Anda mungkin ingin meninggalkan tema bootstrap di tempat lain di desain Anda) ..
contoh untuk dicoba ..
.. dll ,. tergantung pada efek yang diinginkan.
sumber