Wszystkie moje przyciski są wyróżnione wokół nich po ich kliknięciu. To jest w Chrome.
<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ć?
html
css
twitter-bootstrap
Sean Clark Hess
źródło
źródło
Odpowiedzi:
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.
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.
źródło
.btn:active:focus
selektor, aby usunąć go również ze stanu aktywnego..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; }
Chcesz coś takiego:
Metoda .blur () poprawnie usuwa podświetlanie fokusu i nie psuje stylów Bootstraps.
źródło
mój zrozumienia jest to, że ostrość jest stosowany po raz pierwszy po
onMouseDown
wypadku, więc dzwonie.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-bootstrap
projektu) 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.źródło
onMouseDown={e => e.preventDefault()}
onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}
.onKeyUp
zdarzenia. 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.Nie mogę uwierzyć, że nikt tego jeszcze nie opublikował.
Użyj etykiety zamiast przycisku.
Skrzypce
źródło
<a class="btn"><my-directive/></a>
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
mouseup
zamiastclick
zachowujemy domyślne zachowanie dla interakcji z klawiaturą (mouseup
nie 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ć.
źródło
:active:focus {outline:none;}
..on('mouseup', function() { ... })
zamiast.mouseup()
To zadziałało dla mnie. Stworzyłem niestandardową klasę, która zastępuje niezbędny CSS.
-Webkit-box-shadow będzie działał w przeglądarkach Chrome i Safari.
źródło
border: none !important;
przycisk, aby zachować te same wymiaryTo działa dla mnie, inne rozwiązanie nie wspomniane. Wystarczy rzucić go w zdarzenie kliknięcia ...
Lub nazwij to z innego zdarzenia / metody ...
źródło
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.jsAle 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):
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/
źródło
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ć!
źródło
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ę
to działa.
źródło
OPCJA 1: Użyj
:focus-visible
pseudoklasy:focus-visible
Pseudo-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ą).OPCJA 2: Użyj
.focus-visible
wypełnieniaTo 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 :
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.
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-visible
klasę do elementu DOM.Ratunek:
Próbny:
źródło
<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.Jeśli powyższe nie działa, spróbuj tego:
Jak wskazał użytkownik 1933897, może to być specyficzne dla MacOS z Chrome.
źródło
bootstrap 4.0
- wPóźno, ale kto to wie, może komuś pomóc. CSS wyglądałby następująco:
HTML wyglądałby następująco:
W ten sposób możesz zachować btn i powiązane z nim zachowania.
źródło
element:focus { box-shadow: none; }
usunięto niebieski kontur / cień.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:
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.
źródło
Styl
Za pomocą
źródło
Wypróbuj to rozwiązanie, aby usunąć obramowanie wokół przycisku. Dodaj ten kod w css.
Próbować
Jeśli nie działa, użyj poniżej.
źródło
Dla osób, które chcą to zrobić tylko za pomocą css:
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
źródło
focus-visible
teraz ma oficjalną polifill. Moja odpowiedź stackoverflow.com/a/60219624/413538 na to pytanie wyjaśnia, jak właściwie to wszystko zrozumieć.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-style
jest trudne do ustalenia, ponieważ przeglądarka decyduje, co to oznacza. Najlepiej sprawdzić w kilku przeglądarkach i zastosować regułę rezerwową.źródło
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:
CSS:
Pełny przykład tutaj: https://jsfiddle.net/4bbb37fh/
źródło
To praca, mam nadzieję, że ci pomogę
źródło
to usuwa kontur po kliknięciu, ale utrzymuje fokus podczas tabulacji (dla a11y)
źródło
To działa najlepiej
źródło
ten zarys: żaden nie będzie działał zarówno dla przycisku, jak i tagu
źródło
Dodaj to w CSS:
źródło
Znalazłem rozwiązanie, po prostu dodaj poniżej wiersza w kodzie css.
źródło
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:
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.
źródło
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ść.źródło
Jeśli używasz przeglądarki internetowej (i potencjalnie przeglądarki kompatybilnej z prefiksem dostawcy Webkita), ten kontur należy do
-webkit-focus-ring
pseudoklasy przycisku . Po prostu ustawoutline
nanone
: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)
źródło
Miałem ten sam problem z
<a>
działaniem jak przycisk i odkryłem,że nie udało misię 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>
źródło
type
Atrybut powinien mieć żadnego wpływu na to, ibutton
to 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" ...>
.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)!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 ..
..ect ,. w zależności od pożądanego efektu.
źródło