Auch wenn Sie sich selbst als CSS-Experten betrachten, ist die Wahrscheinlichkeit groß, dass Sie auf einem großen Projekt irgendwann mit einem verworrenen, labyrinthartigen Stylesheet zu tun hatten, das immer weiterwächst. Manche Stylesheets können sich wie ein chaotisch verwickeltes Netz von Vererbung anfühlen.

Die Kaskade ist unglaublich mächtig. Kleine Änderungen können große Auswirkungen haben, was es schwieriger macht, die unmittelbaren Folgen abzuschätzen. Das Refactoring, Ändern und Entfernen von CSS wird als riskant angesehen und mit Furcht angegangen, da es schwierig ist, alle Stellen zu kennen, an denen es verwendet wird.
Eine Sache, die bei neuen Tools oft schwer zu artikulieren ist, ist: wann genau fängt man an, danach zu greifen? Die Antwort ist selten (wenn überhaupt) sofort und in allen Situationen.
Eine dieser Situationen ist meiner begrenzten Erfahrung nach bei großen Teams mit großen Codebasen. Das Gefühl ist, dass das CSS viel zu groß werden kann und die Teammitglieder im Grunde Angst davor bekommen, und das CSS wird scherzhaft, aber zutreffend, "nur zum Anhängen".
Dann kommt ein Tool, das das Versprechen einlöst, viel weniger CSS zu liefern, und zwar so, dass (nach einer Lernkurve) niemand mehr Angst davor hat… Ich kann den Reiz verstehen.
Atomic CSS hält die Dinge einfach
Ich musste nicht mehr darüber nachdenken, wie ich mein CSS organisiere. Ich musste nicht darüber nachdenken, wie ich meine „Komponenten“ benenne, wo ich die Grenze zwischen einer Komponente und einer anderen ziehe, was wo leben sollte und, ganz entscheidend, wie ich Dinge umgestalte, wenn neue Anforderungen hinzukamen.
– Callum Jefferies, Erkenntnisse aus dem Ausprobieren von Tachyons CSS nach langer BEM-Nutzung
Atomic CSS bietet eine einfache, offensichtliche und unkomplizierte Methodik. Klassen sind unveränderlich – sie ändern sich nicht. Dies macht die Anwendung von CSS vorhersehbar und zuverlässig, da Klassen immer genau dasselbe tun werden. Der Umfang des Hinzufügens oder Entfernens einer Utility-Klasse in einer HTML-Datei ist eindeutig, was Ihnen die Gewissheit gibt, dass Sie nichts anderes kaputt machen. Dies kann die kognitive Belastung und den mentalen Overhead reduzieren.
Komponenten zu benennen ist bekanntermaßen schwierig. Einen Klassennamen zu finden, der sowohl aussagekräftig als auch vage genug ist, um wiederverwendbar zu sein, ist zeitaufwendig und mental anstrengend.
Es gibt nur zwei schwierige Dinge in der Informatik: Cache-Invalidierung und das Benennen von Dingen.
– Phil Karlton
Geeignete Abstraktionen zu finden ist schwierig. Das Benennen von Utility-Klassen hingegen ist völlig unkompliziert.
/* naming utility classes */
.relative {
position: relative;
}
.mt10 {
margin-top: 10px;
}
.pb10 {
padding-bottom: 10px;
}
Atomare Klassen sprechen für sich. Ihre Absicht und Wirkung sind sofort ersichtlich. Während das Füllen von HTML mit unzähligen Klassen unordentlich aussehen mag, ist HTML viel einfacher zu verstehen als eine undurchdringlich riesige und unverständliche Wand verworrener Stile.
In einem Team mit unterschiedlichen Fähigkeiten, möglicherweise mit Backend-Entwicklern mit begrenztem Interesse und Wissen über CSS, ist die Wahrscheinlichkeit geringer, dass jemand das Stylesheet durcheinanderbringt.

Umgang mit stilistischen Variationen
Utility-Klassen sind perfekt für den Umgang mit kleinen stilistischen Variationen. Während Designsysteme und Pattern Libraries heutzutage in aller Munde sind, erkennt dieser Ansatz, dass es kontinuierlich neue Anforderungen und Variationen geben wird. All die Reden über Komponentenwiederverwendbarkeit spiegeln sich oft nicht in den Design-Mocks wider, die einem zugespielt werden. Während visuelle und Marken-Konsistenz gut ist, macht die große Vielfalt an Kontexten auf einer großen Website einige Variationen unvermeidlich und gerechtfertigt.

Was, wenn wir möchten, dass eine Komponente nur auf eine einzige kleine Weise von einer anderen abweicht? Wenn Sie eine BEM-Benennungskonvention angenommen haben, könnten die Modifikatorklassen außer Kontrolle geraten – unzählige Modifikatoren, die oft nur eine einzige Sache tun. Nehmen wir Ränder als Beispiel. Die Ränder einer Komponente werden wahrscheinlich nicht universell konsistent bleiben. Der gewünschte Abstand hängt nicht nur von der Komponente ab, sondern auch von ihrer Position auf einer Seite und ihrer Beziehung zu den umgebenden Elementen. Meistens enthalten Designs ähnliche, aber nicht identische UI-Elemente, die mit traditionellem CSS mühsam zu handhaben sind.
Viele Leute mögen es nicht



Wie unterscheidet sich Atomic CSS von Inline-Styles?
Das ist die Frage, die von Kritikern des Atomic CSS immer gestellt wird. Inline-Styles gelten seit den Anfängen des Webs als schlechte Praxis und werden selten verwendet. Kritiker liegen nicht völlig falsch, Atomic CSS mit Inline-Styles gleichzusetzen, da beide unter demselben großen Problem leiden. Hier ist ein Beispiel: Was, wenn wir alles mit einer `black`-Klasse stattdessen marineblau haben wollen? Wir könnten das tun:
.black {
color: navy;
}
Das ist offensichtlich eine schreckliche Idee.
Texteditoren sind heutzutage ausgeklügelte Dinge. Es fühlt sich etwas gefährlich an, aber es wäre einfach genug, Suchen und Ersetzen zu verwenden, um alle Instanzen der `.black`-Klasse durch eine neue `.navy`-Klasse zu ersetzen. Das eigentliche Problem ist, wenn man nur bestimmte Instanzen von `.black` in `.navy` ändern möchte.
Bei traditionellen CSS-Ansätzen ist die Anpassung des Stylings einer Komponente so einfach wie das Aktualisieren eines einzelnen Werts in einer einzelnen Klasse in einer CSS-Datei. Mit Atomic CSS wird dies zu einer mühsamen Aufgabe, bei der man jede HTML-Datei durchsuchen muss, um jede Instanz der besagten Komponente zu aktualisieren. Egal wie fortschrittlich Code-Editoren werden, daran führt kein Weg vorbei. Selbst wenn Sie Ihr Markup in wiederverwendbare Vorlagen aufteilen, ist dies immer noch ein großer Nachteil. Vielleicht ist diese manuelle Arbeit die Einfachheit dieses Ansatzes wert. Das Aktualisieren von HTML-Dateien mit verschiedenen Klassen mag mühsam, aber nicht schwierig sein. (Obwohl es Zeiten gab, in denen ich vorübergehend stilistische Inkonsistenzen eingeführt habe, indem ich bestimmte Instanzen der relevanten Komponente beim manuellen Aktualisieren übersehen habe.) Wenn sich ein Design ändert, müssen Sie wahrscheinlich Klassen von überall in Ihrem HTML manuell bearbeiten.
Während Atomic CSS den großen Nachteil von Inline-Styles teilt, sind sie kein rückschrittlicher Schritt in die Vergangenheit. Utility-Klassen sind Inline-Styles in vielerlei Hinsicht überlegen.
Atomic CSS vs. Inline-Styles
Atomare Klassen ermöglichen Abstraktion, Inline-Styles nicht
Mit atomaren Klassen ist es möglich, Abstraktionen zu erstellen, die mit Inline-Styles unmöglich wären.
<p style="font-family: helvetica; color: rgb(20, 20, 20)">
Inline styles suck.
</p>
<p class="helvetica rgb202020">
Badly written CSS isn't very different.
</p>
<p class="sans-serif color-dark">
Utility classes allow for abstraction.
</p>
Die ersten beiden oben gezeigten Beispiele würden eine manuelle Suchen-und-Ersetzen-Aktion erfordern, um das Styling zu aktualisieren, falls sich das Design ändern sollte. Die Stile im dritten Beispiel können an einer einzigen Stelle innerhalb eines Stylesheets angepasst werden.
Werkzeuge
Sass, Less, PostCSS, Autoprefixer… Die CSS-Community hat viele nützliche Tools entwickelt, die für Inline-Styles nicht verfügbar waren.
Kürze
Anstatt ausführliche Inline-Styles zu schreiben, können atomare Klassen kurze Abkürzungen für Deklarationen sein. Das ist weniger Tipparbeit: `mt0` vs. `margin-top: 0`, `flex` vs. `display: flex`, usw.
Spezifität
Dies ist ein umstrittener Punkt. Wenn eine Klasse oder ein Inline-Style nur eine einzige Sache tut, ist die Wahrscheinlichkeit groß, dass man will, dass es diese Sache tut. Einige Leute haben sogar empfohlen, `!important` für alle Utility-Klassen zu verwenden, um sicherzustellen, dass sie alles andere überschreiben. Ähnlich sehen Befürworter von Inline-Styles ihre Unfähigkeit, überschrieben zu werden (durch nichts außer !important), als Verkaufsargument – es bedeutet, dass man sicher sein kann, dass der Stil angewendet wird. Eine Klasse allein ist jedoch spezifisch genug, um jeden Basisstil zu überschreiben. Die geringere Spezifität von atomaren Klassen im Vergleich zu Inline-Styles ist eine gute Sache. Sie ermöglicht mehr Vielseitigkeit. Wir sind es alle gewohnt, Klassen in JavaScript zu ändern, um Stile zu ändern. Inline-Styles erschweren dies.
Klassen in Stylesheets können Dinge tun, die Inline-Styles nicht können
Inline-Styles unterstützen keine Medienabfragen, Pseudo-Selektoren, @supports oder CSS-Animationen. Vielleicht möchten Sie einen einzigen Hover-Effekt auf verschiedene Elemente anwenden und nicht nur auf eine Komponente.
.circle {
border-radius: 50%;
}
.hover-radius0:hover {
border-radius: 0;
}
Einfache, wiederverwendbare Media-Query-Regeln können auch in eine Utility-Klasse umgewandelt werden. Es ist üblich, ein Klassennamen-Präfix für kleine, mittlere und große Bildschirmgrößen zu verwenden. Hier ist ein Beispiel für eine Flexbox-Klasse, die nur auf mittleren und großen Bildschirmgrößen angewendet wird:
@media (min-width: 600px) {
.md-flex {
display: flex;
}
}
Dies wäre mit einem Inline-Style nicht möglich.
Vielleicht möchten Sie ein wiederverwendbares Pseudo-Inhalts-Symbol oder -Label?
.with-icon::after {
content: 'some icon goes here!';
}
Wahlbeschränkung kann gut sein
Inline-Styles können alles sein. Diese Freiheit könnte leicht zu Designanarchie und Inkonsistenz führen. Durch die Vordefinition von Klassen für alles kann Atomic CSS ein gewisses Maß an stilistischer Konsistenz gewährleisten. Anstatt Farben und Werte aus unendlich vielen Optionen frei zu wählen, bieten Utility-Klassen eine kuratierte Auswahl vordefinierter Optionen. Entwickler wählen aus dieser begrenzten Menge von Einzweck-Utility-Klassen. Diese Einschränkung kann sowohl das Problem eines ständig wachsenden Stylesheets beseitigen als auch die visuelle Konsistenz aufrechterhalten.
Nehmen Sie den `box-shadow` als Beispiel. Ein Inline-Style bietet eine nahezu unbegrenzte Anzahl von Optionen für Offset, Streuung, Farbe, Deckkraft und Unschärferadius.
<div style="box-shadow: 2px 2px 2px rgba(10, 10, 250, .4)">stuff</div>
Mit einem atomaren Ansatz können CSS-Autoren den bevorzugten Stil definieren, der dann einfach angewendet wird, ohne die Möglichkeit stilistischer Inkonsistenzen.
<div class="box-shadow">stuff</div>
Atomic CSS ist kein Alles-oder-Nichts-Prinzip
Es besteht kein Zweifel, dass Utility-Klassen-Frameworks wie Tachyons an Popularität gewonnen haben. Allerdings schließen sich CSS-Ansätze nicht gegenseitig aus. Es gibt viele Fälle, in denen Utility-Klassen nicht die beste Option sind.
- Wenn Sie viele Stile für eine bestimmte Komponente innerhalb einer Medienabfrage ändern müssen.
- Wenn Sie mehrere Stile mit JavaScript ändern möchten, ist es einfacher, dies in einer einzigen Klasse zu abstrahieren.
Utility-Klassen können mit anderen Ansätzen koexistieren. Es ist wahrscheinlich eine gute Idee, Basisstile und vernünftige Standardwerte global zu definieren. Wenn Sie dieselbe lange Zeichenfolge von Utility-Klassen immer wieder duplizieren, besteht die Wahrscheinlichkeit, dass die Stile in eine einzige Klasse abstrahiert werden sollten. Sie können Komponentenklassen einbinden, aber nur dann, wenn Sie wissen, dass sie wiederverwendet werden.
Einen komponentenbasierten Ansatz für CSS zu verfolgen bedeutet, dass Sie Komponenten für Dinge erstellen, selbst wenn diese niemals wiederverwendet werden. Diese vorzeitige Abstraktion ist die Ursache für viel Aufblähung und Komplexität in Stylesheets.
Je kleiner die Einheit, desto wiederverwendbarer ist sie.
Betrachtet man die neueste Version von Bootstrap, so werden nun eine ganze Reihe von Utility-Klassen angeboten, während die traditionellen Komponenten weiterhin enthalten sind. Immer mehr beliebte Frameworks verfolgen diesen gemischten Ansatz.
Atomare Klassen sprechen für sich. Ihre Absicht und Wirkung sind sofort ersichtlich.Ich bin mir nicht sicher, ob ich dieser Behauptung zustimmen würde. Ich denke, Atomic CSS (wie die meisten Namenskonventionen) hat eine Lernkurve. Die von Atomic CSS verwendete Kurzschreibweise reduziert die Deklaration tendenziell auf so wenige Buchstaben wie möglich; wenn man mit der Namenskonvention nicht bereits vertraut ist, kann sie unentzifferbar sein.
Man betrachte Bootstrap 4 und seine Utility-Klassen für Abstände: `mt-4`, `px-2`, etc., etc.
Für eine Person, die mit Atomic CSS vertraut ist, sind diese klar und kohärent, weil sie bereits den Kontext hat, auf dem sie ihre Interpretation basieren kann. Das einzige, was nicht sofort klar ist, ist, welchen realen Wert '4' oder '2' übersetzen.
Für jemanden, der diesem Benennungsstil noch nicht wirklich ausgesetzt war, gibt es nichts sofort Lesbares. Ich könnte einem Anfänger verzeihen, wenn er diese komplett übersehen und angenommen hätte, sie seien von einer Backend-Anwendung für sekundäre Zwecke wie das gezielte Ansprechen von Elementen nach Klasse generiert worden.
Einverstanden. Wie würden Sie eine Klasse zum Anwenden von Box-Shadow nennen? Ich nehme an bs-... Aber wie nennen Sie dann die Klasse für border-style??
Diese Konventionssysteme sind letztendlich nur Konventionen, und irgendwann muss sich ein Team für sie entscheiden, und keine zwei Teams werden sich gleich entscheiden. Die Lernkurve zwischen diesem oder einem anderen System scheint nicht wirklich schwieriger oder einfacher zu sein.
Ich denke, Utility-Klassen müssen sehr generisch einsetzbar sein. Die Idee von .px-2 scheint eine Polsterung am x von 2 Pixeln oder etwas anderem völlig trivialen Stil zu implizieren.
Meiner Erfahrung nach werden Utility-Klassen am besten in zwei Schichten verwendet. Wenn sie Teil eines Frameworks sind, beeinflussen sie nur sehr generische Dinge wie Breiten, Positionen, Layouts. Und es gibt nur sehr wenige davon, was die Lernkurve begrenzt.
Wenn sie Teil eines Site-Styles sind, dann sind sie spezifisch für die Site, und daher ist die Lernkurve kurz, da sie sich auf die Bedürfnisse dieser aktuellen Site konzentrieren.
Der Versuch, sowohl allgemeine Framework-Styles als auch benutzerdefinierte Site-Theming in denselben CSS-Stapel zu kombinieren, ist meiner Meinung nach einer der extremen Nachteile von Frameworks wie Bootstrap und die größte zusätzliche Belastung für die Lernkurve.
Aber langfristig hat alles eine Lernkurve, und angeblich sollte es die Entwicklung nach Überwindung der Kurve schneller/reibungsloser machen. So können sich die Ergebnisse in jedem gewählten System unterscheiden.
@travis
In meinen eigenen Projekten verwende ich tendenziell längere CSS-Klassennamen, um diese Art von Mehrdeutigkeit zu vermeiden. Um Ihr `box-shadow`-Beispiel zu verwenden, würde ich wahrscheinlich eine solche Namenskonvention anwenden:
Und dieser erste Teil (`_ui-effect`) würde all meine Designverbesserungen beherbergen, die universell für die von mir erstellte Benutzeroberfläche waren. Für meine Zwecke erfüllt es alle Anforderungen: Es ist klar, was sein Anwendungsbereich ist (UI), was es tut (wendet einen Box-Schatten an) und kann mit anderen Klassen kombiniert werden, um jedes Element, auf das es angewendet wird, zu verbessern.
Okay, wer erinnert sich hier noch an die Tage von CSS1 und (Prä-X)HTML, als Tags eine Sache waren. In den letzten zehn Jahren wurde viel Arbeit geleistet, um die Trennung von Belangen und die DRYness von Web-Sprachen zu verbessern. Während ich die Vorzüge dieses Ansatzes erkennen kann, fühlt es sich an, als würde er all der geleisteten Arbeit zuwiderlaufen und den gesamten Sinn moderner Webstandards ignorieren.
Ich habe das Gefühl, dass die letzte Unterüberschrift wirklich der richtige Anwendungsfall für Atomic CSS ist – nämlich nicht als übergreifendes Framework, sondern eher als Werkzeug, das wir in unserem Werkzeugkasten behalten sollten, wenn wir auf einen dieser unvermeidlichen Grenzfälle stoßen, die unser CSS aufblähen.
Meiner Meinung nach sind Designmuster genau das, Muster, und sollten mit Bedacht und nach Bedarf des Projekts verwendet und ignoriert werden.
die Tage, als *font-Tags eine Sache waren.
Ich hätte diesen Kommentar vorher prüfen sollen, ich habe vergessen, dass ich hier keine spitzen Klammern verwenden kann
Ich erinnere mich an den Font-Tag!
Es fühlte sich an, als ob zwei Dinge gleichzeitig passierten. Zum einen bestand die Notwendigkeit von Utility-Klassen, um Dinge zu positionieren, die nicht in der ursprünglichen Designspezifikation für das, was erstellt wurde, enthalten waren. Das verstehe ich, zusammen mit der Erkenntnis, dass ein Muster manchmal flexibel sein kann, manchmal nicht, basierend auf seinem Inhalt.
Aber Designmuster vollständig aus diesen Klassen innerhalb des HTML zu erstellen... Das wirkt einfach ungeschickt und erschöpfend.
Ich habe den Ansatz dieses Jahr einmal in einem Projekt angewendet und mich dabei immer wieder darüber gestolpert, was ein pd10 war. War es Padding x&y, nur y, nur x, würde es jetzt ein separates für jedes geben? An diesem Punkt kam ich zu dem Schluss, dass dies ein wirklich verschwenderischer Ansatz war.
Bis ich sie dann als reines Design-Utility verwendete, um die Form eines einzigartigen Musters zu ändern. Das Problem war dann, dass ihre einzigartige Natur mich dazu brachte, zu hinterfragen, wo ich stattdessen IDs verwenden sollte.
Wenn jemand die Verwendung von Atomic oder Functional CSS nicht zustimmt, schauen Sie mal, und Sie sind sich wahrscheinlich nicht bewusst, dass es überall existiert und teilweise in Bootstrap enthalten ist. Kickstarter verwendet es auch.
Weniger Benennung verwenden, es sei denn, Sie müssen.
Nein, es ist es nicht wert.
Es mag jetzt ein Klischee sein, es den Millennials anzulasten, aber niemand bei klarem Verstand mit zwei Jahrzehnten Erfahrung im Frontend (als es noch Webmaster hieß) würde den Font-Tag als Utility-Klassen wiederbeleben und es einen Ansatz nennen. Warum sollten wir Designkonsistenz und Semantik opfern, um einer Praxis zu folgen, die immer schlecht war? Wir müssen nicht zu diesen schrecklichen Orten zurückkehren, von denen uns moderne Webstandards wegbegleitet haben. Es ist, als ob jemand die Rückkehr des dunklen Zeitalters herbeisehnt.
Ich gebe den Atomic CSS-Anhängern ~5 Jahre Zeit, um zu erkennen, welchen schrecklichen Fehler sie gemacht haben. Dann werden sie sich einen ausgefallenen Namen und eine Diashow für die Nutzung von Webstandards ausdenken, wie sie gedacht waren.
Semantik? Welche Semantik? http://cssmojo.com/opinions_of_leaders_considered_harmful/
Yahoo! verwendet diese Methode seit etwa 5 Jahren und soweit ich weiß, planen sie nicht, zu den alten Zeiten zurückzukehren, in denen sie sich auf über 100 KB CSS für das Styling ihrer Seiten verlassen mussten.
— ein ehemaliger Webmaster
Ich denke, das größte Problem bei solchen Artikeln ist, dass sie eine dramatische Veränderung in der CSS-Welt zu implizieren scheinen, obwohl sie in Wirklichkeit nur ein Phänomen beschreiben, das es schon seit Jahren gibt.
Ich habe „atomare“ Klassen, die einfach definierte Breiten setzen, inline-block positionieren und ein paar andere Dinge, und das war’s. Sie sind in App-Umgebungen sehr nützlich, und ich habe sie seit vielen Jahren. Aber ich werde nicht alle meine Stile darauf umstellen.
Auch verwende ich keine atomaren Stilklassen für tatsächliches visuelles Styling, ich denke, das ist der Punkt, an dem Ihre Bedenken tatsächlich liegen könnten, und erfahrene CSS-Entwickler werden sich nicht in eine Sackgasse malen, egal was die "Trends" sind.
Also, nimm alles mit Vorsicht. Diese Autoren müssen überlegen, wie sie Informationen teilen können, während sie sowohl ihre Tugenden verkünden als auch die Auswirkungen auf die Branche nicht übertreiben. Aber ich denke, Ihre Kommentare sind das Saure zu ihrem Süßen, es ist notwendig für eine ausgewogene Sichtweise.
„Utility-Klassen können mit anderen Ansätzen koexistieren.“
Das war mein Ansatz. Im Allgemeinen folge ich einem BEM-Benennungsschema, es wird jedoch immer eine kleine Sammlung von Utility-Klassen für einmalige Änderungen von Elementen geben, z. B. .mt-0 für margin-top: 0 !important;
Ich wollte nur ein paar Frameworks nennen, mit denen ich in letzter Zeit experimentiert habe, und sehen, welche Erfahrungen andere damit gemacht haben.
https://www.iotacss.com : SASS-basiertes OOCSS-Framework
Und
https://tailwindcss.com : PostCSS-basiertes Utility-Klassen-Framework
Ich bin immer mehr zu PostCSS für Projekte übergegangen, aber iotaCSS hat mich mit seinen Namespaced-Utility-Klassennamen und der responsiven Konfiguration total inspiriert. Benutzt es noch jemand?
Ich wollte auch sagen, dass ich im letzten Jahr oder so fast alle Projekte nach der https://sass-guidelin.es/#the-7-1-pattern Struktur und mit BEM begonnen habe. Dabei erstellt man diskrete Komponenten, hat aber auch einen Ordner für seitenpezifische Stile. Besonders wenn man an Ränder denkt, wie im obigen Beispiel, bin ich nicht überzeugt, dass seitenbezogene Stile keine A-OK-Lösung sind, um Komponenten in verschiedenen Kontexten leicht zu modifizieren.
Lasst die Kommentare kommen!
Ich bin froh, dass ich alleine arbeite. Ich kann Namenskonventionen verwenden, die mir gefallen, wie zum Beispiel Klassen Pluto oder Martha nennen.
Bitte tun Sie das nicht. Als jemand, der Code von einem anderen Entwickler übernommen hat, der das getan hat… bitte…
Sorry, aber nichts für mich, ich hasse Bootstrap und dieses Atomic-Zeug … schmutziger Code
Ich programmiere CSS weiterhin auf meine Art
Ich benutze https://tailwindcss.com/ seit kurzem und liebe es (mitentwickelt von demselben Adam Wathan, den Sie hier zitiert haben). Ich hasse CSS nicht mehr.
Ich denke, wenn Sie sich mit Bootstrap wohlfühlen, dann können Sie Atomic CSS schreiben. Wenn Sie aber möchten, dass die Klassen den Inhalt und nicht den Stil erklären, verwenden Sie Atomic CSS und Bootstrap nicht.
Das! Hier kommen Tools wie SASS, LESS, PostCSS ins Spiel.
Ich habe ursprünglich mit Tachyons angefangen, aber dann ein Mixin geschrieben, das dasselbe Muster ausgab. Jetzt sehe ich wiederholbare Muster beim Erstellen von Komponenten, die ich erweitere, um mehrere Eigenschaften zu ermöglichen. Dies erfordert Disziplin, nicht zu weit von der Methode abzuweichen, aber es bietet mir immer noch dieselbe Flexibilität und Geschwindigkeit beim Codieren, und schließlich bleibt die Ausgabegröße der CSS-Datei klein.
Sie können Konzepte übernehmen, aber behandeln Sie sie nicht als Regel, sagen wir wie Sprachfunktionen.
Noch etwas. !important in CSS, ob durch Inline-Styling oder sonstwie, selbst Inline-Styling allein… ist ein echter Rückschritt. Es stört mich, dass beide immer noch auftauchen.
Meine Vermutung ist, dass wenn Sie viel CSS schreiben, Sie dies bereits zumindest ein bisschen tun. Ich hatte nie einen Namen dafür, aber ich hatte immer eine kleine Handvoll Utility-Klassen, die ich verwendet habe.
Nur meine eigene Erfahrung spricht hier (nicht wissenschaftlich, lediglich anekdotisch): Ich verwende atomare CSS-Techniken (ich entwickle meine eigenen: https://github.com/internetErik/atomic-scss) und nutze sie seit etwa fünf Jahren. Ich verwende auch BEM-Namen für einige Semantik, habe aber hinter diesen Klassen kaum tatsächliches Styling, außer einigen Dingen an Haltepunkten. Die semantischen Namen sind nützlicher für die Lesbarkeit und das einfache Auswählen von Code.
In meiner persönlichen Erfahrung mit diesen Techniken hatte ich keine der traditionellen Fallstricke von CSS zu bewältigen. Zusätzlich probieren Teammitglieder, selbst wenn sie anfangs skeptisch waren, es aus und beginnen, es in ihren eigenen Projekten zu verwenden.
Eine wichtige Erfahrung, die ich mit Atomic gemacht habe, ist, dass es Leute gibt, die es sehr hassen und alles tun, um denjenigen, die Atomic verwenden, das Gefühl zu geben, dass sie unerfahren sind und dass in der Vergangenheit Lehren gezogen wurden und jetzt unerfahrene Entwickler dieselben Fehler wiederholen. Ich finde oft nicht, dass dies für neue Entwickler so sensibel ausgedrückt wird, wie es sein sollte, noch glaube ich, dass es wahr ist. Ich verwende Atomic CSS und erstelle Websites, seit es CSS noch nicht gab (bgcolor= usw.), und ich bin sicher, dass dies auch für viele andere der Fall ist, die Atomic CSS (oder Styled Components usw.) verwenden. Ich bin sicher, es gibt neue Entwickler, die Atomic CSS ausprobieren, und ich finde nicht, dass man sie herablassend behandeln muss.
Für ein Framework funktioniert es sicher, für eine Website ist es ein verdammtes Chaos.
Chris: „Für ein Framework, klar, es funktioniert, für eine Website ist es ein verdammtes Chaos“
Nicht für die TED-Website, die ihre eigenen Shed CSS (Atomic-basierten) Bibliotheken verwendet. Sie haben doch sicher von TED Talks gehört?
Sie haben einen alten Witz aufgebläht: Es gibt nur zwei schwierige Probleme in der Informatik: wann der Cache gelöscht werden soll, Dinge zu benennen und Elemente in einer dynamischen Liste zu zählen.
Ich benutze es seit 3 Jahren mit großer Leichtigkeit. basscss
Nein, nein, nein!
Das einzig Gute an diesem Artikel ist, dass er die Nachteile von Atomic CSS klar aufzeigt.
Eine Seite zu gestalten bedeutet, ein Design in Code zu übersetzen. Natürlich wenden Sie hier einen bestimmten Rand an, dort eine Polsterung, an einer anderen Stelle eine Schriftgröße usw. Aber wenn Sie dieses Design wirklich übersetzen wollen, können Sie einer "Box" eine Klasse geben und in dieser Klasse viele verschiedene Attribute anwenden: Ränder, Polsterungen, Rahmen, Schriftstile usw. Und das gibt Ihnen die Idee, dass Design nicht nur ein Rand ist, sondern eine Sammlung von Dingen.
Manche Leute sagen, BEM sei hässlich wegen langer Namen und Wiederholungen, aber wenn man nur atomare Klassen verwendet, ist es so viel schlimmer! Und wenn man die Sammlung atomarer Klassen liest, muss man jede einzelne Klasse lesen, um herauszufinden, was am Ende angewendet wird, und vielleicht die Website kennen, um zu erkennen, dass, oh, bei diesem speziellen Block wenden wir diesen Rand nicht an, den wir im Allgemeinen überall anwenden.
Mit BEM hätten Sie wahrscheinlich eine Klasse und einen Modifikator, der "besondere Situation" sagt, um diesen Unterschied zu handhaben.
Aber ich stimme zu, dass "Utility-Klassen" manchmal tatsächlich nützlich sind und definitiv "important!" verwenden können. Aber Sie sollten fast immer in der Lage sein, darauf zu verzichten. Zumindest sollten Sie es versuchen ;-)
Atomic CSS bedeutet nicht unbedingt, eine endliche Menge von Klassen/Regeln zu haben. Es gibt statische Lösungen (einige werden auf dieser Seite erwähnt), aber es gibt auch dynamische (d.h. ACSS [1]).
Statische kommen mit mehr Bytes als nötig; einige können auch genau die gleichen Stile über Projekte hinweg erzwingen (z. B. wenn ihre arbiträren Werte nicht geändert werden sollen).
Andererseits begrenzt eine dynamische Bibliothek die Stile, die Autoren verwenden können, nicht und ist in Bezug auf die Leistung kostenlos, da sie CSS-Regeln automatisch erstellt/löscht "wie Sie gehen".
Wie alles, was mit CSS zu tun hat, haben beide Ansätze ihre Vor- und Nachteile.
[1] https://acss.io
Ich bin gespannt, wie Atomic CSS-Autoren mit der Grid-Spezifikation umgehen werden. Ich kann mir nicht vorstellen, dass es funktioniert. Vielleicht mit Floats, und Flex-Faux-Float-Grids und col-xs-whatever, aber nicht mit Grid, nicht ohne dessen Fähigkeiten einzuschränken.
Also, ich bin ein großer Verfechter des richtigen Werkzeugs für die richtige Aufgabe. Und ich kann ehrlich gesagt nicht sagen, ob Fanatiker gute Ideen unsachgemäß zerstören, aber ich denke, die meisten CSS-Techniken überlappen sich und haben spezielle oder allgemeine Anwendungsfälle, aber selten (oder nie) beides.
Hier ist ein allgemeiner Ansatz für Grid, den ich liebe. Aber ich verwende ihn nicht überall, ich verwende ihn in sehr kontrollierten Umgebungen mit vielen Formularlayouts, die davon profitieren.
Utility-Klassen für Grid.
Anwendungsbeispiel in Codepen
Es ist hauptsächlich nützlich für den Formularbau. Ich habe es für viel mehr nicht verwendet. Aber ich kann nicht sagen, ob dies per Definition zu "Atomic CSS" passt, aber es scheint so zu sein. Und ich kann mir sicherlich keine einfachere Methode vorstellen, dies mit anderen Methoden zu tun.
Gibt es Ihrer Meinung nach einen Grund, warum dies nicht funktioniert?
Ich stelle mir vor, dass Grid anders gesehen werden kann als das, was bisher kam. Methoden, die den Nutzen beschreiben, wie z.B. col-2fr, sind zum Scheitern verurteilt, was passiert zum Beispiel, wenn eine Utility für eine Zeilen-/Spalten-Kombination in einer bestimmten Koordinate auf einem impliziten Gitter benötigt wird?
Grid hat ein riesiges Potenzial, wird aber durch die Vorstellungskraft seiner Benutzer begrenzt sein.
Ich habe ziemlich viel darüber geschrieben hier, falls es Sie interessiert.
Dann erstellen Sie etwas, das den Anforderungen entspricht. Das bedeutet aber nicht automatisch, dass alle Situationen, die schnell und einfach durch eine Utility gelöst werden, ungültig werden.
Sie scheinen in die gängige Falle zu tappen, dass jede Lösung universell und perfekt sein muss, und so entstehen heilige Kriege.
Verwenden Sie das richtige Werkzeug für die Aufgabe. Utility-Klassen wirken Wunder für die meisten gängigen Bedürfnisse, nicht für individuelle Bedürfnisse. Argumente gegen Utility-Klassen auf der Grundlage von Randanwendungsfällen versagen einen vernünftigen Ansatz zur Problemlösung.
Ich denke, das wird sich mit der Zeit lösen, wenn wir mehr mit Grid selbst experimentieren. Selbst wenn es nicht zu 100% gelöst wird, hindert das nicht daran, eine Kombination aus Atomic und einer anderen Methodologie zu verwenden, um Grids voll auszunutzen. Vielleicht wird Atomic das Ganze handhaben können, aber ich vermute, dass ich Atomic für gängige Fälle verwenden werde und auf meine BEM-Klassen zurückgreife, wenn die Dinge komplizierter werden (oder wenn die API für Atomic CSS zu schwierig zu erlernen wäre).
Meiner Meinung nach wird das Atomic CSS-Konzept sehr missverstanden. Als ich das erste Mal die Syntax sah, hatte ich Angst … mit der Zeit wurde mir klar, dass man sich die Namen der Utility-Klassen leicht merken kann … Die meisten Atomic-Hasser übersehen die Tatsache, dass man Atomic nicht zum Stylen jedes Elements mit 20 Klassen verwendet. Ich finde es sehr effektiv, generische Basisstile (Typografie, Farben usw.) zu definieren, die projektübergreifend verwendet werden … und in einigen speziellen Szenarien kann man UTILITY-Klassen anwenden … ehrlich gesagt den gewünschten Zustand mit maximal 2-3 Klassen erreichen … so wächst Ihr HTML nicht viel …
Dies ist eines dieser Tabs-vs-Spaces-Dinge. Ich persönlich mache eine Menge davon in meinen CSS-Rot-Text-, Blau-Text-Klassen usw. Genauso, wenn Sie 3-4 Schriftgrößen usw. haben, dann ist
<h2 class="red-txt alt-font-a ft-sz32">für mich eine einfachere Möglichkeit, das CSS zu sehen.Kunden mögen es auch, wenn sie das CSS im HTML-Editor des CMS sehen müssen, ist es quasi Englisch. Ich war mit einem Jungen zusammen im College, der bizarre Dinge in die Klassen schrieb, um sich selbst bei Verstand zu halten. Klassen wie Sideshow-Bob, ich glaube nicht, dass es eine richtige Antwort gibt, vorausgesetzt, Sie schreiben keinen schrecklichen Code.
Ich habe in der Vergangenheit versucht, so zu arbeiten, hauptsächlich mit Framework-Klassen von Bootstrap. Der Grund, warum ich es aufgegeben habe, war das Style-Leaking.
Das heißt, meine Klassen kollidierten miteinander. Eine würde versehentlich eine andere an einem Kindelement beeinflussen und das Layout durcheinanderbringen. Es kam so weit, dass ich das HTML durchlas, um herauszufinden, wie die Klassen sich kombinierten, um das falsche Layout zu erzeugen.
Meine bevorzugte Lösung heutzutage ist eng gefasstes CSS, basierend auf Jarewares CSS Architecture-Regeln.
Verwandte Artikel in letzter Zeit
Nachdem ich eine Website mit Atomic gebaut hatte, kam ich zu dem Schluss, dass sie schwer zu warten und verwirrend war. Jedes Mal, wenn man sich das HTML ansah, musste man ein Modell konstruieren, was jedes Element tun sollte. Mobile Overrides waren frustrierend und führten zu einer Aufblähung sowohl in CSS als auch in HTML.
Nach einigem Tüfteln kam ich zu dem Schluss, dass ein hybrider Ansatz möglich ist. Nehmen wir zum Beispiel das vertikale Zentrieren eines Elements in einem Div. Hier ist die klassische Methode dafür:
Der hybride Ansatz besteht darin, den Teil, der eine Funktion ausführt, zu abstrahieren und ihn in Ihrem HTML überall dort wiederzuverwenden, wo Sie ihn benötigen.
Die Frage ist, was atomar und was klassisch behandelt werden soll.
Ich möchte diesem Ansatz gegenüber offen sein, aber so ziemlich meine gesamte Arbeit bestand immer darin, Webanwendungen zu erstellen, deren Markup ich kontrolliere, deren Styling ich aber nicht kontrolliere. Mit anderen Worten, einzelne Codebasen, die von vielen Unternehmen genutzt werden, jedes mit seinen eigenen Themen (manchmal von Dritten entwickelt).
Es wäre ein absoluter Albtraum, für jeden Kunden eine separate HTML-Vorlagendatei zu haben, nur um die atomaren Klassen zu ändern. Oft gibt es in den Basistemplates viel Logik, Accessibility-Markup oder Metadaten; es wäre ein Wartungsalbtraum, in den Themenordner jedes Kunden zu gehen, um die Templates zu aktualisieren, wenn Sie jemals Ihren Ansatz oder das Datenmodell ändern müssten.
Es überrascht mich, dass niemand über Theming spricht. Für diesen Anwendungsfall scheint der Ansatz, den CSS Zen Garden populär gemacht hat, nicht nur der einzig haltbare, sondern der einzig mögliche Ansatz zu sein.
Vielen Dank, dass Sie dies zur Sprache bringen. Ich denke, die Art der Arbeit, die man leistet, sowie die Art des Unternehmens, in dem man arbeitet, sind wichtige Faktoren dafür, ob Atomic CSS gut passt.
Wenn ich das Aussehen einer Website nicht implementieren würde, wäre es im Grunde unmöglich, Atomic CSS zu verwenden. Das würde auch bedeuten, wenn ich etwas implementieren würde, das später neu thematisiert werden müsste.
Vor ein paar Jahren hörte ich, wie ein paar Leute darüber debattierten, ob wir uns auf wiederverwendbares CSS konzentrieren sollten, das auf eine Vielzahl von Markups angewendet werden kann und alles konsistent aussehen lässt, oder auf wiederverwendbares Markup, das leicht neu gestaltet werden kann. Ich habe nie verstanden, warum sie welchen Weg auch immer gewählt haben, weil niemand jemals die Realität der Projekte beschrieben hat, an denen sie arbeiteten. Ich vermute, sie waren alle Webentwickler-Bootcamp-Studenten, die noch nichts wirklich Komplexes gebaut hatten.
Wie lange wird es dauern, bis Atomic CSS als das verworfen wird, was es ist? Eine schreckliche, schreckliche Idee!
In ein paar Jahren wird jeder von diesem sehr schlechten Ansatz verfolgt werden.
Ich bin Designer und arbeite mit vielen Backend-Entwicklern zusammen. Diese armen Seelen müssen diese Art von CSS-Klassenwahnsinn in ihrem HTML-Markup nicht ertragen.
Sie müssen einfache CSS-Klassen hinzufügen, die ich dann über CSS ansprechen kann. Trennung von Belangen? Sprechen Sie das?
Das einzig Gute an Atomic CSS ist sein Name.
Obwohl der von Ihnen angesprochene Kontext zutreffen mag (oder auch nicht, je nachdem, was die armen Backend-Entwickler gerne tun), hat nicht jeder ein anderes Team (oder sogar eine andere Person), um CSS und HTML zu implementieren. Ich verwende Atomic CSS und schreibe sowohl das CSS als auch das HTML für Projekte, an denen ich arbeite. Vielleicht bevorzugen Sie bei der Arbeit an einem Projekt einen anderen Ansatz, aber ich sehe nicht, wie das bedeutet, dass Atomic CSS eine schreckliche Idee ist. Möchten Sie das genauer erklären?
Die Klasse "color-dark" bricht zusammen, sobald man ein Nachtschema parallel zum normalen implementieren möchte.
Ich denke, diese Technik wird die adaptiven Möglichkeiten, die CSS bietet, wie Medienabfragen, sehr leicht verpassen. (Aber auch die Eigenheiten von CSS – sie verschiebt das Design auf die Autoren der Komponenten / HTML, was gut oder schlecht sein kann.)
In bestimmten Fällen mag dies Vorteile haben, aber ich glaube nicht, dass es insgesamt zu den besten, anpassungsfähigsten oder wartungsfreundlichsten Designs führen wird.
Als Anwender von Atomic CSS interessiert mich diese Frage der Wartbarkeit. Das liegt daran, dass ich (wahrscheinlich vor etwa 5 Jahren) auf Atomic CSS umgestiegen bin, um Wartungsprobleme zu vermeiden, und ich habe es nie bereut.
Es scheint, dass es verschiedene Arten von Wartbarkeit (und Wartbarkeit verschiedener Teile eines Projekts) gibt.
Dann gibt es bestimmte Probleme wie: Ein Kunde hat eine Komponente, und jetzt möchte er diese Komponente an einer anderen Stelle verwenden – oh, aber in diesem Fall soll sie in diesen subtilen Weisen anders sein.
Ohne atomares CSS müssten Sie wahrscheinlich CSS und HTML aktualisieren, während Sie mit atomarem CSS nur HTML aktualisieren müssten. Bei beiden Ansätzen müssen Sie wählen, ob Sie bedingte Logik hinzufügen oder Code duplizieren (oder eine Kombination davon?). Bei der Duplizierung von CSS (die alle in der Kaskade landet) glaube ich, dass Sie ein höheres Fehlerrisiko einführen, auch macht die Kaskade das Schreiben bedingter Logik nicht sehr einfach (im Vergleich zur Verwendung einer HTML-Templating-Bibliothek oder eines JS-Frameworks wie React), und die Art und Weise, wie Sie die Bedingungen in CSS "lesen", ist für zukünftige Wartungsmitarbeiter nicht offensichtlich (Sie müssen im Grunde von Namenskonventionen abhängen).
Ich verwende immer einen gemischten Ansatz, je nach den Anforderungen des Projekts. Wenn eine Projektanforderung darin besteht, dass eine Website thematisierbar sein muss, muss auch der Umfang der Thematisierung bestimmt werden. Wenn das Theming so umfangreich sein muss wie CSS Garden (wo im Grunde alles außer dem Markup geändert werden kann), dann würde ich BEM (oder einen ähnlichen Ansatz) für Klassennamen vollständig verwenden. Wenn andererseits nur die Farben und Schriftarten (einschließlich Schriftgröße) geändert werden müssten, würde ich BEM zusammen mit Atomic CSS verwenden. In einem dritten Fall, wenn es für ein Projekt überhaupt kein Theming gibt (was bei mir häufig der Fall ist), würde ich BEM-Klassennamen aus semantischen Gründen erstellen, aber die Mehrheit der Arbeit würde wirklich über Atomic CSS erledigt werden.
Dies sind zwar die Ansätze, die ich wählen würde, aber ich denke, der letzte hätte wahrscheinlich die geringsten Wartungskosten für mein spezielles Team.
Was denken Sie? Welche Kontextunterschiede könnten einige der Antworten ändern, die Sie zu diesem Thema geben würden?
Warum nicht einfach @extend %placeholders in Ihrem SASS/SCSS verwenden?
Sie können atomar sein. Sie können wiederverwendet werden.
Das Beste daran: Sie verschmutzen Ihr HTML nicht, so dass Sie Ihre Stile und Struktur weiterhin getrennt halten können!
Jup. Getrennt halten. Atomic CSS in HTML über mehrere (>2) Breakpoints hinweg. Viel Glück damit. Absoluter Albtraum. Wie wäre es mit SASS mit includemedia? Sie können auch includemediaexport verwenden, um auf Ihre Breakpoints in JS zuzugreifen.
Ich frage mich, ob es nur zwei Stile in CSS gibt: die Arbeit, eine Grammatik und Sprache speziell für die (Stil-)Bedürfnisse Ihres Produkts zu entwerfen, gleichgültig, ob diese Art zu sprechen auf andere Produkte übertragen werden kann, oder zu versuchen, die Bedürfnisse von mehr als einer Person/einem Unternehmen zu lösen.
Atomic CSS funktioniert gut für den ersten Fall.
Vielleicht bin ich mir nicht sicher, was Sie mit dem ersten Fall meinen.
Für mich klingt Atomic CSS (und war es in der Praxis auch) wie ein Ansatz, den ich gleichgültig auf jedes Projekt anwenden kann, an dem ich arbeite (sei es eine Website oder eine App), das Atomic CSS verwendet (das CSS ist portabel).
Etwas wie BEM – als Designsystem – ist auch auf jedes Projekt anwendbar. Allerdings schreibe ich immer einen neuen Satz von BEM-Klassen, wenn ich zu einem neuen Projekt wechsle (das spezifische CSS ist nicht portabel).
In der Praxis finde ich, dass beide Ansätze gleichzeitig nützlich sind (einige portable CSS und einige nicht portable).
Wenn ich eine einmalige Anwendung erstelle, die nur für mein lokales Team verständlich sein muss, und wir bei unserem Branding, Produktdesign und visuellen Stil sorgfältig vorgegangen sind und eine klare Vorstellung von allen visuellen Begriffen haben, die präsentiert (und entsprechend gestylt) werden müssen, wie sie gruppiert sind und zueinander in Beziehung stehen, kann dies mit einer Grammatik geplant werden, die nur wir verstehen müssen, und Atomic CSS wird dort wahrscheinlich Sinn ergeben, da es von der Einfachheit und Schlankheit profitiert, die Redundanzen/Verallgemeinerungen einer "für jeden, der jemals etwas entwirft"-Stilstrategie zu vermeiden.
Atomic CSS bläht Ihr HTML auf, und es ist fast wie das Schreiben von Inline-Styles…
Ich beende meinen Fall.
Der Ansatz von Web-Komponenten ist viel lesbarer – auch wenn Sie keine Web-Komponenten verwenden. Benutzerdefinierte Tags (ohne Upgrade auf benutzerdefinierte Elemente) werden vom Browser angezeigt und werden sogar von IE8 unterstützt.
Beispiel
css
Ein weiterer Ansatz ist die Verwendung von [role=”side-menu”].
Auf diese Weise machen verkettete Rollen Ihr CSS sowohl lesbar als auch Ihr HTML für automatisierte Tests bereit, selbst wenn Sie Dinge verschieben.
Ich habe meine ersten Schritte in den Tagen des aufgeblähten Tag-Suppe-HTML gemacht. Ich war sehr widerstandsfähig gegenüber Sullivans Vorschlägen für OOCSS, da die Unordnung wieder in mein Markup eingeführt wurde. Später erkannte ich, dass Markup nicht ewig makellos bleibt. Redesigns erfordern oft, dass man das Markup ändert und anpasst, so dass ich mich der Idee hingab, dass zahlreiche Klassen zum Anwenden von Stilen keine so schlechte Sache waren.
Jetzt sehe ich, was einige unserer React-Entwickler nur tun, um eine Box mit Tachyons zu erstellen, und ich kann nicht anders, als erneut zu protestieren. Wie ist es besser, eine Box mit 16 Klassennamen zu gestalten, die Dinge wie Ränder, Abstände, Dimensionen, Positionierung, Rahmen, Rahmenradius, Box-Schatten usw. festlegen, als einen Klassennamen zu verwenden, der dieselben Stile festlegt?
Vielleicht treiben unsere Entwickler die Dinge auf die Spitze, aber ich sehe in nicht allzu ferner Zukunft viel Leid voraus, wenn ein neues Redesign kommt und diese Hunderte von Komponenten geändert werden müssen, um dem neuen Design gerecht zu werden.
Ich meinte zu sagen, dass Markup nicht ewig makellos bleibt.
Es ist irgendwie lustig, ich sehe das Argument für Atomic CSS, weil „Ich habe bemerkt, dass ich ‚margin‘ tonnenweise in meinem CSS geschrieben habe, also macht es einfach Sinn, es zu einer Klasse zu machen!“ – und dann enden sie mit der gleichen Anzahl von ‚m-0‘-Klassen in ihrem HTML.
Ich liebe es, die Gedanken und Meinungen aller zu Atomic CSS zu lesen, wann man es verwenden oder wann nicht, etc., und ich bin mir selbst nicht sicher, ob ich es in einem Projekt von Anfang bis Ende vollständig verwenden könnte, ich werde es ausprobieren müssen und sehen, wie es läuft. Ich sehe Vorteile beim schnellen Bearbeiten eines Elements, aber dann könnten globale Änderungen ein Albtraum sein, es sei denn, man hat es komponentenbasiert eingerichtet, was am sinnvollsten wäre.
Ich möchte mehr Artikel und Diskussionen darüber, von Leuten, die es im Yahoo-Team verwenden, und warum es für eine so große Website und ein so großes Team gemacht wurde.
Und genau hier denke ich, dass Atomic Style-Klassen unsachgemäß verwendet werden. Ich glaube nicht, dass sie in dieser Art und Weise einen Wert für die Gestaltung von Inhalten haben.
Ich denke, atomare Klassen sind großartig für Utilities, nicht für Design. Dies würde die Probleme massiver Stiländerungen lösen, die zufällige Teile der Website betreffen. Aber stellen Sie sich eine atomare Klasse vor, um einfache Spalten, einen Opacity-Hover-Effekt, Icon-Systeme usw. zu erstellen …
Ich sehe dort keinen Schmerz bei TED und Yahoo, wo sie es seit Jahren verwenden.
TED (https://www.ted.com) hat seine eigenen Shed CSS erstellt und es sieht in ihrem Design großartig aus.
James, weisen Sie wirklich auf TEDs Shed CSS (https://pa.tedcdn.com/stylesheets/shed.css) hin, mit über 7.750
!important-Anweisungen in ihrem kolossalen, unlesbaren Code... als Beispiel dafür, wie man CSS macht?Für Leute, die ihr CSS lernen oder verbessern wollen und lernen wollen, wie man die Wartbarkeit optimiert, sind dies überhaupt keine guten Beispiele. Ich weiß nicht, wie Atomic CSS sich als anfängerfreundlich bezeichnen kann, denn ich würde dieses horrenden Ergebnis nicht in meinen Schulungsmaterialien verwenden.
Wenn HTML Klassennamen hat, die im Wesentlichen Abkürzungen für Inline-Styles sind, dann ist das falsch, und es ist mir egal, wie populär es wird.
Atomic CSS nennt sich auch schlank, weil es nur die Styles enthält, die tatsächlich im Projekt verwendet werden. Ich kann nicht
class="js-stream-ad-noview js-stream-ad Wow(bw) Pos(r) Mx(a) Mt(-1px) Bxz(bb) Bgc(#fff)"schreiben und denken 'ja, jetzt komme ich irgendwohin, das ist so viel schlanker!'.Wenn man sich die 'erfolgreichen' Implementierungen in der Praxis ansieht. Es ist nicht schlank, es ist riesig, und so ist auch das HTML, das es verwendet. Zu sagen, Atomic CSS habe 'keine Aufblähung', ist eine glatte Lüge! Ich habe in meinen 15 Jahren Vollzeit-Webentwicklung noch nie so lächerlich aufgeblähtes HTML oder CSS gesehen.
Eine weitere Sache, die mir Sorgen bereitet, ist all diese Promotion von Architekturen und Frameworks, basierend auf ihrer Popularität...
Ich habe Anfang dieses Jahres viel Personal rekrutiert, für mein eigenes Entwicklungszentrum und auch für andere. Wir suchten nach hochqualifizierten Frontend-Entwicklern, die in der Lage waren, jedes Projekt in einem multinationalen Beratungsunternehmen unabhängig von Framework oder Architektur zu unterstützen. Daher wurden bei dieser Rekrutierung Kernkompetenzen in HTML, CSS und JavaScript sehr gesucht, die fließende Beherrschung aller drei war unerlässlich.
Frontend-Entwickler mit einer Präferenz für CSS-Architekturen schnitten im Vorstellungsgespräch furchtbar ab (noch schlimmer, eine Präferenz für Anwendungs-Frameworks wie Angular oder React), sie hatten unzureichendes Wissen selbst in den Grundlagen und es fehlte ihnen daher die Vielseitigkeit, die wir brauchten, um sie an unseren Kundenstandorten einsetzen zu können.
Man sollte meinen, Erfahrung mit einem 'populären' Framework, einer Bibliothek oder Architektur würde sich gut im Lebenslauf machen, aber nach ein paar Monaten stellten wir das Gegenteil fest. Für solche Kandidaten konnten wir die Wissenslücken vorhersagen und uns im technischen Interview Zeit sparen, indem wir diese Fragen zuerst stellten.
Was ist das Wichtigste beim Erstellen von Webseiten? Das HTML.
Das HTML wird Ihre Website machen oder brechen. Halten Sie es einfach, verwenden Sie die für die Aufgabe vorgesehenen geeigneten Elemente. Gratulieren Sie sich selbst dazu, die meisten Barrierefreiheitsprobleme vermieden zu haben.
Funktioniert Ihre Website noch ohne JavaScript? Wie sieht sie ohne CSS aus? Wenn eine dieser Erfahrungen unmöglich ist, dann haben Sie Ihre Website so gestaltet, dass sie der falschen Person gefällt: sich selbst.
Zurück zu HTML, dem Wichtigsten. Validieren Sie es überhaupt? Ist die Validierung Teil Ihres Entwicklungszyklus? Warum nicht? Der W3C-Validator kann als ausführbares JAR heruntergeladen werden, es ist einfacher als je zuvor.
Nehmen wir an, Sie möchten zuverlässig gültiges HTML erzeugen. Wie können Sie auch in großen Mengen so zuverlässig gültiges HTML generieren? Nun, Sie sollten es auf keinen Fall von Hand codieren. Ich tue es nicht.
Im Moment verwende ich Markdown für die meisten Website-Inhalte, und für kompliziertere Komponenten, wie Formulare, habe ich Komponenten, die das HTML prozedural und konsistent erzeugen. Der gesamte Entwicklungsprozess ist absichtlich so eingeschränkt, dass er einheitliches HTML erzeugt, ich habe bewusst minimale Kontrolle.
Die Stärke von CSS liegt darin, dass Sie Stile konsistent auf Ihre Webseiten anwenden können, Sie können mehrere visuelle Designs haben, ohne eine einzige Änderung am HTML vornehmen zu müssen. Redesigns und Rebranding sind trivial. Daher hat Atomic CSS keinen Platz (und BEM auch nicht, oder jede andere Form von Classitis).
CSS hat große Macht, doch so viele nutzen es mit fröhlicher Verantwortungslosigkeit.
Atomic CSS ist nicht einfach. Es macht gut gestaltetes HTML unmöglich. Halten Sie es einfach.
Können Sie mir einen einfacheren Weg zeigen, ein zweiseitiges Layout zu erstellen als diesen?
Ich könnte dann dieselbe Klasse überall dort verwenden, wo ich irgendetwas zweispaltig haben möchte. Wie ist das nicht einfach? Und macht es das HTML, auf das es angewendet wird, unmöglich?
Es scheint wirklich, dass Yahoo und andere Leute mit ihrer Verwendung von Atomic Style Klassen völlig übertreiben, und es ist offensichtlich, dass dies die Dinge verkomplizieren würde.
Aber wenn es "einfach" verwendet wird, wie ist es dann nicht einfach?
Sie sollten Klassennamen wie `grid` vermeiden. Sie legen visuelle Designentscheidungen in Ihr HTML, wo sie nicht hingehören.
Was, wenn Sie morgen kein Raster mehr wollen? Was, wenn es nur ein Raster ist, wenn es auf einem maximierten Desktop oder im Querformat ist? Es ist ein schlechter Klassenname.
Das Klassenattribut dient zur Klassifizierung von HTML-Elementen durch den Autor, wenn die Semantik der Elemente oder Attribute allein nicht ausreicht. https://css-tricks.de/semantic-class-names/
Ich reduziere die Anzahl der neuen Klassennamen, die ich verwende, insbesondere da neue HTML5-Elemente und ARIA-Rollen eine universellere Semantik bieten.
Für ein *Seiten*-Layout. Mein HTML-Design sähe etwa so aus
Wenn ich wollte, dass diese Seite zwei Spalten hat, wäre das CSS identisch, aber ohne den Klassenselektor
Ich versuche zu überlegen, wo ich definitiv wüsste, dass ich andere Bereiche einer Website zweispaltig haben wollte. Vielleicht Definitionslisten, dann wollte ich alle Definitionslisten zweispaltig haben, vorausgesetzt, Konsistenz ist wahrscheinlich wünschenswert. Hmm.
Es ist wahrscheinlicher, dass ich eine wiederverwendbare Methode zur Anzeige schicker Listen habe, bei der jedes Element einen Rahmen mit einem Schlagschatten oder etwas Modischem hat, und ich hätte gerne ähnliche Stile für Listen von Produkten, Benutzern, Terminen, was auch immer. Ich würde normalerweise so etwas tun
Die wiederverwendbare Listenformatierung würde mit dem Selektor
.listingangewendet, und alle spezifischen Stile für Produktlisten würden mit dem Selektor.productsangewendet.Sicher, `class="grid"` sieht verlockend aus für die Wiederverwendung, aber es ist eigentlich ein Anti-Pattern, weil Sie das aktuell gewünschte visuelle Design in Ihr HTML einbetten. Das wäre wirklich schlecht, denn es gibt tendenziell kein permanentes oder endgültiges visuelles Design.
Ich war an einigen größeren Rebranding-Projekten für Unternehmen beteiligt, die den Eigentümer wechselten, mit anderen Unternehmen fusionierten oder einfach alte Systeme auf ihr neues, modernes Erscheinungsbild migrierten. Diese Kunden benötigten umfassende Änderungen des Erscheinungsbilds ihrer Websites und Webanwendungen, mit minimalem Risiko, die tatsächliche Funktionalität zu beeinträchtigen.
Die Systeme mit dem semantischsten Markup waren am einfachsten. Ich erinnere mich an ein bestimmtes Projekt, bei dem das HTML mit dem visuellen Design gekoppelt war. Wir hielten es für unmöglich, das Redesign ohne eine Überarbeitung der eigentlichen Anwendung zu erreichen, mit einem unannehmbaren Risiko und Kosten.
Angenommen, einige der Situationen, in denen Sie
class="grid"verwendet haben, müssen keine Raster mehr sein? Wie wollen Sie alle Instanzen vonclass="grid"identifizieren, die geändert werden sollen, und diejenigen, die unberührt bleiben sollen, wenn das HTML nicht semantisch geschrieben wurde?Sie könnten Glück haben und nur 20 Instanzen von
class="grid"in Ihrer gesamten Codebasis haben. Das ist wahrscheinlich eine überschaubare Menge an Analyse. Aber was, wenn es 200, 2.000 oder 20.000 sind?Es ist nie einfach, Ihr visuelles Design in Ihr HTML einzubetten.
Das gefällt mir. Wie können Sie das erreichen?
Vanderson, Ihr spezielles Grid-Beispiel besteht nur aus 5 Zeilen Code. Ich würde lieber mehrere Selektoren an nur einer Stelle im CSS verwenden oder sogar dieselben Zeilen an mehreren Stellen (über Mixins) duplizieren, anstatt .grid an mehreren Stellen im HTML zu verwenden. Aber das ist nur meine Präferenz, basierend auf den über 70 Projekten, an denen ich in den letzten zwölf Jahren gearbeitet habe, weil die meisten dieser Projekte *schnell* erledigt werden mussten und die schnellste Lösung für uns darin bestand, bestehendes HTML wiederzuverwenden und es einfach neu zu gestalten.
Ich sage nicht, dass meine Arbeitsweise besser ist als jede andere.
Das ist das Problem mit all diesen Artikeln. Jemand hatte eine sehr schwierige Aufgabe und verwendete eine Technik, die für diesen Fall gut funktionierte, und verkündet dann, dass jeder alles auf seine Weise bei jedem Projekt machen sollte. Ignoriert die Tatsache, dass die Realität jedes Einzelnen anders ist. Was für Yahoo am besten ist, ist vielleicht nicht das, was für Facebook am besten ist. Was für Google am besten ist, ist vielleicht nicht das, was für Twitter am besten ist. Was für Twitter.com am besten ist (verwendet kein Bootstrap), ist vielleicht nicht das, was für Twitters interne Unternehmensanwendungen am besten ist (verwendet Bootstrap).
Was ich mir von solchen Artikeln wünschen würde, ist zu sagen: "Wenn Ihre Situation so und so ist, Junge, da habe ich einen tollen Vorschlag für Sie..."
Hallo Rob,
Nun, es ist alles individuell geschrieben, es könnte in PHP, Java+Spring+JSP, Scala+Play+Twirl, Node.js+Express+Mustache sein, was auch immer!
Als einfaches Beispiel, um ein Formular zu einer Seite hinzuzufügen, muss ich nur
Was in etwa so eingeschränkt ist
Label: [Feldtyp](Validierungsregeln)
[Text des Absende-Buttons]
Meiner Meinung nach sollten Sie beim Erstellen eines Formulars für Ihre Webseite nur eine einfache, minimale Spezifikation dieses Formulars schreiben. Wie diese Spezifikation in HTML umgewandelt wird, ist ein Entwicklungsproblem, da es automatisch und nicht manuell erfolgen sollte.
Es gibt wirklich keine Möglichkeit, dutzende benutzerdefinierte Klassen in das daraus generierte HTML einzuführen. Aber so mag ich die Dinge, jedes Formular innerhalb einer Website hat absichtlich ein konsistentes Layout und einen konsistenten Stil, da wir Konsistenz für gut halten, und unsere Benutzer auch.
Wenn es einen guten Grund gibt, ein Formular auf der Website zu haben, das anders aussieht als die anderen, dann wäre das Element, das das Formular enthält, eine gute Sache, um in den CSS-Regeln die Unterscheidung zu treffen. Zum Beispiel
Also habe ich das Problem mit einem Nachfahren-Selektor gelöst, zum Beispiel, aber ich denke, das ist ganz in Ordnung, weil ich CSS benutze! – Im Gegensatz zu CSS-„Architekturen“ (oder wie ich sie gerne nenne, CSS-Vermeidungsschemata).
Ich stimme vollkommen zu, dass man kein "visuelles Design" in sein HTML einfügen sollte. Es ist ein Klassenname, keine Inline-Styles. Sie argumentieren hier gegen Inline-Styles. (z.B. React)
Ich wiederhole alte, alte Weisheit: Verwenden Sie das richtige Werkzeug für die Aufgabe. Nur weil Sie keinen guten Verwendungszweck dafür sehen, heißt das nicht, dass es keinen gibt.
Ich mache das schon seit vielen Jahren, und ich habe mehrfach erlebt, wie die einst in Stein gemeißelte Regel "mach das niemals" später aufgehoben wurde. Deshalb habe ich aufgehört, auf solche Dogmen zu hören, und verwende jetzt das richtige Werkzeug für die Aufgabe.
Wann haben Sie das letzte Mal gesehen, dass ein Menü in einer Windows- oder MacOS-App sein Layout von Dropdown-Menüs komplett ändern musste? Sehen Sie, es gibt einen Platz für eine Klasse namens "menu", weil es einfach universelle Dinge gibt, die von diesen langfristigen Designprozessen einen Mehrwert gewinnen können.
Auch habe ich die Klasse nicht "grid" genannt, ich habe das nur zur Vereinfachung des Beispiels getan, vielleicht hat es hier einen heiligen Namenskrieg ausgelöst.
Wäre es von Bedeutung, wenn ich es "2-Spalten-Dingsbums" nennen würde? Betrachten Sie den CSS Zen Garden, nicht jedes Projekt hat das Budget oder das langfristige Ziel eines perfekten Themas, noch ist das überhaupt in den Spezifikationen.
Manchmal scheinen Diskussionen wie diese in die Frage zu münden, wie das perfekte CSS geschrieben werden sollte, und alle praktischen Methoden werden niedergeschrien, sei es wegen möglicherweise blinder Eiferer oder weil nur Ihre "persönliche Erfahrung" sagt, dass es schlecht ist.
Inline-Styles waren vor nicht allzu langer Zeit "böse", und diese Seite, eine Bastion des Wissens über CSS im Internet, scheint sie jetzt voll zu unterstützen.
Also sage ich: Ignoriere Dogma, Eiferer und Ideologie und verwende das richtige Werkzeug für die Aufgabe.
Suchen und ersetzen. Das war noch nie ein Problem. Ich habe an mehreren hunderttausend Zeilen Code gearbeitet. Hunderte von Websites, die Bibliotheken teilen. Daten mit Inhalt. Das ist einfach keine große Sache.
Wenn ein Budget da ist, wird es auf jeden Fall geändert. Wenn nicht, lebt man damit. Kinderleicht.
Auch habe ich vor Jahren eine Lektion von einem Mann gelernt, der ein Unternehmen besaß, das Software für Militärsatelliten herstellte, riesige Projekte, und er sagte, dass sie alle paar Jahre einen Großteil ihres Codes verwerfen und Dinge neu aufbauen mussten.
Man kann ein System nur so lange optimieren, reparieren und verwalten, bevor man wieder von vorne anfangen muss. Wenn Sie jemals lange genug an einem ausreichend großen Projekt gearbeitet haben, werden Sie feststellen, dass keine Strategie perfekt ist. Alles muss neu gemacht werden.
Sicher ist das so. Es hängt alles von den Spezifikationen des Projekts ab. Sie behaupten doch nicht, dass .grid ein schrecklicher Klassenname für die einseitige Website des Hundes meines Bruders ist? Das ist absurd, wen kümmert es, welcher Klassenname dort verwendet wird? Ihre Kritiken müssen also nur als relevant für Ihre Erfahrungen, Ihren Arbeitsstil oder Projekte mit den Arten von Kunden, mit denen Sie arbeiten, usw. klassifiziert werden...
Eine absolute Einstellung zu Namenskonventionen (was Atomic CSS ist) führt zu einer Art selbst auferlegter Blindheit für das richtige Werkzeug für die richtige Aufgabe.
Ich würde mich auf Ihr Urteilsvermögen verlassen, ob es für Sie in Ihren Projekten funktionieren würde oder nicht. Aber das bedeutet nicht, dass es nicht die absolut beste und perfekte Lösung für andere ist.
@Vanderson, ich glaube, wir reden über völlig verschiedene Dinge.
Ich spreche über den Wert von gut gestaltetem HTML und wie das mit modernen 'CSS-Vermeidungsschemata' unvereinbar ist. Ich halte das Schreiben von ungeeignetem HTML für unpraktisch, und ich habe die Hauptgründe dafür dargelegt.
Wenn Sie in einigen Fällen die Kosten für unpraktisches HTML erträglich finden, großartig! Wenn Sie der Meinung sind, dass solche Schemata tatsächlich praktisch und vorzuziehen sind, dann werden wir uns nie einig werden. Wenn sie das richtige Werkzeug sind, macht jemand irgendwo den falschen Job.
Ich würde lieber eine Seite mit gut gestaltetem HTML VERWENDEN (nicht gestalten oder entwickeln), zum Beispiel, wo ein Dropdown-Feld tatsächlich ein SELECT-Element und kein halbfertiges JavaScript-abhängiges Widget war.
Warum ist das wichtig? Weil ich es so satt habe, Websites zu nutzen, die kaputt sind, weil sie die Dinge nicht einfach gehalten haben. Es passiert viel zu oft, normalerweise wenn ich mich registriere, buche oder bezahle, d.h. wenn ich im wirklichen Leben etwas erledigen möchte.
Übrigens hat der Internet Explorer seine Dropdowns in IE10 geändert, nichts Dramatisches, aber genug, damit die Leute es bemerkten… anscheinend zum Vorteil der Touch-Nutzer. Es passiert also, und wenn Sie sich an geeignetes HTML halten, werden Ihre Website solche Verbesserungen automatisch übernehmen.
Ich argumentierte gegen alles Visuelle im HTML, nicht nur Inline-Styles, Klassennamen wie "grid" oder "2-column-whatever" sind gleichermaßen ungeeignet. "menu" ist in Ordnung, das gibt die Struktur an, ohne etwas darüber zu sagen, wie sie visuell dargestellt wird, daher habe ich leider keine Einwände, aber es schien, als dachten Sie, ich hätte welche?
Ich arbeite oft an Projekten, bei denen es unvermeidlich ist, irgendeine Form von Layout-Markup zu verwenden. Ich schäme mich lieber dafür und entschuldige mich, als mich selbst davon zu überzeugen, dass es perfekt und das Beste seit geschnittenem Brot ist, sonst findet man nie einen besseren Weg.
Es ist mir egal, was die Leute in ihren Hobbyprojekten machen, sie können tatsächlich tun, was sie wollen. Aber es ist mir wichtig, was die Leute auf populären Bildungswebsites propagieren, sei es die Förderung von Techniken, die zu einer schlechten Benutzererfahrung führen (z. B. ungeeignetes HTML), oder die langfristig zu schwer wartbarem Code führen können.
Nein, Sie können
class="grid"nicht einfach suchen und ersetzen, wenn einige davon geändert werden müssen und andere nicht. Jedes einzelne Ergebnis erfordert eine unabhängige Analyse, um festzustellen, ob es geändert werden muss. Es ist eine unnötige kognitive Belastung, je größer die Menge, desto unübersichtlicher wird es.Ein Budget für die Behebung der technischen Schulden zu haben, die nicht die Schuld des Kunden sind, ist der Punkt, an dem Unternehmen langfristig scheitern. Wenn ein Kunde kein Budget für seine triviale Designänderung hat, werden Sie diesen Kunden verlieren.
Es braucht nur einen Konkurrenten, der erklärt, wie schwierig es ist, so gebaute Dinge zu warten, und ehe man sich versieht, hat man den Ruf, zu teuer zu sein, Dinge nicht richtig zu bauen (Abkürzungen zu nehmen) oder zu langsam auf einfache Kundenwünsche zu reagieren. Und Ihr Konkurrent wird derjenige sein, der verschrottet und neu aufbaut, nicht Sie.
Ja, natürlich basieren meine Kritiken auf meiner eigenen Erfahrung. Zufällig arbeite ich gerade an einem solchen Umschreibungsprojekt, das wir von einem Konkurrenten übernommen haben, also ist das wirklich kein Wunder!
Es scheint, als ob in den letzten 6 Jahren die Konversation über die richtige CSS-Implementierung von einer kleinen Elitegruppe von Leuten dominiert wurde, deren Anwendungsfall tendenziell eine einzige Designsprache ist (die sich ständig weiterentwickelt), verteilt auf weniger als ein Dutzend sehr langlebige Produkte mit großen Teams und großen Budgets.
Ich sehe klar, wie bestimmte Techniken den Unternehmen wie Twitter, Facebook und Yahoo zugutekommen.
Aber wo sind die CSS-Experten von kleinen Agenturen, bei denen jede Woche ein brandneues Projekt (oder ein brandneues Skin über einem bestehenden Produkt) ansteht? Ich muss hören, was in ihrem Workflow gut funktioniert, denn sie tun, was ich tue, was die meisten Menschen auf der Welt tun, und die meisten von uns werden nie bei Unternehmen wie Twitter oder Yahoo arbeiten.
Gut gemachtes HTML ist mit nichts inkompatibel.
Es gibt kein unpassendes HTML. Es ist nur eine Markup-Sprache.
Wenn Ihre Erfahrung Sie dazu zwingt, Dinge auf eine bestimmte Weise zu schreiben, tun Sie es auf jeden Fall. Aber Ihre Überzeugungen als den einzig wahren Weg für alle Milliarden von jemals erstellten oder jemals zu erstellenden HTML-Dokumenten zu erklären, ist eine Absurdität.
Ich bewundere Ihren Wunsch, ein großartiger Handwerker zu sein. Aber nicht jeder kann Meisterwerke schaffen, einige von uns streichen Häuser. Und die weniger glamouröse und perfekte Arbeit zu tun, ist ein ehrenwertes Auskommen.
Wenn Sie das glauben, sollten Sie die Spezifikation lesen. Alles andere ist unpassend.
Sie könnten nicht falscher liegen. Der Unterschied zwischen völlig falsch und völlig richtig ist nur ein Wort. Löschen Sie "nur" und da haben Sie es! ;-)
@Lee Kowalkowski
Klassen haben per se nichts mit HTML zu tun. Das sind Zeichenketten innerhalb eines Attributs. Unabhängig davon, was man dort einfügt, wird es kein „unpassendes HTML“ erzeugen.
Was ist unpraktisch? Wenn es von den Autoren als vorzuziehen erachtet wird, dann muss es „praktischer“ sein – zumindest für sie (bitte beachten Sie meinen Punkt unten bezüglich des Benutzers).
Klassen verursachen keine fehlerhaften Erfahrungen, Stile tun es.
„Menü“ ist in Ordnung, aber „Gitter“ nicht? Warum das? Könnten Sie mir Spezifikationen/Empfehlungen/Artikel nennen, die beweisen, dass die Verwendung semantischer Klassen die **beste** Praxis ist (nicht *übliche* Praxis)?
Wenn es um CSS geht, gibt es keine Einheitslösung, keine beste Methode. Es hängt alles vom Projekt ab (seine Anforderungen, die beteiligten Teams usw.).
Schlechte Benutzererfahrung? Wie das? Noch einmal, Klassen sind für den Benutzer bedeutungslos; alles, was zählt, sind die ihnen zugewiesenen Stile.
Heutzutage bedeutet das Ändern von Stilen bei Komponenten nicht das Ändern vieler Klassen in einer Codebasis; und das gilt umso mehr für dynamische Atomic CSS-Bibliotheken (à la ACSS) oder mit benutzerdefinierten Eigenschaften.
Inkompatibilität ist bidirektional, aber wenn sie gerichtet wäre, dann nein, gut gemachtes HTML ist mit allem kompatibel, das ist mein ganzer Punkt.
Absolut gibt es so etwas wie unpassendes HTML! Erst heute hörte ich einen Entwickler fragen, wie man einen Button so gestaltet, dass er wie ein Link aussieht. Das ihm gegebene CSS bot Klassen dafür an, aber er hatte Schwierigkeiten mit der Ausrichtung.
Das ist nicht in Ordnung. Ein Button, der wie ein Link aussieht, wird niemals dasselbe Kontextmenü wie ein echter Link haben. Sie können diese vorgetäuschten Links nicht mit der rechten Maustaste anklicken und 'Link in neuem Fenster öffnen' oder 'Linkadresse kopieren'. Das erwartete Verhalten fehlt.
Opera hat andere Tastaturkürzel zum Navigieren von Links als Buttons, vorgetäuschte Links werden unerwartet übersprungen.
Screenreader haben die Möglichkeit, eine Liste der auf einer Seite gefundenen Links zur schnellen Navigation zu erstellen, vorgetäuschte Links fehlen.
Das bereitgestellte CSS bot eine Möglichkeit, Schaltflächen so zu gestalten, dass sie wie Links aussehen. Dies ist ein gutes Beispiel dafür, das richtige Werkzeug für die falsche Aufgabe zu haben, und warum "visuelle" Klassennamen genauso ungeeignet sind wie Inline-Styles, und da Klassennamen im HTML und nur von CSS referenziert werden, ist es das HTML, das ungeeignet ist.
CSS hat die überstrapazierte Bequemlichkeit, Elemente basierend auf Klassennamen auszuwählen. Das Missverständnis, dass Klassennamen synonym mit Stil sind, ist die Wurzel des Problems. Da die Auswahl nach ID lange Zeit aus der Mode gekommen ist, sind Klassen die neue ID, in Bezug auf die Spezifität, außer dass Klassen vielseitiger sind als IDs.
Deshalb gelangen wir auf vielfältigere Weise zu unübersichtlichem HTML/CSS. Die „innovativen“ Lösungen scheinen die Tatsache übersehen zu haben, dass wir Opfer unseres übermäßigen Gebrauchs von Klassenselektoren sind, so dass sie tatsächlich kein Problem lösen, sondern es nur verschieben.
Niemand sollte es absurd finden, dass ich empfehle, HTML so zu verwenden, dass es die Benutzererfahrung nicht unerwartet beeinträchtigt. Ich bin fest davon überzeugt, dass die Entwickler, die die „weniger glamouröse“ Arbeit leisten, am meisten davon profitieren, was auch immer modisch oder populär ist, zu ignorieren, die Dinge einfach zu halten und sich an das zu halten, was funktioniert.
@Thierry Koblentz
...dann verstehen Sie das Wort "Klasse" nicht. Ich habe bereits erklärt, wofür Klassen sind: Das Klassenattribut dient der Klassifizierung von HTML-Elementen durch den Autor, wenn die Semantik der Elemente oder Attribute allein nicht ausreicht. Nochmals: https://css-tricks.de/semantic-class-names/
Wenn das HTML überarbeitet werden muss, weil es anders aussehen soll, dann ist es meiner (nicht nur meiner) Meinung nach unpassend, weil die Autorenklassifizierung der HTML-Elemente sich nicht ändern sollte, nur weil sich das Erscheinungsbild ändert.
Ich sprach nicht von Klassen oder Stilen, sondern von unpassendem HTML in all seinen Formen. Es ist die unnötige Komplexität, die fehlerhafte Erfahrungen schafft.
Menü impliziert kein Layout, es wird immer das Menü sein, ob es Pop-up, ausziehbar, horizontal, vertikal, was auch immer ist, es ist ein Menü.
Gitter impliziert Layout. Ich wette, in einem guten responsiven Layout würde es ab einem bestimmten Schwellenwert aufhören, ein Gitter zu sein. Gitter ist nicht, was die Sache ist, also ist es nicht die Klasse des Elements. Warum ist es also ein Gitter? Nehmen wir an, es ist, weil es ein Kalender oder eine Galerie ist, dann wäre die Klasse des Elements 'Kalender' oder 'Galerie', nicht 'Gitter'.
Die beste Praxis nennt sich 'Trennung der Belange' https://en.wikipedia.org/wiki/Separation_of_concerns – es gibt unzählige Artikel und Empfehlungen, warum es die beste Praxis ist, verwenden Sie Google, nicht mich.
Wenn Sie Ihr HTML ändern müssen, um seinen Stil zu ändern, haben Sie keine gute Trennung der Belange.
In der Tat, ich habe jahrzehntelang in vielen verschiedenen Webteams gearbeitet, und Webentwickler, die gleichermaßen sicher mit HTML und CSS arbeiten, sind überraschend selten, und ein weiterer Grund, warum die Trennung der Belange wichtig ist.
Webanwendungsentwickler sind Nutzer des CSS, sie sind die wahren Konsumenten der CSS-Architektur. Sie müssen HTML produzieren, das mit dem CSS kompatibel ist. In diesem Sinne, wenn Sie glauben, dass Klassen bedeutungslos sein dürfen, dann bedeutet das eine Katastrophe.
Es ist für einen CSS-Entwickler nicht angemessen, die Schwierigkeit seiner Arbeit auf die HTML-Entwickler abzuwälzen und sie mit unnötiger Komplexität zu belasten. Insbesondere, wenn HTML-Entwickler in einem Projekt tendenziell in der Überzahl sind. Es ist nicht produktiv, die falschen Leute die harte Arbeit machen zu lassen.
Die Teamstruktur, mit der ich derzeit zu tun habe, besteht aus mehreren Dutzend Projekten mit mehreren hundert Webanwendungsentwicklern, die in Büros im ganzen Land verteilt sind. Ich bin nur einer dieser Webanwendungsentwickler.
Es gibt ein kleines, virtuelles Team von etwa 4 Designern/Entwicklern, die für die Steuerung des Frontend-Codierungsstandards in allen Teams verantwortlich sind, sie pflegen das CSS und bestimmen letztendlich, wie das HTML geschrieben werden muss. Ich habe wenig mit diesem Team zu tun, außer dass ich ihre Ergebnisse verwenden muss.
Meine Argumente beziehen sich also auf den armen HTML-Autor, der mit schlechten Namenskonventionen belegt wäre, von dem erwartet wird, bedeutungslosen Meta-Inhalt zu produzieren, nur damit seine Webanwendung akzeptabel aussieht. Die CSS-Entwickler hätten eine nachlässige Arbeit geleistet und ihr wahres Publikum nicht verstanden.
In der traditionellen Webentwicklung muss der CSS-Entwickler die Last tragen, die Arbeit des HTML-Autors zu erleichtern. Selbst wenn es dieselbe Person ist; alles, was im großen Maßstab funktioniert, sollte auch in kleinen Fällen funktionieren.
Bedeutungsvolle (oder semantische) Klassennamen sind leichter zu verstehen, im Code-Review zu finden, zu merken, zu kommunizieren, vorherzusagen, zu dokumentieren, alles. Wenn Sie dies nur für die kurzsichtige Meinung eines verrückten HTML-Entwicklers halten, dann verzweifle ich an der Zukunft unserer Art.
Das ist absurd. Das Ändern von Stilen sollte überhaupt keine Klassenänderungen in einer Codebasis bedeuten, das ist schon seit geraumer Zeit der Fall, nicht nur heutzutage, nicht einmal bei Komponenten. Ich sage nicht, dass es vermeidbar ist, aber das Risiko, dass es passiert, sollte immer berücksichtigt und, wenn vorhergesehen, vermieden werden.
Mit Atomic CSS ist es weniger wahr, man kann das Aussehen und Verhalten eines Elements nicht ändern, ohne seine Klasse zu ändern.
@Lee Kowalkowski
Hypothetische Situation: Eine Galerie von einer Zeilenansicht in eine Rasteransicht ändern.
Atomic CSS-Methode: Klasse des übergeordneten DIVs der Galerie auf der Seite in "grid" ändern oder hinzufügen.
Ihr Vorschlag: Die Stile für die Klasse "gallery" ändern.
Was passiert, wenn Sie 10 Galerien auf einer Website haben und sie alle unterschiedlich aussehen müssen? Damit habe ich regelmäßig zu tun. Atomic CSS zur Rettung. Einfach, unkompliziert, 1 Klassenname ändern und fertig.
Doch Sie schlagen vor, wir sollten das HTML nicht anfassen, um es rein zu halten? Vielleicht übersehe ich etwas. Manchmal, und ich bin kurz davor zu sagen, die meisten Male, ist eine Website klein genug, dass es einfach keine Probleme mit überlappenden Belangen gibt.
Es klingt ziemlich klar, dass Sie in großen Teams mit mehreren Personen an großen Websites mit großen Codebasen arbeiten. Während meine Gruppe an sehr kleinen bis mittelgroßen Websites mit 100 Seiten oder weniger arbeitet. Mit vielleicht 10 Seiten HTML-Vorlagen mit wenigen Klassennamen überhaupt, der Rest ist Inhalt vom Client oder Module mit Mustache-Vorlagen.
Sie arbeiten an Porsches und Ferraris, wir arbeiten an Pendlerautos. Zu behaupten, dass wir den fortschrittlichsten Langzeitansatz mit der teuersten Bauweise verwenden müssen, ist einfach falsch.
Wir können eine Schraube anstelle einer Niete verwenden, wir können schweißen, wo Sie kleben würden. Wir können Aluminium verwenden, wo Sie Kohlefaser verwenden würden. Wo Sie ein Team von Leuten mit Aufgabentrennung für ein Projekt haben, das Monate dauert. Unsere Website ist in einer Woche fällig, und wir haben 3 Leute, die sie bauen.
Sagen Sie mir jetzt, ich muss einen engagierten CSS- und HTML-Entwickler einstellen, wenn es Leute gibt, die beides perfekt können. Es ist wahrscheinlich, dass Ihr Unternehmen mehr Geld in Meetingzeit ausgibt, als unseres für den Bau einer ganzen Website.
Entschuldigung, Sie liegen einfach falsch, wenn Sie denken, dass Ihre Ideen universell wahr sind. Sie mögen in Ihrer Welt großartig und perfekt sein. Aber Atomic CSS ist für viele unserer Fälle die absolut beste Lösung.
Und selbst wenn die Klasse "grid" ist und auf einem Telefon als einzelne Spalte angezeigt wird, ist es immer noch ein Raster. Nur ein Raster mit 1 Spalte.
Oder sagen Sie, es gibt kein 1-Spalten-Raster?
@Lee Kowalkowski
Der Artikel, auf den Sie verlinken, ist über 6 Jahre alt. Ich habe einen neueren für Sie zum Lesen: http://cssmojo.com/opinions_of_leaders_considered_harmful/
@Vanderson
Das habe ich bereits behandelt!
class="shoes gallery"class="coats gallery" ..., ist ein Ansatz, ein anderer wäre seitenweites CSS, je nach Bequemlichkeit.Ich bin nicht sicher, ob die Erfüllung einer Kundenanfrage, die zu ästhetischen Inkonsistenzen führen kann, immer im Interesse Ihres Kunden ist.
Mit etwas umzugehen, indem man „einfach tut, was der Kunde verlangt hat“, kann manchmal tatsächlich bedeuten, es nicht zu lösen.
Es ist einfacher, wenn Sie Ihren Kunden überzeugen können, einen nutzerzentrierten Ansatz in Betracht zu ziehen (vorausgesetzt, Nutzer bevorzugen ästhetische Konsistenz). Scheuen Sie sich nie, Ratschläge anzubieten – Kunden wissen das wirklich zu schätzen.
Nun, ich hatte einmal eine echte Kundenanfrage, bei einem persönlichen Nebenprojekt (die ganze Website ist kleiner als 10K), als Benutzer sich von einer Partnerseite anmeldeten, wollten sie, dass das Aussehen und Gefühl des Anmeldeprozesses zur Marke des Partners passt. Wenn sie sich von einem anderen Partner anmeldeten, musste es stattdessen dessen Marke entsprechen. Heute unterstützt es 12 verschiedene Partner, jeder mit passendem Branding – und doch ist das HTML überhaupt nicht anders.
Die Dinge einfach halten, getrennte Zuständigkeiten haben, funktioniert in jedem Maßstab, es gibt kein zu kleines Projekt, man kann keine Workflow-Probleme haben, wenn man Best Practices befolgt, denn wenn doch, dann ist es offensichtlich keine Best Practice.
Ich sehe es genau umgekehrt. Wir arbeiten an den Pendlerautos, ich meine, an der Massenproduktion von Standarddiensten, Arbeitsteilung nach Spezialisierung. Das ist eine Dequalifizierung, weil es zu vielen Entwicklern mit begrenzten HTML-Kenntnissen und ohne CSS-Kenntnisse führt. Die HTML-Muster werden von den wenigen CSS-Entwicklern diktiert. Es ist sehr stark eine Fließbandumgebung.
Diese Skaleneffekte verbieten kostspielige Bauweisen, jedes große globale Outsourcing-Unternehmen ist nur daran interessiert, die Produktionszeit zu verkürzen und die Gewinne der Aktionäre zu steigern, die einzige Messgröße sind Mannstunden. Es gibt keinen Platz für kostspielige Methoden, alles muss gestrafft werden, sonst verpassen wir Fristen, erleiden Strafen, verlieren Geschäfte an die rücksichtslose Konkurrenz.
Ich habe nie gesagt, dass der CSS- und HTML-Entwickler nicht dieselbe Person sein kann.
Ich habe auch Nebenprojekte als Ein-Mann-Band und kleine Teams, wir veranstalten zum Beispiel regelmäßig Hack Days, und die gleichen Ideen funktionieren gleichermaßen gut. Ich habe nichts erlebt, was ihre Universalität widerlegen würde.
Ich habe in der Vergangenheit viele Frameworks und Architekturen vermarktet gesehen, die alle von der Prämisse ausgingen, Probleme zu lösen, die normalerweise nur in schlechten Implementierungen existieren.
Wenn es etwas Gutes in einem Framework oder einer Architektur gibt, wird es in der Regel bald darauf in einen Standard mit nativer Implementierung aufgenommen. Ich sehe nichts in Atomic CSS, das ein wahrscheinlicher Kandidat für die Standardisierung wäre, und ich sehe keine Unterstützung für Atomic CSS unter den Leuten, die an den relevanten Standards arbeiten, aber ich habe ziemlich viel Widerstand gesehen.
Eher Jahre, sogar Jahrzehnte, wenn man Supportverträge und Wartung berücksichtigt. Deshalb können wir nicht einfach etwas herausbringen und vergessen, und deshalb ist der Ansatz wichtig.
Es wird Menschen mit einem breiten Spektrum an Fähigkeiten geben, die den Code in solchen Systemen in unvorhersehbarer Zukunft überarbeiten. Die Einnahmen aus Wartung und Support sind profitabler als die anfängliche Produktion, wenn man von vornherein einen flexiblen Ansatz wählt.
Wenn Sie im Geschäft sind, etwas zu bauen, zu versenden, das Geld zu nehmen und zu verschwinden, brauchen Sie sich nicht öffentlich gegen Best Practices einzusetzen, machen Sie einfach weiter.
Ein Gitter beliebiger Dimensionen beschreibt immer noch ein Layout und gibt der Natur des Inhalts darin keine sinnvolle Substanz.
@Thierry Koblentz
Na und? Verliert guter Rat mit der Zeit an Wert? Müssen wir auch aufhören, an den Satz des Pythagoras zu glauben? Er ist uralt! Es muss doch jetzt einen besseren Weg geben! Ach, bitte...
Entweder haben Sie den Artikel nicht über das Veröffentlichungsdatum hinaus gelesen, oder Sie haben nichts anderes daran auszusetzen gefunden.
Ich hatte Ihren Artikel bereits gelesen, und ich fand keine Gegenargumente. Ich weiß nicht, ob Sie es bemerkt haben, aber Sie haben keine Beweise dafür, dass semantische Klassennamen schädlich, eine schreckliche Idee und um jeden Preis zu vermeiden sind.
Der Teil über das Restyling muss korrigiert werden. Wenn Sie denken, Restyling beschränkt sich auf gestern alter Stil, heute neuer Stil, dann haben Sie den Punkt verfehlt. Restyling bedeutet, dass es möglich ist, mehrere Stile gleichzeitig zu unterstützen. Das Argument "niemand braucht das jemals" zieht nicht. Druck-Stylesheets?
Sie behaupten auch, dass BEM populär ist (was nicht stimmt) und nutzen das als Beweis! Das ist das Problem von uns, die zu sehr in unserer eigenen Branche verhaftet sind, wir sind dem größten Teil des Marketings ausgesetzt. Popularität ist nur ein Beweis für Marketing. Sind alle Nummer-1-Songs zeitlose Meisterwerke? Leider nicht, obwohl sie zum Zeitpunkt die populärsten Songs waren.
Als HTML-Entwickler, der von einem CSS-Designer, der sich einmal dazu entschloss, "BEM auszuprobieren", betroffen war, erkannte er, sobald er die Reaktion der HTML-Entwickler auf das, was nun von ihnen erwartet wurde, sah, welch schlechte Idee es ist, das HTML zu überklassifizieren. Sich selbst das Leben leicht machen; die falsche Person.
CSS-Design ist wie das Design einer API. Wer das HTML erstellt, muss die "API" des CSS-Designs verwenden. Leider scheinen viele CSS-Entwickler auch das begleitende HTML zu erstellen und sind sich daher dieses Unterschieds nicht bewusst und werden niemals die Vorteile ernten.
Warum sollten Sie eine so schreckliche API erstellen, mit der man arbeiten muss? Weil CSS schmerzhaft ist? Um das CSS schlank zu halten? Um die Spezifität zu vereinfachen? Dies sind keine Aufgaben des armen HTML-Autors, so wie Sie eine so schlechte API nicht entwerfen würden.
@Lee Kowalkowski
Ein **Ratschlag** – egal wie gut er ist – ist nicht dasselbe wie ein **Satz**, nicht wahr?
Sie könnten etwas über einen Fehlschluss namens "Appell an die Antike / Tradition" lesen wollen.
Wie auch immer, ich höre hier auf, da ich glaube, dass Sie denken, ich argumentiere, um Sie davon zu überzeugen, dass Atomic CSS großartig und das SoC-Prinzip schädlich ist, obwohl ich es in Wirklichkeit nicht bin. Ehrlich gesagt, *es ist mir wirklich egal, was Sie denken*, mir ist wichtig, dass die Leute, die diese Kommentare lesen, verstehen, dass die meisten Ihrer Argumente haltlos sind und dass sie sich auf nichts davon verlassen sollten, um sich eine eigene Meinung zu bilden.
@Chris
Sie könnten Atomic CSS on steroids überprüfen; aber kurz gesagt, wir hatten 2 Hauptziele
Bloat begrenzen
Bruch verhindern
Bonus: Der Ansatz erlaubte uns, Komponenten *ohne angehängtes Stylesheet* zu teilen!
Vor 5 Jahren begannen wir mit einer *statischen* Bibliothek (ähnlich dem, was Tachyons heute tut). Sie reduzierte die Aufblähung drastisch und beschleunigte die Entwicklung (2 große Erfolge), aber die Entwickler waren *frustriert* durch die Einschränkung dessen, was ihnen zur Verfügung stand (beachten Sie, dass dieser Ansatz großartig ist, um einen Styleguide *durchzusetzen* – wenn es einen gibt). Um dieses Problem anzugehen, entwickelten wir ACSS (https://acss.io), eine *dynamische* Bibliothek, die es Autoren ermöglicht, so ziemlich jeden gewünschten Stil zu verwenden, einschließlich der Verwendung von Media Queries, Kombinatoren, Pseudo-Klassen usw.
Bonus #1: Das Tool schreibt/löscht CSS on-the-fly – was noch weniger Bloat erzeugt als eine "statische" Bibliothek. Die Yahoo!-Seiten, die komplett auf Atomizer umgestellt haben, verwenden weniger als die Hälfte des CSS, auf das sie sich zuvor verlassen haben.
Bonus #2: Es hilft auch bei Code-Reviews!
Fühlen Sie sich frei, dem Gitter-Kanal beizutreten, wenn Sie Fragen haben.
Lee Kowalkowski hat bereits alles Wichtige gesagt. Ich habe keine Ahnung, warum der Ansatz der getrennten Belange so unbeliebt ist. Er funktioniert auf kleinen und großen Websites völlig einwandfrei.
Wenn Sie mit Utility-Klassen arbeiten wollen, dann verwenden Sie einen Preprocessor, wie ich bereits erwähnt habe.
Bitte hören Sie auf, das Web mit präsentationellem Markup, Bibliotheken und Frameworks aufzublähen, nur weil Sie daran gewöhnt sind. Es macht Ihre Arbeit nicht schneller.
Ich hätte so gerne, dass all ihr „Ich-mach-es-so-wie-es-für-mich-am-bequemsten-ist“-Leute in Deutschland leben würdet, wie ich, wo man 60,- $ für 6 GB zahlen muss, wenn man sein Handy benutzt.
Wenn Sie nicht meine Telefonrechnung bezahlen und mein langsam ladendes Web teilen wollen, dann hören Sie bitte auf mit diesem "Ich mache, was für mich am besten ist"-Entwicklungsverhalten.
Vielen Dank!
@ Marc Haunschild
Das Problem ist nicht, dass Separation of Concern (SoC) unpopulär ist, sondern die Tatsache, dass einige Leute die Vorstellung nicht akzeptieren können, dass viele Entwickler da draußen gut ohne die strikte Einhaltung von SoC auskommen. Befürworter von Atomic CSS sagen nicht, dass jeder darauf umsteigen sollte, sie teilen nur ihre Erfahrung und sagen, dass es für sie gut funktioniert. Im Gegenteil, Leute, die SoC "anbeten", können nicht aufhören, Atomic CSS zu kritisieren, ohne wirklich zu wissen, worum es geht oder was es kann. Zum Beispiel sagt Lee Kowalkowski
Ich schätze, er hat nie erkannt, dass Atomic CSS-Klassen
partner-color,partner-background-color,partner-fontSize,partner-whateversein könnten? Ein solcher Ansatz löst die von Lee beschriebene "Herausforderung" (das HTML nicht zu ändern).Jedenfalls sagen Atomic CSS-Befürworter nicht, dass die Verwendung semantischer Klassen eine Sünde ist; sie verlassen sich auch auf das SoC-Prinzip, wann immer es sinnvoller ist. Die Idee ist, das beste Werkzeug für die Aufgabe zu verwenden. Ich denke, es ist besser, beide Ansätze zu verstehen und eine fundierte Wahl zu treffen, anstatt *am* SoC-Prinzip *festzuhalten* und alles andere als Unsinn zu bezeichnen.
Das Web aufblähen (Markup?)? Haben Sie dazu Daten? Ich habe welche, und es stimmt einfach nicht (abhängig von der Bibliothek). Nicht nur das, sondern Sie haben eine höhere String-Wiederholung bei einem Atomic CSS-Ansatz als bei einem SoC-Ansatz (da ersterer viel Redundanz fördert), was zu einem viel besseren Kompressionsverhältnis führt.
Am wichtigsten ist, dass Webseiten schneller laden, da **weniger CSS** heruntergeladen werden muss, was zu einer besseren Benutzererfahrung führt.
Dieses Argument ist haltlos. Yahoo! wechselte zu Atomic CSS und sparte 55% seines CSS ein. Ich weiß nicht, wie Leute die Vorteile von Atomic CSS mit Bandbreitengewinnen dieser Größenordnung ignorieren können.
Wie auch immer, wenn Ihnen das SoC-Prinzip gefällt und es für Sie der beste Weg ist, dann ist das großartig, verwenden Sie das und nur das, aber bitte sagen Sie Entwicklern, die Atomic CSS verwenden, nicht, dass sie nicht wissen, was sie tun, denn das zeigt nur, wie wenig Sie über die Methodik wissen.
Ich verstehe einfach nicht, wie ich hier antworten soll, also entschuldigen Sie bitte die Unannehmlichkeiten, @Thierry Koblentz, ich kopiere Ihre Antwort auf meinen Beitrag hierher
Sie wissen, dass er dies schrieb, weil @Vanderson im vorherigen Beitrag sagte, dass Theming nur effizient ist, wenn man präsentationelles Markup verwendet. Er antwortete einfach, dass präsentationelles Markup dafür nicht notwendig ist. Aber ich denke, Lee kann das selbst klären, dafür braucht er mich nicht.
Genau das meinte ich, als ich darum bat, das Web nicht aufzublähen.
Gerade wenn man mit Microdaten arbeitet, hat man tatsächlich mehr Hooks für sein CSS als je nötig.
Also los: benutzen Sie sie! Und wir können die Diskussion hier beenden ;-)
Wie ich und offensichtlich Lee HTML5 verstehen, ist SoC immer sinnvoll. Mehr noch. SoC gibt einfachen Textdokumenten Sinn oder sagen wir Bedeutung. Nochmals in anderen Worten (aus den WCAG): Information, Struktur und Beziehungen, die durch die Präsentation vermittelt werden, können *programmatisch bestimmt* werden oder sind in Textform verfügbar. (Stufe A)
Aus welcher Sicht? Zugänglichkeit? Benutzererfahrung? Oder Entwicklererfahrung?
Sie wollen mir wirklich erzählen, dass minimierte, komprimierte, cache-fähige CSS-Dateien ein größeres Problem sind als Dutzende von partner-xxx-Klassen, die zu sinnvollen HTML5-Dokumenten hinzugefügt werden?
Ich befürchte, ich werde nicht aufhören zu sagen, dass es die Verantwortung der Entwickler ist, HTML5-Dokumente zu liefern, die den Bedürfnissen jedes Benutzers entsprechen. Ich weiß, dass es möglich ist, barrierefreie Websites mit Bootstrap zu erstellen (um ein Framework zu nennen, das ich zuvor verwenden musste). Aber ich sehe selten barrierefreie Bootstrap-Sites. Früher vermutete ich nur, dass Entwickler, die Systeme wie Atomic CSS verwenden, ihre Arbeit nur einfacher machen wollen. Heute weiß ich es. Zumindest trifft das auf die überwiegende Mehrheit zu…
Und ich habe es in diesem Thread bereits zweimal gesagt: Verwenden Sie Ihre geliebten Namenskonventionen. Aber verwenden Sie einen Präprozessor, um das Beste aus beiden Welten herauszuholen. Sehen Sie, ich sage Ihnen nicht, dass Sie damit aufhören sollen. Ich bitte Sie nur, es richtig zu machen...
Es ist mir egal, wie die Leute ihre Entwicklung machen, wenn sie nur einen Job erledigen wollen, sie könnten Wix benutzen, es ist mir egal.
Die Tatsache, dass minderwertige Ansätze existieren und die Leute feststellen, dass sie sie zum Laufen bringen können, ist nicht das Problem. Das Problem ist, dass solche Ansätze, wie bereits erklärt, ernsthafte Probleme haben, ihre Versprechen nicht einhalten, wie ich später erläutern werde, und dennoch auf Websites wie CSS-Tricks Sendezeit bekommen, auf die sich die Leute verlassen, um ihr Wissen und ihre Fähigkeiten zu verbessern, und solchen Ressourcen als zuverlässige Autoritätsquelle vertrauen. Offensichtlich stört mich das sehr.
Das löst es kaum. Morgen könnte eine neue Partnermarke neue Eigenschaften wie einen Rahmen erfordern, und ich müsste das HTML ändern. Es sei denn, ich füge für jede existierende CSS-Eigenschaft eine
partner--Klasse hinzu, nur für den Fall, also nein danke.Sie meinen, Sie haben 4 andere Websites untersucht und dies veröffentlicht – https://acss.io/frequently-asked-questions.html#isn-t-atomic-css-moving-bloat-from-style-sheets-to-html- ?
Wird so HTML-Bloat gemessen? An der durchschnittlichen Länge des Klassenattributs? Ich denke, das ist etwas zu bequem voreingenommen. Vielleicht ist eine andere Sichtweise auf den HTML-Bloat, den eine CSS-Konvention verursacht, die Gesamtzahl der Zeichen in allen Klassenattributen als Prozentsatz der Gesamtzahl der Zeichen in allen öffnenden Tags. Ich denke, dies ist aussagekräftiger für den Aufwand des HTML-Autoren. Ich habe ein sehr grobes Skript geschrieben, um dies zu messen: https://jsfiddle.net/bavfqk6d/9/embedded/result/
Und habe neue Daten erstellt (da alte anscheinend schlecht sind)
Mavo.io (7,4%)
CSS Zen Garden (9,4%)
Codepen.io (9,8%)
Google (10,1%)
Wikipedia (10,1%)
Wordpress (10,8%)
Facebook (11,1%)
The Paciello Group (11,3%)
CSS-Tricks (13,4%)
Ebay (13,8%)
Zeldmann (14,1%)
W3C (14,4%)
Amazon (16,4%)
GitHub (18,9%)
The Guardian (21,6%)
Stackoverflow (16,5%)
BBC (27,8%)
TED (35,5%)
Yahoo (36,3%)
Twitter (36,4%)
ACSS.IO (42,3%)
USA Today (43,2%)
Diese Prozentsätze geben an, wie viele Zeichen der HTML-Autor beim Schreiben eines öffnenden HTML-Tags für Klassenattributwerte aufwendet. D.h. die Menge an Bloat im HTML als Ergebnis des CSS-Ansatzes.
[…] Am wichtigsten ist, dass Webseiten schneller laden, da weniger CSS heruntergeladen werden muss, was zu einer besseren Benutzererfahrung führt.
Wenn Sie die Ladegeschwindigkeit einer Website nur anhand der Dinge messen, die beim *ersten* Besuch des Benutzers heruntergeladen werden, dann haben Sie es falsch verstanden. Das CSS wird vom Browser zwischengespeichert, aber jetzt ist jede HTML-Seite größer, der Rest der Erfahrung ist langsamer.
CSS-Bandbreitengewinne werden zunichte gemacht, wenn jedes HTML-Dokument dadurch mehr Bandbreite verbraucht. Wenn Yahoo-Benutzer ihre E-Mails durchforsten oder was auch immer die meisten Yahoo-Benutzer tun, ist dieser Traffic zusätzliches HTML und idealerweise kein zusätzliches CSS.
Also, Atomic CSS für eine schlechtere Benutzererfahrung verwenden?
Das ist eigentlich ziemlich unhöflich. Die Leute sollten alles berücksichtigen, was erfahrene Leute denken. Keiner meiner Einwände ist haltlos, sonst hätten Sie sie übersprungen und sich stattdessen auf Irrelevantes konzentriert, wie den Unterschied zwischen einem Theorem und einem fundierten Rat.
@Lee Kowalkowski
Ich kann nicht widerstehen, darauf hinzuweisen, wie „**unangemessen**“ Ihr HTML ist
Es gibt keinen klickbaren Button, das Ereignis ist an das Label gebunden. Ja, das ist **unangemessenes HTML**, weil es eine schlechte Benutzererfahrung schafft (Benutzer wissen nicht, was sie nach dem Einfügen ihres Codes in die Textarea tun sollen). Am wichtigsten ist, dass es für Tastaturbenutzer **nicht zugänglich** ist.
Wie auch immer – entgegen dem, was Sie sagen und mit Ihrem Skript zu demonstrieren versuchen – ist der „Bloat“, der mit Klassen zusammenhängt, auf Zeichen **innerhalb** von Klassenattributen beschränkt. Alles andere ist irrelevant, da es nicht mit der in diesem Artikel diskutierten Methode zusammenhängt.
Zum Beispiel gibt Ihr Skript für dieses Snippet zurück
Ihr Skript gibt zurück
Gesamtgröße: 42
Öffnende Tags: 38 Zeichen (90,5 %)
Klassenwerte: **7 Zeichen (18,4 %)**
aber für diesen hier
wir bekommen
Gesamtgröße: 23
Öffnende Tags: 19 Zeichen (82,6 %)
Klassenwerte: **7 Zeichen (36,8 %)**
Sehen Sie das Problem hier? Ihr Skript deutet darauf hin, dass die "Atomic CSS"-Methode (`.a`, `.b`, `.c`, `.d`) doppelt so viel Bloat erzeugt wie ein "semantischer" Ansatz (`.feature`), obwohl in beiden Fällen das `class`-Attribut **genau die gleiche Anzahl von Zeichen** (einschließlich Leerzeichen) enthält.
Ja, neue Daten sind besser als alte Daten, aber nur, wenn erstere *genau* sind.
PS
Mit einem Komponentenansatz ist es genauso einfach, eine "partner"-Klasse in Ihre Komponente hinzuzufügen wie ein Stylesheet zu bearbeiten. Tatsächlich wird ersteres den Benutzer-Cache nicht ungültig machen, da es eine gute Chance gibt, dass es Sie nicht zwingt, eine *neue* CSS-Datei zu veröffentlichen, also gibt es das auch.
TTFB (Time To First Byte) ist *kritisch*. Leute besuchen Ihre „anderen“ Seiten möglicherweise nicht, wenn sie nicht einmal warten, bis Ihre Landing Page geladen ist.
Es gibt so etwas wie „Seiten neu laden“ bei Yahoo! nicht, so funktionieren die Dinge nicht.
Es ist ein Fiddle, ich habe bereits gestanden, dass es grob war. Es war für mich, ich dachte nur, ich teile meine Methode.
Ein Button ist eine gute Idee! Ich dachte schon, dass einer einfacher zu bedienen wäre, aber ich war zu spät, weil ich ihn bereits geteilt hatte. Da JS Fiddle seine URLs versioniert, konnte ich nichts tun, außer darüber nachzudenken, wie noch mehr Websites mein Leben schwierig zu machen scheinen!
Es ist an die
textareagebunden. Es würde nicht funktionieren, wenn es an das Label gebunden wäre.Das `textarea`-Ereignis würde mit oder ohne Button weiterhin funktionieren. Der Button ist gut für die Benutzerfreundlichkeit, auch wenn er buchstäblich nichts tut. Ich habe die schlechte Angewohnheit, nur das absolute Minimum zu tun.
Gut, zumindest sind wir uns einig, dass unpassendes HTML schlecht ist, gerne illustriere ich das.
Ich habe es vielleicht veröffentlicht, bevor es perfekt war, wir tun so, als wäre das heutzutage akzeptabel. Glücklicherweise gibt es keine hochkarätigen Artikel, die darauf verlinken und es in den Himmel loben.
Ich bin ein Tastaturbenutzer, und es funktioniert, einfach aus der Textarea tabben. Ich hoffe, wir werden bald etwas Wahrheitsgemäßes oder Relevantes diskutieren.
Ich denke, das ist etwas kurzsichtig. Das ist kein Bloat, das ist etwas anderes, ich weiß nicht einmal, was das ist.
Bloat ist, wie viel zusätzliches Markup insgesamt vorhanden ist. Wenn Sie CSS voll ausschöpfen, können Sie Klassen sparsam in Ihrem HTML verwenden. CSS-Vermeidungsschemata verwenden Klassen leider großzügig, das ist Bloat.
Unabhängig davon, ob eine Messung perfekt ist (beide sind es, gebe ich zu), zeigte der Trend in meinen Ergebnissen immer noch, dass Websites mit überentwickelten Styling-Ansätzen einen größeren Anteil an Klassenattributwerten im HTML-Markup aufwiesen.
Websites, die Klassen sparsam verwenden, haben weniger Bloat als solche, die sie verwenden, als würden sie aus der Mode kommen (Wunschdenken). So einfach ist das.
Meine Methode zur Messung des Bloats bestraft die liberale Verwendung von Klassen, unabhängig davon, welches andere HTML vorhanden ist. Ich dachte, das wäre ein besseres Maß.
Wenn Sie dasselbe HTML umschreiben, um einen anderen Styling-Ansatz zu verwenden, würde der Unterschied in der Messung den Unterschied im Bloat besser zeigen als die Mittelung von Klassenattributen, die nichts Aussagekräftiges zeigt.
Leider habe ich keine Zeit, das schlechte HTML anderer Leute umzuschreiben oder mein eigenes zu ruinieren, also habe ich mich einfach für eine gute Auswahl an Websites entschieden, bis ich mich ehrlich gesagt gelangweilt habe.
Ihre Methode ignoriert die großzügige Verwendung von Klassen, misst also überhaupt keinen Bloat. Tatsächlich bin ich mir nicht sicher, was sie beweist. Sie beantwortet sicherlich nicht die Frage, ob Bloat von CSS zu HTML verschoben wird, wie in den FAQ beschrieben.
Es wird im Artikel übersehen, das ist der Vorteil des Kommentarbereichs, wo Dinge, die übersehen werden, diskutiert werden können.
Es ist eine der Tugenden der Nutzung von Seiten wie CSS-Tricks, dass man oft mehr aus den Kommentaren lernen, andere Punkte berücksichtigen und vielleicht eine ausgewogene Sichtweise erhalten kann.
Ja, das nennt man Latenz, und sie wird vom CSS-Ansatz überhaupt nicht beeinflusst. Und es wurde auch nicht debattiert, es sei denn, ich irre mich.
Ich kann mir vorstellen, dass es andere Möglichkeiten geben mag, HTML halb voll mit Klassenattributen in eine Webseite zu bekommen, ohne alles von einem Server abzurufen, aber das klingt nach viel Aufwand, nur um etwas zu beheben, das wahrscheinlich gar kein Problem war.
Die meisten Webentwickler sind keine Yahoo-Entwickler oder arbeiten an etwas so unnötig Komplexem. Selbst wenn es möglich ist, die Nebenwirkungen von aufgeblähtem HTML zu umgehen, wäre die Technik für den durchschnittlichen Webentwickler unerreichbar.
Doch der durchschnittliche Webentwickler hat die schlechte Angewohnheit, das zu kopieren, was er sieht, ohne zu beurteilen, ob es tatsächlich das tut, was er will.
Also... halte die Dinge einfach, aber nicht einfacher. :)
Utility-Klassen sind so beliebt, weil es einfach ist, mit ihnen zu arbeiten, ohne diese große graue Masse zwischen den Ohren zu benutzen.
Ich stimme zu, dass es nicht das eine und einzige perfekte System gibt. Natürlich sieht es manchmal lächerlich aus, wenn Leute Code wie diesen von Ryanair zeigen. Aber wenn der Facebook-Button seinen border-radius zurückbekommen soll, wird das Lachen aufhören.
In diesem Code sehe ich, dass es einen Border-Radius als allgemeine Designidee geben muss. Und es gibt Ausnahmen von dieser Idee. Ich denke, das Designkonzept könnte nicht vollständig durchdacht sein, wenn so viele Ausnahmen nötig sind. Das Problem ist also vielleicht nicht das CSS-Konzept. Mit solchen Dingen ist es immer schwierig umzugehen. Und es wird jeden Code und sein Konzept durcheinanderbringen, wenn man viele Ausnahmen erhält, während man bereits codiert. Wenn man sich den Ryanair-Code ansieht, denke ich, dass viele der Dinge, von denen man den Rahmen entfernt, eine HTML-Klasse benötigen könnten. Alle Social-Media-Buttons zum Beispiel. So würde alles viel einfacher werden. Es ist unwahrscheinlich, dass ein Designer den Border-Radius nur von einem Social-Media-Button entfernen möchte, oder? Und es ist sinnvoll, diese Buttons auf bedeutungsvolle Weise zu gruppieren.
Wenn Sie Utility-Klassen benötigen, empfehle ich dringend, sie in Ihren Präprozessor zu legen, um das HTML sauber zu halten. So zum Beispiel
Diese Idee sah ich zum ersten Mal in einem Video von Gunnar Bittersmann: https://www.youtube.com/watch?v=ot-LoU0MGb0&feature=youtu.be
Für mich ist es der beste Weg, buchstäblich das Beste aus beiden Welten zu kombinieren: sauberes, aussagekräftiges HTML und lesbares, wiederverwendbares CSS/SASS – tatsächlich brauche ich Präprozessoren für nichts anderes, da wir CSS-Klassen und Grid und Flex haben...
Marc
Entschuldigen Sie die Fehler – meine deutsche Autokorrektur hat es irgendwie unangenehm gemacht, diesen englischen Kommentar zu schreiben :-O
Wie jedes andere „Framework“, „Library“, „Utility“ wird es immer subjektiv sein. Viele Seiten/Frameworks verwenden dies, weil es die „schnelle“ Möglichkeit bietet, eine Seite zu erstellen. Das andere ist, dass jede Seite ziemlich gleich aussieht.
Systeme wie Bootstrap und Tachyons eignen sich hervorragend für Prototyping, aber ich glaube, für benutzerdefinierte Websites ist das keine gute Idee. Der Hauptgrund ist, dass die meisten sehr eigenwillig sind und dich zwingen, ihren Stilen zu entsprechen oder sie zu überschreiben, was ein mühsamer Prozess sein kann, der zu Code-Bloat, Spezifitätsproblemen usw. führt.
Zum Beispiel bei komponentenbasierten Systemen nimmst du eine Änderung im Stylesheet vor und sie aktualisiert die Komponente überall. Wenn du ein "Anfänger" bist oder kein Build-System verwendest und ein Element ändern möchtest, das sich an mehreren Stellen befindet, musst du die Klasse an mehreren Stellen ändern. Meiner Meinung nach für größere Websites nicht wartbar.
Am Ende des Tages geht es darum, wer mit der Idee mit den größten Kosteneinsparungen zuerst auf den Markt gehen kann, deshalb gibt es diese Dinge. Es ist alles kurzfristig und es wird nicht wirklich über langfristige Lösungen nachgedacht, was ich verstehe, weil sich das Web so sehr ändert, aber man kann auf der Grenze sein und beide Wege gehen, wenn man muss.
Natürlich ist das alles nur eine Meinung.
Da viel CSS, zusammen mit "HTML-Seiten", automatisch generiert wird, bin ich mir nicht sicher, ob Lesbarkeit (für Menschen) wirklich notwendig ist. Die Annahme aufzugeben, dass Stil-Deklarationen lesbar sein müssen, könnte neues Denken anstoßen.