Benutzerdefinierte Kontrollkästchen und Optionsfelder erstellen

Formularelemente wie Kontrollkästchen und Optionsfelder unterscheiden sich je nach Browser und Betriebssystem des Benutzers. Aus diesem Grund gestalten Designer und Entwickler seit langem ihre eigenen Kontrollkästchen und Optionsfelder, um die Konsistenz unabhängig vom Browser oder Betriebssystem zu gewährleisten.

Dies ist vollkommen in Ordnung, aber gleichzeitig müssen wir sicherstellen, dass unsere Kontrollkästchen und Optionsfelder für Benutzer der assistiven Technologie (AT) und der Tastatur zugänglich bleiben. In diesem Tutorial werde ich erklären, was dies bedeutet und wie wir die Dinge auf verschiedene Weise richtig machen können.

A11y von Anfang an

Dieses Tutorial ist Teil von Web Accessibility: der Complete Learning Guide, in dem wir eine Reihe von Tutorials, Artikeln, Kursen und E-Books zusammengestellt haben, um Ihnen das Verständnis der Web-Zugänglichkeit von Anfang an zu erleichtern.

Browser-Standardstile

Sehen wir uns zunächst an, wie Ihr Browser standardmäßig Kontrollkästchen darstellt. Wie bereits erwähnt, hängt das, was Sie hier sehen, von Ihrem Browser und Betriebssystem ab. 

Sie werden feststellen, dass Sie die Kontrollkästchen mit der Maus ein- und ausschalten können, und Sie können auch die Tastatur verwenden TAB und umschalten mit PLATZ, Dies kann jedoch abhängig von Ihren Einstellungen variieren.).

1. Benutzerdefinierte Kontrollkästchen gestalten

Zeit, unser eigenes zu bauen. Wir werden die Standard-Kontrollkästchen visuell "ausblenden" und die benutzerdefinierten Versionen darüber platzieren. Als Erstes müssen wir uns das Markup ansehen.

Das HTML-Markup

Markup für ein einzelnes Kontrollkästchen sieht folgendermaßen aus:

Wir benutzen ein

 Wrapper, um mit benutzerdefinierten Stilen zu helfen, aber ansonsten handelt es sich bei HTML hier um Standard-Markierungen für semantische Form. Die Magie geschieht, wenn wir unsere visuell verbergen  mit der CSS-Regel Deckkraft: 0.

.Wrapper Position: relativ;  .wrapper input height: 40px; links: 0; Deckkraft: 0; Position: absolut; oben: 0; Breite: 40px; 

Dadurch wird unser Kontrollkästchen visuell ausgeblendet, sodass wir unser eigenes erstellen können. Es ist wichtig, dass wir es nicht mit verstecken Anzeige: keine Dies würde das Kontrollkästchen sowohl für Browser- als auch für Assistent-Technologie-Benutzer (AT) verbergen, und wir würden auch Tastaturinteraktionen verlieren.

Sie werden feststellen, dass das Kontrollkästchen eine Höhe und Breite von 40 Pixeln hat, obwohl wir es verstecken. Dies gibt uns einen klaren, funktionalen Zielbereich, den Sie unter unserer fertigen Checkbox platzieren können.

Die Verpackung 

 hat ein Position: relativ CSS-Regel Dies hilft uns, die Checkbox und das Label zu positionieren ::Vor und ::nach dem Pseudoelemente mit Position: absolut.

Visuelles Kontrollkästchen mit Pseudoelementen hinzufügen 

Es fehlt immer noch eine visuelle Checkbox. Um dieses Problem zu lösen, verwenden wir zuerst a label :: before Element zum Hinzufügen eines Rahmens:

.Wrapper-Eingabe + Label :: before border: 2px solid; Inhalt: ""; Höhe: 40px; links: 0; Position: absolut; oben: 0; Breite: 40px; 

Ich habe einen festen Rand von 2px und eine vererbte Farbe verwendet. Sie können jedoch auch eine andere Rahmenfarbe verwenden. Beachten Sie, dass wir dies genauso positionieren und sortieren wie unser transparentes Kontrollkästchen.

Mit einigen zusätzlichen Rändern für die Etiketten, die uns etwas Abstand geben, sehen unsere Kontrollkästchen an dieser Stelle aus:

Benutzerdefinierte Kontrollkästchenstile mit 2px-Rahmen.

Der nächste Schritt ist die Verwendung der label :: after Pseudoelement, um die "Überprüfung" zu gestalten:

.wrapper input + label :: after content: ""; Rand: 4px fest; Grenze links: 0; Border-Top: 0; Höhe: 20px; links: 14px; Deckkraft: 0; Position: absolut; oben: 6px; verwandeln: drehen (45 Grad); Übergang: Deckkraft 0,2 s "easy-in-out"; Breite: 12px; 

Wir erstellen den Scheck mit einem Element, für das unten und rechts ein Rand von vier Pixeln angezeigt wird. Dann drehen wir es um 45 Grad: Bingo! Eine benutzerdefinierte Prüfung. Sie können auch andere Randfarben verwenden, um Ihrem Design zu entsprechen.

Pseudo-Element mit 4px-Rahmen unten und rechts. Bei einer Drehung um 45 Grad sieht es aus wie ein Scheck

Zu diesem Zeitpunkt können Sie nichts sehen; Wir verstecken den Scheck immer noch visuell Deckkraft: 0. Lassen Sie uns das beheben!

Benutzerdefinierte Prüfung mit anzeigen : geprüft Pseudo Selector

Das : geprüft Der Pseudo-Selektor zielt auf ein Kontrollkästchen, wenn es in den Status "Ein" geschaltet wird. Wir können dies verwenden, um die Deckkraft unserer benutzerdefinierten Prüfung zu ändern:

.Wrapper-Eingabe: überprüft + label :: after opacity: 1; 

Damit haben wir Folgendes:

Hinweis: Es gibt noch eine andere Sache, die wir einbeziehen müssen, und das sind "Fokus-Stile". Wir werden sie in der nächsten Demo besprechen.

2. Benutzerdefiniertes Kontrollkästchen mit Inline-SVG

Lassen Sie uns die Dinge auf eine Stufe bringen. Anstelle eines Pseudoelements können wir ein benutzerdefiniertes SVG-Symbol für unsere Prüfung verwenden. Dazu platzieren wir die SVG in das Label:

In den meisten Fällen ist SVG also nur dekorativ aria-hidden = "true" verbirgt es vor AT-Geräten.

Fügen Sie SVG-Styles hinzu

Wir müssen ein paar Stile auf das SVG-Element anwenden, damit es richtig positioniert und dimensioniert wird. Wir können auch die verwenden füllen Eigenschaft, um seine Farbe zu ändern (Blau in diesem Fall):

.Wrapper-Eingabe + Label svg border: 0; füllen: blau; Höhe: 20px; Breite: 20px; Deckkraft: 0; Position: absolut; links: 10px; oben: 10px; Übergang: Deckkraft 0,2 s "easy-in-out"; 

Denken Sie an die Focus State Styles

Die Inspiration für meine Beispiel-Checkbox-Stile wurde von denen übernommen, die im GOV.UK-Designsystem für Formularelemente (eine brillante Ressource, finden Sie hier). Die Fokusstile sind genauso wichtig wie in jedem fokussierbaren Element:

.Wrapper-Eingabe: focus + label :: before box-shadow: 0 0 0 3px # ffbf47; 

Wir benutzen ein Box Schatten für Fokusstile, weil sie abgerundete Rahmen berücksichtigen, die wir später auch für Optionsschaltflächen verwenden werden

Fokusarten für das Kontrollkästchen: gelber Rand

Hinzufügen von Fokus-Styles für Windows "High Contrast Mode"

Der Windows High Contrast-Modus entfernt Box-Shadow-Regeln. Aus diesem Grund müssen Sie auch transparente Gliederungsstile hinzufügen:

.Wrapper-Eingabe: focus + label :: before box-shadow: 0 0 0 3px # ffbf47; Umriss: 3px solide transparent; / * Für Windows mit hohem Kontrast. * /

Diese transparente Kontur erscheint im Kontrastmodus als zusätzlicher Rand.

Die transparente Kontur wird im Windows-Kontrastmodus als zusätzlicher Rand angezeigt

3. SVG als Pseudoelementhintergrund

Neben der Verwendung von SVG-Code inline können wir auch eine Version der ersten von uns erstellten benutzerdefinierten Kontrollkästchen erstellen, wobei SVG als Hintergrund für das Pseudoelement verwendet wird, anstatt einen eigenen "Check" mit Rahmen zu erstellen. Wir haben alle Techniken behandelt, die Sie dafür wissen müssen. Hier ist die Demo, die Sie analysieren müssen:

4. Benutzerdefinierte Optionsschaltflächen

So ziemlich alle Stile und Logik, die wir bisher für unsere Kontrollkästchen verwendet haben, sind für Optionsfelder gleich. Schauen Sie sich die Demo an und überzeugen Sie sich selbst (zum Navigieren mit der Tastatur verwenden Sie die Pfeiltasten):

Der einzige offensichtliche Unterschied ist unsere Verwendung Grenzradius und Styling der : geprüft etwas anders sagen. Sie könnten sicherlich auch in diesem Fall ein SVG-Symbol verwenden - ich lasse das für Sie als Hausaufgabe! Zeigen Sie uns Ihre Ergebnisse im Kommentarbereich.

5. Prüfung auf Barrierefreiheit

Das Testen ist ein wichtiger Teil des Prozesses, wenn mit nativen HTML-Elementen gearbeitet wird. Meine Tests sind alles andere als perfekt, aber so habe ich die Dinge für dieses Tutorial gemacht:

  • Tastaturtest in allen modernen Browsern und IE11.
  • Voiceover mit Safari.
  • NVDA Screenreader mit Firefox.
  • Talkback mit einem Android-Gerät.
  • Farbenblinde Bedingungen mit der Sim Daltonism-Software.
  • High Contrast Mode in Windows.

In dieser Liste fehlt wohl Spracherkennungssoftware wie Dragon oder Switch-Geräte. In allen meinen Tests verhielten sich die benutzerdefinierten Kontrollkästchen und Optionsfelder jedoch genauso wie native Elemente.

Schlussfolgerung und Referenzen

Wir hoffen, dass Ihnen dieses Tutorial vermittelt, wie Sie benutzerdefinierte Stile für Ankreuzfelder und Optionsfelder erstellen können, während Sie immer noch nach Zugänglichkeit suchen.

Ich empfehle dringend, mehr über benutzerdefinierte Formularelemente aus diesen Ressourcen zu lernen:

  • Die Eingabehilfen von Steuerelementen für gestylte Form von Scott O'Hara: Viele zusätzliche Beispiele wie Sternebewertung, Auswählen und Wechseln.
  • GOV.UK-Formularelemente.
  • Benutzerdefinierte Kontrollkästchen und Optionsfelder von Adrian Roselli.