Meine Schaltflächen sind alle hervorgehoben, nachdem ich auf sie geklickt habe. Dies ist in Chrome.
<button class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</button>
Ich verwende Bootstrap mit einem Thema, bin mir aber ziemlich sicher, dass es nicht so ist: Ich habe dies bereits bei einem anderen Projekt bemerkt.
Es verschwindet, wenn ich <a>
stattdessen ein Tag verwende <button>
. Warum? Wenn ich verwenden wollte, <button>
wie würde ich es verschwinden lassen?
html
css
twitter-bootstrap
Sean Clark Hess
quelle
quelle
Antworten:
Ich habe diese Fragen und Antworten auf einer anderen Seite gefunden, und das Überschreiben des Tastenfokusstils hat bei mir funktioniert. Dieses Problem kann für MacOS mit Chrome spezifisch sein.
Beachten Sie jedoch, dass dies Auswirkungen auf die Barrierefreiheit hat und erst empfohlen wird, wenn Sie einen guten konsistenten Fokusstatus für Ihre Schaltflächen und Eingaben haben. Gemäß den Kommentaren unten gibt es Benutzer, die keine Mäuse verwenden können.
quelle
.btn:active:focus
Selektor auch hinzufügen , um ihn aus dem aktiven Status zu entfernen..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; }
Du willst so etwas wie:
Die .blur () -Methode entfernt die Fokushervorhebung korrekt und bringt die Bootstraps-Stile nicht durcheinander.
quelle
mein Verständnis ist , dass der Schwerpunkt wird zunächst nach dem angelegten
onMouseDown
Ereignisse, so riefe.preventDefault()
inonMouseDown
kann eine saubere Lösung nach Bedarf abhängig sein. Dies ist sicherlich eine barrierefreie Lösung, aber offensichtlich wird das Verhalten von Mausklicks angepasst, die möglicherweise nicht mit Ihrem Webprojekt kompatibel sind.Ich verwende derzeit diese Lösung (innerhalb eines
react-bootstrap
Projekts) und erhalte nach einem Klick kein Fokusflimmern oder beibehaltenen Fokus von Schaltflächen, kann meinen Fokus jedoch weiterhin tabellieren und den Fokus derselben Schaltflächen visuell visualisieren.quelle
onMouseDown={e => e.preventDefault()}
onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}
.onKeyUp
Ereignisses aufrufen . Wenn Sie dies tun, bleibt die Schaltfläche fokussiert, nachdem Sie die Leertaste oder die Eingabetaste gedrückt und irgendwo gedrückt oder geklickt haben.Ich kann nicht glauben, dass dies noch niemand gepostet hat.
Verwenden Sie eine Beschriftung anstelle einer Schaltfläche.
Geige
quelle
<a class="btn"><my-directive/></a>
Es ist zwar einfach, die Gliederung für alle fokussierten Schaltflächen zu entfernen (wie in der Antwort von user1933897 ), aber diese Lösung ist aus Sicht der Barrierefreiheit schlecht (siehe z. B. Stop Messing mit der Standardfokus-Gliederung des Browsers ).
Andererseits ist es wahrscheinlich unmöglich, Ihren Browser davon zu überzeugen, die angeklickte Schaltfläche nicht mehr als fokussiert zu gestalten, wenn er denkt, dass sie fokussiert ist, nachdem Sie darauf geklickt haben (ich sehe Sie an, Chrome unter OS X).
Also was können wir tun? Ein paar Optionen kommen mir in den Sinn.
1) Javascript (jQuery):
$('.btn').mouseup(function() { this.blur() })
Sie weisen Ihren Browser an, den Fokus um eine Schaltfläche sofort nach dem Klicken auf die Schaltfläche zu entfernen . Durch die Verwendung von
mouseup
anstelle vonclick
behalten wir das Standardverhalten für tastaturbasierte Interaktionen bei (mouseup
wird nicht durch die Tastatur ausgelöst).2) CSS:
.btn:hover { outline: 0 !important }
Hier deaktivieren Sie die Kontur nur für schwebende Schaltflächen. Offensichtlich ist es nicht ideal, kann aber in einigen Situationen ausreichen.
quelle
:active:focus {outline:none;}
..on('mouseup', function() { ... })
anstelle von.mouseup()
Das hat bei mir funktioniert. Ich habe eine benutzerdefinierte Klasse erstellt, die das erforderliche CSS überschreibt.
Der -webkit-box-shadow funktioniert für Chrome- und Safari-Browser.
quelle
border: none !important;
für Knopf entfernen , um die gleichen Abmessungen beizubehaltenDies funktioniert bei mir, eine andere Lösung wird nicht erwähnt. Wirf es einfach in das Klick-Event ...
Oder rufen Sie es von einem anderen Ereignis / einer anderen Methode auf ...
quelle
Wenn Sie die Regel
:focus { outline: none; }
zum Entfernen von Konturen verwenden, kann der Link oder das Steuerelement fokussiert werden, ohne dass der Tastaturbenutzer den Fokus angibt. Methoden zum Entfernen wie JSonfocus="blur()"
sind noch schlimmer und führen dazu, dass Tastaturbenutzer nicht mit dem Steuerelement interagieren können.Zu den Hacks, die Sie verwenden können und die in Ordnung sind , gehört das Hinzufügen von
:focus { outline: none; }
Regeln, wenn Benutzer mit der Maus interagieren, und das Entfernen dieser Regeln, wenn eine Tastaturinteraktion erkannt wird. Lindsay Evans hat dafür eine Bibliothek erstellt: https://github.com/lindsayevans/outline.jsAber ich würde es vorziehen, eine Klasse auf dem HTML- oder Body-Tag zu setzen. Und haben Sie in der CSS-Datei die Kontrolle darüber, wann dies verwendet werden soll.
Zum Beispiel (Inline-Ereignishandler dienen nur zu Demonstrationszwecken):
Ich habe einen Stift zusammengelegt: http://codepen.io/snobojohan/pen/RWXXmp
Beachten Sie jedoch, dass es Leistungsprobleme gibt. Dies erzwingt jedes Mal ein Neulackieren, wenn der Benutzer zwischen Maus und Tastatur wechselt. Weitere Informationen zum Vermeiden unnötiger Farben http://www.html5rocks.com/de/tutorials/speed/unnecessary-paints/
quelle
Ich habe das Gleiche bemerkt und obwohl es mich wirklich nervt, glaube ich, dass es keinen richtigen Weg gibt, damit umzugehen.
Ich würde gegen alle anderen angegebenen Lösungen empfehlen, da sie die Zugänglichkeit der Schaltfläche vollständig beeinträchtigen. Wenn Sie also jetzt auf die Schaltfläche klicken, erhalten Sie nicht den erwarteten Fokus.
Dies sollte vermieden werden!
quelle
Ich finde eine Lösung. Wenn wir uns konzentrieren, verwendet Bootstrap Box-Shadow, daher deaktivieren wir es einfach (nicht genügend Reputation, Bild kann nicht hochgeladen werden :().
ich füge hinzu
Es klappt.
quelle
OPTION 1: Verwenden Sie die
:focus-visible
PseudoklasseDie
:focus-visible
Pseudoklasse kann verwendet werden, um die unschönen Umrisse und Fokusringe auf Schaltflächen und verschiedenen Elementen für Benutzer zu beseitigen, die NICHT über die Tastatur navigieren (dh per Berührung oder Mausklick).OPTION 2: Verwenden Sie die
.focus-visible
PolyfüllungDiese Lösung verwendet eine normale CSS-Klasse anstelle der oben genannten Pseudoklasse und bietet umfassende Browserunterstützung, da es sich um eine offizielle Javascript-basierte Polyfüllung handelt .
Schritt 1: Fügen Sie die Javascript-Abhängigkeiten zu Ihrer HTML-Seite hinzu
Hinweis: Für die fokussichtbare Polyfüllung ist eine zusätzliche Polyfüllung für mehrere ältere Browser erforderlich, die classList nicht unterstützen :
Schritt 2: Fügen Sie Ihrem Stylesheet das folgende CSS hinzu
Das Folgende ist eine modifizierte Version der CSS-Lösung, die oben ausführlicher dokumentiert wurde.
Schritt 3 (optional): Verwenden Sie bei Bedarf die Klasse "Fokus sichtbar"
Wenn Sie Elemente haben, bei denen Sie den Fokusring tatsächlich anzeigen möchten, wenn jemand auf Touch klickt oder diese verwendet, fügen Sie die
focus-visible
Klasse einfach dem DOM-Element hinzu.Ressource:
Demo:
quelle
<whatever>:focus { outline: none }
eine schlechtere Idee als die Lösung , die Carte Blanche zu verbergen . Es gibt tatsächlich Leute in der Eingabehilfen-Community, die es vorziehen, dass Sie NIEMALS Umrisse entfernen und stattdessen dafür sorgen, dass alles einen: Fokus-Stil hat (entweder Umriss oder Kastenschatten), und nicht unterstützen möchten: Fokus-sichtbar, bis Browser eine Möglichkeit zum Zulassen implementieren Die Benutzer geben eine Benutzereinstellung an, ob alle Elemente fokussierbar sein sollen oder nicht. Ich denke gerne: Fokus-sichtbar ist ein glückliches Medium zwischen Design-Anliegen und a11y.Wenn das oben genannte für Sie nicht funktioniert, versuchen Sie Folgendes:
Wie user1933897 hervorhob, ist dies möglicherweise spezifisch für MacOS mit Chrome.
quelle
bootstrap 4.0
- in WindowsSpät, aber wer weiß, kann jemandem helfen. Das CSS würde folgendermaßen aussehen:
Der HTML-Code würde folgendermaßen aussehen:
Auf diese Weise können Sie BTN und die damit verbundenen Verhaltensweisen beibehalten.
quelle
element:focus { box-shadow: none; }
blaue Kontur / Schatten entfernt.Ich habe dies oben in einem Kommentar erwähnt, aber es lohnt sich, es aus Gründen der Klarheit als separate Antwort aufzulisten. Solange Sie sich nicht wirklich auf die Schaltfläche konzentrieren müssen, können Sie sie mit dem Fokusereignis entfernen, bevor CSS-Effekte angewendet werden können:
Dadurch wird das Flackern vermieden, das bei Verwendung des Klickereignisses auftritt. Dies schränkt die Benutzeroberfläche ein und Sie können nicht auf die Schaltfläche zugreifen, dies ist jedoch nicht in allen Anwendungen ein Problem.
quelle
Stil
Verwenden von
quelle
Versuchen Sie diese Lösung, um den Rand um die Schaltfläche zu entfernen. Fügen Sie diesen Code in CSS hinzu.
Versuchen
Wenn dies nicht funktioniert, verwenden Sie unten.
quelle
Für Leute, die einen reinen CSS-Weg wollen, um das zu tun:
Dies könnte auch für Links usw. funktionieren, und der Bonus behält die Zugänglichkeit der Tastatur bei. Schließlich wird es von Browsern ignoriert, die dies nicht unterstützen: Fokus sichtbar
quelle
focus-visible
hat jetzt eine offizielle Polyfüllung. Meine Antwort stackoverflow.com/a/60219624/413538 auf diese Frage erläutert, wie man all dies tatsächlich verstehen kann.Wir hatten ein ähnliches Problem und stellten fest, dass Bootstrap 3 das Problem nicht auf den Registerkarten hat (in Chrome). Es sieht so aus, als würden sie einen Gliederungsstil verwenden , mit dem der Browser entscheiden kann, was am besten zu tun ist, und Chrome scheint zu tun, was Sie wollen: Zeigen Sie die Gliederung an, wenn Sie fokussiert sind, es sei denn, Sie haben nur auf das Element geklickt.
Die Unterstützung für
outline-style
ist schwer zu bestimmen, da der Browser entscheiden kann, was dies bedeutet. Am besten checken Sie ein paar Browser ein und haben eine Fallback-Regel.quelle
Eine andere mögliche Lösung besteht darin, eine Klasse mit einem Javascript-Listener hinzuzufügen, wenn der Benutzer auf die Schaltfläche klickt, und diese Klasse dann mit einem anderen Listener im Fokus zu entfernen. Dadurch bleibt die Zugänglichkeit erhalten (sichtbares Tabbing), und gleichzeitig wird verhindert, dass Chrome beim Klicken auf eine Schaltfläche fokussiert ist.
JS:
CSS:
Vollständiges Beispiel hier: https://jsfiddle.net/4bbb37fh/
quelle
Es ist Arbeit, ich hoffe dir zu helfen
quelle
Dadurch wird der Umriss beim Klicken entfernt, der Fokus bleibt jedoch beim Tabulieren erhalten (für a11y).
quelle
Das funktioniert am besten
quelle
Diese Gliederung: Keine funktioniert sowohl für die Schaltfläche als auch für ein Tag
quelle
Fügen Sie dies in CSS hinzu:
quelle
Ich habe eine Lösung gefunden, die einfach unter der Zeile in Ihrem CSS-Code hinzugefügt wird.
quelle
Ich hatte gerade das gleiche Problem unter MacOS und Chrome, als ich eine Schaltfläche zum Auslösen eines "Übergangs" -Ereignisses verwendete. Wenn jemand, der dies liest, bereits einen Ereignis-Listener verwendet, können Sie ihn lösen, indem Sie
.blur()
nach Ihren Aktionen aufrufen .Beispiel:
Wenn Sie jedoch noch keinen Ereignis-Listener verwenden, kann das Hinzufügen eines Listeners zur Behebung dieses Problems zu unnötigem Overhead führen, und eine Styling-Lösung wie die vorherigen Antworten ist besser.
quelle
Sie können einstellen
tabIndex="-1"
. Der Browser überspringt diese Schaltfläche, wenn Sie mit der Tabulatortaste durch fokussierbare Steuerelemente fahren.Andere hier vorgeschlagene "Korrekturen" entfernen nur die Fokuskontur, lassen die Schaltflächen jedoch weiterhin tabellarisch. Unter dem Gesichtspunkt der Benutzerfreundlichkeit haben Sie das Leuchten jedoch bereits entfernt, sodass Ihr Benutzer in keiner Weise weiß, auf welche Schaltfläche derzeit fokussiert wird.
Wenn Sie die Schaltfläche nicht tabellierbar machen, hat dies Auswirkungen auf die Barrierefreiheit.
Ich verwende es, um die Fokuskontur von der X-Schaltfläche in zu entfernen
bootstrap modal
, die in irgendeiner Weise die doppelte Schaltfläche "Schließen" unten hat, sodass meine Lösung keinen Einfluss auf die Barrierefreiheit hat.quelle
Wenn Sie einen Webkit-Browser verwenden (und möglicherweise einen Browser, der mit dem Präfix des Webkit-Herstellers kompatibel ist), gehört diese Gliederung zur
-webkit-focus-ring
Pseudoklasse der Schaltfläche . Einfach einstellenoutline
aufnone
:Chrome ist ein solcher Webkit-Browser, und dieser Effekt tritt auch unter Linux auf (nicht nur eine MacOS-Sache, obwohl einige Chrome-Stile nur MacOS sind).
quelle
Ich hatte das gleiche Problem bei der Verwendung
<a>
als Schaltfläche und stellte fest, dassmireine Problemumgehungfehlte,indem ich attr hinzufügte, damittype="button"
sie sich zumindest für mich normal verhält.<a type="button" class="btn btn-primary">Release Me!</a>
quelle
type
Attribut sollte keine Auswirkung darauf haben undbutton
ist ein ungültiger Wert dafür. Das Attribut akzeptiert einen MIME-Typ und teilt dem Client mit, welche Art von Daten er erwarten soll, wenn er dem Link folgt (z<a type="application/pdf" ...>
. B.role="button"
aber es hat einfach nicht funktioniert (nachdem ich ein<button>
statt verwendet habe<a>
). Meine Implementierung verlangte ausdrücklich ein<a>
und nicht<button>
. Nachdem ich viel gebastelt hatte, entdeckte ich diese Problemumgehung (höchstwahrscheinlich ein BS-Fehler)!direkt im HTML-Tag (in einem Szenario, in dem Sie das Bootstrap-Thema möglicherweise an anderer Stelle in Ihrem Design beibehalten möchten).
Beispiele zu versuchen ..
..ect,. abhängig vom gewünschten Effekt.
quelle