Ich versuche, ein Kontrollkästchen wie folgt zu gestalten:
<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />
Der Stil wird jedoch nicht angewendet. Das Kontrollkästchen zeigt weiterhin den Standardstil an. Wie gebe ich ihm den angegebenen Stil?
Antworten:
AKTUALISIEREN:
Die folgende Antwort bezieht sich auf den Stand der Dinge vor der weit verbreiteten Verfügbarkeit von CSS 3. In modernen Browsern (einschließlich Internet Explorer 9 und höher) ist es einfacher, Kontrollkästchen-Ersetzungen mit Ihrem bevorzugten Stil zu erstellen, ohne JavaScript zu verwenden.
Hier sind einige nützliche Links:
Es ist erwähnenswert, dass sich das grundlegende Problem nicht geändert hat. Sie können Stile (Rahmen usw.) immer noch nicht direkt auf das Kontrollkästchenelement anwenden und diese Stile wirken sich auf die Anzeige des HTML-Kontrollkästchens aus. Was sich jedoch geändert hat, ist, dass es jetzt möglich ist, das eigentliche Kontrollkästchen auszublenden und durch ein eigenes gestaltetes Element zu ersetzen, wobei nur CSS verwendet wird. Insbesondere, da CSS jetzt über eine weit verbreitete
:checked
Auswahl verfügt, können Sie dafür sorgen, dass Ihr Ersatz den aktivierten Status des Kontrollkästchens korrekt wiedergibt.ÄLTERE ANTWORT
Hier ist ein nützlicher Artikel zum Stylen von Kontrollkästchen . Grundsätzlich stellte dieser Autor fest, dass es von Browser zu Browser sehr unterschiedlich ist und dass viele Browser immer das Standard-Kontrollkästchen anzeigen, unabhängig davon, wie Sie es gestalten. Es gibt also wirklich keinen einfachen Weg.
Es ist nicht schwer, sich eine Problemumgehung vorzustellen, bei der Sie mit JavaScript ein Bild über das Kontrollkästchen legen und durch Klicken auf dieses Bild das eigentliche Kontrollkästchen aktivieren. Benutzern ohne JavaScript wird das Standard-Kontrollkästchen angezeigt.
Bearbeitet, um hinzuzufügen: Hier ist ein schönes Skript, das dies für Sie erledigt ; Es verbirgt das eigentliche Kontrollkästchenelement, ersetzt es durch einen gestalteten Bereich und leitet die Klickereignisse um.
quelle
Es gibt eine Möglichkeit, dies nur mit CSS zu tun. Wir können das
label
Element (ab) verwenden und stattdessen dieses Element formatieren. Die Einschränkung ist, dass dies für Internet Explorer 8 und niedrigere Versionen nicht funktioniert.quelle
input
s nehmen niemals den Tastaturfokus ein, daher sind diese mit der Tastatur nicht erreichbar.Sie können einen ziemlich coolen benutzerdefinierten Checkbox-Effekt erzielen, indem Sie die neuen Fähigkeiten verwenden, die mit den Klassen
:after
und:before
pseudo geliefert werden. Dies hat den Vorteil, dass Sie dem DOM nichts mehr hinzufügen müssen, sondern nur das Standard-Kontrollkästchen.Beachten Sie, dass dies nur für kompatible Browser funktioniert. Ich glaube, dies hängt mit der Tatsache zusammen, dass einige Browser das Einstellen von
:after
und nicht zulassen:before
Eingabe- Eingabeelemente . Dies bedeutet leider, dass derzeit nur WebKit-Browser unterstützt werden. In Firefox + Internet Explorer können die Kontrollkästchen weiterhin funktionieren, nur nicht gestylt, und dies wird sich hoffentlich in Zukunft ändern (der Code verwendet keine Herstellerpräfixe).Dies ist nur eine WebKit-Browserlösung (Chrome-, Safari-, Mobile-Browser).
Siehe Beispiel Geige
Flipswitch-Geige im Bonus-Webkit-Stil
quelle
Bevor Sie beginnen (Stand: Januar 2015)
Die ursprüngliche Frage und Antwort sind jetzt ~ 5 Jahre alt. Als solches ist dies ein kleines Update.
Erstens gibt es eine Reihe von Ansätzen, wenn es darum geht, Kontrollkästchen zu gestalten. Der Grundgedanke ist:
Sie müssen das von Ihrem Browser gestaltete Standard-Kontrollkästchen-Steuerelement ausblenden, das mit CSS nicht sinnvoll überschrieben werden kann.
Wenn das Steuerelement ausgeblendet ist, müssen Sie weiterhin in der Lage sein, den aktivierten Status zu erkennen und umzuschalten
Der aktivierte Status des Kontrollkästchens muss durch das Stylen eines neuen Elements wiedergegeben werden
Die Lösung (im Prinzip)
Dies kann auf verschiedene Weise erreicht werden - und Sie werden oft hören, dass die Verwendung von CSS3-Pseudoelementen der richtige Weg ist. Tatsächlich gibt es keinen richtigen oder falschen Weg, es hängt von dem Ansatz ab, der für den Kontext, in dem Sie ihn verwenden, am besten geeignet ist. Trotzdem habe ich einen bevorzugten.
Schließen Sie Ihr Kontrollkästchen in ein
label
Element ein. Dies bedeutet, dass Sie auch wenn es ausgeblendet ist, den aktivierten Status umschalten können, wenn Sie auf eine beliebige Stelle innerhalb des Etiketts klicken.Verstecke dein Kontrollkästchen
Fügen Sie nach dem Kontrollkästchen ein neues Element hinzu, das Sie entsprechend formatieren. Es muss nach dem Kontrollkästchen angezeigt werden, damit es mithilfe von CSS ausgewählt und abhängig vom
:checked
Status gestaltet werden kann. CSS kann nicht "rückwärts" auswählen.Die Lösung (im Code)
Code-Snippet anzeigen
Verfeinerung (mit Symbolen)
Aber hey! Ich höre dich schreien. Was ist, wenn ich ein schönes kleines Häkchen oder Kreuz in der Box zeigen möchte? Und ich möchte keine Hintergrundbilder verwenden!
Nun, hier können die Pseudoelemente von CSS3 ins Spiel kommen. Diese unterstützen die
content
Eigenschaft, mit der Sie Unicode-Symbole einfügen können, die einen der beiden Zustände darstellen. Alternativ können Sie auch eine Schriftart-Symbolquelle eines Drittanbieters verwenden, z. B. font awesome (stellen Sie jedoch sicher, dass Sie auch die entsprechenden Einstellungen vornehmenfont-family
, z. B. aufFontAwesome
).quelle
display: none
.visibility: hidden;
durch,opacity: 0 !important;
wenn Sie immer noch Probleme mit dem Tabbing haben.Ich würde dem Rat der Antwort von SW4 folgen - das Kontrollkästchen auszublenden und es mit einer benutzerdefinierten Spanne abzudecken, indem ich diesen HTML-Code vorschlage:
Durch das ordentliche Umbrechen des Etiketts können Sie auf den Text klicken, ohne dass eine Attributverknüpfung "for-id" erforderlich ist. Jedoch,
Verstecke es nicht mit
visibility: hidden
oderdisplay: none
Es funktioniert durch Klicken oder Tippen, aber das ist eine lahme Art, Kontrollkästchen zu verwenden. Einige Leute verwenden immer noch viel effektiver Tab, um den Fokus zu verschieben, Spacezu aktivieren und mit dieser Methode zu verstecken, um ihn zu deaktivieren. Wenn das Formular lang ist, werden die Handgelenke
tabindex
oderaccesskey
Attribute einer Person gespeichert . Und wenn Sie das Verhalten des System-Kontrollkästchens beobachten, ist beim Schweben ein anständiger Schatten zu sehen. Das gut gestaltete Kontrollkästchen sollte diesem Verhalten folgen.In der Antwort von cobberboy wird Font Awesome empfohlen, was normalerweise besser als Bitmap ist, da Schriftarten skalierbare Vektoren sind. Wenn ich mit dem obigen HTML arbeite, würde ich folgende CSS-Regeln vorschlagen:
Kontrollkästchen ausblenden
Ich verwende nur Negativ,
z-index
da in meinem Beispiel ein Kontrollkästchen verwendet wird, das groß genug ist, um es vollständig abzudecken. Ich empfehle nicht,left: -999px
da es nicht in jedem Layout wiederverwendbar ist. Die Antwort von Bushan Wagh bietet eine kugelsichere Möglichkeit, sie zu verbergen und den Browser davon zu überzeugen, Tabindex zu verwenden. Daher ist sie eine gute Alternative. Auf jeden Fall ist beides nur ein Hack. Der richtige Weg ist heuteappearance: none
, siehe Joosts Antwort :Beschriftung des Stil-Kontrollkästchens
Kontrollkästchen-Skin hinzufügen
\00f096
Bei Font Awesome wird diesquare-o
Polsterung so angepasst, dass der Fokus gleichmäßig gepunktet ist (siehe unten).Kontrollkästchen aktivierte Skin hinzufügen
\00f046
ist Font Awesome'scheck-square-o
, das nicht die gleiche Breite hat wiesquare-o
, was der Grund für den obigen Breitenstil ist.Fokusumriss hinzufügen
Safari bietet diese Funktion nicht (siehe @ Jason Sankeys Kommentar). Sie sollten sie verwenden
window.navigator
, um den Browser zu erkennen und ihn zu überspringen, wenn es sich um Safari handelt.Aktivieren Sie das Kontrollkästchen Grau für deaktiviertes Kontrollkästchen
Aktivieren Sie das Kontrollkästchen Schwebeschatten für nicht deaktiviertes Kontrollkästchen
Demo Geige
Versuchen Sie, die Maus über die Kontrollkästchen zu bewegen, und verwenden Sie Tabund Shift+ Tab, um sich zu bewegen und Spaceumzuschalten.
quelle
Sie können Kontrollkästchen mit ein wenig Trick mit dem folgenden
label
Element formatieren:Und ein FIDDLE für den obigen Code. Beachten Sie, dass einige CSS in älteren Browserversionen nicht funktionieren, aber ich bin sicher, dass es einige ausgefallene JavaScript-Beispiele gibt!
quelle
Einfach zu implementierende und leicht anpassbare Lösung
Nach vielen Suchen und Tests habe ich diese Lösung erhalten, die einfach zu implementieren und einfacher anzupassen ist. In dieser Lösung :
Platzieren Sie einfach das fließende CSS oben auf Ihrer Seite, und alle Kontrollkästchen ändern sich wie folgt:
quelle
Sie können das Hinzufügen zusätzlicher Markups vermeiden. Dies funktioniert überall außer im IE für Desktop (funktioniert jedoch im IE für Windows Phone und Microsoft Edge) über die Einstellung von CSS
appearance
:quelle
Ich bevorzuge die Verwendung von Symbolschriftarten (wie FontAwesome), da es einfach ist, ihre Farben mit CSS zu ändern, und sie auf Geräten mit hoher Pixeldichte sehr gut skaliert werden können. Hier ist eine weitere reine CSS-Variante, die ähnliche Techniken wie oben verwendet.
(Unten sehen Sie ein statisches Bild, mit dem Sie das Ergebnis visualisieren können. Eine interaktive Version finden Sie in der JSFiddle .)
Wie bei anderen Lösungen wird das
label
Element verwendet. Ein nebenstehendespan
enthält unser Kontrollkästchen.Hier ist die JSFiddle dafür.
quelle
font-family: FontAwesome;
mitfont-family: 'Font Awesome\ 5 Free';
und aktualisieren Unicode - Inhalt , wenn Sie es Arbeit in der neuen Version machen wollen.Kürzlich habe ich eine interessante Lösung für das Problem gefunden.
Sie können
appearance: none;
den Standardstil des Kontrollkästchens deaktivieren und dann wie hier beschrieben Ihren eigenen darüber schreiben (Beispiel 4) .Beispiel Geige
Code-Snippet anzeigen
Leider ist die Browserunterstützung für die
appearance
Option ziemlich schlecht . Nach meinen persönlichen Tests funktionierten nur Opera und Chrome ordnungsgemäß. Dies ist jedoch der richtige Weg, um es einfach zu halten, wenn eine bessere Unterstützung erzielt wird oder Sie nur Chrome / Opera verwenden möchten."Kann ich benutzen?" Verknüpfung
quelle
appearance
ist genau das, was wir dafür brauchen; Denken Sie nur daran, dass es "nicht Standard ist und sich nicht auf einer Standardspur befindet" .Mit reinem CSS, nichts Besonderes
:before
und:after
keine Transformationen, können Sie das Standard-Erscheinungsbild deaktivieren und es dann mit einem Inline-Hintergrundbild wie im folgenden Beispiel formatieren. Dies funktioniert in Chrome, Firefox, Safari und jetzt in Edge (Chromium Edge).quelle
Meine Lösung
quelle
Sie können es einfach
appearance: none
in modernen Browsern verwenden, sodass es kein Standard-Styling gibt und alle Ihre Stile richtig angewendet werden:quelle
Möchten Sie KEIN JavaScript, KEINE externen Bibliotheken, Konformität mit der Barrierefreiheit sowie Kontrollkästchen und Optionsfelder?
Ich habe gescrollt und gescrollt und Tonnen dieser Antworten werfen einfach die Zugänglichkeit aus der Tür und verletzen die WCAG auf mehr als eine Weise. Ich habe Optionsfelder eingefügt, da Sie die meiste Zeit, wenn Sie benutzerdefinierte Kontrollkästchen verwenden, auch benutzerdefinierte Optionsfelder möchten.
Geigen :
Spät zur Party, aber irgendwie ist das
2019 bis2020 immer noch schwierig. Deshalb habe ich meine drei Lösungen hinzugefügt, die zugänglich und leicht zu finden sind.Diese sind alle JavaScript kostenlos , externe Bibliothek kostenlos * und zugänglich ...
Wenn Sie Plug-n-Play mit einem dieser Elemente durchführen möchten, kopieren Sie einfach das Stylesheet aus den Geigen, bearbeiten Sie die Farbcodes im CSS entsprechend Ihren Anforderungen und machen Sie sich auf den Weg. Sie können ein benutzerdefiniertes SVG-Häkchensymbol hinzufügen, wenn Sie die Kontrollkästchen verwenden möchten. Ich habe viele Kommentare für diese Nicht-CSS-Leute hinzugefügt.
Wenn Sie Langtext oder einen kleinen Behälter und stoßen Textumbruch unterhalb der Checkbox oder Radiobutton Eingang haben dann umbauen zu divs wie diese .
Längere Erklärung: Ich brauchte eine Lösung, die nicht gegen die WCAG verstößt, nicht auf JavaScript oder externen Bibliotheken basiert und die die Tastaturnavigation wie Tabulator oder Leertaste nicht unterbricht, um Fokusereignisse zu ermöglichen, eine Lösung, die deaktivierte Kontrollkästchen zulässt beide geprüft und ungeprüft sind, und schließlich eine Lösung , wo ich das Aussehen der Checkbox anpassen kann aber ich mit verschiedenen will
background-color
‚s,border-radius
,svg
Hintergründe usw.Ich habe eine Kombination dieser Antwort verwendet von @Jan Turoň verwendet, um meine eigene Lösung zu finden, die recht gut zu funktionieren scheint. Ich habe eine Optionsfeld-Geige erstellt, die den gleichen Code aus den Kontrollkästchen verwendet, damit dies auch mit Optionsfeldern funktioniert.
Ich lerne immer noch die Barrierefreiheit. Wenn ich etwas verpasst habe, schreibe bitte einen Kommentar und ich werde versuchen, ihn zu korrigieren. Hier ist ein Codebeispiel für meine Kontrollkästchen:
quelle
Hier ist eine einfache CSS-Lösung ohne jQuery- oder JavaScript-Code.
Ich verwende FontAwseome-Symbole, aber Sie können jedes Bild verwenden
quelle
label
oderspan
Elemente erstellt werden. Es funktioniert einfach!Nach meinem Googeln ist dies der einfachste Weg für das Styling von Kontrollkästchen. Fügen Sie einfach
:after
und:checked:after
CSS basierend auf Ihrem Design hinzu.quelle
Ändern Sie den Kontrollkästchenstil mit einfachem CSS3. Es ist keine JS- und HTML-Bearbeitung erforderlich.
quelle
Eine einfache und leichte Vorlage:
https://jsfiddle.net/rvgccn5b/
quelle
input
s werden nur in Chrome unterstützt, Ihr Code funktioniert nicht in jedem Browser gleich.Ich denke, der einfachste Weg, dies zu tun, besteht darin, a zu stylen
label
und das zu machencheckbox
Unsichtbare zu machen.HTML
CSS
Das
checkbox
, obwohl es versteckt ist, wird noch zugänglich sein, und sein Wert wird gesendet, wenn ein Formular abgeschickt wird. Für alten Browser müssen Sie möglicherweise die Klasse der Änderunglabel
JavaScript checked verwenden , weil ich nicht glaube , alte Versionen von Internet Explorer verstehen::checked
auf demcheckbox
.quelle
::checked
ist falsch - es sollte sein:checked
. (b)checkbox
ist falsch - es sollte sein[type=checkbox]
Huch! All diese Problemumgehungen haben mich zu dem Schluss geführt, dass das HTML-Kontrollkästchen nicht funktioniert, wenn Sie es stylen möchten.
Als Warnung ist dies keine CSS-Implementierung. Ich dachte nur, ich würde die Problemumgehung teilen, die ich mir ausgedacht habe, falls jemand anderes sie nützlich finden könnte.
Ich habe das HTML5-
canvas
Element verwendet.Der Vorteil dabei ist, dass Sie keine externen Bilder verwenden müssen und wahrscheinlich etwas Bandbreite sparen können.
Der Nachteil ist, dass es keinen Fallback gibt, wenn ein Browser es aus irgendeinem Grund nicht richtig rendern kann. Ob dies auch 2017 ein Thema bleibt, ist umstritten.
Aktualisieren
Ich fand den alten Code ziemlich hässlich und beschloss, ihn neu zu schreiben.
Hier ist eine funktionierende Demo .
Die neue Version verwendet Prototypen und differenzielle Vererbung, um ein effizientes System zum Erstellen von Kontrollkästchen zu erstellen. So erstellen Sie ein Kontrollkästchen:
Dadurch wird das Kontrollkästchen sofort zum DOM hinzugefügt und die Ereignisse werden verknüpft. So fragen Sie ab, ob ein Kontrollkästchen aktiviert ist:
Wichtig ist auch, dass ich die Schleife losgeworden bin.
Update 2
Etwas, das ich im letzten Update nicht erwähnt habe, ist, dass die Verwendung der Zeichenfläche mehr Vorteile bietet, als nur ein Kontrollkästchen zu erstellen, das so aussieht, wie Sie es möchten. Wenn Sie möchten, können Sie auch Kontrollkästchen mit mehreren Status erstellen .
Ich habe das
Checkbox
im letzten Snippet verwendete Element geringfügig geändert , damit es allgemeiner ist, sodass es mit einem Kontrollkästchen mit 3 Status "erweitert" werden kann. Hier ist eine Demo . Wie Sie sehen, verfügt es bereits über mehr Funktionen als das integrierte Kontrollkästchen.Beachten Sie Folgendes, wenn Sie zwischen JavaScript und CSS wählen.
Alter, schlecht gestalteter Code
Arbeitsdemo
Richten Sie zunächst eine Leinwand ein
Entwickeln Sie als Nächstes eine Möglichkeit, die Zeichenfläche selbst zu aktualisieren.
Der letzte Teil ist, es interaktiv zu machen. Zum Glück ist es ziemlich einfach:
Hier können Probleme im IE auftreten, da das Modell für die Ereignisbehandlung in JavaScript seltsam ist.
Ich hoffe das hilft jemandem; es passte definitiv zu meinen Bedürfnissen.
quelle
unchecked (e.g. unchecked -> checked -> "kinda" checked -> unchecked
Zuständen (dh die Zustände könnten beispielsweise "explizit falsch", "explizit wahr", "Standard verwenden" darstellen). Ich denke darüber nach, der Antwort ein Beispiel hinzuzufügen.Dies ist der einfachste Weg und Sie können auswählen, welche Kontrollkästchen diesem Stil zugewiesen werden sollen.
CSS:
HTML:
quelle
Ändern Sie Ihren Kontrollkästchenstil auf einfache Weise.
Hier ist der JsFiddle-Link
quelle
Hier ist eine reine CSS / HTML-Version, es wird überhaupt kein jQuery oder JavaScript benötigt, einfaches und sauberes HTML und wirklich einfaches und kurzes CSS.
Hier ist die JSFiddle
http://jsfiddle.net/v71kn3pr/
Hier ist der HTML:
Hier ist das CSS
Dies kann angepasst werden, um einzelne Radio- oder Kontrollkästchen, Gruppen von Kontrollkästchen und Gruppen von Optionsfeldern zu haben.
Mit diesem HTML / CSS können Sie auch das Klicken auf das Etikett erfassen, sodass das Kontrollkästchen aktiviert und deaktiviert wird, selbst wenn Sie nur auf das Etikett klicken.
Diese Art von Kontrollkästchen / Optionsfeld funktioniert perfekt mit jeder Form, überhaupt kein Problem. Wurden auch mit PHP, ASP.NET (.aspx), JavaServer Faces und ColdFusion getestet .
quelle
quelle
quelle
Nein, Sie können das Kontrollkästchen selbst immer noch nicht formatieren, aber ich habe (endlich) herausgefunden, wie eine Illusion formatiert werden kann, während die Funktionalität des Klicken auf ein Kontrollkästchen beibehalten wird. Dies bedeutet, dass Sie es umschalten können, auch wenn der Cursor nicht perfekt stillsteht, ohne das Risiko einzugehen, Text auszuwählen oder Drag & Drop auszulösen!
Diese Lösung passt wahrscheinlich auch zu Optionsfeldern.
Das Folgende funktioniert in Internet Explorer 9, Firefox 30.0 und Chrome 40.0.2214.91 und ist nur ein einfaches Beispiel. Sie können es weiterhin in Kombination mit Hintergrundbildern und Pseudoelementen verwenden.
http://jsfiddle.net/o0xo13yL/1/
quelle
Da Browser wie Edge und Firefox Folgendes nicht unterstützen: Vorher: Nachher bei Checkbox-Eingabe-Tags, ist hier eine Alternative nur mit HTML und CSS. Natürlich sollten Sie CSS entsprechend Ihren Anforderungen bearbeiten.
Machen Sie das HTML für Kontrollkästchen wie folgt:
Wenden Sie diesen Stil für das Kontrollkästchen an, um die Farbetikette zu ändern
quelle
Anscheinend können Sie die Farbe des Kontrollkästchens in Graustufen nur mit CSS ändern.
Im Folgenden werden die Kontrollkästchen von Schwarz in Grau konvertiert (was ungefähr das war, was ich wollte):
quelle
SCSS / SASS-Implementierung
Ein moderner Ansatz
Für Benutzer von SCSS (oder einfacher Konvertierung in SASS) ist Folgendes hilfreich. Erstellen Sie effektiv ein Element neben dem Kontrollkästchen, das Sie formatieren möchten. Wenn das Kontrollkästchen aktiviert ist, formatiert das CSS das Schwesterelement neu (in Ihren neuen, aktivierten Stil). Code ist unten:
quelle
Warnung : Zum Zeitpunkt des Schreibens war Folgendes zutreffend, aber in der Zwischenzeit haben sich die Dinge weiterentwickelt.
Moderne AFAIK-Browser zeigen Kontrollkästchen mit dem nativen Betriebssystemsteuerelement an, sodass sie nicht formatiert werden können.
quelle