Semantik in HTML ist immer ein heißes Thema. Manche streben sie ständig an. Manche Leute kritisieren eine dogmatische Einhaltung. Manche Leute wissen nicht, was zum Teufel das ist.
Ich würde Semantik in Bezug auf HTML als Tags, Klassen, IDs und Attribute beschreiben, die den von ihnen umschlossenen Inhalt beschreiben, aber nicht spezifizieren. Beginnen wir mit einem Beispiel, auf das wir uns wahrscheinlich alle einigen können.
Schlechte Semantik
<div class="article">
<div class="article_title">Smurf Movie Kinda Sucks</div>
<div class="the_content">Not surprisingly, this weeks release of
<div class="darkbold">The Smurfs</div> kinda sucks.</div>
</div>
Gute Semantik
<article>
<h1>Smurf Movie Kinda Sucks</h1>
<p>Not surprisingly, this weeks release of
<b>The Smurfs</b> kinda sucks.</p>
</article>
Ob Sie nun denken, dass HTML5 einsatzbereit ist oder nicht, ich denke, Sie würden zustimmen, dass, wenn Sie ein HTML-Element für einen Artikel benötigen, das Tag <article> besser ist als ein generisches <div> mit einem Klassennamen. Der Titel des Artikels wird zu einer Überschrift, der Inhalt zu einem Absatz, der fettgedruckte, aber nicht hervorgehobene Titel wird zu einem fettgedruckten Tag.
Aber nicht alles lässt sich so sauber auf HTML-Tags abbilden. Betrachten wir eine Reihe von Klassennamen und ich werde meine Meinung abgeben, ob ich denke, dass sie semantisch sind oder nicht.
<div class="column_1"></div>
Unsemantisch. Dies ist ein klassisches Beispiel. Jeder einzelne CSS-Grid-Framework der Welt verwendet irgendeine Art von Klassennamen, um die Grids zu deklarieren. Ob es „yui-b“, „grid-4“ oder „spanHalf“ ist, all diese nähern sich der Spezifikation als der Beschreibung ihres Inhalts. Obwohl ich behaupte, dass dies unsemantische Klassennamen sind, denke ich auch, dass sie in Layouts von Float-basierten Grid-Systemen größtenteils unvermeidlich sind.
<div class="footer"></div>
Semantisch. Obwohl ein Footer ein abstraktes Konzept ist, hat er im Webdesign eine Bedeutung erlangt. Es ist der untere Teil einer Website, der typischerweise Dinge wie wiederkehrende Navigation, Copyright, Autoreninformationen usw. enthält. Dieser Klassenname deklariert eine Gruppe für all diesen Kram, ohne ihn zu beschreiben.
Wenn Sie den Sprung zu HTML5 gemacht haben, wäre das <footer>-Element besser. Und das gilt für alle HTML5-Elemente. (Header sollten <header> sein, Sidebars sollten <aside> sein usw.) Wenn Sie HTML5 noch nicht verwenden (Sie sollten einen wirklich überzeugenden Grund haben), sind die entsprechenden Klassennamen meiner Meinung nach in Ordnung.
<div class="largeText"></div>
Unsemantisch. Das spezifiziert. Warum sollte der Text größer sein? Um sich von anderem kleineren Text abzuheben? „standOut“ oder „callout_text“ wären hier besser, da Sie im theoretischen Redesign-Zukunftsbild™ möglicherweise einen anderen Stil wählen möchten, um diesen Text hervorzuheben, der nichts mit der Größe des Textes zu tun hat, und Sie werden nicht mit einem umständlichen Klassennamen feststecken.
<div class="priority-2"></div>
Semantisch. Ich habe mit einigen Leuten von MailChimp (Jason Beaird und Aarron Walter) darüber gesprochen, und so deklarieren sie die relativen Wichtigkeitsstufen von Buttons innerhalb der App (obwohl mit Klassennamen eher wie „p1“ .. „p5“). Buttons mit höherer Priorität könnten hellere Farben haben oder größer sein, während Buttons mit niedrigerer Priorität stärker mit dem Inhalt verschmelzen könnten. Indem Sie nicht spezifisch sind, was diese Stile sind, und auf eine Prioritätsstufe abstrahieren, bleiben Sie semantisch. Es ist, als würde man die Idee von <h1>, <h2>, <h3> usw. auf Buttons übertragen.
<div class="copyright"></div>
Semantisch. Wenn doch nur jeder Klassename so einfach wäre! Das gilt für jeden Abschnitt, der Inhalte enthält, die sich leicht mit einem Wort beschreiben lassen, wie „tweets“, „pagination“ oder „admin-bar“. Obwohl bei letzterem Sie besser daran täten, ihn „admin-nav“ zu nennen, da im theoretischen Redesign-Zukunftsbild™ dieser Bereich möglicherweise keine „Bar“ mehr ist.
<p class="introp"></p>
Unsemantisch. Ich sah einmal eine Präsentation mit Dave Rupert, wo er scherzte, dass dies sein Lieblingsklassename sei. Ich kann das gut nachvollziehen, da es ein sehr häufiges Szenario ist, den ersten Absatz einer Seite anders zu gestalten, als aufmerksamkeitserregende Übersicht, um die Leute in einen Artikel zu bekommen.
Wenn Sie absolut eine supertiefe Browserunterstützung benötigen, benötigen Sie möglicherweise eine Art Klassennamen, bei denen ich sagen würde, dass „intro“ besser ist als „introp“ (lassen Sie den Elementnamen weg). Aber viel besser wäre es, einfach den ersten Absatz anzusprechen wie article p:first-of-type oder h1 + p.
<div class="clearfix"></div>
Unsemantisch. Dies ist ein äußerst häufiger Klassename, der eine kleine Trickserei anwendet, um das Element dazu zu bringen, all seine untergeordneten Floats zu enthalten, anstatt zusammenzufallen. Aber es hat nichts mit dem Inhalt zu tun, den er enthält, und ist daher unvermeidlich unsemantisch. Dan Cederholm empfiehlt stattdessen einen gefühlvolleren Klassennamen „group“ für diesen Zweck (in seinem Buch Handcrafted CSS), was meiner Meinung nach diesen gerade noch in den Bereich des Semantischen bringt, da dieser Wrapper sicherlich mehrere andere Elemente enthält und somit eine Gruppe ist (beschreiben, ohne zu spezifizieren).
<div class="left"></div>
Unsemantisch. Vielleicht möchten Sie im theoretischen Redesign-Zukunftsbild™ diese Dinge stattdessen auf der rechten Seite haben. Zu spezifisch.
<div class="success"></div>
Semantisch. Ich denke, dieser funktioniert am besten in Verbindung mit anderen Klassennamen, sodass einer von ihnen den Inhalt und einer den Status dieses Inhalts beschreibt. Wie „success message“, die eine Nachricht wie „Ihr Dateiupload war erfolgreich!“ enthalten könnte. Wenn die Nachricht lautet „Beim Upload Ihrer Datei ist ein Problem aufgetreten.“, könnten die Klassennamen stattdessen „fail message“ lauten und die entsprechende Formatierung haben.
<div class="plain-jane"></div>
Unsemantisch. Dies versucht zu spezifizieren, dass der Inhalt darin auf eine bestimmte Weise gestylt werden soll. „plain-jane“ ist dasselbe wie „normal“ oder „regular“. Idealerweise sollte CSS so geschrieben werden, dass Sie keine Klassennamen für „reguläre“ Stile benötigen, diese kommen einfach standardmäßig durch den Kaskadeneffekt, und alles, was davon in ungewöhnliche Weise abweicht, erhält eine Klasse.
<div class="entry-unrelated"></div>
Unsemantisch. Readability, die Web-App zum Umformatieren und Speichern von Webseiten zum späteren leichteren Lesen, verwendet diesen Klassennamen, um Teile von Elementen Ihrer Website zu spezifizieren, die Sie nicht versehentlich in die Konversation/Speicherung Ihres Artikels einbeziehen möchten. Der Grund, warum ich hier unsemantisch vorgehe, ist, dass er beschreibt, was er nicht ist, nicht was er ist. Ich wünschte, es gäbe etwas anderes als einen Klassennamen, das für diesen Zweck verwendet werden könnte. So etwas wie rel=nofollow für Links, aber für Inhalte.
<div class="hyphenate"></div>
Unsemantisch. Versucht, das Verhalten des Inhalts zu spezifizieren, anstatt zu beschreiben, was er tatsächlich ist.
<a class="link" href="#"></a>
Unsemantisch. Obwohl Link beschreibend ist, ohne spezifisch zu sein, macht die Natur eines Ankerlinks ihn bereits zu einem Link, daher nicht notwendig. Wenn der Klassename diesen Link von anderen „normalen“ Links trennen soll, beschreiben Sie genauer, warum, z. B. „book-link“ oder (diskutabel) „button“.
Aber…
Nehmen wir an, Sie haben zwei Arten von Artikeln auf Ihrer Website und möchten sie unterschiedlich gestalten. Filmkritiken haben einen blauen Hintergrund und aktuelle Nachrichten einen roten Hintergrund und größere Schrift.
Hier ist eine Möglichkeit, dies zu tun
<article class="movie-review">
...
</article>
<article class="breaking-news">
...
</article>
und eine andere
<article class="blueBg">
...
</article>
<article class="redBg bigText">
...
</article>
Ich wette, wenn wir eine Umfrage machen und Leute fragen, welches Beispiel sie für semantischer halten, würde das erste gewinnen. Es erfüllt die Kriterien dieses Artikels: beschreiben, ohne zu spezifizieren. Während das zweite Beispiel spezifiziert („blueBg“ ist ein Klassenname, der einen blauen Hintergrund anwendet). Nehmen wir an, das theoretische Redesign-Zukunftsbild™ hört auf, theoretisch zu sein und ist jetzt in Arbeit. Das Design für Filmkritiken hat jetzt einen grünen Hintergrund. Der Klassenname „blueBg“ ist dort ziemlich umständlich. Während der Klassenname „movie-review“ völlig in Ordnung ist und Sie einfach die Eigenschaften/Werte ändern, um den grünen Hintergrund stattdessen zu erzielen.
Das bedeutet nicht, dass das erste Beispiel immer besser ist. Nehmen wir an, diese hellblaue Farbe wird an vielen Stellen auf der Website verwendet. Vielleicht ist es die Hintergrundfarbe eines bestimmten Teils des Footers und einer bestimmten Sidebar-Box. Möglicherweise landen Sie bei Selektoren wie
.movie-review,
footer > div:nth-of-type(2),
aside > div:nth-of-type(4) {
background: #c2fbff;
}
Das ist effizient, weil Sie diese Farbe nur einmal deklarieren. Aber es ist auch ein ziemlich komplexer, schwer zu lesender, unhandlicher Selektor. Ganz zu schweigen davon, dass diese verschiedenen Selektoren eine einzigartige Formatierung benötigen könnten, so dass sie später wiederholt werden müssen. Oder Sie wählen einen anderen Ansatz und lassen sie einfach getrennt
.movie-review {
background: #c2fbff;
/* Plus other stuff */
}
footer > div:nth-of-type(2) {
background: #c2fbff;
/* Plus other stuff */
}
aside > div:nth-of-type(4) {
background: #c2fbff;
/* Plus other stuff */
}
Das könnte Ihre CSS-Datei tatsächlich organisierter halten (verschiedene Bereiche der Website in verschiedenen Abschnitten), aber auf Kosten repetitiver Deklarationen. In einer Präsentation von Nicole Sullivan, die ich kürzlich auf dem CSS Summit sah, wies sie auf einige große Unternehmen hin, die die exakt gleiche Farbe in den CSS-Dateien buchstäblich *tausende* Male deklarieren. Ich denke, wir können alle zustimmen, dass das verrückt ist. Es kann eine Vielzahl von Lösungen dafür geben, aber eine davon könnte die Verwendung eines Klassennamens wie „blueBg“ sein, um ihn einmal im CSS zu deklarieren und dann die HTML die Last der Anwendung dieses Klassennamens aufzuerlegen, wenn Sie dieses Design wünschen. Dennoch wären Sie besser dran, es „mainBrandColor“ oder „secondaryFont“ zu nennen, um Spezifikationen zu vermeiden. Soweit ich weiß, ist das OOCSS. Ein geringer Teil Semantik opfern für das größere Wohl (drastisch kleinere Ressourcen).
Ich würde gerne Ihre Meinungen dazu hören. Ich bin mir sicher, viele von Ihnen haben andere Beispiele, unterschiedliche Meinungen darüber, was semantisch ist oder nicht, und ob das wichtig ist oder nicht.
hahahaha! Ich liebe, wie du mit den Schlümpfen anfängst, die in dem schlechten Beispiel scheiße sind, und dann zum guten Beispiel übergehst, wie sie immer noch scheiße sind.
Ich habe nie darüber nachgedacht, ob die Klasse „left“ oder „right“ semantisch ist oder nicht, aber ich nehme an, sie ist es nicht. Ich habe das Gefühl, meine Welt bricht über mir zusammen…
Ich bin mir nicht sicher bei dem Beispiel mit Filmkritiken/aktuellen Nachrichten. Wenn „Breaking News“ beispielsweise zu „Latest News“ wird, wird der ursprüngliche Klassenname verwirrend. Vielleicht wären .movietype-1 und .movietype-2 besser.
Ich denke, Breaking News & Latest News sind ähnlich genug, dass die Semantik immer noch gilt. Wenn sich der Inhalt jedoch drastisch genug ändert (und nicht nur die Formatierung), möchten Sie wahrscheinlich ohnehin eine neue Klasse/Formatierung dafür erstellen.
Toller Artikel, ich predige (ein wenig) über grundlegende Semantik, deshalb habe ich geliebt, wie alles in Ihrem Artikel erklärt wurde. Großartig, danke :)
Ich verwende ‚left‘ oder ‚right‘ nicht als Klasse, es sei denn, ich habe es zuvor im CSS-Reset definiert – anstatt beispielsweise…
…zu meinem CSS-Element, rufe ich es einfach im Reset auf – so
Dann kann ich später, wenn ich Elementklassen in HTML definiere, es verwenden, um dieses Element nach links oder rechts zu verschieben – so
Semantisch oder unsemantisch!? :P
Das mache ich auch gelegentlich. Ich versuche es normalerweise zu vermeiden, lol. Es hängt einfach vom Projekt und meiner Stimmung ab, denke ich. Bin definitiv gespannt, was Chris zu sagen hat!
Eindeutig unsemantisch!
Sie definieren die Position im HTML, während sie im CSS sein sollte…
…wenn Sie ein Semantik-Nazi sind!
Wenn Sie kein Semantik-Nazi sind, ist es „unsemantisch“, aber es kann „seinen Zweck erfüllen“. Sie sollten sich fragen: „Wenn ich das Erscheinungsbild meiner Website ändern möchte, wird es dann immer links sein?“ oder ähnliches.
Das Schreiben semantischer Klassennamen ist eine „Best Practice“, weil es Ihnen erlaubt
– Sich keine Gedanken über das Erscheinungsbild machen, BEVOR Sie Ihre HTML-Strukturen schreiben
– Besser von externen Tools (wie Suchmaschinen) geparst werden.
Wenn Ihr Bedarf nicht mit den Vorteilen einer „Best Practice“ übereinstimmt, können Sie etwas anderes tun.
Ich denke, ich mache es einfach, weil es einfach zu handhaben ist – und wenn etwas neu positioniert werden muss, muss es einfach nur dieses Wort in ‚links‘ oder ‚rechts‘ ändern.
Aber ich verstehe Ihren Punkt. :)
Nun, abseits vom Hauptthema Semantik oder nicht. Ich denke, dies würde Sie zwingen, mehr und härter zu arbeiten, um die Richtung Ihres Designs von LTR auf RTL oder umgekehrt zu ändern. Vielleicht hatten Sie diesen Fall nicht, aber als UI-Entwickler, der mit arabischsprachigen Kunden zu tun hat, wäre dies ein Albtraum für mich, wenn ich an einem groß angelegten Projekt arbeiten würde.
Ich verwende dazu tendenziell mehrere Klassennamen wie class=”meta right group”. Ich sehe immer noch nichts Falsches daran, Klassennamen ‚left‘ oder ‚right‘ zu verwenden. Auch wenn das linke Element eines Tages nach rechts schweben mag, würde ich einfach den Klassennamen in ‚right‘ ändern und das CSS verlassen. Dasselbe gilt für ‚grid‘-Klassennamen. Ich ziehe es vor, Klassennamen anzuhängen, die bereits definiertes CSS haben, anstatt fast alles zu positionieren und zu gestalten.
Ich finde „left“ und „right“ immer noch nicht unsemantisch, wenn sie verwendet werden, um etwas zu klassifizieren, das auf keine andere Weise unterscheidbar ist. Am besten nutzen Sie Ihr Urteilsvermögen – wie lässt sich dies am besten jemandem beschreiben, der nicht Sie ist?
Ich bin bei Denis. Warum sich die Mühe machen, 50x float: left zu schreiben? Wenn Sie es tatsächlich in float: right ändern müssen, ändern Sie einfach die Klasse in right.
Diese Besessenheit von Semantik birgt die Kehrseite, Ihre CSS-Dateien aufzublähen. Mehr CSS = weniger Wartbarkeit + schwerer zu lesen. Darüber hinaus ermöglichen „Helper“-Klassen den Entwicklern, konsistente Stile beizubehalten und ermöglichen es jedem, zu verstehen, welche Stile angewendet werden, ohne in das CSS eintauchen zu müssen. Wenn ich eine linke Klasse habe und intern jeder weiß, was links ist, bedeutet das, dass ich „some-semantic-class-name“ nicht öffnen muss, um herauszufinden, dass es float: left enthält oder die Klasse sogar erstellen muss, um sie anzuwenden.
Meine Faustregel ist, wenn es viel mehr CSS erfordert, als eine einfache „Helper“-Klasse anwendet, dann werde ich semantisch sein, da ich immer noch in das CSS schauen muss, um zu sehen, was sonst noch darauf angewendet wird.
Hier sind einige Beispiele für Klassen, die auf eine ul angewendet werden können, wo ich arbeite: padTop (wandelt die Verwendung von margin-top in padding-Top um), sprited (für wenn jede li eine Sprite enthält), bulleted (wenn wir die Aufzählungspunkte sehen wollen).
All dies scheint eine Debatte darüber zu sein, „Ist es richtig, sich für Semantik zu entscheiden oder nicht?“
Ich würde die Dinge auf meine Weise tun und mich an Dinge halten, die meine Arbeit erleichtern, und mich nicht um diese starren Regeln kümmern, die wir wegen „Semantik“ aufstellen.
Ich denke, Semantik in HTML sollte auf Tag-Namen beschränkt sein.
IDs, Klassen und andere Eigenschaften können das sein, was Sie wollen, um das visuelle Design mit CSS nach Ihren Wünschen zu erreichen.
Ich frage mich, warum wir keine beliebigen Tag-Namen verwenden können, um unsere Semantik zu bereichern, es gibt nur eine Handvoll in HTML5.
Schauen Sie sich das für benutzerdefinierte semantische Tags an http://sickdesigner.com/index.php/2010/html-css/truly-semantic-tags-and-html5/
Weil willkürliche Tag-Namen für niemanden außer demjenigen, der sie verwendet, Bedeutung haben.
Sie können immer die XHTML von HTML5 dafür verwenden. Bis diese willkürlichen Tags in größerem Maßstab dokumentiert sind, beruht ihre Semantik auf ihrem Namen, der stark von Interpretationen beeinflusst wird.
Und Sie können sehen, dass wir in aktuellen Spezifikationen verwenden. Das Problem ist nicht die geringe Anzahl von verwendeten Tags, sondern die richtige Verwendung der vorhandenen, und das macht aus dem Web-Dev ein Durcheinander.
Oh, Autsch! Ich weiß, dass ich mich schuldig gemacht habe, einige dieser Beispiele wie nummerierte Spalten und links/rechts zu verwenden. Wie Dan habe ich nie wirklich darüber nachgedacht, dass diese Klassennamen nicht semantisch sind. Danke für einen großartigen Artikel, ich weiß, dass ich das bei zukünftigen Designs nicht vergessen werde.
Ich habe auch eine Reihe ähnlicher „Helper“-Klassen, die ich zusätzlich zu anderen (typischerweise semantischeren) Klassen verwende. .tleft, .tright, .tcenter (für Textausrichtungen), .small (für kleine Texte) usw.
Wenn sich das Design ändern muss, entferne/tausche ich die Helper-Klassen aus dem HTML.
Für die Websites, die ich erstelle, hat die Bequemlichkeit dieser Helper-Klassen bisher die Nachteile der geringfügigen Änderungen am HTML überwogen. Sie hilft auch, viele doppelte CSS-Deklarationen zu vermeiden (die Verwendung von text-align: center für hundert Elemente, die es benötigen, anstatt es einmal zu tun und diese Klasse dann an vielen Stellen zu verwenden).
„Helper-Klassen“ ist im Grunde OOCSS, soweit ich das verstehe. Völlig in Ordnung, WENN es Ihnen tatsächlich Ärger erspart, anstatt ihn zu verursachen.
Das bedeutet, dass es für Sie möglich ist, das zu tun. Generell ist es das auch für mich. Bei den meisten Neugestaltungen, die ich mache, habe ich die Macht, HTML genauso zu ändern wie CSS. Aber das ist nicht immer möglich. Denken Sie an diese Website, es gibt etwa 1.400 einzigartige Seiten oder so etwas. Jegliches HTML, das keine Vorlage ist, sondern Teil des Inhalts selbst, ist so gut wie in Stein gemeißelt, ich werde nicht so viele Dokumente überprüfen, um HTML zu ändern.
Okay, heute Morgen habe ich darüber nachgedacht, eine benutzerdefinierte UI für meine Website zu erstellen, und mir kam der Gedanke, Klassen wie diese zu erstellen
Und ein paar Minuten später sehe ich diesen Beitrag, nachdem ich besser nachgedacht habe, kam mir folgende Idee: Anstatt die Farbe direkt in CSS zu spezifizieren, spezifizieren Sie sie im Namen der Datei, die die Stile enthält.
So etwas wie
/assets/css/ui/green/main.css
Wenn die UI rot sein muss
/assets/css/ui/red/main.css
Was denkst du?
Außer, Sie erlauben den Leuten, Ihre UI-Farbe zu ändern, oder Sie erstellen Vorlagen zum Verkauf, oder planen, eine Reihe von UI-Farben zu erstellen, zwischen denen Sie wechseln – was ist der Sinn? Wenn Sie nicht farbspezifisch in CSS sind, warum nicht einfach die Farben in derselben CSS-Datei ändern, wenn Sie die UI wieder ändern und die Erstellung einer komplizierten Verzeichnisstruktur vergessen, es sei denn, Sie benötigen die Möglichkeit, zwischen Farben zu wechseln, aus irgendeinem Grund.
Ja, der Benutzer kann die UI-Farbe ändern. Also ist dieser Weg am besten.
Dann könnten Sie sie einfach UI-color-1, UI-color-2 usw. nennen.
Ja, ich gehe sogar so einfach vor: c1, c2, c3, etc.
Verwenden Sie stattdessen Namen wie: MainColor und SecondaryColor oder FirstColor und SecondColor (einige werden mich töten, wenn ich das vorschlage ;-) ) Ich verwende immer so etwas wie CorporateColor und SupportColor.
Obwohl ich sofort zustimme, dass Namen wie „left“, „red“, „bigfont“ usw. schlecht sind. Ich würde nicht sofort zustimmen, dass Klassennamen semantisch sein müssen. Für wen oder was müssen sie semantisch sein?
Der Benutzer sieht sie nie, der Browser rendert jeden Namen gerne, ohne sich darum zu kümmern, was er ist, und als ich das letzte Mal nachsah, glaube ich nicht, dass es eine Software (Spider) gibt, die Daten von Websites sammelt, basierend auf willkürlichen semantischen Klassennamen? Sicher, ein Klassenname wie copyright könnte von einem Spider verwendet werden, um Informationen zu sammeln, aber seien wir ehrlich, er wird mit ziemlicher Sicherheit nicht alles sammeln, was er will, da viele Copyright-Hinweise keinen copyright-Klassennamen haben werden. Außerdem könnte ich mir einen semantischen Klassennamen einfallen lassen, der einzigartig ist… welcher Spider/welche Software wird das jemals wissen? AT (assistive technology) verwendet kaum Klassennamen, um Informationen zu übermitteln (ich glaube, ich habe nur von einem Fall bezüglich der Klassen „footer“ und „header“ gehört, und diese sind jetzt vollwertige Elemente).
Also am Ende sind Klassennamen – glaube ich – nur für den Entwickler. Daher sollte die Regel lauten
Klassennamen und IDs sollten in Stil oder Inhalt Sinn ergeben, auch wenn Stil oder Inhalt geändert werden. Was nicht mehr bedeutet, dass sie semantisch *sein müssen*.
Es sei denn, jemand kann mich davon überzeugen, dass semantische Klassennamen einen rein semantischen Grund haben, den ich nicht kenne?
Ich stimme zu… Klassennamen sind speziell für den Entwickler. Aber was, wenn Sie an einem Projekt mit mehreren Teammitgliedern arbeiten? Sie möchten keine Klasse erstellen, die verwirrend oder unklar ist, bis zu dem Punkt, an dem Ihre Teammitglieder sie nur schwer verstehen können. Und Sie möchten auch nicht, dass sie dasselbe mit Ihnen tun.
@Jordan: Wie gesagt, verwenden Sie Namen, die auch bei Stil- oder Inhaltsänderungen Sinn ergeben. Ich denke, das sollte die Regel sein. Das bedeutet, es könnte semantisch sein, muss es aber nicht. Außerdem ist es in Teams immer eine gute Idee, vorab vereinbarte Standards zu verwenden.
Richtig, Klassennamen sind nur für einen Menschen, der den Quellcode betrachtet, semantisch. Sie bedeuten nichts für Maschinen, die ein Dokument parsen oder Gliederungen erstellen.
Ich mag diesen Artikel wirklich! Obwohl er mir definitiv ein schlechtes Gewissen gemacht hat, `class=left` zu verwenden… Klarheit/Genauigkeit im Code wird so oft übersehen. Ich weiß, dass ich manchmal schuldig bin. Tolle Motivation, es besser zu machen :)
Ich stieß vor ein paar Monaten auf ein Problem mit @font-face. Ich ertappte mich dabei, eine Klasse im Markup zu verwenden, die die Schriftart deklariert hatte, anstatt sie mehrmals im Stylesheet zu deklarieren. Am Ende erkannte ich, dass es einfach Banane war, diese Verantwortung auf das HTML zu legen, und stellte alles wieder ins Stylesheet. Es brachte mich zum Nachdenken über Zeiten, in denen es angemessener sein könnte, das HTML zu verwenden, um es für andere leichter verständlich zu machen, wenn sie sich mit Ihrer Arbeit beschäftigen.
Aber egal.
Obwohl ich mit den meisten dieser Punkte übereinstimme, bin ich immer noch nicht ganz wohl dabei, auf vollständiges CSS3 und HTML5 umzusteigen – zumindest nicht in einer normalen Web-Agenturumgebung mit Kunden, die ihren Browser immer noch nicht aktualisieren können. Ich weiß, es gibt JavaScript-Workarounds, aber ich glaube, die Erfahrung sollte organisch und nicht gehackt sein. Irgendwann in meiner Karriere hoffe ich, die Barriere zu durchbrechen und mich nicht mehr um IE7/IE8 kümmern zu müssen.
Auf jeden Fall habe ich versucht, `.className:after {content: ”; display: block; clear: both;}`, aber meistens benutze ich am Ende ein <br style=”clear: both;” /> anstelle eines div mit einer clear-Klasse.
Alles andere stimme ich definitiv zu. Ich verwende nur so viele Klassennamen wie nötig, typischerweise so wenige wie möglich. HTML hat alle integrierten Tags für die Formatierung, es gibt keinen Sinn, Divs für alles zu verwenden.
Nun, das Problem hier ist nicht so sehr semantisch oder unsemantisch, sondern eher, dass „CSS viele Probleme hat, wenn man auf DRY abzielt“ (DRY: Don't Repeat Yourself).
Stellen Sie sich das folgende CSS vor
classorelement1,
classorelement2,
classorelement3,
classorelement4,
classorelement5
{
cssproperty1:value1;
cssproperty2:value2;
cssproperty3:value3;
cssproperty4:value4;
cssproperty5:value5;
}
classorelement6,
classorelement2,
classorelement3,
classorelement4,
classorelement5
{
cssproperty6:value6;
cssproperty7:value7;
cssproperty8:value8;
cssproperty9:value9;
cssproperty10:value10;
}
classorelement2 bis classorelement5 sind komplexe Selektoren, sie kommen immer zusammen. Sie müssen diesen Abschnitt nicht wiederholen, weil er immer derselbe ist. Sie können dann schreiben
classorelement2,
classorelement3,
classorelement4,
classorelement5
{
cssproperty1:value1;
cssproperty2:value2;
cssproperty3:value3;
cssproperty4:value4;
cssproperty5:value5;
cssproperty6:value6;
cssproperty7:value7;
cssproperty8:value8;
cssproperty9:value9;
cssproperty10:value10;
}
classorelement1
{
cssproperty1:value1;
cssproperty2:value2;
cssproperty3:value3;
cssproperty4:value4;
cssproperty5:value5;
}
classorelement6
{
cssproperty6:value6;
cssproperty7:value7;
cssproperty8:value8;
cssproperty9:value9;
cssproperty10:value10;
}
Aber Sie möchten cssproperty1 bis cssproperty5 oder cssproperty6 bis cssproperty10 nicht wiederholen, weil Sie nicht „genau dieselben Abschnitte“ pflegen möchten.
CSS hilft Ihnen hier nicht… Sie können Klassen wie in diesem Artikel verwenden, vielleicht haben Sie mehrere Skins und das „bgBlue“ ergibt in anderen Skins keinen Sinn…
Die beste Lösung, die ich gefunden habe: LESS oder SASS.
Mit diesen Meta-CSS-Tools können Sie Ihr CSS faktorisieren, ohne eine Klasse verwenden zu müssen. Sie können Ihre „Hintergrundfarbe“ einmal schreiben.
SASS (oder das aktuellere und passendere SCSS) ist definitiv die Lösung für alle CSS-Bedürfnisse. Es kommt dem näher, was C++ für C getan hat (Objektivierung der Sprache). Sie können Funktionen (oder Mixins, wie sie genannt werden) sowie ganze Objekte mit angegebenen Stilen erstellen. Ich kann fast garantieren, dass die Unternehmen, die _tausende_ derselben Farbe definiert hatten, wahrscheinlich SASS verwendet haben. Es ist einfach nicht nachhaltig, CSS bis zu solchen Extremen zu pflegen, ohne Variablen.
Um pedantisch in Bezug auf Semantik zu sein, sollten Sie „The Smurfs“ in <i&rt;The Smurfs</i&rt; einschließen, da es sich um ein Hauptwerk handelt und daher kursiviert werden sollte. Ich sehe das Argument, dass dies unsemantisch ist, aber es ist wirklich nicht so, da jeder, der eine Arbeit in der Schule geschrieben hat (zumindest in den USA), diese Regel kennt. Selbst wenn Sie argumentieren wollen, dass es so unsemantisch ist, dass es ausgeschlossen werden sollte, ist Ihr <b&rt;-Tag nicht besser.
Ich könnte mir vorstellen, dass <cite&rt; ein gewisses Argument dafür hat, aber das ist auch ziemlich vage.
Nein, nein, nein – Sie verpassen den Punkt. Fügen Sie der Überschrift eine Klasse hinzu, die besagt, dass es sich um einen Film handelt (.movie oder vielleicht .movie-title?), und lassen Sie CSS das für Sie erledigen. Wenn es außerhalb der Überschrift verwendet wird, würde ich zustimmen, dass ein cite-Tag vage akzeptabel wäre, obwohl ein span-Tag wahrscheinlich eine weniger umstrittene Wahl wäre, da es keinen HTML-Tag gibt, der speziell dafür vorgesehen ist.
Mein Lieblingsklassenname, den ich bei Facebook gesehen habe, war
Profilüberschriften – .ginormousProfileName
Man könnte sicherlich argumentieren, ob das semantisch ist oder nicht, besonders angesichts der Neigung von Facebook zu Neugestaltungen.
Ein Problem, auf das ich gestoßen bin, sind WordPress-Themes, die die body-Klasse verwenden, aber dem div, das den Hauptartikel umschließt, die Klasse „page“ geben – und dann, wenn Sie versuchen, eine Breite (oder was auch immer) zu deklarieren, wird sie auf die gesamte Website angewendet. Ich bevorzuge „content“ für das div in dieser Situation.
Großartiger Artikel, obwohl ich das Gefühl habe, dass dies durch einen Artikel über „Untergenutztes, aber semantisches HTML“ gefolgt werden könnte – Dinge wie <address>, <acronym>, <abbr>, <dfn>, <q> usw.
Die Priorität bei der Erstellung von Klassen ist das Schreiben von Klassen, die wartbar sind. Keine Browser oder Spider kümmern sich um den Wert Ihres Klassenattributs (mit dem ausdrücklichen Ausnahmefall von Microformats).
Ob es also semantisch ist oder nicht, spielt in keiner praktischen Hinsicht eine Rolle. Wenn Sie denken, dass „group“ für Sie wartbarer sein wird als „clearfix“, dann machen Sie es verdammt noch mal. Persönlich verwende ich eine Mischung aus dem, was am sinnvollsten ist. Manchmal sind wartbarere Klassen diejenigen, die einige ihrer präsentationalen Aspekte in meinem Stylesheet anzeigen, damit ich mich daran erinnere, was sie sind.
Als ich den Titel dieses Beitrags sah, dachte ich: „Paul wird etwas dazu zu sagen haben…“ :)
Ich denke, es gibt einen Unterschied zwischen (mangels besserer Beschreibung) „großen Websites“ und „kleinen Websites“. Je größer die Website, je mehr Inhalt, desto mehr profitiert sie (langfristig) davon, zu versuchen, mit Klassennamen so semantisch wie möglich zu sein.
Kann irgendjemand argumentieren, dass dieser Kerl in einer guten Position ist?
https://twitter.com/mpuckett/status/99207354771439617
Ich muss Paul Irish zustimmen.
Die Werte der Klassennamen sind nicht standardisiert, im Gegensatz zu Tag-Namen.
Zweitens beschreibt ein Klassenname-Wert nicht, er identifiziert, das haben Sie selbst gesagt, Chris.
Man kann nicht semantisch über einen ID-Wert sein. Es ist, als würde man versuchen zu sagen, dass 1 immer gleich 1 Apfel ist.
Während Chris etwas bedeuten mag, seine Ursprünge und so weiter, ist es sicherlich nicht semantisch, es ist nur ein ID-Name-Wert, um zufällig eine Person zu identifizieren ;) Und so ist Coyier, der Klassenname.
Daher ist die Argumentation, dass „p1“ semantischer ist als „bigBlue“, weil „p1“ eine versteckte Bedeutung „priority-1“ hat, kindisch.
Und noch kindischer ist es, einen Englisch-Sprachkurs zur HTML-Entdeckung zu erfinden, in dem Sie definieren, dass „priority-2“ und „plain-jane“ sich im semantischen Mechanismus unterscheiden.
Das sind sie wirklich nicht. Weder beschreibt Position noch Farbe. Und beide implizieren mehr oder weniger von etwas, ohne zu spezifisch darauf einzugehen. Also qualifizieren sich beide gleich.
Der Versuch, Semantik zu Werten hinzuzufügen, die wirklich in Anführungszeichen stehen sollten, die eine beliebige Zeichenkette bezeichnen, ist ein Spiel für Narren. Und jeder Hutmacher der Stadt wird eine künstlerische Rezension über die tatsächliche versteckte Bedeutung davon schreiben wollen. So etwas wie in der Poesie, nur schlimmer.
Ich werde argumentieren, dass „p1“ semantischer ist als „bigBlue“, bis ich blau vor Alter bin. Der Tag, an dem Sie dieses Element nicht mehr groß oder blau haben wollen, ist ein trauriger, trauriger Tag.
Es spielt vielleicht keine Rolle, da es Ihnen vielleicht egal ist, Suchmaschinen interessieren sich nicht, Leute, die den Quellcode betrachten, sind sowieso Idioten, usw. Es spielt eine subtilere Rolle. Es ist wie ein Lichtschalter, den Sie ausschalten müssen, um ihn einzuschalten. Es ist jedes Mal nervig, wenn man sich damit beschäftigen muss. Oder was wäre, wenn Sie sich bei jedem E-Mail-Lesen in Ihrem E-Mail-Client anmelden und abmelden müssten. Daran ist nichts falsch, es funktioniert perfekt.
Zwei gute: bigBlue und Idioten, die den Quellcode betrachten. LOL!
Nun, für den Fall, dass p1 tatsächlich die Farbe Lila, Schatten #1 bedeutet, muss ich wohl so lange argumentieren, bis ich Lila #1 ins Gesicht bekomme ;)
Abgesehen von Witzen, Sie vermuten. Sie vermuten, dass jeder Klassenname Wert auf Englisch sein wird und jeder Idiot, der den Quellcode betrachtet, Englisch verstehen wird.
Es ist alles ungültig, wenn Klassennamen auf Deutsch oder Rumänisch sind.
Selbst wenn idealerweise jeder sich im Englischen wohlfühlen würde, vermuten Sie wieder.
Sie vermuten, dass big Blue nur auf eine Weise interpretiert werden kann. bigBlue kann tatsächlich eine Metapher sein. Wie „priority-1“. Ein militärischer Code, eine technische Beschreibung, irgendetwas.
Zwei Dinge, nur um das klarzustellen.
Verstehen Sie mich nicht falsch, ich bin mehr als nur „Yay“ für die Verwendung von aussagekräftigen Werten für Klassennamen. Und ich meine nicht „green“, „left“ usw., sondern Werte wie „movie-review“ und so weiter.
Dennoch werde ich nicht aus meiner Haut fahren und eine Religion daraus machen. Ich bin pragmatisch, vor allem.
Eine einfache Suche und Ersetzung löst die Probleme von Klassenänderungen, wenn dieser nicht so schreckliche Tag kommt, und meine Inhalte und ihre Markups haben bereits viel zu sagen, was meinen sorgfältig gewählten semantischen Klassennamen etwas redundant macht.
Toller Artikel, Chris. Ich leite ein Team, das etwa 13 ziemlich große Websites pflegt. Wir versuchen, Dinge semantisch zu halten, aber wir rutschen definitiv ab. Glücklicherweise funktioniert Suchen+Ersetzen in diesen Fällen gut, da wir ziemlich einzigartige Klassennamen verwenden.
Aber wann ist es zu viel? Zum Beispiel in Ihrem Beispiel: „class=priority-2“
Was ist, wenn diese Blöcke bei der nächsten Neugestaltung zu einer anderen Priorität geändert werden müssen? „priority“ macht es etwas zu spezifisch, während „p2“ besser funktionieren könnte, obwohl selbst das (wie h1, h2 usw.) als unsemantisch bezeichnet werden könnte, oder?
Paul hat Recht. Wie erfrischend, vernünftige Worte zu diesem Thema zu hören!
„Semantische“ Klassen- oder ID-Namen bieten keinerlei Vorteile für die Benutzer. Sie betreffen nur Entwickler, und Entwickler sollten das wählen, was für die Wartung am besten geeignet ist.
Dies unterscheidet sich völlig von semantischen HTML-Tags. Semantische Tags helfen Benutzern (und Suchmaschinen).
Man kann sich wirklich verbiegen, um zu versuchen, seine Klassen „semantisch rein“ zu erzwingen. Es ist eine Manifestation von OCD; Code sollte niemals zur Religion werden!
Was dies besonders absurd macht, ist, dass die meisten HTML-Klassen nur dazu dienen, uns die Präsentation mit CSS anzuwenden. Diese Klassen sind keine wirklichen strukturellen Semantiken (die die semantische Struktur des Dokuments beschreiben). Stattdessen sind es, was Nicole Sullivan „visuelle Semantiken“ nennen würde: Sie beschreiben die Struktur der Präsentationsschicht.
Nicole's OOCSS-Ansatz geht nicht nur um Leistung; er dient auch der Verbesserung der Wartung. Sie können auch SASS verwenden, um ähnliche Wartungsvorteile zu erzielen, aber dann verlieren Sie die Leistungsvorteile von OOCSS.
Pragmatismus ist der beste Ansatz. Im Allgemeinen gibt es keinen Bedarf für Klassen wie „big-blue-italic-text-against-a-mauve-background“, die vom Schicksal abhängen. Ebenso gibt es keinen Bedarf, die Klassen eines Grid-Systems wie „col1“ oder sogar „leftCol“ neu zu schreiben.
Ich habe einen Artikel gefunden, der eine entzückende reductio ad absurdum gegen die Suche nach 100% „semantischer Reinheit“ bietet. Dieser Typ versuchte, OOCSS-Grid-Klassen („size1of3“ usw.) „semantischer“ zu machen, indem er Spalten Namen wie „rhythm“, „wedge“ und „beat“ zuwies.
http://revoltpuppy.com/txp/articles/5/making-oocss-more-semantic
Die verdrehte Logik, die er verwendete, um diese „semantischen“ Namen zu rechtfertigen, zeigt nur, wie kreativ Menschen sein können, wenn sie versuchen, einen runden Stift in ein quadratisches Loch zu zwingen. Gott segne ihn. ;)
Unsere Button-Klassen p1-p5 sind in diesem Kommentarthread schon ein paar Mal aufgetaucht, also dachte ich, ich kläre das auf. Diese Klassen sind eigentlich nur Farb-Modifikatoren für unsere Basisklasse „button“. Wir hätten auch „bigBlue“ verwenden können, wie IT Mitică vorgeschlagen hat, aber das wäre ein Albtraum gewesen, als wir letztes Jahr die App neu gestaltet haben und alle unsere Button-Farben geändert haben. Wir haben auch kürzlich eine Co-Branding-Funktion hinzugefügt, die es den Leuten ermöglicht, die Benutzeroberfläche anzupassen, bis hin zu den Farben dieser p1-p5-Buttons. Diese Modifikatoren werden bei jedem Button in der App verwendet, und die häufigste Priorität (p1) wird mehr als 200 Mal in unserem Quellcode referenziert. Da diese Klassen nicht an ein bestimmtes Adjektiv gebunden sind, können wir sie mit einer einzigen Zeile CSS ändern, ohne uns kopfüber in den Markup-Heuhaufen stürzen zu müssen.
Wie Paul oben sagte: „Die Priorität bei der Erstellung von Klassen ist, Klassen zu schreiben, die wartbar sind.“ Ich würde wiederverwendbar und erweiterbar hinzufügen. Versuchen Sie nicht, eine neue Sprache für ein Element zu erfinden, das Sie nur ein- oder zweimal verwenden werden. Wenn es sich um ein Markup-Muster handelt, das Sie wahrscheinlich wiederverwenden werden, erfordert ein semantisches Namenssystem, das nicht an eine visuelle Beschreibung gebunden ist, jetzt sehr wenig Aufwand und spart Ihnen später viel Haareraufen.
Ich schrieb meinen letzten Kommentar, während der vorherige eintraf. Ich wollte nur sagen, dass wir auch Nicole Sullivans OOCSS bei MailChimp verwenden und es für uns großartig funktioniert. Man könnte definitiv argumentieren, dass Klassennamen wie „size3of4“ an eine visuelle Beschreibung gebunden sind, aber wie der vorherige Kommentator sagte, ist der Versuch, ein Grid-System zu „semantisieren“, nur ein zu starker Versuch, einen runden Stift durch ein Loch zu zwängen. Es sei denn, Ihre Neugestaltung ist eine komplette Abrissarbeit, das Grid-System, das Sie verwenden, wird sich wahrscheinlich nicht ändern.
Jason, so unwahrscheinlich es auch ist, dieser Tag wird kommen, früher als später, an dem Sie das Grid-System fallen lassen müssen.
Das bedeutet, dass ich zwar zustimme, dass „p1“ wartbarer ist als „bigBlue“, aber „size3of4“ immer noch anfällig dafür ist, Ihnen in nicht allzu ferner Zukunft Kopfzerbrechen zu bereiten. Sagt mir :)
Und um ganz klar zu sein, „bigBlue“ ist einfach die Wahl eines Fünftklässlers.
Wenn Sie streng, buchstäblich, ein wahrscheinlich stilveränderndes, großes blaues Ding illustrieren, sollte es um jeden Preis als Klassenwert vermieden werden, unabhängig von der Sprache: „grosBleue“, „großBlau“ oder „mareAlbastru“.
Warum? Weil wir klüger sind, oder? ;)
„Jason, so unwahrscheinlich es auch ist, dieser Tag wird kommen, früher als später, an dem Sie das Grid-System fallen lassen müssen.“
…in welchem Fall ändern Sie Ihr HTML. Aber Ihre Website hat tausende von Seiten? Suchen und Ersetzen.
Jede große Neugestaltung erfordert ohnehin einige Markup-Änderungen. Sie werden niemals eine 100%ige Trennung zwischen Präsentation und Struktur oder sogar zwischen Präsentation und Inhalt erreichen.
Ein Beispiel wird immer zitiert, um den Mythos von CSS-only Neugestaltungen zu unterstützen: CSS Zengarden. Aber schauen Sie sich deren Markup an. Können Sie mir sagen, dass es „semantisch“ ist und dabei ernst bleiben?
Spielt es wirklich eine Rolle, welche Namen Sie Ihren Klassen und IDs geben?
Stellen Sie sich vor, Besucher Ihrer Website treffen sofort die Schaltfläche „Quelltext anzeigen“, um eine umfassende Umfrage darüber durchzuführen, wie „semantisch“ die von Ihnen im Code zugewiesenen Namen sind? Natürlich nicht, es ist ihnen scheißegal. Solange die Seiten funktionieren und gut aussehen, ist es ihnen egal, ob Sie die Namen der zwölf Apostel, der ersten Mannschaft von Man Utd oder der Angeklagten im Nürnberger Prozess verwendet haben.
Semantik, Schmemantik. Es ist diese Art von Kauderwelsch, die Webdesign einen schlechten Ruf verleiht und potenzielle Kunden davonlaufen lässt, während sie schreien.
Wenn die von Ihnen verwendeten Namen für Sie aussagekräftig sind, wen kümmert's?
Es sei denn, Sie glauben natürlich, dass die einzigen Leute, die Ihre Website nutzen, andere Webdesigner sind, die die Knochen darüber aufpicken wollen, wie semantisch Ihre ID- und Klassennamen sind.
Von Ihrer Website: http://cl.ly/916J
Bin ich derjenige, der Webdesign einen schlechten Ruf gibt?
Es geht nicht darum, den Quelltext anzuzeigen, sondern darum, die Arbeit am Code, den Sie schreiben, gut zu machen, damit Sie (und die Nachfolger) leichter an dieser Website arbeiten können.
Nun, ich denke, das beweist meinen Punkt.
Versuchen Sie ernsthaft zu sagen, dass ein Code-Schnipsel besser funktioniert, wenn Sie ihm die Klasse „summat-profound“ zuweisen, als wenn Sie ihm die Klasse „qwerty“ geben?
Natürlich wird es das nicht, sie werden beide exakt gleich funktionieren. Der Code kümmert sich nicht darum, der Browser kümmert sich nicht darum und wichtiger noch, weder die Besucher noch die Suchmaschinen.
Ich habe schon #asd und .zxc verwendet, funktioniert super.
Entschuldigen Sie, aber meine Ansicht ist, dass Funktionalität den Aufbau und die Wartung einer Website erleichtert. Vielleicht liegt das an meinem Hintergrund im Maschinenbau, aber wenn class=”left” oder class=”right” beschreibend und funktional ist, dann ist das alles, was zählt.
„Ich werde argumentieren, dass „p1“ semantischer ist als „bigBlue“, bis ich blau vor Alter bin. Der Tag, an dem Sie dieses Element nicht mehr groß oder blau haben wollen, ist ein trauriger, trauriger Tag.“
Wenn der Tag kommt, nennen Sie ihn „smallGreen“ oder „mediumsizedRed“. Nennen Sie ihn „arnold“, wenn Sie wollen. :)
Nein, der Code wird nicht besser funktionieren, aber das Arbeiten *an* diesem Code wird besser sein.
Wenn Sie zu 100 % damit einverstanden sind, Klassennamen wie „mediumsizedRed“ zu schreiben, die aber in CSS Stile anwenden, die die Schrift winzig und die Farbe hellgrau machen, ist das großartig. Natürlich wird es funktionieren. Aber: 1) Ich werde Sie niemals einstellen 2) Ich werde niemals mit Ihnen an einem Open-Source-Projekt arbeiten 3) Ich werde heimlich über Sie lachen, während ich Wheelies auf meinem Fixed-Gear-Bike mache.
@Chris, ich bin ziemlich sicher, dass du ihn gerade mit diesem Screenshot plattgemacht hast. Ich hoffe, ein CMS generiert all diese Inline-Styles, denn das wird ein Höllenaufwand zur Bereinigung für die Zukunft sein.
@NigelC Es wäre für Sie als Designer von großem Vorteil, Ihren Geist für diesen Artikel und andere dieser Art zu öffnen. Wenn Sie das täten, wette ich, Sie wären überrascht, wie schnell sich Ihre Meinung ändern würde. :)
Oh Nigel, Nigel, Nigel… wow.
Das war der beste Screenshot aller Zeiten.
Ich vermute, viele CSS-Stile auf Websites entwickeln sich im Laufe der Zeit und der ständigen Entwicklung – wie meine, und durch die Lernkurve des Entwicklers, während er lernt, wie man es richtig macht – wie ich. Zweifellos würden viele von uns es anders machen, wenn wir von vorne anfangen würden.
Oder vielleicht auch nicht.
Auch ich leide unter greenbody oder smallheadinggrey
Ich liebe diese Art von Inhalten einfach!
Vielleicht ist ein einfacherer Weg, semantisches CSS zu erklären, einfach: Benennen Sie Ihre Klassen oder IDs nicht im Zusammenhang mit einer CSS-Eigenschaft. Eine Eigenschaft könnte Farbe, Schriftfamilie, Float, Rand, Hintergrund usw. sein. Jens Meiert pflegt eine ausgezeichnete Liste von CSS-Eigenschaften auf seiner Website – http://meiert.com/en/indices/css-properties/
Eine andere Sichtweise ist, Ihre Klassen oder IDs nicht so zu benennen, dass sie das Element auf Ihrer Webseite visuell darstellen. Wie bereits von einigen Leuten erwähnt, könnten dies Wörter wie links, rechts, groß, klein, blau, grün sein.
Toller Artikel, Chris, ich liebe diese Art von Zeug :)
Ein paar HTML5-Punkte: Sie können <small> für *Inline*-Copyright-Texte verwenden, die wahrscheinlich kein
.copyrightbenötigen. Auch<aside>hat die richtigen Semantiken, um.entry-unrelatedfür Readability zu ersetzen.Ich bin für OOCSS und mag kurze, nicht-spezifizierende Klassennamen. Zum Beispiel gibt es in space.css von OOCSS diese Klassennamen wie „pan“ (steht für padding all none) oder „mlm“ (margin-left medium) usw. Ich liebe diese Klassen, um den Abstand zwischen meinen Elementen/Objekten anzupassen. Wenn Sie sich auch den HTML Ihres GMX ansehen, werden Sie viele kurze, codeähnliche Klassennamen ohne offensichtliche Bedeutung bemerken.
Yep.
Ich entdecke gerade diesen Beitrag. und das Lustige ist, dass ich heute Morgen einen Mockup erstellt habe und mir diese Überlegung gemacht habe
Mein Ziel war es, zwei Arten von Profilen zu unterscheiden: , gleicher Schriftzug und Aussehen, außer den Farben: Standard in Grün) und personalisiert in Rot).
Ist es semantischer, zwei Klassen zu erstellen, Standard und Perso mit ihren jeweiligen Farben, als grüne und rote Klassen zu erstellen…?
Wahl 1
.profile { // all the common stuff}
.standard {color:green}
bla bla
Wahl 2
.profile { // all the common stuff}
.green {color:green}
bla bla
Natürlich scheinen Standard und Perso die richtige Antwort zu sein…
weil das Wichtige nicht das Aussehen ist, sondern die Profilkategorie.
Das Hinzufügen einiger Farbklassen-Definitionen ist dasselbe wie die Verwendung von „FONT COLOR“-Tags.
Ist ID nicht semantischer als eine Klasse hier zu verwenden?
<div id=”footer”></div>
Sie brauchen keinen 100% semantischen Code, um eine Website zu betreiben, manchmal ist sogar Unsemantisches leichter zu verstehen. Grid-System ist ein Beispiel. Besser nicht-semantische Klassennamen in HTML als überladene und verwirrende CSS-Datei.
Analysieren Sie die Vor- und Nachteile bei jedem Projekt und identifizieren Sie, ob Semantischsein mehr Probleme verursachen wird, als es löst (einige Projekte haben eine kurze Lebensdauer oder werden nicht ohne Aktualisierung des Markups geändert)… Semantik ist überbewertet, seien Sie pragmatisch.
Interessant, einige Ihrer Ansichten über Semantik zu lesen. Ich behaupte, dass es immer noch gültige Gründe gibt, die (wo kein anderes Element angemessen ist) zu verwenden, meist wegen der Unreife der HTML5-Unterstützung und der Schwierigkeit, die semantischen Elemente browserübergreifend zu gestalten.
Die Klasse .hyphenate (die ich Ihnen neulich auf Twitter geschickt habe) ist tatsächlich ein jQuery-Selektor für das hyphenate.js-Plugin, und als solcher ist sie funktional semantisch in dem Sinne, dass sie verwendet wurde, um jedes Element auf der Seite anzusprechen, um die Silbentrennung zu erhalten.
Ich denke, es geht darum, mit seinen Namenskonventionen ‚vernünftig‘ zu sein, klar zu unterscheiden, was Stil ist, was ein Ziel für eine jQuery-Funktion ist und was eine Helper-Klasse ist.
Toller Artikel. Ich wünschte nur, Poser wie dieser würden Ihren Inhalt abreißen.
leonardowesleidiniz.wordpress.com/2011/08/04/what-makes-for-a-semantic-class-name/
…Ich kann nicht glauben, dass so viele Leute in den Kommentaren ‚left‘-Klassen verwendet haben. wow.
Nun, was würden Sie dann als Alternative vorschlagen? Ich höre ständig Leute, die die Klassen „left“ und „right“ bashen, aber niemand scheint eine Lösung zu haben.
Zum Beispiel, wie sonst soll WordPress ein Bild im Text mit float:left versehen, ohne die Klasse „alignleft“ hinzuzufügen?
Am interessantesten ist, dass viele CSS-Entwickler die völlig fehlplatzierte Klasse „clearfix“ verwenden, die ersetzt werden kann, und stattdessen overflow=”hidden” im Hauptinhalts-Div verwenden, um das Clearing der Ausrichtung zu steuern. Es ist ein einfacher Trick und eliminiert die hässliche unsemantische clearfix-Klasse.
Zur Vorbereitung auf HTML5 wird empfohlen, die divs als article, aside oder footer und alle anderen zu klassifizieren, um die Validierung einfach ändern zu können, wenn HTML5 vollständig einsatzbereit ist…
Ich habe meine Gedanken hier bereits gepostet, aber seitdem habe ich ein bisschen Code-Reviews gemacht und bin auf diesen absolut klassischen Fall gestoßen.
.centered450left
Ich wusste nicht, ob ich lachen oder weinen sollte!!!
Ich habe die Änderung abgelehnt und dem verantwortlichen Entwickler vorgeschlagen, den Selektor in .wtf umzubenennen
toller Artikel. Danke Chris.
Als Anfänger muss ich zugeben, dass ich nicht viel darüber nachgedacht habe.
Ich benutze diese
und wende diese an, wann immer diese benötigt werden, wie hier
Sind diese semantisch oder unsemantisch?
Ups. *
Vor ein paar Jahren arbeitete ich an der Migration des weltweiten Partnerportals von Hewlett Packard (heute „HP Smart Portal“) von der Legacy-BroadVision-Javascript zu einer neu geschriebenen Java-Lösung. Gleichzeitig erhielten wir einen sogenannten „HP Web Standards“-Styleguide, der für jede HP-Website weltweit verpflichtend war. Ich konnte einen direkten Link zu einem der – noch aktiv genutzten – Style Sheets finden
http://welcome.hp-ww.com/country/us/en/styles/hpweb_styles_strd.css
Während sie viele semantische Klassennamen definierten, brachten sie auch Dinge wie diese
a.colorFFFFFFbld {font-weight: bold; color: #FFFFFF;}
.large {font-size: medium;}
.color333333bg {background-color:#333333;}
.colorDCDCDCbg {background-color:#DCDCDC;}
.color666666bg {background-color:#666666;}
Ich schätze, wir haben Glück, dass wir die CSS-Definitionen sehen dürfen, denn wir hätten erhebliche Schwierigkeiten zu erraten, welche Auswirkung diese Klassen hätten, wenn sie einem Element in unserem Markup zugewiesen würden :)
Viele Grüße,
Uwe
Nachdem ich weitere Kommentare gelesen habe, bin ich immer noch nicht überzeugt. Wie ich oben sagte, und viele andere auch. Warum semantisch? Ich stimme zu, p1 ist auch Müll und genauso wie jeder Name, der keinen Sinn ergibt. Aber warum daran festhalten mit „semantisch“?
Warum ist es so wichtig, dass es semantisch ist? Nochmals (ich wiederhole mich ständig), wenn ein Name verständlich ist und Sinn ergibt, auch nachdem Sie entweder den Stil oder den Inhalt, auf den er sich bezieht, geändert haben; warum ist es dann wichtig, ob er semantisch ist oder nicht? Ich vermute, dass dies ein Überbleibsel aus der Zeit der Tabellen vs. CSS ist und jemand das Argument für Semantik bei CSS nur wegen der Wartbarkeit übergelagert hat. Aber Semantik und Wartbarkeit haben nichts gemeinsam, sind nicht miteinander verbunden und brauchen einander nicht, um zu existieren.
Ich würde wirklich gerne wissen, warum Sie denken, dass Semantik so wichtig ist, wenn "sinnvoll" so viel mehr Sinn ergibt. (Ich stimme zu, dass semantische Namen im Allgemeinen sinnvoller sind, aber sie schränken Sie auch ohne Grund ein, und es gibt eine Fülle von Namen da draußen, die perfekt nutzbar und wartbar sind, ohne semantisch zu sein).
mmm. Nichts hier ist für mich semantisch: Ich spreche Spanisch und <h1&rt; sollte <c1&rt; sein (c=cabezal=Überschrift auf Klartext)
Da der HTML-Quellcode sowieso schon ein unübersichtlicher Ort ist, besonders wenn er minimiert ist. Ich denke, es ist am besten, Ihr template.php und CSS verständlich zu halten. Ob das durch Semantik oder OO geschieht... ist nur ein Mittel zum Zweck.
Ich schätze, eine weitere Frage ist, wie gut semantische Suchtechniken sich verbessern werden – sie schreiten voran und es scheint mir wahrscheinlich, dass, da die Leute faul sind, dies wichtiger werden wird als das Markup sowieso???
Semantik lebt in den HTML-Tag-Namen.
Semantik lebt nicht in den Klassen oder gar IDs von CSS.
Sicher tut sie das. Ich würde sagen, dass es für den Begriff "Semantik" gleichermaßen relevant ist.
Ein praktisches, reales Beispiel für einen User-Agenten, der semantische Daten aus Klassennamen extrahiert, ist Googles Crawler, wenn er nach Microformats wie hCard und ähnlichem sucht. Manchmal ist der semantische Wert eines Klassennamens also nützlich für mehr als nur den Entwickler.
Okay, jetzt,
Wenn Sie wirklich so semantisch-semantisch sind, dann sollten wir die neuen HTML-Attributnamen "Semantik" zusammen mit "class" und "id" vorschlagen.
Töten Sie den semantischen Aspekt von Stylesheets (CSS) nicht, denn dafür sind sie da – um das Element mit "class" und "id" zu gestalten.
Verwenden Sie stattdessen dieses neue Attribut nur für semantische Zwecke.
Das bedeutet, wir werden ein weiteres Blatt namens Cascading Semantics Sheet (CSeS) für seinen ganz eigenen Zweck haben.
Hallo,
Ich denke, Sie machen einen guten Punkt... aber Sie haben nicht alles durchdacht... nicht jede Ansicht/Anzeige ist semantisch...
Natürlich sollte ein Artikel-Teaser als Teaser klassifiziert werden und nicht als textInItalics, und Sie erfüllen den Zweck: Die Neugestaltung solcher Inhalte in fett wäre eine Qual... aber betrachten Sie das hier
Sie haben einen Artikel mit vielen tangentialen Inhalten... Sie verwenden das aside-Element und gestalten es... alle aside-Elemente innerhalb eines Artikels sind gleich, mit einer Ausnahme: float; das erste wird nach links gefloatet, das zweite nach rechts, das dritte nach links... welche Semantik gibt es da? Es wäre tatsächlich kontraproduktiv, zu versuchen, dort eine Semantik zuzuweisen... Klassen wie floatLeft, floatRight sind viel besser, denn (wenn Sie semantische Klassen verwenden, wo angebracht) zeigt es, dass es nichts Besonderes, Semantisches gibt... diese Klassen sind nur für die Box-Ausrichtung...
Also ja.... semantische Klassen sind die beste Wahl für semantische Inhalte... aber es gibt keinen Grund, Semantik zu erzwingen, wenn keine vorhanden ist.
Ich verwende intensiv semantische Klassen, aber es gibt oft Klassen wie .clear, .alignLeft(right, center), .floatLeft(right) usw. in meinem CSS nur zu Anzeigezwecken.
Genau! Ich denke, in einigen Fällen gewinnen Pragmatik tatsächlich. Mein Verständnis von Klassen ist, dass, wenn es keinen Selektor dafür gibt, sie einfach ignoriert werden und niemand zu Schaden kommt. Lassen Sie also die .floatLeft-Deklaration für das mobile Stylesheet weg (oder überschreiben Sie sie, je nachdem, wie Sie Ihr CSS schreiben), und die "Bedeutung" des Dokuments wird sowieso nicht geändert.
Schließlich – und das mag schlecht sein, das hier zu sagen – interessieren sich User-Agents nicht für unsere gut benannten Klassen (Microformat-Parser nicht mitgerechnet), und es hilft sicherlich nicht der Barrierefreiheit auf die gleiche Weise wie semantische Elemente und ARIA-Rollen. Wofür sind sie also gut? Für uns Entwickler!
Am Ende des Tages werde ich semantisches CSS anwenden, um die Wartung zu erleichtern, und ich werde unsemantisches CSS aus genau demselben Grund anwenden.
Danke für diesen nützlichen Artikel. Mit freundlichen Grüßen.
Dies ist ein interessanter Artikel, obwohl er in den Kommentaren etwas in technischen Details versinkt. Geht es bei der Beschäftigung mit Semantik beim Codieren einer Webseite nicht darum, Stil von Bedeutung zu trennen?
Die Idee, dass wir eine Webseite codieren und sie auf verschiedenen Plattformen in verschiedenen Formaten angezeigt wird, bedeutet, dass ihr Code so viel Bedeutung wie möglich liefern sollte, während die Anzeige/das Gerät den Stil definiert.
Aus meiner Sicht ist die Angabe eines Überschriften-Tags mit der Klasse .article-title viel aussagekräftiger als .big-blue. Wie Chris sagt, ist es einfacher zu verstehen und zu warten – und in einem abstrakten Sinne trägt es zur Gesamtbedeutung des Dokuments bei.
.big-blue ist meiner Meinung nach der erste Schritt auf einer schiefen Ebene hinunter, und dann gibt es nichts anderes mehr, als wieder Tabellen zu verwenden...
Oh je, ich glaube, ich mache das schon so lange falsch... Ich habe immer eine Liste von Klassen mit gemeinsamen Eigenschaften wie
.fleft { float: left; }
.red{ color: red; }
.blue{ color: blue; }
.big{ font-size:120%; }
.clear{ clear:both; }
…….
Auf diese Weise lassen sich Farben/Layouts sehr einfach ändern. Aber ich schätze, ich sollte meine Methoden jetzt überdenken....
Ich bin ein Semantik-Nerd, ich liebe diesen Artikel. lol
Ich versuche normalerweise, alle meine Elemente nach ihrer Struktur zu benennen, nicht nach ihrem Verhalten oder "Stil".
Wie in OOP könnte man etwas tun wie
Objekt = Tier
Klasse = Reptil
Klasse = Säugetier
Klasse = Amphibie
In Bezug auf CSS würde ich definitiv in Betracht ziehen
Ich würde auch semantisch denken. Denken in Bezug auf Struktur und Priorität ist meiner Meinung nach entscheidend. Ich wende dieses Prinzip einfach auf mein gesamtes CSS an. Stile ändern sich ständig, daher vermeide ich es, zu spezifisch zu werden.
Was ich gelernt habe, ist, dass in der Codierung/Programmierung die wahre Kraft in Generika liegt. Dies ermöglicht es Ihnen, Ihre Arbeit einfach auf mehrere Projekte anzuwenden und produktiver zu sein. :)
Wow, aus irgendeinem Grund ist mein Kommentar total durcheinandergeraten. lol na ja
<i><small>Habe versucht, früher zu posten, aber es wurde nicht angezeigt, also tut mir leid, falls dies eine Duplikat ist.</small></i>
Toller Beitrag, Chris!
Ich muss zugeben, dass ich mich einiger dieser nicht-semantischen Klassennamen schuldig gemacht habe. Namen wie "left" und "right". Ich habe diese hauptsächlich in Spaltenlayouts verwendet, bin aber später zu Pseudo-Klassen wie :first-child, last-child und :nth-child übergegangen.
Seitdem ich den Artikel http://24ways.org/2008/making-modular-layout-systems gelesen habe, verwende ich ihn unermüdlich. Ich hatte immer eine innere Diskussion, wie und wann ich diese verwenden soll. Ich möchte ein flexibles CSS pflegen, und etwas, das eines Tages mein Nachfolger leicht verstehen wird.
Für Elemente, die nichts anderes als Farbe, Schriftgröße oder Schriftschnitt-Formatierung haben, verwende ich aus irgendeinem Grund (nicht für Überschriften oder spezielle Elemente) die Klassen .fontsize_1.2{}, oder color_#333{}. Aber Sie haben einige gute Punkte angesprochen und ich muss zugeben, ich sollte meine Arbeitsweise teilweise ändern. Ich sollte das besser machen, schätze ich :)
SCSS und Compass helfen dank der @extend-Funktion, Semantik im Haus zu halten. Es ermöglicht mir, wiederverwendbare CSS-Eigenschaften in einem Selektor zu haben, wie
Und dann kann ich es, wann immer ich es brauche, semantisch aufrufen
Was SCSS tatsächlich tut, ist, den erweiternden Selektor zum erweiterten Selektor hinzuzufügen. Das CSS wird mit beiden Selektoren ausgegeben
Natürlich gibt es kein Markup, das "the-clearfix-we-see-all-the-time" als Klasse verwendet. Deshalb habe ich einen Namen gewählt, der meiner Meinung nach nicht versehentlich auftauchen wird (ich beginne diese unsinnigen Selektoren normalerweise mit '.-class-name', da es gültig, aber nicht verwendet ist).
Diese Ansätze funktionieren ziemlich gut für Blueprint und andere Grids (siehe Compass Blueprint Support), Clearfixes (Compass bietet auch clearfix Mixins) und OO CSS. Semantik und DRY siegen.
Als jemand, der WordPress-Vorlagen für Personen mit keinerlei Programmierkenntnissen entwickelt hat, ist es tatsächlich von Vorteil, Klassen wie left, right und clear zu haben, allein zu dem Zweck, diese Klassen im Auswahlwerkzeug für Klassen zu haben, damit der Beitragsschreiber ein Bild oder ein anderes Element auswählen und es ohne Kenntnisse des Codes ausrichten kann.
Ich würde sogar argumentieren, dass es hier unmöglich ist, eine semantische Klasse zu haben. Wie würde sie heißen? Ihr einziger Zweck ist es, das Element zu floaten, und die gleiche Art von Element im selben Artikel kann je nach Layout des Artikels links oder rechts gefloatet werden. Ich kann nicht nach :first oder ähnlichem auswählen, da dies für das Artikel-Layout, das vom Designer des Artikels erstellt wurde, willkürlich ist. Sicher, wenn ich es wäre, würde ich zur HTML-Ansicht gehen und das Float zu einem style-Attribut hinzufügen, aber es ist etwas anderes, einen Nicht-Programmierer zu bitten, dasselbe zu tun.
Autor,
Tolle „Gruppierung von Wörtern“ + „Beispiele“ + „Benutzerkommentare“. Gut gemacht.
-user.
Entschuldigung – ich wollte nicht zu spezifisch sein =)
Sehr guter Artikel, ich mag besonders den p1 – p6 Trick, ich kann nicht glauben, dass ich nie daran gedacht habe. Außerdem lobe ich Sie dafür, dass Sie ein valides Gegenargument in Ihrem Beitrag angesprochen haben.
PS. Wie immer gute Arbeit beim Redesign, es ist ein Prachtstück.
Ah, ich habe heute ein reales Beispiel.
Ich habe ein Formular mit etwa 30 Labels darin. 26 davon sind 350 Pixel breit. Aber die restlichen 4 sind durchgehend breit.
Es gibt keine Möglichkeit, diese 4 von den anderen anhand einfacher CSS-Selektoren zu unterscheiden, alle Labels sind Geschwister. Daher ist die einzige Möglichkeit, sie zu verknüpfen, diesen 4 eine Klasse zu geben. Nun, wie soll man das nennen?
'fullwidth' fällt mir zuerst ein, aber das ist offensichtlich zu stil-spezifisch.
3 dieser Labels sind Checkboxen (während alle anderen keine sind), also könnte ich diese 'checkbox-width' nennen, aber das lässt immer noch das vierte übrig, und außerdem, wer sagt, dass ich nicht in Zukunft eine Checkbox haben kann, die 350 Pixel breit ist?
Der eigentliche Inhalt variiert von der Auswahl eines Geschlechts bis zur Annahme von AGB.
Ich denke, ich werde mich für 'form-alternate-width' entscheiden. Ich frage mich, ob ich eine Zahl hinzufügen sollte, falls ich in Zukunft eine weitere Breite hinzufügen muss?
Aber auch wenn der Name stilbezogen, unsemantisch ist und mich in gewisser Weise einschränkt. Er ist leicht verständlich (sowohl aus der HTML-Datei als auch aus der CSS-Datei) und somit wartbar.
Ich hätte auch label-alternate-width wählen können, habe mich aber dagegen entschieden, da dies mich auf Labels beschränkt und diese Breite auch bei einem [select] verwendet wird, sodass ich sie dort wiederverwenden kann.
@Evert: Bezüglich Ihres realen Formularproblems kann ich definitiv verstehen, was Sie sagen. Ich bin auf die gleichen Probleme gestoßen, und sie verschwinden nicht einfach, denn um ein benutzerfreundliches Formular zu gestalten, brauchen Sie genügend Haken, um es hübsch aussehen zu lassen. *Und* Sie möchten wiederverwendbares CSS, das Sie in fünf verschiedenen, nicht zusammenhängenden Formularen auf der Website verwenden können.
Ich kann mir nichts rein Semantisches vorstellen, außer einer Klassennamen für jeden verschiedenen Feldtyp (z. B. .label-firstname, .label-province usw.). Sie könnten dann jede Größe von Label in seine eigene Deklaration gruppieren, aber das könnte zu ziemlich großen und schrecklichen Selektoren führen. Die Verwendung von :nth-child(), +, >, und anderen Bits ist auch ein Verwaltungsalbtraum, denn was passiert, wenn sich die Anzahl der Formularfelder ändert (was sich bei meinen Formularen dynamisch basierend auf den Einstellungen des Kunden ändert).
Meine Empfehlung? Erstellen Sie einfach eine leicht wartbare, unsemantische Klasse für die alternative Label-Größe und seien Sie am Ende Ihres Lebens angenehm überrascht, wenn Sie wegen Ihrer Übertretung tatsächlich nicht in die Hölle kommen. Das habe ich gemacht :-)
Möchte sich noch jemand dazu äußern?
Was macht gute Semantik aus? Wäre <strong> nicht die bessere Wahl?
Nun, egal WAS passiert (außer der Umstellung auf HTML5), ich bleibe bei meiner Klassennomenklatur, die ihrer Funktion entspricht. Ich weiß, dass jemand Schwierigkeiten hätte, den von mir geschriebenen Code zu durchgehen, aber wenn ich in einem Team arbeiten würde, würde ich zweifellos die Klassennamen verwenden, auf die wir uns alle geeinigt haben, um Verwirrung zu vermeiden, die zweifellos auftreten würde.
Ach, Semantik. Wieder so eine Sache, auf die Möchtegern-Analytiker herabblicken, um uns Sterbliche zu beurteilen.
Glücklicherweise gehört Herr Coyier nicht zu „ihnen“. Ein weiterer hilfreicher Artikel, danke.
Ich schreibe beruflich Code und bin stets bestrebt, seine Lesbarkeit zu verbessern, und schätze diesen Artikel, da er etwas Klarheit in eine weitere dunkle Kunst der Entwicklung bringt.
Ich wünschte, es gäbe mehr wie Chris, die ihr Wissen zur Erziehung nutzen und nicht zum Missbrauch.
Wäre es nicht klug, semantischere Codepraktiken und Gewohnheiten zu übernehmen, denn ab HTML 6 und aufwärts werden diese im Markup weiter verbreitet sein?
Guter Artikel. Ich weiß, das ist ein bisschen pingelig, aber um auf Ihr erstes "gutes Beispiel" zurückzukommen: Wäre es nicht besser, <strong> anstelle von <b> zu verwenden, da <b> als präsentationales Tag gilt, während <strong> ein semantisches Tag ist?
Ich habe das absichtlich getan, um diese Diskussion anzustoßen. <code><b></b></code> ist nicht veraltet, man verwendet es nur, wenn man ein Wort fett macht, weil der Stil fett verlangt, nicht nur "um hervorzustechen" oder "zusätzliche Betonung". In diesem Satz habe ich nicht versucht, den Titel des Films zu betonen, er ist nur per Stil so vorgeschrieben (obwohl er wahrscheinlich kursiv sein sollte).
Ich bin neugierig, dass niemand die Tatsache erwähnt, dass die Verwendung einer Klasse oder ID in Ihrem CSS schneller rendert als die Verwendung eines Tags als Selektor.
Z.B. ist <code>.header {}</code> ein effizienterer Selektor als <code>header {}</code>.
Das spielt bei der Erstellung einer kleinen Website keine große Rolle, aber es ist definitiv eine gute Gewohnheit, sich anzueignen, für den Tag, an dem Sie Ihr CSS so stark optimieren müssen.