Fun Friday thing! Natalya hat auf CodePen ein superlustiges Pen erstellt.
Sie wissen, wie das Klicken auf ein <label> mit einem for-Attribut, das mit einer Checkbox übereinstimmt, die Checkbox zu "checked" oder "unchecked" schaltet? Das, kombiniert mit dem :checked-Selektor in CSS und dem Geschwister-Kombinator, bildet The Checkbox Hack, und Sie können damit alle möglichen lustigen Dinge tun.
Natalya hat es verwendet, um einen Schalter zu bauen, bei dem in der Aus-/Linksposition ein Emoji angezeigt wird und er in die Ein-/Rechtsposition gleitet, wo er zu einem anderen Emoji wechselt.
Sehen Sie sich das Pen Kitty Toggle von Natalya (@tallys) auf CodePen an.
Ich dachte, ich reduziere es auf das einfachste Niveau, das mir möglich war, damit Sie, falls Sie diese Idee für etwas verwenden möchten, das Sie gerade entwickeln, einen klareren Baustein hätten.
Sehen Sie sich das Pen Emoji Toggles von Chris Coyier (@chriscoyier) auf CodePen an.
<!-- The wrap for everything, so you can position it wherever.
Also, so all the other elements are siblings. -->
<div class="emoji-toggle emoji-travel">
<!-- The input is first, so the ~ selector can select siblings after it. -->
<input type="checkbox" id="toggle2" class="toggle">
<!-- The emoji is a psuedo element on this. -->
<div class="emoji"></div>
<!-- This is absolutely positioned over everything.
Also, the split/label comes from using both :before and :after -->
<label for="toggle2" class="well"></label>
</div>
Das Eingabefeld selbst ist visuell verborgen, aber absolut über allem positioniert, so dass ein Klick fast überall die Checkbox umschaltet und somit das Emoji und seine Position ändert.
Es gibt etwas mehr Code als dieser, aber dies sind die wichtigsten CSS-Teile
.emoji-toggle {
position: relative;
.well { // the label
cursor: pointer;
}
.toggle { // the checkbox
appearance: none;
background: transparent;
position: absolute;
width: 100%;
height: 100%;
cursor: pointer;
z-index: 100;
// "off"
~.emoji:before {
content: "emoji unicode here";
position: absolute;
left: 0;
top: -15px;
font-size: 40px;
z-index: 1;
transition: 0.2s;
}
// "on"
&:checked {
~.emoji:before {
content: "different emoji unicode here";
left: 100%;
margin-left: -1em;
}
}
}
}
Sass für Versionen
Um verschiedene Versionen davon zu erstellen, musste der Inhalt der Pseudoelemente bei vier verschiedenen Selektoren mit verschachtelten Zuständen geändert werden. Es war irgendwie verrückt, also habe ich ein schnelles Sass @mixin gemacht, um mir zu helfen. Dies ist die Art von Dingen, für die ich Präprozessoren liebe – es ist nicht zu ausgefallen, es hilft nur, etwas zu abstrahieren, das sonst sehr wortreich wäre.
@mixin emojiType($leftEmoji, $rightEmoji, $leftLabel, $rightLabel) {
.toggle {
~.emoji:before {
content: $leftEmoji;
}
&:checked {
~.emoji:before {
content: $rightEmoji;
}
}
~label {
&:before {
content: $leftLabel;
}
&:after {
content: $rightLabel;
}
}
}
}
// Usage
.emoji-happy {
@include emojiType(
"\01F604", "\01F620", "Happy", "Mad"
);
}
Unicode für Emojis bekommen
Sie haben vielleicht bemerkt, dass die Unicode-Werte für die Emojis in den CSS-Inhalten wie „\01F604“ aussehen. Glücklicherweise hat Tim Whitlock eine ziemlich solide Referenzseite für diese Informationen.

Wenn also der Unicode für „grinsendes Gesicht“ „U+1F601“ ist, wird dies in CSS-Pseudoinhalten wegen der Art und Weise, wie CSS Sachen escaped, zu „\01F601“ .
Ergebnisse können variieren
Emojis sind seltsam. Ich habe gehört, dass dies nicht auf allen Systemen korrekt funktioniert. Unterschiedliche Browser/Plattformen/Versionen haben unterschiedliche Emojis verfügbar. Ich bin sicher, das überrascht uns niemanden.
Das erste Beispiel funktioniert nicht in Chrome (das 2. Emoji wird nicht angezeigt; wenn ich zu Firefox wechsle, funktioniert das erste Beispiel; aber das 2. Beispiel(e) haben alle das Eingabefeld sichtbar und über dem Emoji. Unter Chrome hat die erste Zeile des 2. Beispiels keine Emojis.
ABER insgesamt ein wirklich cooles Beispiel; eines, das auch gut mit Icons (wie Fontawesome) funktionieren sollte.
Robert, es könnte behoben worden sein zwischen Ihrem Kommentar und dieser Antwort, aber für mich sieht es gut aus und funktioniert (auf OS 10.7, Chrome 45).
Ich sehe immer noch die von mir gemeldeten Probleme. Chris sagte, es gäbe einige Probleme mit Emojis in verschiedenen Browsern, also bin ich nicht überrascht; und ich bin sicher, ein bisschen CSS-Tuning würde Firefox beheben. Ich bin immer noch davon überzeugt, dass dies ein großartiges UI-Element ist – intuitiv und benutzerfreundlich.
Ich kann das gleiche Problem auf meinem Windows 7 PC bestätigen (nur bei der Arbeit, das schwöre ich). Außerdem habe ich dieses Beispiel sehr genossen!
aha.
Scheint hier gut zu funktionieren.
Allerdings stelle ich fest, dass der Zustand durch Klicken auf den :before- und :after-Inhalt in beliebiger Reihenfolge geändert werden kann, wodurch er aus der Sequenz gerät, da Sie auf das scheinbar gegenüberliegende Label klicken können.
Im zweiten Beispiel, dem mit den fünf Emoji-Icons, kann dies überwunden werden, indem man Folgendes hinzufügt
Funktioniert sogar in IE, was ein Bonus ist, an jedem Tag der Woche.
Hallo Chris! Danke, dass du dir Kitty Toggle angesehen hast. Ich werde im Oktober bei der CSS Dev Conf sein, um dir persönlich ein richtiges High Five zu geben! 😺
Das ist, was ich auf OS X sehe
Und das ist, was ich unter Windows 7 sehe
Der "aus"-Emoticon auf OS X ist viel trauriger als der unter Windows 7. Das zeigt vielleicht, warum die Verwendung von Unicode-Emoticons wie diesen problematisch ist, und manchmal frage ich mich, ob die Aufnahme in Unicode eine gute Idee war.
Es sieht so aus, als wären meine Screenshots herausgefiltert worden! Hier sind sie
OS X Screenshot: https://imgur.com/Tw8PIK7.png
Windows 7 Screenshot: http://imgur.com/QVPf93M.png
(Vielleicht sollten die Posting-Richtlinien für Kommentare erwähnen, dass Bilder nicht unterstützt werden, und der Vorschaufenster sollte keine Bilder anzeigen, wenn sie nicht im endgültigen Kommentar erscheinen sollen.)
Ein Problem. Leute werden versuchen, den Schalter von Seite zu Seite zu ziehen, anstatt nur zu klicken – und das Bewegen funktioniert nicht. Auf meinen Kollegen in der Firma getestet.
Hallo, ich habe eine Frage. Können wir die Farbe dieser Icons ändern? Ich habe es unter Windows, Wordpad versucht und konnte es, aber ich kann es nicht im Browser mit CSS tun.