Edd Morgan schreibt in
Offensichtlich sind wir uns alle einig, dass das Markup nur Inhalte enthalten sollte, nichts Ornamentales. Aber in welche Kategorie fallen Icons? Sind sie nicht ornamental, sollten sie also nicht im Markup vorkommen und rein in CSS definiert werden?
Ich bin sicher, wir können uns ein "ornamentales" Icon vorstellen. Ich wette, das ist die häufigste Art. Es begleitet ein Wort oder eine Phrase als Teil des Designs. Ich habe hier keine wissenschaftlichen Arbeiten zu zitieren, aber ich stelle mir vor, sie würden uns sagen, dass es eine Sache einprägsamer, auffindbarer, unterscheidbarer oder interkulturell relevanter machen kann oder was auch immer.
Hier ist eines

Lasst es uns wie das Zitat in Eds Frage machen: "sollten sie also nicht im Markup vorkommen und rein in CSS definiert werden".
<button class="button button-follow">
Follow
</button>
.button-follow {
padding-left: 70px; /* Normal left padding plus space for icon */
background: url(/images/icons/icon-follow.svg) no-repeat left center;
}
Es gibt nichts Spezifisches im HTML über das Icon. Rein ornamental. Es wäre immer noch ein Button, wenn dieses Bild nicht geladen würde, oder sogar, wenn das CSS nicht geladen würde, und es hängt sicherlich nicht von JavaScript ab. Wenn wir hier perfekte progressive Enhancement Bürger sind, würden wir sicherstellen, dass <button> in einem <form action="/do/the/right/thing"> eingeschlossen ist oder es zu einem <a href="/go/to/right/place"> machen, um sicherzustellen, dass seine Funktionalität allein intakt ist.
Oder wir hätten auch tun können
.button-follow::before {
content: "";
display: inline-block;
vertical-align: middle;
width: 1em;
height: 1em;
background: url(/images/icons/icon-follow.svg);
background-size: cover;
}
Keine Änderung am HTML.
Icon-Fonts sind die gleiche Art von Ding
.button::before {
font-family: "icon-font";
}
.button-follow::before {
content: "\e901";
}
Obwohl Pseudoelemente mit Screenreadern gelesen werden, auch wenn "Private Use Area" verwendet wird, was für ein Icon ziemlich umständlich sein kann. Ganz zu schweigen von anderen Problemen mit Icon-Fonts.
Mit im Markup...
Wenn Sie das beste Ergebnis mit Icon-Fonts erzielen wollen, werden Sie wahrscheinlich mindestens
<span class="icon icon-hamburger" aria-hidden="true"></span>
Wenn nicht sogar noch ein umgebendes Element darum. Jetzt haben wir also etwas "Ornamentales" im HTML. Sollten Sie sich schlecht fühlen? Na ja.
Ich bevorzuge SVG-Icon-Systeme, die uns möglicherweise ein Markup wie dieses liefern
<button class="button button-follow">
<svg class="icon icon-follow" aria-hidden="true">
<use xlink:href="#icon-follow" />
</svg>
Follow
</button>
... und dieses <use> verweist wahrscheinlich auch irgendwo im HTML auf ein <symbol>.
Fühle ich mich schlecht dabei? Na ja.
Und dann gibt es noch Icons ohne begleitenden Text

Für die wir vielleicht etwas tun könnten
<button aria-label="Save Now" class="button button-save">
<svg class="icon icon-save">
<use xlink:href="#icon-save" />
</svg>
</button>
Es ist leicht anders, aber alles in allem ziemlich ähnlich. Wir haben die Welt nicht auf den Kopf gestellt, weil dieses Icon "Inhalt" ist und andere "dekorativ".
Es ist nur HTML
Der Trick ist, es gut zu verwalten, nicht dogmatisch daran zu festhalten, was "dort hingehört" und was nicht.
HTML ist voller Zeug. Mein Favicon ist da drin, ist das nicht dekorativ? Meine Google Analytics Skripte sind da unten, das scheint gar kein Inhalt zu sein. Ich musste ein zusätzliches <div> verwenden, um mir einen relativen Positionierungskontext zu geben. Es schadet nichts.
Ich würde mir mehr Sorgen machen über unnötigen Kram, der in eine Datenbank eindringt.
Aber ich verstehe es
Es hilft, Regeln zu haben. Es hilft, Konzepte zu propagieren, die dem Web mehr nützen als schaden. Sie sollten wahrscheinlich kein <img> für die Aufgabe einer background-image verwenden.
Ich mag die Idee, die Auswirkungen des Markups zu berücksichtigen, während Sie es verwenden. Tut es, was Sie brauchen? Hilft es der Zugänglichkeit oder schadet es ihr? Der Leistung? Wie sieht es mit der Wartbarkeit aus?
Ich stimme zu. Wir sollten uns nicht nur aufgrund von "Best Practices" einschränken, obwohl wir nach Best Practices und Webstandards streben sollten, gibt es Fälle, in denen die Grenzen verschwimmen.
background-imageist nicht immer praktisch, und auch<img>nicht, aber keines von beiden ist unbedingt schlecht zu verwenden. In einigen Fällen istbackground-imagesogar zu restriktiv. Icons sind jedoch sowohl Inhalt als auch Stil, insbesondere Icon-Font-Pakete. Im Falle von Schrift-/SVG-Paketen verwenden Sie die von dem Paket als bevorzugt beschriebene Methode, und für bildbasierte Pakete suchen Sie stattdessen nach einem Schrift-/SVG-Paket. :)Ich habe nach einer "Antwort" gesucht, wie die meisten wahrscheinlich. Ich würde sagen, es kommt darauf an, wo es verwendet wird; ist es inline (nicht im CSS-Sinn) mit Text oder Medieninhalten? Wenn ja, dann ist es Inhalt. Wenn es Teil des UI-Apparats ist, dann nicht. Auf diese Weise kann dasselbe Icon auf zwei verschiedene Arten in eine Seite eingebunden werden, einmal als Inhalt und einmal als UI-Ornamentik. Es scheint mir ein Hack zu sein, dasselbe Symbol für diese beiden unterschiedlichen Zwecke mit derselben Methode zu verwenden, nur weil es einfacher ist, es auf dieselbe Weise zu tun. Vielleicht denke ich wie ein CMS...
Was denkst du über Ligatur-Icons? Ich benutze seit einiger Zeit Material Font Icon, und es ist ziemlich praktisch.
Ligatur ist ein Icon-Font, der ein Wort in ein Icon umwandeln kann. Ich kann also etwas schreiben wie
<i>search</i>, um die Lupe anzuzeigen.Ligaturen sind cool... es sei denn, Sie benötigen mehrsprachigen (oder auch nur nicht-englischen) Support ;) Dann haben Sie ein Problem.
@Comandeer Aber würde es den Screenreader verschmutzen? Nachdem ich den Artikel gelesen hatte, begann ich zu denken, dass, wenn ich
<button><i>search</i> Search</button>habe, der Screenreader "search Search" lesen wird.Bei Buttons, die nur Icons enthalten und Schrift-Icons verwenden, denke ich, dass es, wenn möglich, eine Screenreader-Alternative neben dem Icon geben sollte. Nur in einem 'visuallyhidden' gekapselt fühlt sich gut an. Oder was?
Ich stimme zu.
Oft sehe ich Haken- und Kreuz-Icons in Vergleichstabellen, um "enthält dies", "enthält dies nicht" anzuzeigen. Ohne versteckten Text oder Alt-Text ist dies völlig unzugänglich und für SEO unsichtbar.
Jedes Mal, wenn Sie nicht-textbasierte Inhalte (wie ein Icon) haben, benötigen Sie eine entsprechende Textalternative, die denselben oder einen gleichwertigen Zweck erfüllt.
Betrachtet man also einige der obigen Beispiele, so kann das Icon auf dem "follow"-Button per CSS realisiert werden, da das Bild dem Benutzer keine zusätzlichen Informationen liefert. Es ist ein dekoratives Bild, das ich durch ein Bild von Lord Helix ersetzen könnte und es wäre immer noch relevant.
Die Icons, die im SVG-Beispiel verwendet werden (einschließlich der Verwendung von "save" im Code), wären jedoch am besten mit einem visuell versteckten Text in einem Span innerhalb des Buttons zu realisieren.
Während das
aria-labeleinigen assistiven Technologien die richtigen Informationen liefert, ist es immer besser, natürliche HTML-Semantik zu verwenden und nur dann Aria zu nutzen, wenn HTML nicht das bietet, was wir brauchen. Andernfalls riskieren wir ernsthaft, WCAG 2.0's 1.1.1 zu verletzen.Obwohl dies eine Designentscheidung ist, würde ich auch empfehlen, den Text im Button sichtbar zu machen. Nicht jeder wird verstehen, was jedes Icon, das das Design verwendet, bedeuten soll, daher ist es sinnvoll, wichtige Informationen, wie z. B. "jetzt speichern", tatsächlich für alle sichtbar auf der Seite zu haben. Es sieht vielleicht nicht schön aus, aber es wird für die Benutzer einfacher und weniger frustrierend sein.
Relevant hier ist die ursprüngliche Definition des Elements
"Das Tag wird verwendet, um Inline-Grafiken (typischerweise Icons oder kleine Grafiken) in ein HTML-Dokument einzufügen."
Wenn man dies berücksichtigt, würde ich sagen, dass ein Icon ein semantischer Inhalt ist und immer als bedeutungsvoll betrachtet werden sollte.
"Das Element" ist das IMG-Tag
https://www.w3.org/MarkUp/html3/img.html
Meiner Meinung nach (IMHO)
Ich würde vorschlagen, dass der ursprüngliche Zweck eines "Icons" im Gegensatz zu anderen grafischen Formen; Inhalt ist, keine Ornamentik. Sein Zweck ist es, ein Konzept auf kleinem Raum zu verdichten, um eine schnelle Erkennung für den Benutzer zu ermöglichen. In Umgebungen außerhalb von Webseiten können Icons die einzige Darstellung dieser Information sein (wenn auch oft mit sperrigeren optionalen Alternativen und Fallbacks).
Sicherlich können sie zur Ornamentik verwendet werden, aber im Grunde sind sie eine Verkörperung des Aphorismus "Ein Bild sagt mehr als tausend Worte".
Wenn es etwas ist, das Sie beim nächsten Mal, wenn Sie das Aussehen Ihrer Website ändern (Rebranding, Design-Update usw.), ändern möchten, dann ist es wahrscheinlich dekorativ. Und wenn Sie Hunderte von Seiten mit verstreuten Icon-Links haben, möchten Sie nur eine verknüpfte Datei ändern, nicht Hunderte von Seiten.
Ich finde, die Icons sind *ziemlich* Inhalt – keine Beschwerden jedenfalls. (Antwort auf die Frage, wie ich sie zuerst gelesen habe.)
Einerseits stimme ich David O'Rourkes Kommentar zu: dass sie als eigenständiger, kondensierter Inhalt gedacht sind.
Andererseits mag ich es *wirklich* nicht, Icons direkt im Markup zu sehen, wie ich es oft tue. Ich ziehe es viel vor, das Erscheinen eines Icons über eine Klasse auszulösen und das Einfügen eines Icons der CSS zu überlassen.
Nein:
<p><i class="my-icon"></i>Text, der ein Icon benötigt </p>Ja:
<p class="my-icon"> Text, der ein Icon benötigt </p>