Das ist heutzutage eine echte Sorge. Ich höre das von vielen vielen Entwicklern. Die Jahre vergehen in ihren Projekten, und alles, was sie zu tun scheinen, ist, ihr CSS zu erweitern, niemals zu entfernen. Es ist nicht nur ein Gefühl, ich habe schon mit Unternehmen gesprochen, die harte Daten dazu sammeln. Über fünf Jahre Verfolgung der Größe ihres Stylesheets, und alles, was es je getan hat, ist, im Umfang zuzunehmen.
Dies kann aus mehreren Gründen problematisch sein
- Dateien, die größer werden, sind schlechter für die Leistung
- Die Entwickler haben Angst vor dem CSS
Punkt 2 ist meiner Meinung nach ein viel größeres Problem als Punkt 1. Die Gesamtgröße von CSS-Dateien ist heutzutage wahrscheinlich eher gering im Vergleich zu Bilddateien und sogar der JavaScript-Nutzlast. Ausgefallene Tools und die immer schneller werdende Internetgeschwindigkeit der Welt werden Punkt 1 wahrscheinlich zu keinem großen Problem machen.
Aber Angst vor dem eigenen Stil zu haben, ist ein größeres Problem.
„Angst“ ist normalerweise nicht die Art und Weise, wie dieses Problem diskutiert wird, aber ich denke, darum geht es. Es wird oft im Hinblick darauf diskutiert, wie die globale Natur von CSS problematisch ist oder dass das mittlere „S“ in „CSS“ das einzige ist, das gerettet werden sollte.
„Unbenutztes CSS“
Ein Teil dieser Geschichte könnte sicherlich davon handeln, CSS zu löschen, das als „unbenutzt“ in einem Projekt bestimmt wird. Ich weiß, dass es eine unglaubliche Nachfrage nach dieser Art von Tools gibt. Ich habe das Gefühl, dass einige Entwickler fast schon sabbern, um ihr CSS durch eine Art ausgefallenes Tool zu jagen, um alles Unnötige zu entfernen.
Das beunruhigt mich ein wenig. Es fühlt sich an, als würde man sagen: „Ja, ich habe Angst vor unseren Stylesheets. Ich möchte sie nicht verstehen, ich möchte nur, dass etwas sie für mich repariert.“
So hat es ein Unternehmen, von dem ich gehört habe, gemacht
- Sie haben ein Skript auf der Seite für eine Teilmenge von Benutzern eingefügt.
- Das Skript würde sich das CSSOM ansehen und jeden einzelnen Selektor im CSS für diese Seite finden.
- Es würde auch eine querySelectorAll („*“) ausführen und jeden einzelnen DOM-Knoten auf dieser Seite finden.
- Es würde diese beiden Mengen vergleichen und alle Selektoren finden, die unbenutzt zu sein scheinen.
- Um die besten Ergebnisse zu erzielen, würde es dieses Skript nach einer zufälligen Anzahl von Sekunden, bei einer zufälligen Auswahl von Benutzern, unter zufälligen Bedingungen ausführen. Selbst damit benötigte es viele Daten über einen langen Zeitraum.
- Nachdem dies lange genug gelaufen war, gab es eine Reihe von CSS-Selektoren, die wahrscheinlich unbenutzt waren.
- Um sicherzugehen, wurden auf all diese Selektoren eindeutige Hintergrundbilder angewendet.
- Nachdem diese angewendet und eine weitere Zeit gewartet wurde, wurden die Serverprotokolle überprüft, um sicherzustellen, dass diese Bilder nie aufgerufen wurden. Wenn sie aufgerufen wurden, wurde dieser Selektor verwendet und musste bleiben.
Letztendlich konnten die unbenutzten Selektoren sicher aus dem CSS gelöscht werden.
Puh! Das ist eine Menge Arbeit, um etwas CSS zu entfernen.
Aber wie Sie sich vorstellen können, ist es ziemlich sicher. Stellen Sie sich vor, Sie überprüfen nur die CSS-Abdeckung **einer Seite**. Sie werden definitiv eine Menge unbenutztes CSS finden. Eine Seite in einem bestimmten Zustand ist kein repräsentativer Querschnitt Ihrer gesamten Website.
Websites haben mehrere Seiten. JavaScript läuft auf ihnen und beeinflusst das HTML. Benutzer können sich anmelden, wodurch Dinge in einem anderen Zustand angezeigt werden. Auf Websites passieren dynamische Dinge. Um wirklich zu wissen, welches CSS verwendet wird, müssten Sie jede mögliche Seite in jeder möglichen interaktiven Permutation testen, was eine große Aufgabe ist. Ich bin sicher, Sie können sich CSS vorstellen, das nur für ein ausgewähltes Menü für einen angemeldeten Benutzer mit abgelaufener Abonnementdatei gilt, der sich angemeldet hat, um eine Kreditkarte zu aktualisieren, was in einem modalen Fenster mit einem Formular geschieht, das auf eine bestimmte Weise angezeigt wird, weil die Karte American Express ist.
Allerdings gibt es Tools, die behaupten, beim Auffinden von unbenutztem CSS zu helfen
Chrome hat ein „Coverage“-Panel (in Canary, während ich schreibe), das Ihnen sagen kann, wie viel Ihres CSS verwendet wird.

Es ist ziemlich nett, wie Sie auf die **Aufzeichnen**-Schaltfläche klicken können, herumklicken und eine Menge Dinge tun (sogar Seiten wechseln), und es analysiert weiterhin, wie viel des CSS verwendet wird. Dann können Sie mit den roten oder grünen Balken neben dem CSS sehen, was verwendet wird oder nicht.
Es leidet unter den gleichen Problemen, die ich beschrieben habe, da bloßes Herumklicken nicht ausreicht, um die Abdeckung zu garantieren. Sie werden höchstwahrscheinlich Grenzfälle übersehen, und wenn Sie Entscheidungen zum Löschen von CSS basierend auf Ihren unvollständigen Tests treffen, werden Sie sich selbst Probleme bereiten.
Es gibt andere Tools, die sich bemühen, unbenutztes CSS zu entfernen, wobei UnCSS wahrscheinlich das beliebteste ist.
UnCSS macht einige clevere Dinge, wie z. B. die Möglichkeit, eine ganze Reihe von URLs zum Testen aufzulisten, Mediabeschränkungen anzugeben und JavaScript auszuführen. Hier ist ihre Beispielkonfiguration
var uncss = require('uncss');
var files = ['my', 'array', 'of', 'HTML', 'files', 'or', 'http://urls.com'],
options = {
ignore : ['#added_at_runtime', /test\-[0-9]+/],
media : ['(min-width: 700px) handheld and (orientation: landscape)'],
csspath : '../public/css/',
raw : 'h1 { color: green }',
stylesheets : ['lib/bootstrap/dist/css/bootstrap.css', 'src/public/css/main.css'],
ignoreSheets : [/fonts.googleapis/],
timeout : 1000,
htmlroot : 'public',
report : false,
uncssrc : '.uncssrc'
};
uncss(files, options, function (error, output) {
console.log(output);
});
Ich würde mir immer noch Sorgen machen, dass dies schwierig zu konfigurieren (und zu konfigurieren zu halten) wäre, sodass es eine 100%ige Testabdeckung bietet. Jedes Mal, wenn Sie eine neue CSS-Regel schreiben, müssten Sie sicherstellen, dass sie hier keinen Fehlalarm auslöst. Das heißt, vorausgesetzt, Sie verwenden dieses Tool tatsächlich zum Löschen von CSS.
Ganz zu schweigen davon, dass es zwar JavaScript ausführt, aber keine Interaktionen simuliert.
Anderer Ansatz: Frameworks
Stellen Sie sich vor, Sie verwenden ein CSS-Framework, das jeden praktisch gewünschten Stil bereitstellt. Anstatt CSS zu schreiben, würden Sie die Klassen anwenden, die das Framework zum Erledigen Ihrer Aufgaben verwendet. Sie haben Ihre HTML-Klassen jetzt ziemlich stark an dieses Framework gebunden, aber Sie haben das Problem des wachsenden CSS gelöst. **Im Laufe der Jahre wird Ihr CSS flach bleiben.**
Ich bin kein Experte für Tachyons, aber so scheint es mir. Nachdem Sie sich an die Verwendung gewöhnt haben, werden Sie ziemlich schnell darin, das Nötige zu kodieren, mit dem Nebeneffekt dieser sich selten ändernden statischen CSS-Datei, vor der niemand Angst hat.

Dies fällt in eine Kategorie, die als Atomic CSS bekannt geworden ist, von denen es viele Akteure gibt. Eine Version von Atomic CSS ist „programmatisch“, bei der Sie spezielle Klassen und einen Verarbeitungsschritt verwenden, um das endgültige CSS für Sie zu **generieren**. Die Idee ist, dass Sie nun kein statisches Framework von CSS mehr versenden, sondern nur den sehr kleinen Teil CSS, den Sie tatsächlich benötigen.
John Polacek hat kürzlich darüber geschrieben. Er stellt fest, dass er sowohl vom Problem des wachsenden CSS betroffen war als auch feststellte, dass Atomic CSS den Trend nicht nur gestoppt, sondern umgekehrt hat.

Himmel, selbst Frameworks wie Bootstrap, Foundation, Materialize oder Bulma passen hier. Die Idee ist, dass Sie, wenn Sie sich an das Framework halten, niemals in diesen unerwünschten Zustand geraten, Angst vor Ihrem eigenen CSS zu haben.
CSS in JS
Das Verwalten von Stilen in JavaScript (empfohlene Lektüre) kann ebenfalls bei diesem Problem helfen. Stile, die vollständig auf ein bestimmtes Modul beschränkt sind, sind von Natur aus leicht zu löschen. Benötigen Sie das Modul nicht, benötigen Sie die Stile nicht.
Machen Sie sich nicht zu viele Sorgen
Ich finde all diese Dinge faszinierend zu beobachten und darüber nachzudenken. Wie so oft gesagt wird: Das Web ist ein großer Ort. Wir alle haben einzigartige Umstände. Dieses Problem betrifft einen Prozentsatz von uns, und ich wage zu sagen, wahrscheinlich einen ziemlich kleinen Prozentsatz.
Wenn Sie sich nicht besonders um die Größe Ihres CSS kümmern und keine besondere Angst davor haben, ist das großartig! Ich auch nicht, bei den meisten meiner Projekte.
Ich habe nur ein Gefühl (eigentlich eine Vorhersage), dass es eine modulare Zukunft für CSS gibt.
Wenn wir Stile schreiben, werden wir immer eine Wahl treffen. Sind das globale Stile? Lecke ich absichtlich diesen Stil über die gesamte Website? Oder schreibe ich CSS, das spezifisch für diese Komponente ist? CSS wird zwischen diesen beiden geteilt. Komponentenspezifische Stile werden gekapselt und mit der Komponente gebündelt und bei Bedarf verwendet.
Was die vorherrschende Tooling dafür sein wird, bin ich mir nicht sicher, falls es überhaupt eine gibt.
Dieser Beitrag erklärt genau den Grund, warum ich bestimmte sehr beliebte Frameworks wie Bootstrap nicht verwende. Ich finde, wenn ich Tests auf Websites mit Bootstrap durchführe, können bis zu 90% des CSS ungenutzt sein. Bootstrap bringt viel CSS mit, das für die meisten Projekte einfach nicht notwendig ist und auch für SEO in keiner Weise gut ist.
Ich persönlich benutze gerne kleinere Frameworks und baue darauf auf, wie Getskeleton.
Bootstrap ist in kleinere Komponenten unterteilt. Sie können die Komponenten, die Sie nicht benötigen, mit der SASS-Version davon weglassen. Bootstrap sollte nicht für faule Entwickler verantwortlich gemacht werden.
Das Problem ist, dass Entwickler nicht wissen, wann sie Bootstrap verwenden sollen, nicht das Toolkit selbst.
Wenn Ihnen ein Design vorgegeben wird und/oder Sie an einem skalierbaren Projekt arbeiten, sollte Bootstrap nicht Ihre Wahl sein. Erstens, weil es mit Ihrer CSS-Architektur und Konventionen durcheinandergerät und sehr überwältigend ist, wenn Sie Stile überschreiben müssen.
Ich persönlich (und ich glaube, die meisten FE-Entwickler) kann meine Komponenten schneller gestalten, wenn mir ein Design gegeben wird, als Bootstrap zu implementieren und Zeit mit dem Überschreiben seiner Klassen zu verbringen.
Bootstrap ist meiner Meinung nach gut für ein schnelles Demoprojekt, einen Blog oder eine Präsentationsseite, bei der Sie kein Design haben und nicht viel darüber nachdenken müssen. Alles andere ist es nicht wert. Viel besser, von Grund auf neu zu beginnen und eine zuverlässige Architektur mit guten Konventionen aufzubauen.
Mein letzter Ansatz ist
Haupt-Stylesheet nur für globale Elemente.
Dynamisches Hinzufügen eines Stylesheets pro Seite mit dem CSS für diese Seite.
Okay, also habe ich am Ende viele Dateien und jede Seite, die von einem Besucher aufgerufen wird, wird eine Datei herunterladen müssen, die nicht im Cache ist, aber es ist eine kleine Datei und langfristig viel besser zu verwalten.
Theoretisch könnten Sie diese beiden Dateien zu einer einzigen Datei kombinieren, indem Sie die globalen Stile in das Seiten-Stylesheet importieren.
Nun, normalerweise mache ich das in WordPress, sodass ich das gesamte CSS minifiziert und beim Rendern kombiniert habe.
Es gibt also viele Dateien auf dem Server, von denen ich wissen muss, was wohin gehört, aber ich füge am Anfang jeder Datei einen Kommentar hinzu, damit ich weiß, welche Seite/n sie verwendet.
Das CSS wird auf diese Weise nicht vom Browser gecacht, ich meine, es wird gecacht, aber jede Seite hat unterschiedliches CSS, sodass selbst das globale CSS bei jedem neuen Seitenaufruf heruntergeladen werden muss, aber das bedeutet, dass das CSS pro Seite winzig ist und für uns leichter zu verwalten ist. Im Moment ist das die für mich gewinnende Strategie, aber das kann sich in Zukunft ändern :)
Tolles Thema und Artikel. Das ist meiner Erfahrung nach auch ein schmerzhaftes Problem. Ich denke, das Hauptproblem ist, dass wir altes CSS nicht einfach entfernen können. Wir brauchen bessere Tools zum Testen von CSS und Stilen.
JavaScript-Komponenten sind mit Tests abgedeckt, die mir Vertrauen geben, sie zu refaktorieren. Bei Stilen haben wir noch keine gute Testmöglichkeit.
Es gibt semi-automatisierte Testwerkzeuge (hauptsächlich Screenshot-Diffs), aber diese erfordern immer noch, dass Leute sie überprüfen, und manchmal ist es schwer zu sagen, ob eine Änderung beabsichtigt ist oder ein Fehler.
Ich würde gerne hören, ob jemand weitere Ideen hat, wie man Stile testet. :)
Aus der Perspektive eines Freiberuflers gibt es nichts Überwältigenderes als ein Gesicht voller CSS – viel einfacher anzuhängen als zu ändern. Was meiner Meinung nach die Ursache für das sich ständig erweiternde Stylesheet ist.
Vielleicht ist eine grundlegende Überarbeitung nötig, wie wir CSS **verwalten** – Kernstile, die unveränderlich sind und unverändert bleiben (nur nach einer offiziellen Überprüfung geändert werden) und dann modulare Stile, die obendrauf gelegt werden.
Ich denke an Harry Roberts' invertiertes CSS-Dreieck, etwas in Richtung https://www.groundwork.rocks/organisation/
Meine Strategie ist: eine SASS-Datei pro Markup-Datei (in einer statischen Seite könnte dies eine pro Seitenvorlage sein, in einer React-Seite wäre es eine pro Komponenten-Datei). Innerhalb jeder davon spiegeln die verschachtelten Selektoren direkt die Markup-Struktur wider und verwenden so weit wie möglich direkte Kind-Selektoren (>). Ich stelle sicher, dass der Wurzelklassenname der Komponente durch starke Namenskonventionen streng eindeutig ist, oder in Fällen, in denen jede Vorlage eine Seite darstellt, verwende ich tatsächlich eine ID für jede Seite. Die Verwendung von verschachtelten Selektoren und direkten Kind-Selektoren reduziert beide sprunghaft Nebeneffekte, und das Aufteilen in modulare Dateien macht das Ganze viel weniger beängstigend.
Ich bevorzuge diesen Ansatz ebenfalls. Da ich hauptsächlich in WordPress arbeite, neige ich dazu, Sass in globale, Seiten- und Plugin-Ordner aufzuteilen; global einschließlich Sass-Dateien für Header, Navigation, Footer und Typografie, Seiten-Dateien, die einfach beginnen als Archiv und Einzelplatz, und Plugins, die Sass-Blätter nach Bedarf erstellen, um benutzerdefinierte Stile zu unterstützen – von dort aus erweitern. Bei der Magento-Entwicklung gehe ich gerne ähnlich vor, mit globalen Dateien und Komponentendateien, die den Modulen im Vergleich zu Seiten/Vorlagen in WordPress entsprechen. Wenn ein Plugin/Modul aus dem Projekt entfernt wird, entfernen Sie das Sass-Blatt, oder wenn ein anderer Entwickler die Archivansicht anpassen muss, ist offensichtlich, wohin er gehen muss, sodass die Leute keine Angst haben müssen, versehentlich etwas zu entfernen, das sie nicht sollten.
Hallo Chris,
Ich muss widersprechen. CSS ist eine render blocking resource – **im Gegensatz zu Bildern und Skripten** – es ist direkt mit der **wahrgenommenen Geschwindigkeit** (UX) verbunden. Und fangen Sie gar nicht erst mit der „Internetgeschwindigkeit der Welt“ an :)
Nein, ich würde Ihnen damit helfen: „Injecten Sie den kritischen Pfad von CSS in ein
<style>-Element im<head>und laden Sie den Rest verzögert nach.“Als Antwort auf @MaxArt
Tatsächlich scheinen Sie mir zuzustimmen, wenn Sie das sagen.
Schlagen Sie vor, dies zu tun, um das Seitenrendern zu beschleunigen (weil CSS eine blockierende Ressource ist), oder schlagen Sie vor, dass **das genug ist**, dass es keinen Grund gibt, darüber hinauszugehen, um die Leistung noch weiter zu steigern? Ich bin verwirrt…
Das ist einer der Gründe, warum ich versuche, meine Klassen zwischen Funktionalität und Styling zu trennen. Wenn ich einem Element beispielsweise eine On-Click-Funktion geben möchte, füge ich eine beschreibende Klasse hinzu, wie
js-toggle-menu, und greife in JavaScript darauf zu, anstatt direkt auf den Klassennamen zuzugreifen, den ich zum Stylen verwendet habe.Ich habe an zu vielen Projekten gearbeitet, bei denen die Manipulation von CSS-Klassen versehentlich die Funktionalität beeinträchtigte – das ist zwar eher ein Markup-Problem als ein Stylesheet-Problem!
Ein Ansatz, der mir sehr geholfen hat, weniger Angst vor altem CSS zu haben, ist die Übernahme eines Musters für meine Stile: BEM.
Alles bekommt eine Klasse und Klassen, die einen modifizierten Zustand beschreiben. Es ermöglicht mir, einzigartig gestaltete Komponenten und generische Komponenten zu erstellen, was hilft, das Hinzufügen von CSS zu unseren Projekten zu reduzieren.
Medienblasen mit SASS helfen ebenfalls enorm. Wenn Ihre Mediabeschränkungen neben jeder Klasse stehen, ist dies ein Segen für die Wartbarkeit von Mediabeschränkungen.
Wenn Sie auf Modularität in Ihrem CSS planen und abzielen, ist Wartbarkeit eingebaut.
Wenn CSS außer Kontrolle gerät, wahrscheinlich eines der frustrierendsten und demotivierendsten Probleme in der Frontend-Entwicklung... Besonders wenn man in das Projekt einsteigt und von einer Wand aus stark verschachtelten Selektoren begrüßt wird.
Absolut zustimmend. Die Verwendung von BEM oder ähnlichen Namenskonventionen bringt den Vorteil, dass man immer einen Geltungsbereich für den CSS-Block hat, mit dem man arbeitet, so dass keine CSS-Überschreibung stattfindet. In Kombination mit separaten Dateien für CSS-Blöcke (BEM-Blöcke) wird man klar über die Überschreibung seines CSS informiert, indem man eine doppelte Datei erstellt.
In einigen Fällen kann dies zu einem unnötigen Wachstum von CSS führen, z. B. durch mehrmaliges Umschreiben der Grid-Funktionalität, aber das kann durch die Erstellung einer Art „Utility“-Klassenpräfix (z. B. u-) gelöst werden, das für Klassen verwendet wird, die sich um allgemeine Dinge kümmern.
BEM hilft, Vertrauen beim Löschen unbenutzten CSS zu schaffen, aber das Stylesheet wächst im Allgemeinen weiterhin im Laufe der Zeit. Ich bevorzuge die Praxis, Atomic CSS zu verwenden und dann CSS-Module zu verwenden, die diese atomaren Klassen zusammensetzen. So sind die Stile für ein Modul innerhalb seines CSS zugänglich, aber das Stylesheet wächst nie sehr stark.
Am anderen Ende des Spektrums von UnCSS steht PurifyCSS. Es kann eine Menge HTML- und JS-Dateien (über ein Plugin für Ihren bevorzugten Bundler/Task-Runner) erhalten, die es nach Klassennamen, Tags usw. durchsucht und dann Ihre Stile beschneidet, sodass nur verwendete Regeln übrig bleiben.
Ich benutze diese Technik seit Jahren. An eine bestimmte Komponente gebundenes CSS wird durch die eindeutige ID der Komponente gestylt, während für globales CSS geschriebenes CSS direkt Klassen oder Elemente anspricht. Ich finde es sehr einfach, mein CSS auf diese Weise ordentlich zu halten.
Schöner Artikel, ich bin sogar auf Websites gestoßen, bei denen wir die CSS-Datei aufteilen mussten, weil IE sie nicht vollständig lesen konnte (wegen der Selektoranzahlgrenzen in alten Versionen).
Ich stimme Ihnen bezüglich der Lösung von Stilen innerhalb von JS nicht zu: Je nachdem, wie Sie es tun, können die eingebetteten Stile für die gesamte Website gelten und nicht nur für Ihre Komponente. Wenn Sie eine andere Komponente erstellen, können Sie die Stile einer vorherigen Komponente erben: Sie werden sie verwenden, ohne es zu wissen, und am Tag, an dem Sie die ursprüngliche Komponente entfernen, verlieren Sie die Stile, die auch für andere Komponenten galten.
Meiner Meinung nach ist Namespacing die Lösung.
Ich gehe definitiv mit BEM.
Bei den meisten CSS-in-JS-Lösungen sind die Stile auf eine Komponente beschränkt, sodass sie nicht in eine andere Komponente überlaufen. Ich bin mir also nicht sicher, woher Sie diese Idee haben.
Vielen Dank, vielen Dank für diesen Artikel. Er hat mir geholfen, ein Kern-CMS-System von einem Framework zu unterscheiden und wie sie interagieren. Er leitet mich an, die Logik hinter dem Coding besser zu verstehen.
Deshalb habe ich kürzlich damit begonnen, mein CSS zu begrenzen. Alles CSS, das auf jeder Seite angezeigt wird, z. B. Schaltflächen, Links, Überschriften, kommt in die Haupt-CSS-Datei. Zusätzliches CSS, das seiten-spezifisch ist, wird in einer separaten Datei gespeichert, die nur auf dieser Seite geladen wird. Jegliches CSS, das von bestimmten Modulen verwendet wird, die entweder per PHP-Include-Funktion oder über Ajax in den Code eingefügt werden, z. B. Header, Footer, gemeinsame Popup-Dialoge, erhält eine separate Datei, die innerhalb dieses Ajax oder Includes geladen wird.
Auf diese Weise lädt jede Seite nur, was sie braucht!
Atomares CSS. Mehr braucht man nicht zu sagen.
Als Frontend-Entwickler haben wir früher diese erstaunlichen CSS-Komponenten auf Basis von Inhalten erstellt, ihnen Namen im Zusammenhang mit ihrer Domäne gegeben, manchmal generische Namen basierend darauf, was sie tun ... Es war wunderschön.
Dann gehen Sie eines Tages zu einem Meeting und werden gebeten, die Art und Weise zu ändern, wie eine Komponente aussieht, nur für ein paar Fälle. Kein großes Ding, fügen Sie einfach einen zusätzlichen Stil für diesen Fall hinzu... Moment. Habe ich ADD einen zusätzlichen Stil gesagt... Es hat begonnen. Die schwellende CSS-Datei ist auf dem Weg. Irgendwann machen Sie so viele Änderungen, dass Sie nicht einmal mehr sicher sind, was sie tut. Also erstellen Sie einfach einen neuen Satz von Stilen. Aber Sie können die alten nicht entfernen, weil irgendwie im Laufe der Zeit eine völlig unzusammenhängende Komponente jetzt auf einem Teil des Frankenstein angewiesen ist.
Diese Komponenten konnten auch niemals wiederverwendet werden. Es war praktisch fest kodiert.
Atomares CSS, ich benutze Tachyons, als Referenz, bietet alle Bausteine, die benötigt werden, um fast jeden Stil zu erstellen. Keine Überschreibungen, kein !important, einfach beim Erstellen stylen. Zuerst fühlt es sich ein wenig wie Wiederholung an, aber dann, wenn Sie etwas ändern müssen, tun Sie es einfach. Keine Nebenwirkungen. Das ist der Clou. Wenn Sie sich immer noch Komponenten-mäßig fühlen müssen, wickeln Sie die atomaren Stile einfach in eine Klasse ein und wenden Sie diese an. Ich persönlich ziehe es vor, alles zu geben und diese Klassen einfach aneinander zu ketten.
Das bedeutet, dass Ihr HTML tatsächlich das Styling erklärt... Sie müssen nicht einmal die CSS-Datei öffnen, um zu sehen, was angewendet wird.
Tachyons ist auch ein mathematisches System, was bedeutet, dass Sie Konsistenz erhalten. Keine willkürlichen Abstände, Ränder, Breiten und Höhen mehr, abhängig vom Entwickler.
Wie auch immer, ich habe die Belastung der wachsenden Saison des CSS total gespürt und ich stimme zu, dass atomares CSS die Mehrheit meiner Bedenken gelöst hat.
Toller Artikel!
Ich mag atomares CSS **wirklich** nicht: Es koppelt den Standort nicht nur eng an das verwendete Framework, sondern zerstört auch völlig den semantischen Wert von Klassen in HTML.
Wenn wir präsentationsbasierte Werte in HTML einfügen, machen wir einen Fehler, da dieser Wert in einigen Fällen unterschiedlich interpretiert werden kann: Was bedeuten Klassen wie
p10oderhelveticafür einen Screenreader? Was bedeutetbg-goldauf einem E-Ink-Display?Wir **täuschen** uns selbst, indem wir denken, dass sie immer das tun, was wir erwarten, und während wir den semantischen Wert von der Seite entfernen, machen wir unsere Elemente auch schwerer zu **verstehen** und zu debuggen (was ist der **Zweck** dieses
<div class="p5 mh10 bodoni fl">nochmal?). Ganz zu schweigen davon, dass Mediabeschränkungen umständlich werden.Ja, Stylesheets werden minimal oder nicht existent (sie könnten generiert werden), aber auch unsere HTMLs werden mit einer Fülle von winzigen Klassen gefüllt, deren Name nur für Eingeweihte klar ist. Und ohnehin bringt CSS selten ein Leistungsproblem... wenn doch, ist es Zeit zu refaktorieren!
Ich denke, der beste Ansatz ist der modulare: kleine Blätter für kleine Vorlagen, sowohl wartbar als auch isoliert in ihrem Geltungsbereich. Wir können das auf verschiedene Weise erreichen, einschließlich Transformatoren, CSS in JS und auch durch die Verwendung von Namenskonventionen wie BEM, wenn wir keine moderneren Werkzeuge verwenden können.
Es tut mir leid, aber so etwas wie „semantischer Wert von Klassen“ gibt es nicht, zumindest nicht so, wie Sie es meinen; soweit ich weiß, sind *Bildschirmlesegeräte* nicht an Klassenattributen interessiert. Man könnte argumentieren für „Microformats“ und dergleichen, aber das ist für die Diskussion irrelevant, da ihr Zweck über das Styling hinausgeht. Mehr dazu in diesem Artikel, den ich geschrieben habe.
CSS spielt eine Schlüsselrolle, wenn es um Leistung geht (CSS ist eine render-blocking Ressource). Es gibt einen Grund, warum wir Werkzeuge haben, die „kritisches CSS“ extrahieren und inline setzen.
Auf jeden Fall ist „es ist Zeit für ein Refactoring“ wirklich etwas, von dem man hofft, es nie sagen zu müssen; und das Tolle an „Atomic CSS“ ist, dass es kein „Refactoring“ gibt.
Der beste Ansatz ist der, der die Probleme eines jeden löst, und da nicht alle Entwickler die gleichen Probleme haben, gibt es keinen *besten Ansatz*…
Thierry, es tut mir leid, aber Sie haben ziemlich viel von dem falsch verstanden, was ich gesagt habe.
Sicher, den gibt es. Natürlich ist er nicht für den Endbenutzer: er ist für den *Entwickler*. Denn Code muss nicht nur konsumiert, sondern auch *gewartet* werden. War das in meinem Kommentar nicht klar, dass ich von der Entwicklung sprach?
Es gibt ein altes Sprichwort: „Schreibe den Code immer so, als ob derjenige, der deinen Code wartet, ein gewalttätiger Psychopath wäre, der weiß, wo du wohnst.“ (John Woods, 1991). Und auch: „Programme müssen für Menschen zum Lesen geschrieben werden und nur nebenbei für Maschinen zur Ausführung.“ (Harold Abelson, 1984).
Definitiv nicht der Punkt. Es ist eine blockierende Ressource, solange die Seite zum ersten Mal geladen wird; mit Lazy Loading ist das Problem im Grunde gelöst.
Das gilt für jede Art von Ressource, die grundlegend dafür ist, die Seite möglichst schnell reaktiv zu machen, einschließlich Skripten. Der Punkt ist, dass man ziemlich große Stylesheets mit Megabyte-Größe haben kann und Browser sie trotzdem gut verarbeiten. Umgekehrt kann das Parsen und Kompilieren von JavaScript deutlich mehr kosten (1-10ms pro KB auf Mobilgeräten), und *das* blockiert immer den Hauptthread, auch wenn es per Lazy Loading geladen wird. Ganz zu schweigen von der Ausführung.
Der Haupteinfluss von CSS auf die Leistung liegt im Malen und Neuanordnen von Inhalten. Das ist die „Ausführung“ von CSS und *das* kann eine Seite träge machen, und es wird *nicht* durch Atomic CSS gelöst.
Was ohnehin immer noch auf Atomic CSS als gute Maßnahme angewendet werden muss.
Fair genug. Das Schlechte ist, dass es viele Gründe gibt, warum Atomic CSS sowieso nicht die richtige Wahl ist.
Andererseits eliminieren modulare und gekapselte Stylesheets das Refactoring-Problem ebenfalls praktisch (wenn ein modulares Sheet refaktoriert werden muss, ist es sehr wahrscheinlich, dass es sich um die *gesamte Komponente* handelt, die es braucht – das Gegenteil trifft *nicht* zu).
Das ist auch eine Rechtfertigung für Spaghetti-Code und Monkey Patches. D. h. technische Schulden.
Ich habe Stylesheets für eine sehr große Vielfalt von Websites und Anwendungen codiert, von einfachen Landingpages bis hin zu großen CMS, ich habe auch Atomic CSS getestet, aber es schien mir nie die richtige Wahl zu sein, da die Nachteile den möglichen Gewinn bei weitem überwogen.
Die besten Anwendungsfälle sind tatsächlich einfache Landingpages, die nicht gepflegt werden müssen – aber oft nicht einmal ein atomares Framework rechtfertigen; und einfache Mockup-Seiten aus demselben Grund – die oft von Design-Tools mit der gesamten Präsentation in
style-Attributen oder in CSS mit Klassen, die Schichten und Gruppen während des Designprozesses widerspiegeln, exportiert werden könnten.Für den Rest habe ich selten hässlichere und unnatürlichere Lösungen für die moderne Webentwicklung gesehen als Atomic CSS. Selbst Dinge wie CSS und HTML in JavaScript sehen im Vergleich viel besser aus.
@MaxArt
Ich fasse mich kurz
Wir haben Atomic CSS bei Yahoo! entwickelt, um unsere Stylesheets um mehr als 50 % zu reduzieren (was die *wahrgenommene Geschwindigkeit* stark verbesserte), die gemeinsame Nutzung von Komponenten zwischen Teams zu erleichtern, besseres Caching zu fördern, die Zeit von der Prototypenerstellung bis zur Produktion zu beschleunigen, neuen Mitarbeitern den Einstieg zu erleichtern und mehr. All das sind *große Gewinne*. „Hässlich und unnatürlich“ mag ein Grund sein, warum Sie es nicht nutzen wollen, aber ich glaube nicht, dass es ein stichhaltiges Argument dagegen ist.
Hey, ich verstehe, woher Sie kommen. Aber ich stimme einfach nicht zu.
Ich würde gerne mehr darüber erfahren, was Sie mit semantisch meinen… Denn genau das verursacht einige der Probleme.
Für den Uneingeweihten kann meine einzelne Klasse tatsächlich schwerer zu verstehen sein, als meine 8 kleinen Klassen. Sie packen mehr als eine Deklaration in einen Stil, richtig? Jetzt muss ich das Stylesheet öffnen und sehen, was auf dieser Klasse liegt. Dann kann diese Klasse einen Elternteil haben, der sie beeinflusst. Also muss ich auch dort nachsehen, und so weiter. Ihre wunderbare Kaskade von Stilen ergibt für Sie Sinn, und nur für heute. Typischerweise nutzen Sie auch Ihre HTML-Struktur zur Definition von Stilen. div > ul > li.fun ist doch völlig in Ordnung, oder? Aber was Sie tatsächlich tun, ist, eine Abhängigkeit einzuführen. Sie können nicht einfach den Stil oder das Markup ändern. Dinge werden einfach brüchig.
Geschäftsbereiche ändern sich auch im Laufe der Zeit, daher denken Sie vielleicht, es macht Sinn, es so zu nennen, wie es ist, aber Sie irren sich. Das Erstellen einer .order-Klasse mag in Ordnung sein, aber dann kann nichts, was Sie hineinpacken, woanders verwendet werden. Was, wenn Ihr Chef kommt und sagt, wir müssen jetzt dieses neue Ding machen, das genau wie eine Bestellung ist, mit ein paar Unterschieden, was tun Sie dann? Kopieren Sie das Bestellmodul und benennen Sie alles um? Versuchen Sie, das Gemeinsame gemeinsam zu machen und die Unterschiede zu Unterklassen zu machen? Am Ende vergessen Sie, dass CSS nur dazu gedacht ist, das Markup zu stylen. Es ist nicht dazu gedacht, eine Bedeutung außerhalb dessen zu vermitteln, was dieses Markup aussieht? Das sollte CSS vermitteln. Keine Semantik.
Im Laufe der Zeit ist Atomic CSS leichter zu ändern, leichter zu entdecken und leichter zu warten. Nun, zumindest in meiner Erfahrung.
Danke für den Gruß! Ich stimme voll und ganz zu, dass es eine modulare Zukunft für CSS gibt. Bin sehr gespannt, an diesen Dingen zu arbeiten.
Ich kann nicht anders, als zu denken, dass die Branche weit daneben liegt und innovative Ansätze entwickelt, ohne die wirklichen Probleme zu verstehen.
Es spielt keine Rolle, welche CSS-Methode verwendet wird, das CSS wird wachsen und irgendwann unhandlich werden, wenn der Ansatz für Design und Wachstum spontan ist, was, seien wir ehrlich, oft der Fall ist.
Das Problem ist, dass spontanes Design schlecht kommuniziert wird, zum Beispiel, weil es kein Referenzhandbuch gibt.
Dies ist besonders problematisch für große Projekte. Nehmen wir an, es gibt 1 oder 2 Designer, die normalerweise zu vielen Stakeholdern Bericht erstatten müssen. Oft produzieren andere Leute das CSS – es ist eine technische Aufgabe, und zwangsläufig gibt es Bereiche, in denen das Design vage ist und keine Klärung verfügbar ist.
Fragen wie „Was, wenn die Daten, die wir hier anzeigen, viele Zeilen umbrechen?“ kommen oft spät oder werden übersehen und säen zukünftige Spontaneität.
CSS-Autoren versäumen es wiederum, mit den HTML-Autoren zu kommunizieren, die genau verstehen müssen, welches HTML benötigt wird, um das Design zu erfüllen.
Es ist noch schlimmer, wenn CSS-Autoren davon ausgehen, dass HTML-Autoren nur unstrukturierte generische Regeln benötigen und alles selbst zusammensetzen können.
Geben Sie mehreren Teams undokumentiertes CSS, und jedes wird ähnliche, aber unterschiedliche HTML-Strukturen erstellen, und zufällig wird das CSS alle Bemühungen heute wünschenswert stylen – aber zukünftige Stiländerungen werden aufdecken, dass diese Strukturen unterschiedlich sind.
Ein Designer, der eine geringfügige Änderung an einer Seite fordert, kann dazu führen, dass der HTML-Autor die Anforderung erfüllt, indem er eine Regel findet, die „gut genug“ ist, aber letztendlich für einen anderen Zweck bestimmt war. Ein zukünftiger Wartungsfehler.
Ebenso wird der CSS-Autor sporadisch neue, gleich aussehende, aber unterschiedliche Regelsets erstellen, als Reaktion auf Fehler, z. B. wenn Komponente A Widget B enthält und die Ausrichtung leicht daneben liegt. Dies führt dazu, dass der HTML-Autor mehrere brauchbare Regelsets entdeckt und nicht weiß, welches das am besten geeignete ist.
Was normalerweise fehlt, ist nicht eine CSS-Methode, sondern die Kommunikation, eine Form der Referenz für den HTML-Autor, z. B. ein umfassender Styleguide oder eine Pattern Library für die Website.
Ich habe die Vermutung, dass das positive Feedback, das viele innovative CSS-Methoden erhalten, fälschlicherweise zugeschrieben wird. Der Verdienst gebührt tatsächlich dem Prozess des Rewrites, der zur Übernahme der neuen Methode notwendig war. Das alte CSS benötigte die Umstrukturierung mehr als die neue Methode, aber die neue Methode erhält den Ruhm.
Es ist ein Neuanfang, also freuen wir uns natürlich über die neue Version, sie erfüllt die Anforderungen der Website von heute, genau wie wir uns damals über die Vorgängerversion gefreut haben, die die damaligen Anforderungen erfüllte. Aber während wir dabei sind, erstellen wir doch bitte eine Dokumentation.
Verpassen Sie nicht, die Dokumentation wird, wenn sie richtig gemacht ist, auch als umfassende Testsuite dienen. Alle CSS-Regelsets können demonstriert, in unterstützten Browsern getestet, auf Barrierefreiheit, Designkonformität geprüft werden, alles an einem Ort.
Wenn wir mehrere Entwicklungsteams haben, die unser CSS nutzen, brauchen wir das, wir wollen nicht lernen, unbekannte oder schwer zugängliche Seiten zu navigieren (z. B. Datenaufbau, Zugriffsrechte), bevor wir überhaupt mit der Fehlersuche bei einem Layout-Problem beginnen können, das ist zeitaufwendig.
Danke.
Ich stimme Ihnen zu, was die Dokumentation betrifft, aber unsere Wege zur Dokumentation mögen unterschiedlich sein.
Das Design jeder Benutzeroberfläche MUSS die Möglichkeit der Spontaneität unterstützen. Benutzer können Ihnen nicht sagen, was sie von einem Mockup oder sogar einer Demo halten. Erst wenn sie das Ding tatsächlich benutzen, bekommen sie ein Gefühl dafür, ob sie es mögen oder nicht. Manager verlassen sich nur auf das, was sie für cool halten, und Entwickler müssen nur raten, bis sie Feedback erhalten.
Wie oft sind Sie aus einer Feedback-Sitzung gekommen und wurden darüber informiert, dass es eine Reihe von UI/Layout-Änderungen gibt… wollen wir, dass das Designteam den Styleguide aktualisiert, bevor die Entwickler mit der Umsetzung der Konzepte beginnen können?
Wie wäre es, wenn ein Designer und ein Entwickler zusammen sitzen und die Benutzeroberfläche aktualisieren, anstatt in funktionalen Silos zu leben? Wie erstaunlich wäre es für einen Entwickler, die Freiheit zu haben, jeden Teil des CSS/HTML zu ändern, alles hinzuzufügen, was er mochte, die Struktur und die Stile zu ändern, wissend, dass er keine Nebenwirkungen verursacht?
Also… lasst uns einen Weg für schnelles Iterieren haben, ohne dass eine Fülle von Klassen und Strukturen nötig ist, und wenn es dann einen allgemeinen Konsens über eine bestimmte Komponente von den Endbenutzern gibt, dann packen wir sie zusammen, legen sie in eine Dokumentation und einen Styleguide für zukünftige Referenz.
Ich stimme voll und ganz zu, dass Dokumentation lohnenswert ist, aber nicht, bevor Sie herausgefunden haben, was funktioniert.
Wenn ich von großen Projekten spreche, meine ich multinationale Konzerne oder Regierungen, die üblicherweise Dutzende bis Hunderte von Diensten haben, die denselben Corporate Theme und Richtlinien folgen.
In diesen Organisationen gibt es nicht genügend CSS-Autoren, um mit jedem HTML-Autor zusammenzuarbeiten, während dieser arbeitet, und die meiste HTML-Autorenschaft ist global verteilt, sogar an andere Unternehmen ausgelagert.
HTML-Autoren haben eine Reihe von Fähigkeiten und Rollen von Anwendungsentwickler bis hin zu WYSIWYG-Content-Autor. Es wäre überhaupt nicht erstaunlich für HTML-Autoren, CSS-Bearbeitungen vorzunehmen, selbst wenn sie Schreibzugriff darauf hätten, das wäre Chaos.
Die Fähigkeit, solche Bearbeitungen ohne Nebenwirkungen durchzuführen, ist genau dasselbe Chaos in umgekehrter Richtung. Es mag trivial sein, Inhalte zu erstellen, die den heutigen Corporate Theme- und Barrierefreiheitsanforderungen entsprechen, aber wenn sich das Thema ändert (z. B. Fusion von Unternehmen oder andere Rebranding-Maßnahmen, Browserkompatibilitätsfehler, Barrierefreiheitsfehler), erfordert jeder Dienst, der das CSS abweicht, überlagert oder verzweigt hat, ernsthafte Aufmerksamkeit. Einfache Änderungen können massive finanzielle Kosten verursachen.
Ich stimme zu, dass Sie herausfinden müssen, was funktioniert, bevor Sie Ihrem gesamten HTML-Autorstamm mitteilen, was zu tun ist und wie es zu tun ist. Hoffentlich erstellen und pflegen die erfahrensten Ressourcen die beispielhafte Dokumentation, und die Menge an Prototyping und Live-Proofing kann auf ein überschaubares Maß begrenzt werden.
Die Dokumentation ist tatsächlich iterativ und nie in Stein gemeißelt, ein Projektteam sollte sich des Mechanismus zur Meldung bewusst sein, wann es unerforschtes Terrain erwartet, damit es das erhält, was es rechtzeitig braucht. Ihr Dienst kann eine „Beta-Version“ für solche neuen Komponenten sein, um Vertrauen zu gewinnen, bevor er für breitere Nutzung freigegeben wird.
Die meisten Projekte in diesen Organisationen tun jedoch nichts Bahnbrechendes und müssen nur genau wissen, was zu tun ist. Oft übersehen oder ignorieren solche Projekte, wenn sie etwas Neues brauchen, ein bestehendes Muster, besonders wenn sie das Design von einem Legacy-System aus antreiben, das sie neu schreiben.
Ich verstehe, dass Designs oft unvollkommen sind und in Produktion gehen, bevor sie vollständig verstanden werden. Ich weiß jedoch nicht, ob dies eine spontane Reaktion rechtfertigt.
Die Stakeholder des Corporate Themes wären sicherlich daran interessiert, die Grenzen ihrer Designs zu verstehen, damit sie ihre Komponenten und die Richtlinien aktualisieren und die gewonnenen Erkenntnisse an die breitere Zielgruppe weitergeben können. Es sollte definitiv iterativ sein.
Ja, in diesem speziellen Fall haben Sie vielleicht Recht.
Obwohl ich in verteilten Teams arbeite und es möglich ist, Leute zusammenzubringen. Ich habe nicht das Gefühl, dass der multinationale Faktor hier eine Rolle spielt, vielmehr beschreiben Sie funktionale Silos mit einem Berichtsmechanismus für die Anforderung von Änderungen. In diesem Fall wird alles langsam und schwierig sein. Nicht nur die CSS-Autorenschaft.
Trotz dieses Szenarios haben Sie eine Aussage über die Branche im Allgemeinen gemacht, die Lösungen schafft, ohne das Problem zu verstehen. Natürlich funktioniert diese Art der CSS-Autorenschaft nicht immer, nicht für alle Projekte und nicht für alle Teams… Was macht eine Lösung aus? Das bedeutet nicht, dass die Branche mit der Entwicklung daneben liegt.
Obwohl ich glaube, dass große multinationale Organisationen von diesem Ansatz profitieren würden, sogar noch mehr als andere.
Ja, ich habe bereits gesagt, dass meistens die Dokumentation fehlt, unabhängig von der CSS-Methode, die HTML-Autoren müssen genau verstehen, welches HTML sie produzieren müssen, um dem Design zu entsprechen.
Die CSS-Autorenschaft ist nur in frühen Iterationen langsam, wo alles neu ist. Verständlicherweise, da ein Corporate Theme für unzählige HTML-Autoren erstellt wird, die ihm folgen sollen, ist jeder Cent, der in die Einrichtung und effektive Kommunikation investiert wird, gut angelegt.
Öffentliche oder unternehmensweite Code-Repositories wie GitHub verfügen bereits über die Werkzeuge zur Erleichterung von Feedback, Berichterstattung, und wir können sogar Pull-Requests einladen, falls ein HTML-Autor über ausreichende CSS-Autoren-Erfahrung verfügt, um dies zu tun.
Ich würde erwarten, dass ein ernsthaftes Unternehmen, das in der Lage ist, in großem Maßstab zu entwickeln, eine Handvoll CSS-Autoren und einen unbegrenzten Pool von HTML-Autoren hat (insbesondere im Laufe der Zeit haben Corporate Themes Langlebigkeit, normalerweise).
Daher glaube ich nicht, dass es produktiv ist, die HTML-Autoren übermäßig mühsames HTML schreiben zu lassen, nur weil es das Leben des CSS-Autors erleichtert. Viele HTML-Autoren bevorzugen es, Markdown mit sparsamem Einsatz von HTML-Elementen zu schreiben. CSS-Autoren müssen verstehen, dass es eine schlechte Idee ist, allen verschachtelten Listen-Elementen BEM-Style-Klassennamen zu geben und HTML-Autoren zu zwingen, unnötiges HTML zu schreiben.
Viele CSS-Methoden lösen die Kopfschmerzen des CSS-Autors, indem sie das HTML auf diese Weise überkomplizieren. CSS-Grundlagen werden herausgenommen; Vermeiden Sie Spezifität, vermeiden Sie die Kaskade/Verschachtelung, vermeiden Sie globalen Geltungsbereich – als ob das überhaupt real wäre. Sie laufen alle auf „Kollisionen vermeiden“ hinaus.
Spezifität, Kaskade, Verschachtelung oder globaler Geltungsbereich für Kollisionen verantwortlich zu machen, ist Sündenböcke zu finden, anstatt anzuerkennen, dass Kollisionen auftreten, wenn das CSS nicht gut verstanden wird, keine richtige Dokumentation hat, spontan und unbedacht bearbeitet wird und der Designer sich nicht die Zeit genommen hat, die sinnvollste, semantisch reichhaltigste HTML-Struktur für eine Komponente zu überlegen, bevor er sie stylt.
Viele CSS-Methoden lehnen die Grundlagen von CSS so sehr ab, dass sie gar kein CSS sind, sondern CSS-Vermeidungsschemata.
Zum Beispiel verschandeln BEM und Atomic CSS das HTML mit zwangsläufig unvorhersehbaren Klassennamen (gut zu benennen ist schwer).
Besonders ärgerlich ist, dass es besser ist, Elemente nach der notwendigen HTML-Struktur auszuwählen. Wenn das CSS beispielsweise ein Element anhand eines Aria-Attributwerts auswählt, sehen HTML-Autoren nur korrekt gestylte Elemente, wenn sie zugängliches HTML schreiben. Wenn der CSS-Autor beschließt, Elemente nur nach Klassennamen auszuwählen, kann der HTML-Autor damit durchkommen, minderwertiges HTML zu produzieren.
Ich habe viele Leute gehört, die verteidigen, dass sie viele kleine CSS-Dateien erstellen, in einigen Fällen eine pro HTML-Datei.
Das mag mit bestimmten CMS oder Frameworks oder PHP funktionieren, wo der Server nur das Notwendige liefert. Aber wenn man von Standard-HTML mit CSS und JS spricht, hat das einen Nachteil. Auch wenn die Dateien sehr klein sind, kann das Laden vieler Dateien länger dauern als eine größere Datei: für jede Datei gibt es einen GET-Befehl, der zum Server und zurück reisen muss.
Dies ist besonders wichtig bei mobilen Verbindungen, wo die Latenz im Vergleich zu Kabel/DSL/Glasfaser-Verbindungen viel höher ist.
(a) Ich bin mir bei den neuesten Verbesserungen und aktuellen Standards, die mehrere Dateien pro GET-Anfrage abrufen, möglicherweise nicht ganz sicher.
nur meine zwei Cent
Es scheint, als ob uns Entwicklern bei jedem Problem ein Framework empfohlen wird. Ich stimme zu, dass Frameworks von unschätzbarem Wert sein können, aber es hängt wirklich von den Umständen ab.
Wenn Sie sehr kontrolliert mit Ihrem Code umgehen, wie ich
Frameworks haben 3 Probleme
Sie müssen nicht nur nach dem Namen des Stils in der Dokumentation suchen, sondern Sie haben Klassennamen wie .helvetica, die Sie überall in Ihrem HTML verwenden müssen, wo Sie diese Schriftart möchten, anstatt einfach in Ihrem CSS zu schreiben, zum Beispiel
Wichtiger ist, dass Entwickler sich meiner Meinung nach anstatt eines Frameworks zusammensetzen und einen Prozess für das Schreiben und Warten von CSS-Code teilen müssen.
Im Laufe der Jahre habe ich zufällig Dinge entdeckt, die ich mir vor Jahren gewünscht hätte, und jetzt kann ich Code schreiben, der wartbarer ist als der vom letzten Jahr.
Meine bevorzugte Philosophie vor dem Codieren ist: „Wie schreibe ich die geringste Menge an Code für diese Anwendung?“ damit sie schnell und wartbar ist.
wie jetzt
Ich schreibe immer Mobile First und platziere nur die Anpassungen an der Klasse, die für Tablet und Desktop benötigt werden, in einer Media Query in einem eigenen Abschnitt. Zum Beispiel
…später auf der Seite…
Auf diese Weise beeinträchtige ich bei einer Änderung nicht die Klasse in jedem Breakpoint auf allen Geräten. Ich weiß, dass der Code am Anfang immer mobil und für alle Geräte gilt.
Ich behalte auch Eigenschaften, die häufig auf der gesamten Website verwendet werden, in einem eigenen Abschnitt und hänge einfach weitere Klassennamen an, die diese Eigenschaft benötigen, anstatt diese Eigenschaft überall in jeder Klasse zu wiederholen. Zum Beispiel (für eine Beispiel)
Ich würde es lieben, wenn wir all das miteinander teilen würden.
Frameworks sind gut und ich denke, sie sind in Ordnung zur Ergänzung, aber nicht für Kern-CSS, wenn Sie wirklich Websites und Anwendungen für die Produktion gestalten.
Ich bin sicher, es gibt viele Entwickler da draußen, die brillante Wege haben, Dinge zu tun. Wir brauchen nur einen Weg, unseren Prozess miteinander zu teilen.
Sie sind hier total auf dem richtigen Weg. Haben Sie schon Functional CSS gesehen? Es ist kein Framework, sondern ein konzeptionelles Modell für den Prozess des Schreibens von CSS. Eher ein Paradigma als ein Framework. Es hat einige Ähnlichkeiten mit dem, was Sie gerade tun. Es gibt jedoch einige Frameworks, die nach dem Functional CSS-Stil aufgebaut sind.
In zwanzig Jahren wird das einzige, was Code im Web schreibt, KI sein. Wir (Menschen) werden es nicht einmal verstehen können. Wir werden der KI einfach sagen, was wir wollen, und sie wird den Rest erledigen.