Jak usunąć fokus wokół przycisków po kliknięciu

225

Wszystkie moje przyciski są wyróżnione wokół nich po ich kliknięciu. To jest w Chrome.

Nie zaznaczone Wybrany

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

Używam Bootstrap z motywem, ale jestem pewien, że to nie to: zauważyłem to wcześniej w innym projekcie.

Znika, jeśli użyję <a>tagu zamiast <button>. Czemu? Gdybym chciał użyć, <button>jak miałbym to zrobić?

Sean Clark Hess
źródło
12
kontur: 0; może Cię zainteresować
Wiggler Jtag
Czy po kliknięciu dodaje się jakąś klasę?
Kuzgun
1
zarys: 0 nie wydaje się pomagać, podobnie jak wygląd webkita
Sean Clark Hess
7
28 odpowiedzi sugerujących różne metody obejścia tego problemu świadczy o żałosnym stanie dzisiejszego tworzenia stron internetowych.
deltanina
3
Ludzie, którzy uważają tę funkcję ułatwień dostępu za problem, są dowodem żałosnego stanu dzisiejszego tworzenia stron internetowych.
Quentin,

Odpowiedzi:

292

Znalazłem te pytania i odpowiedzi na innej stronie i nadpisanie stylu fokusa przycisku zadziałało. Ten problem może dotyczyć MacOS z Chrome.

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

Pamiętaj jednak, że ma to wpływ na dostępność i nie jest zalecane, dopóki nie uzyskasz dobrego, spójnego stanu skupienia dla przycisków i danych wejściowych. Zgodnie z poniższymi komentarzami są użytkownicy, którzy nie mogą używać myszy.

jerimiah797
źródło
33
Też o tym myślałem, ale czy usunięcie konturu nie ma problemów z dostępnością?
silvenon
10
Chyba nie mamy innego wyjścia. Możesz również dodać .btn:active:focusselektor, aby usunąć go również ze stanu aktywnego.
silvenon
45
Usunięcie konturu z przycisku jest zdecydowanie złe dla dostępności. Są użytkownicy, którzy nie mogą kontrolować myszy i muszą mieć możliwość przechodzenia między stronami za pomocą klawiatury. Usunięcie konturu sprawia, że ​​jest to bardzo trudne. Prawdopodobnie lepiej jest zapobiec naciskaniu przycisku na kliknięcie.
Murphy Randle
Dla przyszłych podróżników ten kod całkowicie zastępuje wszystkie style we wszystkich stanach przycisków dla przycisku domyślnego (nie wszystkie przyciski):.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
jeśli używasz wbudowanych zmiennych bootstrap, możesz to osiągnąć poprzez ustawienie tych dwóch zmiennych na: $ btn-focus-width: 0; $ btn-focus-box-shadow: none;
bullettrain
109

Chcesz coś takiego:

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

Metoda .blur () poprawnie usuwa podświetlanie fokusu i nie psuje stylów Bootstraps.

cshotton
źródło
9
Wyświetla zarys przez krótką chwilę, co wciąż go rujnuje: /
silvenon
2
Nie widzę żadnego migotania, jeśli wyzwalam zdarzenie skupienia zamiast zdarzenia kliknięcia.
Charles
2
Udało się to świetnie! Czy wystąpiłyby potencjalne problemy, gdybym próbował dołączyć inną procedurę obsługi zdarzeń click () (tj. Kod wykonywany po kliknięciu wspomnianego przycisku) do tego samego przycisku?
Nils_e
4
Jeśli ktoś zastanawia się, czy to działa w bootstrapie v4, to działa. Odpowiedź wciąż aktualna w 2018 roku, na zdrowie!
jreed
4
Czy jest to poprawna dostępność w porównaniu z najczęściej głosowanym pytaniem?
CharlesM
47

mój zrozumienia jest to, że ostrość jest stosowany po raz pierwszy po onMouseDownwypadku, więc dzwoni e.preventDefault()wonMouseDown może być czyste rozwiązanie w zależności od potrzeb. Jest to z pewnością rozwiązanie przyjazne dostępności, ale oczywiście dostosowuje zachowanie kliknięć myszą, które mogą nie być zgodne z twoim projektem internetowym.

Obecnie używam tego rozwiązania (w ramach react-bootstrapprojektu) i po kliknięciu nie otrzymuję migotania fokusu ani zatrzymania fokusu przycisków, ale nadal jestem w stanie tabulować fokus i wizualizować fokus tych samych przycisków.

pjs
źródło
2
Tak. twoje rozwiązanie działa. Dzięki za wskazówkę. Oto skrzypce dla rozwiązania. Ale Wymaga obsługi javascript do każdego przycisku. Byłoby wspaniale, gdybyśmy mogli to osiągnąć tylko dzięki rozwiązaniu CSS.
Galeel Bhasha
1
Myślę, że ludzie oczekują skupienia się na elemencie po kliknięciu go, a to rozwiązanie temu zapobiega. Często klikam element, a następnie odsuwam się przed zwolnieniem myszy, aby skupić się, aby móc odtąd tabulować.
Michael Tontchev
7
Dla każdego, kto szuka fragmentu kodu, powinno to działać i zachować onClick:onMouseDown={e => e.preventDefault()}
Adam K Dean
1
Zapobiega to „kliknięciu” przycisku spacji i klawisza Return. Być może bardziej kompletnym rozwiązaniem jest dodanie tego z powrotem z: onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}.
jfbloom22
Nie należy wywoływać e.preventDefault () wewnątrz onKeyUpzdarzenia. Okazuje się, że jeśli to zrobisz, przycisk pozostaje skupiony po naciśnięciu klawisza spacji lub klawisza powrotu i naciśnięciu klawisza Tab lub kliknięcia w dowolnym miejscu.
jfbloom22
30

Nie mogę uwierzyć, że nikt tego jeszcze nie opublikował.

Użyj etykiety zamiast przycisku.

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

Skrzypce

Adam McKenna
źródło
11
Działa to dobrze dla większości użytkowników, ale ta metoda nie jest przyjazna dla czytników ekranu lub klawiatur i pozostawi niewidomych użytkowników i użytkowników z upośledzonymi zdolnościami motorycznymi, niezdolnymi do interakcji z przyciskiem.
Murphy Randle
8
1. Zastąp etykietę tagiem <a>. dzięki czemu jest dostępny za pomocą klawiatury. 2. dodaj aria-role = "button", aby poprawić dostępność dla użytkownika czytnika ekranu. zaktualizowano Fiddle
Galeel Bhasha
fajne rozwiązanie, pomogło mi, ale jakoś nie działa w przypadku dyrektywy kątowej, nawet z otokiem, np.<a class="btn"><my-directive/></a>
ya_dimon 30.09.16
2
Etykiety są całkowicie pomijane dla użytkowników niebędących myszami podczas przechodzenia między kartami, złe dla dostępności
Felipe Jun
1
W Bootstrap 4 wydaje się zmieniać wygląd przycisku.
Jason Kim
30

Chociaż łatwo jest po prostu usunąć kontur dla wszystkich skoncentrowanych przycisków (jak w odpowiedzi user1933897 ), ale to rozwiązanie jest złe z punktu widzenia dostępności (na przykład zobacz Zatrzymywanie bałaganu za pomocą domyślnego konturu Focus przeglądarki )

Z drugiej strony prawdopodobnie nie można przekonać przeglądarki, aby przestała stylizować kliknięty przycisk jako skoncentrowany, jeśli wydaje się, że jest on skoncentrowany po kliknięciu (patrzę na Ciebie, Chrome na OS X).

Więc co możemy zrobić? Przychodzi mi na myśl kilka opcji.

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

Poinstruujesz swoją przeglądarkę, aby usunęła fokus wokół dowolnego przycisku natychmiast po jego kliknięciu. Używając mouseupzamiast clickzachowujemy domyślne zachowanie dla interakcji z klawiaturą ( mouseupnie jest wywoływane przez klawiaturę).

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

Tutaj wyłączasz kontur tylko dla przycisków uniesionych . Oczywiście nie jest to idealne, ale w niektórych sytuacjach może wystarczyć.

Alexis
źródło
4
Liczba 1 jest przydatną wskazówką. Wyłączy ostrość, gdy przycisk nie zostanie naciśnięty, ale pozostawi go wyświetloną, gdy zostanie naciśnięty. Wyłączyłem nacisk na kliknięty element aktywny za pomocą :active:focus {outline:none;}.
pewnościąakey
Skrócone funkcje wiążące detektory zdarzeń są nieaktualne w jQuery, więc lepiej jest użyć .on('mouseup', function() { ... })zamiast.mouseup()
Crazy Redd
16

To zadziałało dla mnie. Stworzyłem niestandardową klasę, która zastępuje niezbędny CSS.

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

wprowadź opis zdjęcia tutaj

-Webkit-box-shadow będzie działał w przeglądarkach Chrome i Safari.

men_aka
źródło
działa dla mnie, ale musiałem usunąć border: none !important;przycisk, aby zachować te same wymiary
Emeka Mbah
1
Chciałem usunąć fokus onClick powyżej odpowiedzi nie działały, ale „cień-cień: brak! Ważne;” jego praca dla mnie dzięki @Menaka
Zaif Warm
11

To działa dla mnie, inne rozwiązanie nie wspomniane. Wystarczy rzucić go w zdarzenie kliknięcia ...

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

Lub nazwij to z innego zdarzenia / metody ...

$(".btn_name").trigger("blur");
Obrabować
źródło
Problem polega na tym, że gdy użytkownik klawiatury „kliknie” przycisk (poprzez zogniskowanie go, a następnie naciśnięcie spacji) traci ostrość. Następnie musisz tabulować aż do miejsca, w którym się znajdowałeś. 😡
Tamlyn
8

Jeśli użyjesz reguły :focus { outline: none; }do usunięcia konturów, łącze lub element sterujący będzie można ustawić, ale dla użytkowników klawiatury nie będzie on wskazywał ostrości. Metody usuwania go, takie jak JS, onfocus="blur()"są jeszcze gorsze i spowodują, że użytkownicy klawiatury nie będą mogli wchodzić w interakcje z kontrolką.

Hacki, których możesz użyć, które są w porządku , obejmują dodawanie :focus { outline: none; }reguł, gdy użytkownicy wchodzą w interakcję z myszą, i usuwanie ich ponownie, jeśli zostanie wykryta interakcja klawiatury. Lindsay Evans stworzyła lib do tego: https://github.com/lindsayevans/outline.js

Ale wolałbym ustawić klasę w tagu HTML lub Body. I kontroluj w pliku CSS, kiedy tego użyć.

Na przykład (wbudowane moduły obsługi zdarzeń służą wyłącznie do celów demonstracyjnych):

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

Położyłem togheter a Pen: http://codepen.io/snobojohan/pen/RWXXmp

Ale uwaga: występują problemy z wydajnością. Wymusza to odmalowanie za każdym razem, gdy użytkownik przełącza się między myszą a klawiaturą. Więcej informacji na temat unikania niepotrzebnych farb http://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/

snobojohan
źródło
6

Zauważyłem to samo i chociaż naprawdę mnie to denerwuje, uważam, że nie ma odpowiedniego sposobu, aby sobie z tym poradzić.

Odradzałbym wszystkie inne podane rozwiązania, ponieważ całkowicie zabijają one dostęp do przycisku, więc teraz, kiedy przechodzisz do przycisku, nie uzyskasz oczekiwanego skupienia.

Tego należy unikać!

.btn:focus {
  outline: none;
}
Oscar Bolaños
źródło
Nie sądzę, że to jest złe, ponieważ nadal masz nieco inną błyskawicę na przycisku, gdy jest skupiony, więc nawet użytkownicy klawiatury mogą to rozpoznać. Ale to nie wystarczy, ponieważ nadal będziesz otrzymywać ramkę po naciśnięciu i przytrzymaniu lewego przycisku myszy
apocalypz
6

Znajduję rozwiązanie. kiedy się skupiamy, bootstrap używa box-shadow, więc po prostu go wyłączamy (za mało reputacji, nie można przesłać obrazu :().

Dodaję

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

to działa.

toffi
źródło
6

OPCJA 1: Użyj :focus-visiblepseudoklasy

:focus-visiblePseudo-klasa może być stosowany do zabijania nieestetyczne kontury i skupić pierścienie na guziki i różnych elementów dla użytkowników, którzy nie są za pomocą klawiatury nawigacyjnej (tj poprzez dotyk lub kliknięcie myszą).

/** 
 * 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;
}

Ostrzeżenie: od 2020 r. :focus-visiblePseudoklasa nie jest szeroko obsługiwana przez przeglądarki . Jednak wypełniacz jest bardzo łatwy w użyciu; patrz instrukcje poniżej.


OPCJA 2: Użyj .focus-visible wypełnienia

To rozwiązanie wykorzystuje normalną klasę CSS zamiast wspomnianej wyżej pseudoklasy i ma szeroką obsługę przeglądarki, ponieważ jest to oficjalna polifill oparta na Javascript .

Krok 1: Dodaj zależności JavaScript do swojej strony HTML

Uwaga: widoczna dla ostrości wielokrotna wypełnienie wymaga dodatkowej wielokrotnej wypełnienia dla kilku starszych przeglądarek, które nie obsługują listy klas :

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

Krok 2: Dodaj następujący CSS do swojego arkusza stylów

Poniżej znajduje się zmodyfikowana wersja rozwiązania CSS udokumentowana bardziej szczegółowo powyżej.

/**
 * 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;
}

Krok 3 (opcjonalnie): w razie potrzeby użyj klasy „widoczna fokus”

Jeśli masz jakieś elementy, w których rzeczywiście chcesz pokazać pierścień ostrości, gdy ktoś kliknie lub użyje dotyku, po prostu dodaj focus-visibleklasę do elementu 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>

Ratunek:

Próbny:

JamesWilson
źródło
Ale nawet jeśli Chrome jeszcze go nie obsługuje, prawdopodobnie nie jest to najlepsze rozwiązanie (na razie)
Elijah Mock
Co zamiast tego sugerujesz?
JamesWilson
Ukryj kontur, jak mówią inne odpowiedzi, dopóki to rozwiązanie nie będzie bardziej znormalizowane
Elijah Mock
Z mojej lektury rzeczy, jeśli dostępność jest problemem, ukrywanie konturu carte blanche <whatever>:focus { outline: none }jest gorszym pomysłem niż to rozwiązanie. W rzeczywistości są ludzie ze społeczności ułatwień dostępu, którzy woleliby NIGDY nie usuwać konturu, a zamiast tego sprawić, by wszystko miało: styl skupienia (kontur lub cień) i nie chcą obsługiwać: widoczności, dopóki przeglądarki nie wdrożą sposobu użytkownicy określają preferencje użytkownika dotyczące tego, czy wszystkie elementy powinny być aktywne, czy też nie. Lubię myśleć: widoczne skupienie jest szczęśliwym środkiem pomiędzy problemami projektowymi a ay.
JamesWilson
5

Jeśli powyższe nie działa, spróbuj tego:

.btn: focus {konspektu: brak; box-shadow: none; border: 2px solid transparent;}

Jak wskazał użytkownik 1933897, może to być specyficzne dla MacOS z Chrome.

alns
źródło
Nadal jest to ważne, gdy używasz bootstrap 4.0- w
systemie
5

Późno, ale kto to wie, może komuś pomóc. CSS wyglądałby następująco:

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

HTML wyglądałby następująco:

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

W ten sposób możesz zachować btn i powiązane z nim zachowania.

Stephanie Wyche
źródło
1
element:focus { box-shadow: none; }usunięto niebieski kontur / cień.
user435421,
3

Wspomniałem o tym w komentarzu powyżej, ale dla jasności warto ją wymienić jako osobną odpowiedź. Tak długo, jak nie musisz nigdy skupiać się na przycisku, możesz użyć zdarzenia skupienia, aby je usunąć, zanim zastosuje jakiekolwiek efekty CSS:

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

Pozwala to uniknąć migotania, które można zobaczyć podczas korzystania ze zdarzenia kliknięcia. To ogranicza interfejs i nie będziesz mógł przejść do przycisku, ale to nie jest problem we wszystkich aplikacjach.

Charles
źródło
To zrobiło dla mnie połowę sztuczki. Używam React i React-Bootstrap. Po kliknięciu przycisk był podświetlony i świecił wokół tego. Dodanie e.target.blur (); usuwa poświatę, ale przycisk pozostaje w innym kolorze.
pixelwiz
3

Styl

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

Za pomocą

<button class="btn btn-primary not-focusable">My Button</button>
Bogdan Kanteruk
źródło
Czym różni się to rozwiązanie od innych odpowiedzi?
apaul
2
Jest tylko jedna mała różnica - możesz usunąć fokus dla elementów, których potrzebujesz, określając klasę „nie-fokusową” bez nadpisywania wszystkich przycisków, łączy itp.
Bogdan Kanteruk
3

Wypróbuj to rozwiązanie, aby usunąć obramowanie wokół przycisku. Dodaj ten kod w css.

Próbować

button:focus{
outline:0px;
}

Jeśli nie działa, użyj poniżej.

button:focus{
 outline:none !important;
 }
Rana Aalamgeer
źródło
Drugi działa nawet z przyciskiem React Material UI
Geek Guy
3

Dla osób, które chcą to zrobić tylko za pomocą css:

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

Może to również działać w przypadku linków i tak dalej, a dodatkowo utrzymuje dostęp do klawiatury. Na koniec jest ignorowany przez przeglądarki, które nie obsługują: widoczny fokus

Martin Pedros
źródło
4
Działa to tylko w Chrome z włączonymi funkcjami eksperymentalnymi, zgodnie z developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible
Justin Kahn
focus-visibleteraz ma oficjalną polifill. Moja odpowiedź stackoverflow.com/a/60219624/413538 na to pytanie wyjaśnia, jak właściwie to wszystko zrozumieć.
JamesWilson
2

Wystąpił podobny problem i zauważyliśmy, że Bootstrap 3 nie ma problemu na swoich kartach (w Chrome). Wygląda na to, że używają stylu konspektu który pozwala przeglądarce decydować, co najlepiej zrobić, a Chrome wydaje się robić to, co chcesz: pokaż kontur po skupieniu, chyba że klikniesz element.

Wsparcie outline-stylejest trudne do ustalenia, ponieważ przeglądarka decyduje, co to oznacza. Najlepiej sprawdzić w kilku przeglądarkach i zastosować regułę rezerwową.

TeknoFiend
źródło
2

Innym możliwym rozwiązaniem jest dodanie klasy za pomocą programu nasłuchującego Javascript, gdy użytkownik kliknie przycisk, a następnie usunięcie tej klasy, na której skupia się inny słuchacz. Utrzymuje to dostępność (widoczne tabulacje), a jednocześnie zapobiega dziwacznemu zachowaniu Chrome w przypadku rozważania skupienia się na przycisku po kliknięciu.

JS:

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

CSS:

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

Pełny przykład tutaj: https://jsfiddle.net/4bbb37fh/

Seb Woolford
źródło
Użyj mouseDown zamiast kliknięcia. Po kliknięciu kontur pojawia się, gdy mysz jest wciśnięta (bez puszczania) początkowo.
Vincent Hoch-Drei
2

To praca, mam nadzieję, że ci pomogę

.btn:focus, .btn:focus:active {
    outline: none;
}
Дмитрий Будницкий
źródło
.btn: fokus powinien mieć zarys dostępności (podczas
tabulacji
2
.btn:focus:active {
  outline: none;
}

to usuwa kontur po kliknięciu, ale utrzymuje fokus podczas tabulacji (dla a11y)

Yennefer
źródło
Usuwa to tylko kontur myszy w dół. Po najechaniu myszą pojawi się kontur.
Wellspring
2

To działa najlepiej

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

źródło
1
  .btn:focus,.btn:active, a{
        outline: none !important;
        box-shadow: none;
     }

ten zarys: żaden nie będzie działał zarówno dla przycisku, jak i tagu

Milan Panigrahi
źródło
Jak to odpowiada na pytanie? Dodaj wyjaśnienie.
André Kool,
1

Dodaj to w CSS:

*, ::after, ::before {
    box-sizing: border-box;
    outline: none !important;
    border: none !important;
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
}
Gabriel Reis
źródło
1

Znalazłem rozwiązanie, po prostu dodaj poniżej wiersza w kodzie css.

button:focus { outline: none }
Manish Kumar Srivastava
źródło
0

Właśnie miałem ten sam problem na MacOS i Chrome, gdy użyłem przycisku do wywołania zdarzenia „przejścia”. Jeśli ktoś, kto to czyta, już korzysta z detektora zdarzeń, możesz go rozwiązać, dzwoniąc .blur()po swoich działaniach.

Przykład:

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

Chociaż jeśli nie używasz już detektora zdarzeń, dodanie jednego tylko w celu rozwiązania tego problemu może dodać niepotrzebny narzut i lepsze jest rozwiązanie do stylizacji takie jak w poprzednich odpowiedziach.

jospablos
źródło
0

Możesz ustawić tabIndex="-1". Spowoduje to, że przeglądarka pominie ten przycisk, gdy TAB przechodzisz przez ruchome elementy sterujące.

Inne sugerowane tutaj „poprawki”, usuwają tylko zarys fokusa, ale nadal pozostawiają przyciski tabulowane. Jednak z punktu widzenia użyteczności usunąłeś już blask, więc użytkownik nie będzie wiedział, który przycisk jest aktualnie ustawiony.

Z drugiej strony, uniemożliwianie zakładki przycisku ma wpływ na dostępność.

Używam go do usuwania konturu fokusu z przycisku X bootstrap modal, który ma na dole zduplikowany przycisk „Zamknij”, więc moje rozwiązanie nie ma wpływu na dostępność.

zmechanic
źródło
0

Jeśli używasz przeglądarki internetowej (i potencjalnie przeglądarki kompatybilnej z prefiksem dostawcy Webkita), ten kontur należy do -webkit-focus-ringpseudoklasy przycisku . Po prostu ustaw outlinena none:

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

Chrome jest taką przeglądarką webkitów, a ten efekt występuje również w systemie Linux (nie tylko MacOS, chociaż niektóre style Chrome to tylko MacOS)

Nate Symer
źródło
0

Miałem ten sam problem z <a>działaniem jak przycisk i odkryłem, że nie udało mi się obejść tego problemu, dodając attr, type="button"co najmniej dla mnie działa normalnie.

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

spcsLrg
źródło
typeAtrybut powinien mieć żadnego wpływu na to, i buttonto nieprawidłowy stosunek do niego. Atrybut akceptuje typ MIME i informuje klienta, jakiego rodzaju danych powinien się spodziewać, jeśli podąży za linkiem (np <a type="application/pdf" ...>.
Quentin
@Quentin Thanks. Tak, jestem tego świadomy. Zacząłem od, role="button"ale to po prostu nie działało (po użyciu <button>zamiast zamiast <a>). Moja implementacja wymagała <a>i nie <button>. Więc po majsterkowaniu, odkryłem to obejście (najprawdopodobniej błąd BS)!
spcsLrg
0

bezpośrednio w tagu HTML (w scenariuszu, w którym możesz chcieć pozostawić motyw bootstrap w innym miejscu w swoim projekcie) ..

przykłady do wypróbowania ..

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

..ect ,. w zależności od pożądanego efektu.

Nikt
źródło