Hier ist der Trick: Indem wir den türkischen Buchstaben „ı“ und den Punkt „.“ kombinieren, können wir etwas erstellen, das wie der Buchstabe „i“ aussieht, aber aus zwei separaten Elementen besteht. Dies eröffnet uns einige interessante Möglichkeiten, den Punkt des Buchstabens unabhängig vom Stiel zu gestalten oder zu animieren. Sorgen um Barrierefreiheit? Keine Sorge, wir werden das bestmöglich abdecken.
Schauen wir uns an, wie diese separaten „Buchstaben“ erstellt und gestaltet werden, und erfahren wir, wann sie verwendet werden können und wann sie vermieden werden sollten.
Schauen Sie sich einige Beispiele an
Hier sind einige verschiedene Stile und Animationen, die wir mit dieser Idee machen können
Siehe den Pen
Stile und Animationen von Ali C (@alichur)
auf CodePen.
Da beide Teile des Buchstabens normale Unicode-Zeichen sind, werden sie Schriftartenänderungen und Seitenzoom genauso berücksichtigen wie jeder andere Text. Hier sind einige Beispiele für verschiedene Schriftarten, Stile und Zoomstufen
Siehe den Pen
Verschiedene Schriftarten und Zoom von Ali C (@alichur)
auf CodePen.
Schritt-für-Schritt durch die Technik
Lassen Sie uns aufschlüsseln, wie diese Technik funktioniert.
Wählen Sie die zu kombinierenden Unicode-Zeichen
Wir verwenden den Punkt-losen „i“-Buchstaben (ı) und einen Punkt. Und ja, wir könnten auch andere Zeichen verwenden, wie den Punkt-losen „j“-Buchstaben (ȷ) oder sogar die Akzente auf Zeichen wie „ñ“ (~) oder „è“ (`).
Stapeln Sie die Zeichen übereinander, indem Sie sie in ein Span einpacken und die Eigenschaft display auf block setzen.
<span class="character">.</span>
<span class="character">ı</span>
.character {
display: block;
}
Richten Sie die Zeichen aus
Sie müssen nah beieinander liegen. Das können wir erreichen, indem wir die Zeilenhöhen anpassen und die Abstände zwischen ihnen entfernen.
.character {
display: block;
line-height: 0.5;
margin-top: 0;
margin-bottom: 0;
}
Fügen Sie dem Punkt-Element eine CSS-Animation hinzu
So etwas wie diese hüpfende Animation
@keyframes bounce {
from {
transform: translate3d(0, 0, 0);
}
to {
transform: translate3d(0, -10px, 0);
}
}
.bounce {
animation: bounce 0.4s infinite alternate;
}
Es gibt mehr über CSS-Animationen im CSS-Tricks Almanac.
Zur Überprüfung, hier sind wir bisher
Siehe den Pen
Erstellen des Buchstabens von Ali C (@alichur)
auf CodePen.
Fügen Sie alle verbleibenden Buchstaben des Wortes hinzu
Es ist in Ordnung, das „i“ für sich allein zu animieren, aber vielleicht ist es nur ein Buchstabe in einem Wort, wie „Ping“. Wir packen die animierten Zeichen in ein Span, um sicherzustellen, dass alles auf einer Zeile bleibt.
<p>
P
<span>
<span class="character">.</span>
<span class="character>ı</span>
</span>
ng
</p>
Es gibt einen automatischen Abstand zwischen Inline-Block-Elementen, also stellen Sie sicher, dass Sie diesen entfernen, wenn der Abstand nicht stimmt.
Die letzten Schritte
Siehe den Pen
Hinzufügen des Buchstabens in ein Wort von Ali C (@alichur)
auf CodePen.
Was ist mit SVG?
Der gleiche Effekt kann erzielt werden, indem ein Buchstabe aus zwei oder mehr SVG-Elementen erstellt wird. Hier ist ein Beispiel, bei dem das Kreiselement unabhängig vom Rechtecke-Element animiert wird.
Siehe den Pen
SVG animiertes i von Ali C (@alichur)
auf CodePen.
Obwohl ein SVG-Buchstabe nicht auf Schriftartänderungen reagiert, eröffnet er mehr Möglichkeiten für die Animation von Buchstabenteilen, die nicht durch Unicode-Zeichen dargestellt werden, und für Buchstabenstile, die in keiner Schriftart existieren.
Wo würden Sie das verwenden?
Wo würden Sie so etwas verwenden wollen? Ich meine, es ist keine großartige Anwendungsfall für den Körperinhalt oder für jegliche Art von Langform-Inhalten. Nicht nur würde das die Lesbarkeit beeinträchtigen (können Sie sich vorstellen, wenn jedes „i“ in diesem Beitrag animiert wäre?), sondern es hätte auch negative Auswirkungen auf assistierende Technologien wie Screenreader, worauf wir als nächstes eingehen werden.
Stattdessen ist es wahrscheinlich am besten, diese Technik dort einzusetzen, wo der Inhalt zur Dekoration gedacht ist. Ein Logo ist ein gutes Beispiel dafür. Oder vielleicht in einem Icon, das beschrieben, aber nicht als Text von assistierender Technologie interpretiert werden soll.
Sprechen wir über Barrierefreiheit
Wenn wir zu unserem „Ping“-Beispiel zurückkehren, wird ein Screenreader das als P . ı ng vorlesen. Nicht gerade die Aussprache, die wir suchen, und definitiv verwirrend für jeden, der es hört.
Abhängig von der Verwendung können verschiedene ARIA-Attribute hinzugefügt werden, damit Text anders vorgelesen wird. Zum Beispiel können wir das gesamte Element als Bild beschreiben und den Text als dessen Label hinzufügen
<div role=img aria-label="Ping">
<p>P<span>.</span><span>ı</span>ng</p>
</div>
Auf diese Weise beschreibt das äußere div-Element die Bedeutung des Textes, der von Screenreadern vorgelesen wird. Wir möchten jedoch auch, dass assistierende Technologien die inneren Elemente überspringen. Wir können ihnen aria-hidden="true" oder role="presentation" hinzufügen, damit sie ebenfalls nicht als Text interpretiert werden
<div role=img aria-label="Ping">
<p role="presentation">P
<span>.</span>
<span>ı</span>
ng</p>
</div>
Dies wurde nur auf einem Mac mit VoiceOver in Safari getestet. Wenn es Probleme mit anderer assistierender Technologie gibt, lassen Sie es uns bitte in den Kommentaren wissen.
Mehr Unicode!
Es gibt viele weitere „Buchstaben“, die wir durch die Kombination von Unicode-Zeichen erstellen können. Hier ist eine vollständige Übersicht über gängige Glyphen, oder Sie können mit den unten stehenden Spaß haben und Ihre Kreationen in den Kommentaren teilen. Aber denken Sie daran: Kein cooler Effekt ist es wert, die Barrierefreiheit auf einer Live-Website zu beeinträchtigen!
| Erste Glyphe | Zweite Glyphe | Kombiniert |
|---|---|---|
| ı | . | i |
| ȷ | . | j |
| n | ~ | ñ |
| a | e | æ |
| a | ` | à |
Sie haben die ganzen Umlaute vergessen, eine riesige Bandbreite an Möglichkeiten hier
a + ¨ = ä
u + ¨ = ü
o + ¨ = ö
a + ° = å
o + / = Ø (irgendwie)
Das ist jedoch keine gebräuchliche Verwendung im Englischen, daher sind die Anwendungsfälle für einen Effekt mit bereits extrem begrenztem Anwendungsfall viel eingeschränkter.
Ich vermute, ein robusterer und etwas authentischerer Ansatz für Semantik wäre
A. die Bildsemantik komplett zu entfernen,
B. eine ungestylte Kopie der vollständigen Zeichenketten für sehende Benutzer visuell auszublenden
C. die fragmentierten Zeichenketten mit aria-hidden für Screenreader-Benutzer auszublenden, wie hier gezeigt
Das habe ich mir gerade gedacht. Leute mit Screenreadern wären ziemlich verwirrt gewesen, aber ich schätze, es ging darum, nur das Neue und Glänzende zu demonstrieren.
Neil hat den besseren Ansatz zum Ausblenden des Inhalts vor Screenreader-Benutzern geliefert. Verwenden Sie sein Beispiel.
Erlauben Sie mir zu erklären, warum. Die Verwendung von
aria-labelauf einem<div>oder<span>wird schlecht unterstützt und wird in ARIA 1.2 als Option veraltet sein. Sie als Bild mitrole="img"zu kennzeichnen, verwirrt die Sache nur (und einige Benutzer), da es kein Bild ist. Beachten Sie, dassaria-labelden Textknoten eines Elements überschreibt, sodassrole="presentation"oderaria-hidden="true"in diesem Beispiel unnötig wären. Diese Überschreibung ist auch ein Faktor, wenn Ihre Benutzer keine englischen Muttersprachler sind, da sie möglicherweise nicht automatisch übersetzt wird.Generell hat VoiceOver so viele Eigenheiten, dass ein anderer Screenreader benötigt wird, um Ergebnisse zu bestätigen. Ich empfehle mit NVDA oder JAWS zu beginnen.
Da dies in einer Schleife läuft und keine einzelne Mikroanimation ist, empfehle ich, es in eine
prefers-reduced-motionFeature-Abfrage zu wickeln, um die Animation für Benutzer zu deaktivieren, die sie nicht wünschen.sieht interessant aus :—)
Inspiriert von der Farbverlaufs-Textfarbe, die hier auf CSS Tricks gefunden wurde, habe ich den Punkt versteckt (transparent gemacht) und dann eine Pseudoklasse mit „.“ als Inhalt hinzugefügt. Es gab keinen Bedarf an zusätzlichen Zeichen und keinen Bedarf an ARIA-Attributen. Wenn Sie den Text auswählen, sehen Sie den ursprünglichen Punkt hinter dem hüpfenden Punkt.
<p class="text">P<span>i</span>ng</p>span {display: inline-block;
background: linear-gradient(rgba(0, 0, 0, 0) 30%, #ff8a00 30%);
background-clip: border-box;
-webkit-background-clip: text;
-webkit-text-fill-color: rgba(0, 0, 0, 0);
position: relative;
}
span::before {content: ".";
-webkit-background-clip: none;
-webkit-text-fill-color: gba(0, 0, 0, 0);
-webkit-background-clip: text;
-webkit-text-fill-color: #ff8a00;
position: absolute;
top: -44%;
left: 7%;
z-index: 10;
}
Es gibt hier einige magische Zahlen für die Positionierung und für den Farbverlauf-Stopp. Sie hängen von der Schriftfamilie, der Größe und einigen anderen Eigenschaften ab, also seien Sie vorsichtig. Dies ist nur ein Proof of Concept.
Wäre es nicht einfacher, ein Pseudoelement zu verwenden, um den Punkt zu erstellen?
Das gäbe einen einfacheren Referenzpunkt, um ihn zu positionieren, denke ich.
Wie dieser https://codepen.io/schoenwaldnils/pen/jOOppxa
Nur zur Info: Der Punkt auf dem i (und j) heißt Tittle.
Warum entfernt der Kommentar im HTML den Abstand?