1
Neulich veröffentlichten wir einen Artikel mit einem echten CSS-Trick, bei dem ein Element mit einer doppelten Umrandung wie ein Pausesymbol aussehen und sich schön in ein CSS-Dreieck verwandeln konnte, das wie ein Play-Symbol aussieht. Ursprünglich wurde es mit einem <div> als Demo-Element veröffentlicht, was ein totalerAccessibility-Fehler unsererseits war, da etwas, das so interagieren soll, eigentlich ein <button> sein sollte.
Es enthielt auch eine Demo mit dem Checkbox-Hack, um den Zustand des Buttons umzuschalten. Das ändert die Tastaturinteraktion von einem "Enter"-Klick zu einem "Leertaste"-Umschalten, aber wichtiger ist, dass es einen :focus-Zustand haben sollte, um anzuzeigen, dass der Button (eigentlich ein Label) überhaupt interaktiv war.
Beides wurde behoben.
2
Adam Silver hat einen interessanten Beitrag, bei dem der Titel die Problematik gut auf den Punkt bringt
Aber manchmal sehen Links aus wie Buttons (und Buttons sehen aus wie Links)
Buttons, die Buttons sind, sind nicht umstritten (z. B. ein Formular-Submit-Button). Links, die Links sind, sind nicht umstritten. Die Probleme entstehen, wenn wir die Welten vermischen.
Buttons (mit type=”button“) sind keine Submit-Buttons. Buttons werden verwendet, um Funktionen zu erstellen, die auf Javascript angewiesen sind. Verhaltensweisen wie das Einblenden eines Menüs oder das Anzeigen eines Datumsauswahlers.
Ein „Call-to-Action“-Button ist sein gutes Beispiel auf der anderen Seite. Es sind oft nur Links, die für mehr Hervorhebung wie ein Button gestylt sind. Dieser gesamte Abschnitt ist wichtig
In Resilient Web Design diskutiert Jeremy Keith die Idee der Materialechtheit. Er sagt, dass „ein Material nicht als Ersatz für ein anderes verwendet werden sollte, sonst ist das Endergebnis täuschend“.
Einen Link wie einen Button aussehen zu lassen, ist materiell unehrlich. Es sagt den Benutzern, dass Links und Buttons dasselbe sind, wenn sie es nicht sind.
In Buttons In Design Systems sagt Nathan Curtis, dass wir Links von Buttons unterscheiden sollten, da „Button-Verhalten eine ganze Reihe unterschiedlicher Überlegungen mit sich bringen als Ihr einfaches Anker-Tag“.
Zum Beispiel können wir einen Link in einem neuen Tab öffnen, die Adresse kopieren oder ihn für später als Lesezeichen speichern. All das können wir nicht mit Buttons.
Call-to-Action-Buttons – die wieder nur Links sind – sind täuschend. Benutzer sind ahnungslos, weil diese Formatierung ihre natürliche Affordanz entfernt und ihr Verhalten verschleiert.
Wir könnten Call-to-Action-Buttons wie normale Links aussehen lassen. Aber das macht sie optisch schwach, was ihre Hervorhebung zunichte macht. Daher das Problem.
Ich stelle fest, dass selbst innerhalb von <button>s Probleme auftreten können, da das, was diese Buttons tun, oft sehr unterschiedlich ist. Zum Beispiel bringt der Fork-Button auf CodePen Sie zu einer brandneuen Seite mit einer neuen Kopie eines Pens, was sich ein bisschen wie das Klicken eines Links anfühlt. Aber es ist *kein* Link, was bedeutet, dass er sich anders verhält und eine Erklärung erfordert.
3
Ich wiederhole Adam hier noch einmal
Buttons werden verwendet, um Funktionen zu erstellen, die auf Javascript angewiesen sind.
Buttons innerhalb eines <form> haben Funktionalität ohne JavaScript, aber das ist der einzige Ort.
Das bedeutet, ein <button> ist in HTML völlig nutzlos, es sei denn, JavaScript wird erfolgreich heruntergeladen und ausgeführt.
Wenn man es zu einer extremen logischen Schlussfolgerung bringt, sollte man niemals einen <button> (oder type="button") in HTML außerhalb eines Formulars verwenden. Da JavaScript erforderlich ist, damit der Button etwas tut, sollte man den Button mit JavaScript an Ort und Stelle einfügen, sobald seine Funktionalität bereit ist.
Oder wenn das nicht möglich ist…
<button disabled title="This button will become functional once JavaScript is downloaded and executed">
Do Thing
</button>
Dann ändern Sie diese Attribute, sobald sie bereit sind.
Es scheint mir, dass, als „Flat Design“ populär wurde, das Gegenteil diskutiert werden kann. Mir ist bewusst, dass dies nicht das Web ist, aber der Benutzer kümmert sich nicht – alle Buttons in iOS sind wie Links gestylt. Sollen wir die Webdesigns darauf basieren (da der Benutzer den neuen Weg vom System lernt) oder sollen wir unsere Webseiten umgekehrt gestalten und (natürlich übertrieben) den Benutzer verwirren?
Bezüglich #3, würde das Verwenden des
hidden-Attributs den Button unwirksam machen, bis JS seinen Zweck erfüllt (und dann dieses Attribut entfernen)?Vielleicht soll es einem Benutzer mitteilen, wo die Funktionalität aufgrund der Deaktivierung von JS verloren geht? Anstatt Lücken auf der Seite oder im Design zu hinterlassen und den Benutzer raten zu lassen, was vor sich geht, würde dies es direkt erklären und eine Lösung bieten.
Der Grund, warum man das
hidden-Attribut nicht verwenden möchte, ist, dass der Button dann seinen Platz auf der Seite verliert. Wenn er angezeigt wird, verschiebt er den gesamten Inhalt darunter nach unten, damit er hineinpasst. Die Verwendung desdisabled-Attributs bedeutet, dass der Button seinen Platz behält, der Rest des Inhalts fällt dorthin, wo er hingehört, und die Seite springt nicht, wenn JS geladen wird.Interessant. Macht Sinn. Danke euch beiden.
Eilmeldung: Benutzer kümmert sich nicht. Sie merken es nicht einmal, sie gehen nicht durch den HTML-Quellcode, um zu sehen, welches Element was ist.
Das ist nur Zwanghaft, nichts, worüber man sich für seine Benutzer Sorgen machen muss.
Du hast Recht und Unrecht. Den meisten Benutzern ist es egal, ob es sich um einen Button oder einen Link handelt, aber aus Sicht der Barrierefreiheit könnte es erhebliche Auswirkungen haben.
Ich lehre, dass ein Button zum Umschalten (in etwa) dient, ein Link zum Routing zu einer URL. Das ist auch für assistive Technologien wichtig, daher ist es für Entwickler hilfreich, dies richtig zu machen.
Nein, das werde ich nicht tun. Ich möchte meinen Arbeitsablauf nicht noch komplizierter machen.
Auch wenn ich fast immer SPAs baue und es kostenlos ist, dauert es in den übrigen Fällen normalerweise sehr kurz, das benötigte JavaScript herunterzuladen, damit dieser Button funktioniert.
Wenn dieser Button eine Sekunde lang inaktiv bleibt, ist das nicht so schlimm.
In unserem System verwenden wir
links, die wiebuttonsaussehen. Der Grund dafür ist, dass wir in den meisten Fällen ein Modal anzeigen möchten (geladen aus dem angegebenenlink href) und wo kein Javascript vorhanden ist, geht der Benutzer einfach zu einer eigenständigen Seite mit modalem Inhalt. Es gibt wenige Fälle, deren Rolle wie ein Toggle oder einfach nur ein Link ist.Der Hauptgrund ist, dass die Button-Formatierung bei Links eher nach einer Aktion aussieht, und aus Sicht des Benutzers ist es einfacher, sie zu finden und damit zu interagieren.
Aber ich stimme zu, gleiche Formatierung und unterschiedliche Funktionalität können schaden.
Ich möchte niemandem die Schuld geben. Aber bevor man argumentiert, muss man nur die HTML5-Spezifikationen lesen, dort ist ziemlich gut erklärt, wofür ein Button steht und wozu das -Tag dient.
https://www.w3.org/TR/html5/forms.html#attr-button-type-button-state
https://www.w3.org/TR/html5/text-level-semantics.html#the-a-element
Ziemlich klar und unmissverständlich.
Wenn Ihr versteckter Button Text enthält, der nicht automatisch oder durch eine normale Benutzerinteraktion sichtbar wird, werden Sie Spaß mit Google haben. Es ist eine Sünde, die sie „Cloaking“ nennen und möglicherweise zu einem organischen Index-Bann führt.
Ja, Webentwicklung ist multidimensional.