Das ist in letzter Zeit zu einem ziemlichen heißen Thema geworden. Es wurde auf mehreren Konferenzen und Meetups, an denen ich persönlich teilgenommen habe, besprochen. Ich habe Folien dazu gesehen. Ich kenne Leute, die buchstäblich kein CSS in der Produktion verwenden. Ziemlich verrückt, oder?
Ich dachte, wir könnten hier ein kleines Lagerfeuer machen und so rational wie möglich darüber sprechen und alle relevanten Punkte behandeln.
Wir müssen offensichtlich immer noch Dinge stylen
Niemand sagt, dass wir keine Stile brauchen. Wir müssen immer noch Dinge stylen, worüber gesprochen wird, ist, wie und wo wir das tun. Ich war gerade in einer Diskussionsrunde bei BrooklynJS und Jed Schmidt sagte
Das Schlimmste an CSS sind die „Cascading“ und die „Sheets“
Was hat jemand gegen CSS?
Dies sind die Hauptargumente gegen CSS
- Alles ist global. Selektoren werden mit allem im DOM abgeglichen. Man braucht Benennungsstrategien, um dem entgegenzuwirken und die Dinge effizient zu halten (die schwer durchzusetzen und leicht zu brechen sind).
- CSS wächst mit der Zeit. Kluge Leute in großartigen Teams geben zu, dass sie Angst vor ihrem eigenen CSS haben. Man kann Dinge nicht einfach löschen, da es so schwer ist zu wissen, ob es absolut sicher ist, dies zu tun. Also tun sie es nicht, sie fügen nur hinzu. Ich habe ein Diagramm gesehen, das die Größe von Produktions-CSS über fünf Jahre hinweg zeigt, wie die Größe stetig wächst, trotz des Fokus des Unternehmens auf Performance.
- Man kann mit Stilen in einer Programmiersprache dynamischer sein. Das Argument lautet ungefähr so: „Wir pimpen CSS sowieso schon mit Präprozessoren, also können wir es auch noch auf die nächste Stufe heben.“ Man könnte zum Beispiel (wenn man es wirklich kontrovers machen wollte) Stile auf einer User-Agent-Zeichenfolge oder der aktuellen Breite eines Moduls basieren.
Was ist dann die Alternative zu CSS?
Die Alternative sind Inline-Stile. Also statt
Wir reden von
Ich habe noch niemanden gehört, der argumentiert, dass man diese Stile direkt auf den von Ihnen erstellten HTML-Code anwenden sollte. Die Idee ist, dass man Stile über JavaScript auf Elemente anwendet.
React treibt viele dieser Gedanken voran
React ist eine JavaScript-Bibliothek, die bei View-Anliegen auf Websites hilft. Sie wird hauptsächlich von Facebook entwickelt, ist extrem beliebt und gewinnt an Dynamik. Sie hatte eine eigene Konferenz und entwickelt sich sogar zu einem Framework zum Erstellen nativer Apps.
Eines seiner Kernkonzepte ist das „Virtual DOM“. Man erstellt den HTML-Code, den man verwenden möchte, direkt in JavaScript. Zuerst mag das ziemlich seltsam erscheinen, aber diese Kopplung zwischen HTML und JavaScript ist immer vorhanden, und es gefällt den Leuten, sie von Anfang an zusammenzuschreiben. Ich zitierte kürzlich Keith J Grant, und ich werde es wieder tun
Diese Kopplung ist real und unvermeidlich. Wir müssen Event-Listener an Elemente auf der Seite binden. Wir müssen Elemente auf der Seite von unserem JavaScript aus aktualisieren. Unser Code muss bidirektional und in Echtzeit mit den Elementen des DOM interagieren.
... das Mantra von React ist es, aufzuhören so zu tun, als wären das DOM und das JavaScript, das es steuert, getrennte Anliegen.
React bietet die Möglichkeit, Inline-Stile direkt zu verwalten. Sie nennen sie, was sie sind: Inline-Stile. Hier ist ein grundlegendes Beispiel
Siehe den Pen Inline Styles with React von Chris Coyier (@chriscoyier) auf CodePen.
Die virtuelle DOM-Sache, die React macht, ist auch wegen ihrer Geschwindigkeit wichtig. DOM-Manipulation wird in JavaScript im Allgemeinen als langsam angesehen, und daher wäre das Verwalten von Stilen durch DOM-Manipulation auch langsam. Aber React hat den Zauberstaub, der die Manipulation schnell macht, sodass sich die Leute bei der Arbeit mit React keine Sorgen um die Langsamkeitsprobleme machen.
Hier ist ein weiteres Beispiel von Chris Nager.
Die Stilerstellung ist immer noch abstrahiert
CSS ist die Abstraktion des Stils von allem anderen. Es sind buchstäblich Dateien, die Sie öffnen und bearbeiten, um Stile zu verwalten. Sie werden dies wahrscheinlich nicht aufgeben, wenn Sie zu einem JavaScript-basierten Inline-Stil-Setup wechseln. Sie hätten dann wahrscheinlich style.js statt style.css. Sie würden immer noch Schlüssel/Wert-Paare schreiben und Dateien in einem Build-Prozess zusammenfügen.
Es wird anders sein, aber die Abstraktion der Erstellung ist immer noch vorhanden.
Was bringt Ihnen die Inline-Stillegung?
Kaskadenlos
Die beängstigende „globale“ Natur von CSS wird neutralisiert. Die Kaskade, abgeschwächt. Ich glaube nicht, dass man sagen kann, dass die Kaskade vollständig verschwunden ist, denn einige Stile werden vererbt, so dass Stile immer noch an Kindelemente weitergegeben werden können, und das ist eine Definition von Kaskade. Aber die modulare Natur dieser Art der Entwicklung führt wahrscheinlich zu weniger überlappenden Stilproblemen. Ein Modul hier ist so gestylt, ein Modul dort ist so gestylt – wahrscheinlich keine Konflikte in Sicht.
Alles JavaScript
Ein Gefühl, das ich bekomme, ist, dass einige Leute einfach gerne und lieber komplett in JavaScript arbeiten. Man könnte sicherlich einen Teil des Erfolgs von Node.js diesem Umstand zuschreiben.
Dynamische Stile
„Zustand“ ist weitgehend eine JavaScript-Angelegenheit. Wenn Sie möchten/brauchen, dass sich der Stil basierend auf dynamischen Bedingungen (Zuständen) auf Ihrer Website ändert, kann es sinnvoll sein, das Styling, das mit der Zustandsänderung zusammenhängt, zusammen mit allem anderen zu handhaben.
In einem kürzlichen Vortrag auf der CSS Conf (Folien) verwendete Colin Megill das Beispiel des neuen Tweet-Eingabebereichs von Twitter als dynamischen Ort, der den Zustand anderer Elemente ändert.

Wer macht das eigentlich?
Ich hörte Colin Megill sagen, dass sie buchstäblich null CSS bei „großen Dingen“ verwenden und keine Leistungsprobleme feststellen. Ich werde dies mit URLs aktualisieren, wenn ich sie erhalte. Ich höre, ein großes Projekt wird innerhalb eines Monats live gehen.
Ich weiß, Jed Schmidt arbeitet an der mobilen Version von UNIQLO, und man kann die Inline-Styles dort sehen

Update von Jed: Diese Version der Website ist komplett Sass, und die Inline-Styles, die Sie dort sehen, stammen von JavaScript-Animationen.
Christopher Chedeau hat darüber gesprochen und ist buchstäblich ein Facebook-Ingenieur, also vielleicht auch Facebook ein bisschen?
Kann dieses Konzept mit, Sie wissen schon, CSS kombiniert werden?
Selbst wenn Sie sich auf das Konzept der Inline-Stile eingelassen haben, kann es dann harmonisch mit etwas (muss ich es sagen) normalem CSS koexistieren? Ist das Seitenlayout als Inline-Stil angemessen? Ergibt eine globale Typografie nicht immer noch Sinn? Ich bin mir nicht sicher, ob wir in dieser Welt schon weit genug sind, um eine Best Practice zu sehen.
Im obigen Beispiel m.uniqlo.com wird auch eine 57k CSS-Datei ausgeliefert, und Sie können auch im DOM Hinweise auf klassenbasierte Zustände (z. B. „is-open“) sehen.
Viele Leute mögen das wirklich nicht
Überraschung! Es gibt mehr Argumente dagegen als dafür. Als ich Meinungen dazu sammelte, sagte ich Lea Verou: „Manche Leute mögen diese Idee wirklich!“ Woraufhin sie mir sagte
Man kann Menschen finden, die Exkremente essen, das bedeutet nicht, dass es eine gute Idee ist.
Lassen Sie uns andere Argumente durchgehen
Styling ist das, wofür CSS da ist
Dies ist der „religiöse“ Blickwinkel, der uns wahrscheinlich nicht sehr weit bringen wird.
Die Trennung der Belange ist CSS inhärent
Die Trennung der Belange ist ein sehr nützliches Konzept beim Erstellen komplexer Websites. Beim Schreiben von CSS erhalten Sie automatisch eine Trennung der Belange: Es ist eine Datei, die nur für das Styling bestimmt ist.
Inline-Stile stehen an der Spitze des Spezifitäts-Spektrums
Eine geringe Spezifität in CSS bedeutet, dass Sie, wenn Sie auf Spezifität angewiesen sind, um einen Styling-Krieg zu gewinnen, diese als Werkzeug zur Verfügung haben. Wenn Sie bereits an der Spitze stehen, haben Sie diesen Spielraum nicht.
Die !important-Deklaration kann immer noch einen spezifischen Eigenschafts-/Wert-Styling-Krieg über einen Inline-Stil gewinnen, aber das ist ein etwas anderes Konzept und ein noch widerwärtigerer Kampf.
Manche einfache Zustände sind in CSS viel einfacher
Wie macht man :hover/:focus/:active in Inline-Styles? Gar nicht. Man simuliert es. Und was ist mit Media Queries?
Klassen hinzufügen/entfernen ist bereits ein perfektes Werkzeug für Zustandsänderungen
JavaScript ist wirklich gut darin, Klassen zu Elementen hinzuzufügen/zu entfernen/zu ändern. Und Klassen sind eine perfekte Möglichkeit, den Zustand in CSS zu handhaben.
.is-open {
display: block;
}
Außerdem können Sie den Zustand von Elternelementen ändern (indem Sie eine Klasse ändern), um den Zustand vieler Elemente innerhalb zu beeinflussen
.tweet-too-long {
.tweet-button {
opacity: 0.5;
}
.warning-message {
display: inline-block;
}
}
Browser sind nicht dafür gemacht, mit Styling auf diese Weise umzugehen
Inline-Stile sind zum Beispiel buchstäblich Daten, die in einem Attribut direkt am DOM-Element gespeichert werden. Das DOM-Gewicht ist eine Sache (es kann Browser langsam machen oder zum Absturz bringen). Diese Styling-Informationen werden jedoch nicht nur im Stilattribut gespeichert, sondern auch im DOM in den Stileigenschaften des Elements dargestellt. Ist das dasselbe, oder ist dies eine Art doppelt gewichtetes Styling?
Gibt es Geschwindigkeitsunterschiede zwischen…
var thing = document.getElementById("thing");
thing.style.width = "100px";
thing.style.height = "100px";
thing.style.backgroundColor = "red";
var thing2 = document.getElementById("thing-2");
thing2.setAttribute("style", "width: 100px; height: 100px; background-color: red;");
Wurde das herausgefunden, um zu entdecken, was am besten browserübergreifend ist? Wenn sich diese Dinge durchsetzen, müssen sich Browser weiterentwickeln, um Dinge auf andere Weise zu handhaben?
Der Browser hat dieses ganze Konzept des CSSOM. Können wir das irgendwie intelligenter durch JavaScript statt Inline-Stile nutzen?
CSS ist erfolgreich wegen seiner Einfachheit
CSS ist ziemlich einfach zu erlernen. Viele Leute kennen es. Man kann dafür Leute einstellen. Es ist portabel.
Einige dieser „dynamischen“ Styling-Probleme können mit normalem CSS gelöst werden
- Es gibt Demos, die das Messen von Breiten und das Subtrahieren fester Werte davon beinhalten. CSS kann das mit
calc(). - Es gibt Demos, die das Festlegen von
font-sizeoderline-heightbeinhalten, das von der Browserbreite oder -höhe abhängt. CSS kann das mit Viewport-Einheiten. JavaScript für diese Art von Dingen zu verwenden, ist Überinstrumentierung. - Es gibt Demos, die Farben dynamisch auf vielen verschiedenen Elementen ändern. CSS wird das mit nativen Variablen tun können.
Wir haben das 1996 versucht und es war damals eine schlechte Idee
CSS ist cachefähig
Das Netzwerk ist immer noch der Engpass. CSS-Dateien können zwischengespeichert werden, sodass das Netzwerk überhaupt nicht ins Spiel kommt und das ist rasend schnell.
Sie können React immer noch verwenden
React ist ziemlich großartig. Hier ist ein Artikel von David Khourshid über das Styling von React-Komponenten in Sass. Mark Dalgleish mag die globale Natur von CSS nicht und hat funktionierende Konzepte zur Lokalisierung von Selektoren. Glen Maddern erläutert dies in Interoperable CSS.
Interessiert sich denn niemand mehr für progressive Verbesserung?
Dies ist eine breitere Diskussion und fällt hier vielleicht nicht in den Rahmen. Da Websites (einschließlich React-basierter Websites, die Inline-Styles verwenden) vollständig serverseitig gerendert werden können, bedeutet dies, dass sie unter Berücksichtigung der progressiven Verbesserung erstellt werden können. Obwohl "kann sein" und "was es tatsächlich fördert" unterschiedliche Dinge sind.
Ich mache E-Mails. Das ist genug Inline-Styling für mich. Also, nein danke. Ich bleibe bei SCSS.
Alles ja!
In React pflegt man das Style-Attribut im HTML nicht wirklich – es wird von der Bibliothek naturgemäß für Sie generiert. Sie können also weiterhin stylesheet-ähnliche Module (in JS) schreiben.
Fügen Sie Ihre Stile nicht wirklich inline hinzu? http://premailer.dialect.ca/
CSS ist einfach. Und schnell, auch. Punkt.
Javascript ist es nicht.
Müsste Chris den Namen seiner Website in „css.js tricks“ ändern?
Ich habe gekichzelt. Wenn dies Reddit wäre, hätten Sie von mir einen Upvote erhalten.
Ehrlich gesagt habe ich mich entschieden zu kommentieren, weil diese Frage aufkam. Ja, wird Chris den Namen ändern?
Sicherlich, wenn das CSS im HTML ist, ist die Seite größer und dauert länger zum Herunterladen…
Was, wenn JavaScript im Browser deaktiviert ist?
Aber es gibt keine CSS-Datei(en) zum Herunterladen, so dass es die Seite tatsächlich beschleunigen könnte, je nachdem, wie viel Sie Stile wiederholen.
Das denke ich auch immer wieder, und ich habe keine Ahnung, warum Leute denken, alles über JS auf eine Seite zu legen, sei eine gute Idee. Wenn Leute, die Bildschirmleser, NoScript usw. verwenden, Ihre Website nicht sehen können, haben Sie ein Problem.
Ja! Aber dann würde das Ganze auch nicht funktionieren, oder?
Was ist, wenn Sie eine App mit Webviews erstellen, in denen Sie wissen, dass JavaScript immer aktiviert sein wird, und dieser Inhalt hauptsächlich oder vollständig offline mit gespeicherten Daten verwendet wird?
Nein, Sie sollten sich nicht auf JavaScript verlassen, um eine Seite zu rendern, die über das Internet geladen wird, aber HTML + JS wird heute für viel mehr verwendet.
Wenn JavaScript deaktiviert ist, ist ein Großteil des Internets für diesen Benutzer nutzlos. Das ist meiner Meinung nach ein müdes Argument. Wann haben Sie das letzte Mal JavaScript deaktiviert?
Das CSS ist nicht im HTML. Es wird dem HTML nach dem Laden der Seite über JavaScript zugewiesen. So oder so muss der Browser die Stile herunterladen.
@Kyle Ich deaktiviere JS nur, um sicherzustellen, dass meine Websites für Benutzer funktionieren, die JS nicht aktiviert haben. Es gibt verschiedene Arten von Benutzern, die JS im Allgemeinen deaktiviert haben
Behinderte Benutzer, die Bildschirmleser verwenden müssen
Datenschutz-Freaks, die glauben, dass das Deaktivieren von JS das Tracking verhindert
Die behinderten Nutzer sind mir wichtiger als die Datenschutz-Freaks, aber das Web muss zugänglich sein. Und all Ihre Inhalte über JS auf die Webseite zu werfen, ist nicht zugänglich.
@Kyle @Zeke Sie müssen JS nicht deaktiviert haben, damit seine Abwesenheit Probleme verursacht. Vor ein paar Wochen brach meine Verbindung ab, während hulu.com geladen wurde (zu Hause, auf meinem Laptop). Hulu dachte, ich hätte JavaScript deaktiviert, da es nicht geladen wurde.
Ja, aber wenn sie nichts sehen können, ist es egal, wie es aussieht.
Um Ihre Frage bezüglich deaktiviertem JS zu beantworten: Sie müssten sicherstellen, dass die App isomorphes JS ist: Dann würde React bei jeder Seitenanfrage die CSS-Stile in Node (serverseitig) anwenden.
@Zeke Y –
Jemand hat das vielleicht schon darauf hingewiesen, aber Screenreader sind schon seit einiger Zeit JavaScript-fähig – daher bezweifle ich, dass viele behinderte Menschen es immer noch ausschalten.
Warum googeln die Leute das Zeug nicht … das ist doch im Grunde unser Job.
http://a11yproject.com/posts/myth-screen-readers-dont-use-javascript/
@RioBrewster Ich erinnere mich nicht mehr, wo ich das gesehen habe, aber ich habe vor kurzem etwas gelesen, das besagte, dass etwa 90% der Benutzer mit Screenreadern JS nicht aktiviert hatten, obwohl sie JS hätten verwenden können.
@Brad bezüglich
Stimmt. Aber Sie haben die Leute vergessen, die ohne JS surfen
@Zeke Y
Bildschirmleser-Benutzer schalten JS nicht aus. JS funktioniert in einem Bildschirmleser etwas anders, aber auch das bedeutet nicht, dass es deaktiviert ist. Beachten Sie also bitte: JS aus/JS deaktiviert hat nichts mit Bildschirmleser-Benutzern zu tun. Das ist ein großer Mythos.
Hier sind einige Daten
Etwa 98% aller Screenreader-Benutzer haben JS aktiviert. Stellen Sie also sicher, dass Ihre Inhalte einschließlich Ihres JS zugänglich sind.
http://a11yproject.com/posts/myth-screen-readers-dont-use-javascript/
Wie wäre es mit etwas Ähnlichem, wie es Polymer macht? Sie können Ihre Komponenten separat in verschiedenen CSS-Dateien stylen, und das System fügt sie dann dem Header mit dem Gültigkeitsbereich der Komponente hinzu.
Ich schätze den neutralen Blick, den Sie hier werfen!
Ich freue mich darauf zu sehen, wie sich solche Ideen entwickeln, werde aber vorerst definitiv beim „normalen“ CSS bleiben.
Eine Träne bildete sich gerade in meinem rechten Auge, als ich an die Webdesigner dachte, die kein Javascript beherrschen.
Sie sind arbeitslos! Fragen Sie mich, woher ich das weiß.
Annie, Annie, Annie, mein Kichern hat mich auf den Hintern fallen lassen
Das ist alles Spaß und Spiel, bis jemand ein Auge aussticht… Was ist mit Browser-Malerei/Zeichnung bei jeder „Inline“-Stiländerung? Cross-Browser-Kompatibilität? Muss ich die ganze App neu deployen, wenn eine Designänderung nötig ist?
Danke, dass Sie Licht ins Dunkel bringen, Chris :)
Also, für die Leute, die das für eine gute Idee halten, wie machen Sie Media Queries? Machen Sie sie so ähnlich?
(Code nicht getestet)
if (window.matchMedia(“(min-width: 400px)”).matches) {
/* Der Viewport ist mindestens 400 Pixel breit /
} else {
/ Der Viewport ist weniger als 400 Pixel breit */
}
Zusammenfassung
Gibt ein neues MediaQueryList-Objekt zurück, das die geparsten Ergebnisse der angegebenen Media-Query-Zeichenfolge darstellt.
Syntax
mql = window.matchMedia(mediaQueryString)
Dabei ist mediaQueryString eine Zeichenfolge, die die Media Query darstellt, für die ein neues MediaQueryList-Objekt zurückgegeben werden soll.
Weitere Informationen hier: https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia
http://projects.formidablelabs.com/radium/
Als ich zum ersten Mal sah, wie React HTML und JS koppelt, dachte ich, das sei verrückt, aber nach der Verwendung von React macht es viel Sinn. Ich bin sicher, wir werden dasselbe über die Kopplung von CSS empfinden.
Ich übersehe wahrscheinlich etwas, aber wie sieht es mit Wartung und Skalierbarkeit aus? In meinen Projekten, wenn ich das Padding von Elementen in einer Liste ändere, möchte ich definitiv, dass alle Listen folgen
Dafür gibt es keine Barriere. Ich denke, das Missverständnis ist, dass man Inline-Stile schreibt. Das tut man nicht. Man schreibt Objekte anstelle von Klassen, die programmatisch angewendet werden. Das ist kein Problem.
Diese Leute verstehen nicht, was sie tun… Ich will nicht gemein sein (obwohl ich oft so rüberkommen kann), aber diese Leute schaden ihren Kunden und guten Designern / Front-End-Entwicklern; wegen dem, was nur als komplette Ignoranz bezeichnet werden kann!
Indem Sie CSS in JS oder, schlimmer noch, in HTML verschieben, eliminieren Sie jeden potenziellen Vorteil des Zwischenspeicherns von CSS, der Wiederverwendung von Klassen oder der Anwendung von Regeln auf mehrere Selektoren. In großen Projekten passiert das oft!
Es ist in Ordnung, das eine oder andere Stück CSS in HTML zu haben, vielleicht erstellen Sie einen Prototyp, der Kunde möchte dies jetzt online haben, also muss es in diesem beklagenswerten Zustand starten; aber Sie sollten vereinbart haben, es als nächsten Schritt aus dem DOM / JS herauszunehmen. Für eine hochfrequentierte Website hat dies in der Summe der verschwendeten Bandbreite und in Bezug auf die zusätzliche Arbeit, die Sie leisten müssen, um mit der Website zu arbeiten, wenn Sie Code in andere Bereiche verschieben, einen Dominoeffekt.
Es ist kein Nicht-CSS, es ist CSS, das an eine Stelle verlagert wurde, wo es überhaupt keinen Sinn macht, CSS zu haben! Die Argumente für CSS in JS können mit spezifischeren Selektoren für Add-Ins wie Slider, Nice-Scroll, (fügen Sie hier zusätzliche Dinge ein) und dem MVS (Minimum Viable Selector) für Kernthemen oder website-spezifisches CSS überwunden werden.
Wir verstehen es, für manche Leute ist es jetzt üblich, alles bei Envato zu kaufen und wie ein Baby zu weinen, wenn sie einen Profi bezahlen müssen, „um das Ding zu ändern, um das zu tun, was sie wollen“; aber als Profis ist es unsere Aufgabe, darauf hinzuweisen, dass jede Entscheidung Kosten (technische Schulden) mit sich bringt, und manchmal ist es besser, ein 15-Dollar-Plugin nicht zu modifizieren, sondern das Problem neu anzugehen.
Neben dem oben Gesagten und dem Offensichtlichen für JS-injektierte; wenn Sie kein JS haben, sind sie Foo-barred. Selbst wenn sie JS haben, enthält die JS-Datei jetzt Präsentationscode, Sie müssen in einer oder mehreren anderen Dateien nachsehen, um einen Prozess zu entwickeln, um CSS in und aus JS zu verschieben, oder die Einschränkung der CSS-Styling-Fähigkeiten eines möglicherweise weniger sachkundigen JS-Entwicklers akzeptieren; und die zusätzliche Maschinenkapazität, die erforderlich ist, um den zusätzlichen Code zu verarbeiten, den Sie nachrüsten müssen.
Chris, schlag diesen Leuten ins Gesicht (natürlich nicht wirklich), sie töten das Web! Als Alternative ist das einfache Ändern von CSS-Klassen in JS immer besser als das direkte Injizieren von CSS. Haben Sie einen Klassenkollisionskonflikt, erweitern Sie ihn in Sass in einer umbenannten Klasse und aktualisieren Sie dann Ihr JS!
Riesige Sprünge zu „das Web töten“ und dem Wunsch, nicht gemein zu wirken, während man ausdrücklich gemeine Dinge beiseite lässt… Einige Ihrer Punkte sind gültig, und einige scheinen zumindest aus einem Missverständnis des Konzepts zu stammen.
CSS =/= Stil. Das Hinzufügen eines Stil-Tags zu einem Element und die Vererbung dieses Stils an ein Kind reicht nicht aus, um ihm dieselbe Bedeutung wie CSS zu geben.
Eine Aufblähung der Bandbreitennutzung ist möglich, doch CSS trägt in der realen Produktion ohnehin dazu bei. Zum Beispiel „bei einem Klassenkollisionskonflikt, erweitern Sie ihn in Sass in einer umbenannten Klasse, dann aktualisieren Sie Ihr JS!“
Die Trennung von Stil und DOM ist großartig, aber muss diese Trennung Sprache und Ort und Anfrage und Produktionszyklus umfassen?
Bezüglich des Caching: JavaScript wird gecacht, Krise abgewendet.
Und ein „möglicherweise weniger sachkundiger JS-Entwickler-Styling-Skill“ ist gleichbedeutend mit einem „möglicherweise weniger sachkundigen CSS-Entwickler-Styling-Skill“ oder jedem anderen möglicherweise weniger sachkundigen. Ich würde argumentieren, dass es schwieriger ist, mit den Fähigkeiten von möglicherweise sachkundigeren Personen umzugehen, da diese Dinge auf Weisen zum Laufen bringen, die wir nicht verstehen, anstatt nicht herausfinden zu können, wo sie falsch lagen.
Ich denke, die Idee, eine programmatische Sprache zu verwenden, um das Styling an das DOM zu liefern, ist ein Blick nach vorne. Wie es hier implementiert wird, ist vielleicht nicht der Gewinner, aber das Konzept ist es wert, darüber nachzudenken. Wir verwenden bereits so viele Tools, um diese Funktionalität in unser CSS zu zwängen.
Ich stimme zu, dass dies noch lange nicht die Lösung für unseren Wunsch ist, unserem Publikum die perfekte Interaktion zu präsentieren. Hinzu kommt, dass das Replizieren von CSS-Klassen in JS und die Annahme, dass JS funktioniert, eine neue Reihe von Komplikationen mit sich bringt. Das wird sich noch nicht auszahlen.
Sie verfehlen den Punkt. Zero-CSS > gecachtes CSS. Wenn das JS, das das CSS erstellt, gecacht wird, erhalten Sie dasselbe Angebot, wenn nicht sogar besser (dynamisch).
Und zur Info: Das Stylen mehrerer Elemente ist absolut machbar und leistungsfähiger als normales CSS. Es wird nur anders implementiert. Anstatt Regeln auf Klassen/IDs anzuwenden, erstellen Sie Objekte und geben diesen Eigenschaften. Diese Objekteigenschaften werden dann in die DOM-Elemente injiziert, denen Sie sie zuordnen. Das ist wirklich einfach und bietet eine Fülle von Funktionen, die sonst nicht verfügbar wären (zumindest nicht bequem), wie z. B.: das Teilen von Eigenschaften zwischen Objekten und das Erstellen komplexer Bedingungen.
Hinweis: Ich bin bei diesem Thema wie Chris unentschlossen.
Modulares CSS ist bereits durch SASS in Verbindung mit effektiver Namensgebung (SMACSS) möglich, was zur Reduzierung von Bloat beiträgt. Das Nachverfolgen, wo Stile in Ihrem Projekt verwendet werden, ist manchmal immer noch mühsam. Es wäre interessant, modular geladenes CSS in Webkomponenten in Zukunft zu sehen (wie Polymer oben erwähnt).
Ich erinnere mich, als Sie einen Podcast über die Shop Talk Show mit Nick Pettit gemacht haben. Ein Zuhörer hatte gefragt, ob die Front-End-Entwicklung sich in Richtung JavaScript bewegt, sollte ich HTML/CSS aufgeben und nur noch JS für die Front-End-Entwicklung verwenden. Nur Sie sagten, dass HTML/CSS für das gedacht sind, was sie tun, und dass sie sich auch ständig weiterentwickeln, es ist nicht nötig, einfache Dinge zu verkomplizieren, nur weil Sie ein „JS-Typ“ oder so etwas sein wollen. Warum hat sich Ihre Meinung jetzt geändert?
Ich denke, viele Probleme, die wir mit CSS als Sprache haben, sind bereits durch Sass gelöst. Ich denke, die Globalisierung ist ein riesiges Problem, aber bis wir zu etwas wie Webkomponenten übergehen, sehe ich nicht, dass Inline-Stile oder JS die Zügel in die Hand nehmen. Ich denke, Webkomponenten werden auch unsere hacky Art, Dinge nach BEM zu definieren, beheben. Ehrlich gesagt sind Inline-Stile dumm. JS-Styling ist nur Inline-Stile mit einer tatsächlich logischen Methode zur Auswahl von Elementen.
Falsch. Zur Laufzeit kann Sass letztendlich nur das tun, was CSS tun kann.
#Colin, es ist nur teilweise falsch.
Zero-CSS dreht sich ebenso sehr, wenn nicht sogar mehr, um den Build-Prozess als um die Laufzeit.
Die eigentliche Arbeit besteht darin, ein stabiles, zuverlässiges und verständliches Styling zu pflegen, und das betrifft den Quellcode (in welcher Sprache / welchem Tool / welcher Bibliothek / Methodik Sie auch immer arbeiten).
Was es wert ist, ich arbeite an einer mittelgroßen React-App, bei der wir eine Kombination aus Inline-Styles und traditionellem CSS verwenden – wir haben viele dynamische SVG-Diagramme, die fast alle Inline-Styles sind, aber die eher „dokumentenartigen“ Teile der App sind in Style-Sheets. Die Schwierigkeit, Pseudo-Selektoren und Media Queries zu verwenden, macht reine Inline-Styles unpraktisch, aber ich glaube nicht, dass diese Probleme prinzipiell unlösbar sind.
Auf der Seite der Stylesheets haben CSS-Module die Probleme mit unbeabsichtigten Stilkonflikten erheblich reduziert.
Das Problem, auf das wir bei dem Hybridansatz am häufigsten stoßen, ist, dass es viele Stellen gibt, an denen wir dieselben Variablen sowohl in CSS-Stilen als auch in Inline-Stilen haben möchten, und ich habe dafür noch keine gute Lösung gefunden. Vielleicht gibt es eine Möglichkeit, eine JSON-Datei mit unseren Markenfarben usw. zu haben, die in SASS-Variablen gerendert und in die App importiert wird?
Denken Sie daran, dass Best Practices keine platonischen Ideale sind, sondern nur der beste Ansatz für einen bestimmten Zeitpunkt. „Best Practices“ bedeuteten früher, verschiedene Websites für Netscape und Internet Explorer zu erstellen, und CSS war einst eine aufstrebende und offen gesagt unpraktische Methode, um echte Arbeit zu leisten. Best Practices änderten sich von Schrift-Tags und Tabellenlayouts zu der Welt, in der wir heute arbeiten, und es gibt nichts, was dagegen spricht, dass wir jetzt an der Schwelle einer weiteren Veränderung stehen. Bleiben Sie aufgeschlossen.
Warum sollten Sie JSON für Ihre Markenfarben benötigen, wenn Sie einfach Variablen direkt in SASS verwenden können? In unseren großen Apps haben wir typischerweise eine Branding- oder Variablen-Datei, die die projektweiten Variablen enthält. Es besteht wirklich keine Notwendigkeit, all dies in einer externen Datendatei zu haben.
Beispiel: Wir verwenden eine Farbskala für Heatmaps in dynamisch generierten Diagrammen. An einigen Stellen werden die Farben in SVG-Füllungen oder -Strichen verwendet; an anderen Stellen in regulären Elementfarben oder Hintergrundfarben. Wir können nicht einfach eine einzelne Modifikator-Klasse für jede Farbe auf der Farbskala erstellen, da es verschiedene Eigenschaften gibt, denen wir die Farbe zuweisen möchten. Wir könnten Sass verwenden, um Klassen für jede Farbe auf der Skala für den Bedarf jeder Komponente an der Farbe zu generieren, aber das erzeugt viel CSS. Es ist viel einfacher, wenn wir einfach Farben hinzufügen können, wenn wir die Grafik generieren.
Darüber hinaus erfordert die alleinige Verwendung von CSS-Klassen für das Styling immer noch, dass Sie Ihr JS mit Ihrem CSS koppeln; anstatt die Farbwerte zu duplizieren, duplizieren Sie die Klassennamen. Es fügt eine Indirektion ohne sinnvolle Abstraktion hinzu.
Großartige Aufschlüsselung der Gründe auf beiden Seiten hier, Chris. Auch einige gute Punkte, die ich in meinem Artikel übersehen habe. :)
Ich hatte das Vergnügen, an einigen React-Apps zu arbeiten, bei denen die gesamte Seite ein React-Komponentenbaum war. Die meisten meiner Stile wurden in den CommonJS-Dateien definiert und mit JSX
style={styles.whatever}inline gesetzt. Es ist super praktisch, alles für eine Komponente an einem Ort zu haben, aber die einfachen :psuedo-Zustände wurden aus dem klassischen Stylesheet schmerzlich vermisst.Ich habe mich schließlich auf einen guten Kompromiss geeinigt, bei dem die meisten interaktiven Dinge (mit vielen Zuständen) mit komponenteninlinenem CSS behandelt werden, aber die „schreibgeschützten“ Dinge wie das allgemeine Layout und globale Dinge mit einem SCSS-Build-Prozess behandelt wurden.
Außerdem bietet Webpack einige praktische Loader zum Einbinden von CSS (oder zu verarbeitendem SCSS) direkt in Ihren CommonJS-Build.
Obwohl ich noch kein React-Projekt für die Produktion bearbeitet habe, habe ich das Gefühl, dass ich zu den gleichen Schlussfolgerungen kommen würde. Ich verstehe es, es gibt gute Gründe, das CSS mit der Komponente zu verpacken, aber nicht zu 100% auf alle gängigen CSS-Styling-Praktiken zu verzichten.
In meinem aktuellen Projekt verwenden wir (noch) kein Webpack, sondern ein Gulp-Skript, das größtenteils dasselbe tut.
Ich stimme zu, packen Sie die komponentenspezifische Benutzeroberfläche mit der Komponente. Das ist eine GROSSARTIGE IDEE. So müssen Sie nicht eine ganze UI-Bibliothek laden, nur um das Styling einer Komponente zu erhalten, à la Bootstrap. Aber die Standardeinstellung auf Inline-Styles, die direkt in JS geschrieben werden, scheint ein Ausweg zu sein, und in diesem kurzsichtigen Prozess, der für größere Projekte erforderlich ist, geht so viel Großartiges verloren.
Großartiger Artikel, Chris. Die Punkte wurden viel weniger fanatisch gemacht, als ich es in der Vergangenheit getan habe, als ich mich auf den Trend konzentrierte, alles in JS zu verlagern.
App-Entwickler und CSS waren schon immer uneins, und oh ja, ich erinnere mich nur allzu gut an JSSS.
Ich sprach mit einem Facebook-Entwickler hier in Seattle über genau dieses Thema und er bezeichnete diesen Trend als den „radikalen Flügel von React.js“. Während es großartige Einblicke in diese Art der Entwicklung und Ideen gibt, die ich gerne annehmen möchte, gibt es in diesem unreifen Framework keine Beweise, die mich dazu bringen, zu glauben, dass wir das Kind mit dem Bad ausschütten müssen.
Hölle, wir waren alle überzeugt, dass Rails auch Enterprise-Skala erreichen würde … ups.
Wenn es so weitergeht, kehre ich zum Printdesign zurück
Ich denke, das spricht etwas wirklich Wesentliches an. Designer haben einen Platz irgendwo zwischen Photoshop und dem Anwendungszustand eingenommen. Dieser Platz wird immer kleiner werden, da Client-Side-Apps immer mehr zustandsbehaftet werden.
JA! Programmierer denken wie nur Programmierer können… es wird eine ganze Menge entfremdeter Designer geben!
Meiner Meinung nach sollten Designer das tun, was Designer am besten können, und mit Photoshop aufhören. Das Stylen von Komponenten und Anwendungen wurde schon vor langer Zeit zu einer Entwicklungsaufgabe, als reines CSS den Bedürfnissen der Community nicht mehr gerecht werden konnte.
Mit genügend Wireframe-Details wird ein Entwickler immer schneller eine Anwendung stylen können als ein Designer, und kann dies tun, während er sicherstellt, dass Markup und Klassen in der gesamten Anwendung konsistent sind. Ein Designer sollte sich nicht um Namensräume und CSS-Konventionen kümmern müssen, die in der Anwendung verwendet werden, sondern sich einfach damit beschäftigen, wie es aussieht. Das ist so viel einfacher und erfordert viel weniger Hin und Her.
dann sollten Entwickler aufhören, sich Designer zu nennen!
Ich bin eine Designerin, die in den frühen 90ern angefangen hat, Code zu lernen. Warum? Weil ich als ausgebildete Designerin und Künstlerin gelernt habe, meine Materialien und Prozesse zu verstehen. So wie es wichtig ist zu verstehen, wie eine Druckmaschine funktioniert und was Tinte wiegt, wie verschiedene Pigmente ausbluten und in der Untermalung nutzlos sind, oder wie Divs und CSS die Arbeit in HTML und PHP viel einfacher gemacht haben, ist es unerlässlich, dass wir verstehen, womit wir arbeiten. Es ist ein alter Künstlerbegriff, aber „Wahrheit der Materialien“ sollte meiner Meinung nach für jede Webarbeit gelten. Jedenfalls hat Google Designer und Programmierer in eine enge Ecke gedrängt und mag JavaScript nicht!
Ich bin so froh, dass dieses Thema ans Licht gezerrt wird. Egal auf welcher Seite des Themas man sich befindet, es ist schwer, die Fehler von CSS zu ignorieren. Hoffentlich dienen Gespräche wie diese dazu, die Sprache zu verbessern. Ich denke, Responsive Design und die Komplexität der Verwaltung des Elementzustands in JS werden letztendlich das Ende dieser Technik sein… aber es löst, was meiner Meinung nach die größte Schwäche von CSS ist: Scoping.
Konventionen wie BEM können helfen, das Scoping-Problem zu überdecken, aber sie können schwer durchzusetzen sein, besonders in Teams mit unterschiedlicher Erfahrung. Solange wir keine Webkomponenten (und genauer gesagt das Shadow DOM) oder eine neue Technologie bekommen, die hoffentlich schnell Anklang findet, stecken Entwickler mit weniger als idealen Lösungen für einen großen Fehler in einer Säule des Webs fest.
Ich persönlich? Ich habe kein Problem damit. Ich denke, für Web-Apps kann es eine sehr kreative Lösung sein, die sich wahrscheinlich bereits mehr auf JS verlassen, als eine durchschnittliche Website. Aber letztendlich ist es nicht die langfristige Lösung, die Entwickler oder das Web sich erhoffen.
Und vielleicht ist es das!
http://dev.w3.org/csswg/css-scoping/#scope-atrule
CSS Scoping ist durch die Fortschritte der Spezifikationen, die die Möglichkeit bieten, Webkomponenten im Web zu erstellen, gründlich gelöst.
Wenn du nur einen Hammer hast, sieht jedes Problem wie ein Nagel aus.
Das ist genau mein Gedanke.
Verwenden Sie das geeignete Werkzeug. Lernen Sie, bessere Selektoren zu schreiben (Marcos 2 Cents unter seinen 10 Cents). Übernehmen Sie Verantwortung für Ihren eigenen Code. Das eigentliche Problem dahinter ist die Abneigung, das Bequeme aufzugeben und stattdessen zu versuchen, ein Werkzeug zu erweitern, um neue Ideen zu umfassen. Für all jene, die schon länger dabei sind, ist es ähnlich der Argumentation, dass Photoshop jetzt zu viele Funktionen hat, die nichts mit Pixelmanipulation zu tun haben, und Illustrator zu viele Funktionen, die nichts mit Vektorzeichnung zu tun haben. Wir müssen nicht über all die anderen Adobe-Apps diskutieren, das Konzept, alles mit so wenigen Tools wie möglich zu ermöglichen, schadet mehr als es hilft. Diese ganze Argumentation über Inline-CSS scheint ein anderes Tier zu sein, aber das ist es nicht. Lassen Sie Javascript Javascript sein, CSS CSS und HTML HTML. Es gibt viele Tools, um zu überprüfen, welches CSS verwendet wird und welches nicht. Viele Tools zur Syntaxprüfung sind verfügbar, usw., usw. Ich denke, mehr von uns „hinter den Kulissen“ Front-End-Leute brauchen mehr Bildung in UX/UI, als sich darüber Sorgen zu machen, welche Tools unser Denken automatisieren, unsere Tastenanschläge reduzieren oder ob wir vier Leerzeichen oder vier Tabs verwenden sollen. Was sich nicht geändert hat, ist, wie wichtig der Inhalt und das Erlebnis für einen Benutzer ist, wenn er eine Web-App verwendet, eine Website besucht, mit einem Kiosk, einer Museumsausstellung usw. interagiert. Es gibt so viel mehr da draußen als Web-Apps auf einem Telefon und Websites… das Problem ist, es scheint immer mehr Fokus darauf zu liegen, wie etwas gebaut wird, anstatt darauf, was erlebt wird.
Sehr gut gesagt. UX ist für ein Frontend viel wichtiger als der Ort, an dem sich das CSS befindet. Außerdem gibt es nicht tonnenweise HTML- und CSS-Entwickler, die einzigartig genug sind, JS genauso gut zu kennen. Die Trennung von Stil und Funktionalität wurde jahrelang erkämpft, warum sollten wir die beiden im Namen schlechter Organisation wieder zusammenführen wollen?
Validierung
Branding/Co-Branding
Barrierefreiheit
Was ich ziemlich oft sehe, sind Entwickler, die keine der Standards kennen und einfach nur kopieren/einfügen/wiedergeben, was sie woanders sehen. Wenn Sie also einen guten Entwickler haben, der alle Webstandards kennt und sicherstellen kann, dass alles gültig ist, und dieser die anfängliche Vorlage zum Kopieren erstellt, dann ist das in Ordnung. Aber irgendwann werden sich Fehler in den Code einschleichen, repliziert werden und weitere Fehler verursachen, oder Entwickler werden Komponenten so zusammensetzen, dass eine nicht konforme Ausgabe entsteht. Indem Sie die Anliegen getrennt halten, haben Sie die Möglichkeit, jedes Anliegen sowohl unabhängig als auch in seinen Variationen besser zu validieren.
Ich bin mir nicht sicher, wie ich eine Markenpräsenz in React verwalten würde. Müsste ich eine Schaltfläche unterteilen und für jede gebrandete Schaltfläche eine andere Unterklasse haben und dann dasselbe für jede Komponente in einer App tun, für die der Kunde sein Logo oder bestimmte Markenfarben wünscht? Wenn ich 1000 Kunden habe, die jeweils eine geringfügige Variation im Branding wünschen, hätte ich lieber 1000 kleine CSS-Dateien, die ich dynamisch laden kann, als eine ganze Anwendungskomponentenbibliothek, multipliziert mit 1000, pflegen zu müssen. Denn ich kann diese CSS-Dateien in ein Content-Management-System einfügen, während ich mir nicht sicher bin, ob ich dasselbe mit den React-Komponenten oder anderen JS-Dateien tun kann – das könnte Designern/Content-Autoren/Brand-Managern zu viel Kontrolle geben.
Ich denke also, dieser kombinierte Ansatz könnte für kleine, fokussierte Websites mit sehr begrenzten Anpassungsmöglichkeiten von Benutzer zu Benutzer ausreichend sein. Ich glaube nicht, dass der Ansatz gut skaliert. Man betrachte zum Beispiel die Natur von Facebook – wo Reactjs seinen Ursprung hat. Man hat ein einziges Layout/eine einzige Marke. Es ist sehr festgelegt und starr. Benutzer können filtern, welche Inhalte angezeigt werden, aber nicht, wie sie angezeigt werden. Es werden also immer Inhaltsboxen in einem blauen 3-Spalten-Layout sein. Der andere Aspekt ist, dass für Facebook die Website DAS PRODUKT IST. Sie können also das Geld ausgeben, um wirklich sicherzustellen, dass dies alles gut definiert ist. In anderen Unternehmen ist die Website ein Tor zum eigentlichen Produkt oder Service, und sie werden nicht das gleiche Maß an Detailgenauigkeit oder Aufwand darauf verwenden, sicherzustellen, dass es „richtig“ ist, und am Ende werden sie dafür in späteren Wartungskosten und Kundenfrustration bezahlen.
Ich kommentiere zum ersten Mal, dieser Beitrag hat solche Emotionen ausgelöst, dass er mich vom einfachen Beobachter zum Teilnehmer gemacht hat.
Wenn sie JS für "Styling" benötigen, dann ist ihr Design meiner Meinung nach falsch. Wenn sie das Endergebnis ihrer Logik verfolgen würden, müsste sich der Kreis zum Betriebssystem und allen anderen Systemen schließen. Themes.
Android, Windows, Linux usw. haben das alles durchgemacht, und am Ende muss man das Aussehen und Gefühl von allem von einem Ort aus ändern können. Das war doch die ursprüngliche Absicht von CSS, oder nicht?
Die Tatsache, dass Leute ihre Apps so schlecht verhunzt und ihren Code über so viele Jahre hinweg falsch verwaltet haben, ist *kein* guter Grund, jahrelanges Wissen und Erfahrung wegzuwerfen.
Übrigens verwende ich ab und zu Inline-Styles, aber in sehr speziellen Fällen in Apps, wo es einfach so unbedeutend oder eine Randanforderung ist, oder im allgemeinen Webdesign, um Zeit zu sparen (z. B. Mockups, Anpassungen an Live-Sites für die Kundenprüfung usw.).
Die Antwort: Webkomponenten.
Ich habe gut davon gelebt, ein Jahr hinter allen anderen zu bleiben, nie an der Spitze, die Browser zu beobachten, wie sie sich ändern, keine Hacks zu implementieren (Star-Hack, jemand?), keine Polyfills zu verwenden (es sei denn, absolut notwendig), ohne Schatten zu leben, bis sie unterstützt wurden (anstatt 4 Div-Wrapper mit einem Haufen geschnittener Bilder hinzuzufügen).
Jetzt das. Der Shadow DOM, ECMA Script 6 Module, Webkomponenten werden diese Probleme lösen.
Hab einfach Geduld. Das ist ein verrückter Hype, sei vorsichtig.
Könnte ich nicht mehr zustimmen. Ich verstehe, dass Menschen Angst haben, ungenutztes CSS zu löschen, aus Furcht, etwas anderes zu verpfuschen, aber das liegt daran, dass oft schlampiges CSS geschrieben wird. Wie bei den meisten anderen Dingen auf der Welt konzentrieren sich die Leute darauf, Dinge so schnell wie möglich zu erledigen und nicht tatsächlich richtig.
Wir haben alle hart daran gearbeitet, Dinge in Inhalt, Präsentation und Verhalten zu trennen.
Und jetzt das. Was kommt als Nächstes, die Rückkehr des FONT-Tags?
Gepaart mit Googles Behauptung, dass die Hälfte unseres CSS jetzt getrennt und inline sein sollte, befürchte ich, dass die Zukunft der Web-Autorisierung zu dem zurückkehrt, was vor 15 bis 20 Jahren war
Ich bezweifle, dass die Urheber dieses Ansatzes in den 90er Jahren mit Inline-Styles gearbeitet haben, wie einige von uns. Diese Idee klingt für mich schrecklich.
Ich denke, Styling sollte deklarativ sein. Es wird eine enorme Menge an Fehlersuche verursachen, wenn man Styling mit etwas Prozeduralem macht, und ich denke, React erfindet ein Problem, das nicht existiert.
Ich werde die Welt jetzt nicht ändern, aber die Leute sollten sich wirklich die zusätzliche Mühe machen, das richtige CSS-Styling zu lernen, anstatt es zu beschuldigen
Ich weiß mit Sicherheit, dass CSS eine Sprache ist, die sich entwickeln muss, aber nicht so. Nicht, indem sie von JavaScript verschlungen wird.
Ich bin nicht gegen Javascript, eigentlich liebe ich es, aber ich liebe auch CSS, und sie sind wie beste Freunde, fast Liebende, sie halten Händchen jedes Mal, wenn eine neue Website oder App eingesetzt wird, warum sollte jemand diese schöne Beziehung jemals zerbrechen wollen.
Irgendwann werden wir das gesamte HTML+CSS+Kopie in eine JS-Datei verschieben, dann wird eine neue Struktur für diese Datei benötigt, Sie lernen diese neuen Dinge, und irgendwann wird jemand sagen "Das ist zu viel!!", und dann verschieben wir Inhalte in verschiedene JS-Dateien, eine für CSS, eine für HTML und eine für die Kopie, alles modular und portabel, genau wie es war, aber besser, weil es Javascript ist, richtig?, und alles in Javascript zu machen ist wie... cool.
Javascript ist großartig, React JS ist WIRKLICH großartig. Ich benutze es jetzt seit fast einem Jahr. Aber es wird CSS niemals ersetzen. Es gibt absolut keinen Grund, kein Stylesheet zu haben. Seien Sie einfach clever dabei. Ich verwende Reacts Stilobjekt nur, wenn ich weiß, dass das Element sich niemals ändern wird oder sich nur über eine Methode in der React-Komponente ändert.
Erstens – Déjà-vu.
Zweitens – ich dachte, JS-Frameworks sollten Grunt/Gulp oder ähnliche Module verwenden, um Inline-CSS/JS von ihren Komponenten zu entkoppeln und Dateien im Build-Prozess zu erstellen.
Wie wäre es mit der Förderung offener Standards? ... Chris? ... jemand? ...
Hier ist dein Kool-Aid zurück, React.
oh, vergessen
https://www.pandastrike.com/posts/20150311-react-bad-idea
Webkomponenten lösen dieses Problem. Wenn Sie nicht länger warten können, verwenden Sie Polymer.
JS;DR = JavaScript erforderlich; Nicht gelesen.
http://tantek.com/2015/069/t1/js-dr-javascript-required-dead
Ja, ich hoffe, dass erstellte Seiten immer noch als etwas ohne JS gerendert werden?
Man sagt Designern seit Jahren, dass sie logisches, Best-Practice-JS verstehen und schreiben müssen (zustimmung); wäre es nicht auch eine gute Idee für Entwickler, logisches, Best-Practice-CSS zu verstehen und zu schreiben?
React hauptsächlich von Facebook entwickelt = egal ob JS oder CSS — haben Sie sich jemals das Markup angesehen, das FB verwendet? Was ist mit Semantik passiert? Und warum bekommen Apps einen Freifahrtschein, wenn es um Barrierefreiheit und progressive Verbesserung geht?
Wenn modulspezifische Regeln in JS geschrieben und serverseitig als Klassennamen vor der Auslieferung an den Client angewendet werden, gibt es keinen Unterschied für den Benutzer; aber wenn Sie diese Methoden verwenden, um Inline-Styles auf einzelne Elemente zu injizieren, ist das Wahnsinn.
Probleme mit CSS? Lesen Sie mehr Chris Coyier oder besuchen Sie Harry Roberts' Website (http://csswizardry.com/). CSS-Bashing ist nichts Neues; die Leute beschweren sich seit Jahren darüber. Ebenso schrieb Douglas Crockford "JavaScript: The Good Parts", weil so viel von der Sprache schlecht ist.
Alle Aspekte der Webentwicklung haben Stärken und Schwächen; lernen Sie zuerst, wie man die Standards verwendet, und lernen Sie dann, wie Tools und Frameworks dabei helfen können. Zumindest lernen Sie genug, um zu wissen, wann Sie nicht genug wissen, und rufen Sie jemanden an, der es weiß.
Nur weil man etwas kann, heißt das nicht, dass man es tun sollte. CSS fängt gerade erst an, wirklich standardisiert zu werden. Vielleicht werden sich die Browser eines Tages sogar auf einen Standard einigen.
Chris, wir brauchen wirklich ein Abstimmungssystem für Kommentare in CSS-Tricks. Bei dieser Art von Artikeln ist es interessant, die beliebtesten Kommentare zu lesen.
Und Web Components löst all diese Probleme, die Sie erwähnt haben. Go go Polymer https://www.polymer-project.org/1.0/
Schlechte Frameworks fördern schlechte Gewohnheiten, genauso wie gute Frameworks gute Gewohnheiten fördern. Dies löst ein echtes Problem mit einer falschen Lösung. Shadow Dom und CSS-Scoping gehen in eine bessere Richtung, obwohl sie nicht abwärtskompatibel sind.
Völlig einverstanden. Ich habe ein paar Wege gefunden, um die globale Verschmutzung und Kollisionen zu minimieren. Hoffentlich ist es für andere hier nützlich.
Für die Dinge, an denen ich gearbeitet habe, schlägt es eine schöne Brücke zwischen aktuellen Präprozessorstrategien und zukünftiger Webkomponenten-Kapselung.
Anscheinend gibt es bei Links von medium.com eine Art iframe-Einbettung. Letzter Versuch.
Artikel zur semantischen Neuzuordnung
Hallo Chris,
Ich bin überrascht, dass Sie Atomic CSS oder ACSS in diesem Artikel nicht erwähnen, da ich glaube, dass es eine Brücke zwischen "klassischem CSS" und "CSS in JS" ist.
Ich denke zum Beispiel, es löst die Probleme, die Sie eingangs aufzählen
Alles ist global
CSS wächst mit der Zeit
Man kann mit Styles in einer Programmiersprache dynamischer sein
Sie sagen, die Alternative sind Inline-Styles, aber „*Inline-Styles*“ kann auch über das Klassenattribut erfolgen. Das ist dieser (Pseudocode)
<div class="padding-20px background-eee margin-0 marginBottom-20px">statt dessen
<div style="padding: 20px; background: #eee; margin: 0 0 20px 0;">Im Gegensatz zu "Inline-Styles über
@style" können Werte unkenntlich gemacht werden und haben daher einen *viel kleineren Fußabdruck* als "Inline-Styles über@style". Außerdem ist das zugehörige Stylesheet **zwischengespeichert** und es **kann** nicht so groß werden wie das von Ihnen angegebene m.uniqlo.com-Beispiel (57k), während es gleichzeitig "zustandsbasierte Klassen im DOM" ermöglicht.Viele Leute mögen ACSS nicht, aber das liegt hauptsächlich an seiner Syntax, da es die Fallstricke zu vermeiden scheint, die Sie über "Styling via
@style" auflisten.Styling ist das, wofür CSS da ist
Atomic CSS ist CSS
Inline-Styles stehen an der Spitze des Spezifitätsspektrums
Atomic CSS basiert auf einfachen Klassen und hat daher eine geringe Spezifität (
0,0,1,0) – (Wie unterscheidet sich Atomic CSS von der Verwendung von Inline-Styles?).Einige einfache Zustände sind in CSS viel einfacher zu handhaben
Atomic CSS ist CSS (siehe Pseudoklassen)
Hinzufügen/Entfernen von Klassen ist bereits ein perfektes Werkzeug für Zustandsänderungen
Jep!
Browser sind nicht dafür gemacht, Styling auf diese Weise zu handhaben
Jep!
Einige dieser "dynamischen" Styling-Bedenken können mit regulärem CSS gelöst werden
Jep!
CSS ist cachable
Jep!
Sie können React immer noch verwenden
Jep!
Interessiert sich niemand mehr für progressive Verbesserung?
Dokumente, die auf Inline-Styles (
@style) basieren, können „vollständig serverseitig gerendert“ werden, aber das bedeutet, alle Inline-Styles über das Netzwerk zu senden, und das ist eher „teuer“ (und keiner dieser Styles wird zwischengespeichert).Ich habe dort nicht aufgeführt: „Die Trennung der Belange ist CSS inhärent“, weil ich glaube, dass dies für Menschen, die Dokumente ganz anders erstellen, als wir es vor Jahren taten, ein strittiger Punkt ist.
Mein 0,02
Wenn ich an meine aktuelle Arbeit denke, was ist mit der Vererbung von Arbeit? Das Großartige an Sass / Less / etc. ist die Vererbung oder das modulare Entwickeln. Ich kenne React nicht gut, aber es sieht nicht so aus, als ob die langfristige Code-Pflege einfacher wäre. OOCSS, BEM sind bereits großartige Wege, um CSS zu pflegen (meiner Meinung nach) -> vielleicht wären mehr (langweilige) Konventionen, anstatt alles in JS zu tun, besser.
Das verwirrt mich sehr, kein CSS, manche sagen in Zukunft kein Javascript mehr http://techcrunch.com/2015/06/17/google-microsoft-mozilla-and-others-team-up-to-launch-webassembly-a-new-binary-format-for-the-web/ , was dann?
IMHO ist das die falsche Frage.
Die meist vermiedene Frage ist: "Was sollte CSS ersetzen?".
(style="~" ist immer noch CSS, es löst nichts, CSS einfach in Modulen zu haben, Design vollständig zu entkoppeln ist nicht dasselbe wie Widget-Code zu entkoppeln)
CSS war vor 21 Jahren ein gutes Design, aber es hat buchstäblich nicht für die Zukunft skaliert. Meiner Meinung nach ist CSS alt und schrottig, wir fügen ihm immer mehr Funktionen hinzu, um es mehr wie SVG zu machen, das weit überlegen ist, aber aus irgendeinem Grund absichtlich unvollständig gemacht wurde. Wenn ich raten müsste, würde ich sagen, weil große Unternehmen Apps zu verkaufen haben (zwischen den Zeilen lesen)..aber das ist irrelevant.
Warum sind wir so selbstzufrieden mit dieser kaskadierenden, restriktiven, nicht-echten Sprache, die nach 21 Jahren gerade erst Variablen einführt.
Wenn wir weitere 5 Jahre ohne eine Lösung weg vom schrecklichen Box-Modell weitermachen, wie können wir dann sagen, dass wir Webdesign ernst nehmen? (Flex-Box ist keine Lösung)
Warum sprechen wir nicht über dieses Problem?
Letzte Anmerkung: (Ich denke, wir müssen aufhören, progressive Verbesserung mit serverseitigem Rendering in Verbindung zu bringen, das ist völlig unrelated)
Vielleicht klinge ich etwas hart… aber wenn die globale Natur von CSS Ihnen Angst macht oder wenn Sie Angst haben, Codes zu verwalten, um zu vermeiden, dass etwas kaputt geht, schreiben Sie wahrscheinlich kein gutes CSS. Besonders heutzutage, wo wir SASS und Grunt (oder jeden anderen Präprozessor/Task-Manager, den Sie mögen) haben, um uns beim Schreiben von modularem CSS und dessen einfacher Kompilierung zu helfen.
Vielleicht übersehe ich etwas, aber für mich ist das Aufgeben der gesamten CSS-Struktur und deren Ersetzung durch nicht wiederverwendbare Deklarationen, die über JS angewendet werden, einfach zu krass…
In React (oder JavaScript) sind sie in dieser Hinsicht wiederverwendbar. Stellen Sie es sich wie Sass-Mixins vor, sie haben einen einzigen Quellpunkt, an dem dieser Code beliebig oft und an beliebiger Stelle eingefügt werden kann.
Leute sind verwirrt darüber, was DRY-Code eigentlich bedeutet. Es spielt keine Rolle, ob Ihr kompiliertes Ergebnis DRY ist, worauf es ankommt, ist Ihr Quellpunkt, also hat Ihr JS-Stilobjekt, wie ein Mixin, einen einzigen Quellpunkt.
Das wird CSS niemals ersetzen, ich liebe es, modulares CSS zu schreiben. Aber CSS in React ist nützlich, wenn wir Komponenten mit Stilen kapseln wollen, die nur innerhalb dieser Komponente existieren. Das bedeutet, dass eine bestimmte Komponente über ein Projekt oder sogar verschiedene Projekte hinweg geteilt werden kann, ohne sich Sorgen machen zu müssen, dass etwas kaputt geht.
Die ganze Debatte, dass Inline-Styles schlecht sind, lag daran, dass sie nicht von JavaScript mit einem einzigen Quellpunkt erstellt wurden. Die Pflege vieler Templates mit Inline-Styles war ein Albtraum. Das ist bei React nicht der Fall. Es gibt Probleme mit der Spezifität, und in diesen Fällen verwenden Sie React nicht für diese Styles.
- Es ist sparsam einzusetzen, wenn nötig, nicht als Ersatz für CSS.
Was ist mit dem Druckstil?
Wenn Sie die Seite drucken, erhält der Browser den Inline-Stil und kein dediziertes CSS!
Lol, davon habe ich in guten alten Zeiten gesprochen, als Preprocessing das "große Ding" war.
Damals hat mir niemand zugehört :D
Aber diese Idee gefällt mir wirklich, ich stelle mir vor, dass sie viele neue Möglichkeiten eröffnen würde. Styles könnten noch komprimierter an den Client geliefert werden.
Das würde ich super finden!
Ich bin ein großer Fan des Inline-Style-Ansatzes. ReactJS ist zwar eine radikale Abkehr, aber es ist eine echte Antwort auf die Modularitätsprobleme von CSS. Es ist eine echte Antwort, die performant ist und ab sofort genutzt werden kann.
Best-Practice-CSS kann natürlich modular sein, aber es ist immer noch frustrierend, den Code einer Komponente auf (oft) 3 separate Dateien aufgeteilt zu haben: ein HTML-Template, CSS und JavaScript.
Styles werden durch den Anwendungsstatus gesteuert. Aktionen, Fehler, Validierung usw. Der Anwendungsstatus lebt in JavaScript. Die Kopplung ist real!
Ich verwende immer noch Stylesheets, aber nur für wirklich "globale" Dinge wie breite Layouts und Schriftarten. Ich fühle mich mit diesem Ansatz sehr produktiv. :)
Wieder einmal haben die Ingenieure eine komplizierte Lösung für ein "Nicht-Problem" geschaffen.
„Intelligente Leute in großartigen Teams geben zu, dass sie Angst vor ihrem eigenen CSS haben.“
Es ist erstaunlich für mich, dass die Ingenieure, die so komplizierte Workarounds erstellen, die einfache Top-Down-Natur von CSS nicht verstehen können.
SASS + SMACSS = Der richtige Weg.
^ Das alles.
Wie.
Alle Argumente gegen CSS sind ungültig, sie sind lediglich ein Spiegelbild schlechter Praxis, das ist keine Entschuldigung.
Alles ist global.
So einfach mit Namespaces zu lösen, ich weiß nicht mal, warum Leute damit Probleme haben.
CSS wächst mit der Zeit.
Ja, das passiert mit jedem Code, wenn das Produkt wächst. Betten Sie Ihr JavaScript inline in das DOM ein, weil Sie nicht wissen, wie Sie mit mehreren .js-Dateien umgehen sollen? Das dachte ich mir. Die grundlegende Verwendung von LESS oder SCSS löst dieses Problem (klar, sie sind kein Teil von nativem CSS, aber ich bezweifle ernsthaft, dass Ihr JS-Workflow ebenfalls nativ ist).
Man kann mit Styles in einer Programmiersprache dynamischer sein.
Was Sie damit sagen wollen, ist, dass Sie CSS auf bestimmte Weisen verwenden können, indem Sie Ihre eigenen Implementierungen dafür erstellen, wann das CSS angewendet werden soll, und gleichzeitig andere verlieren, da JavaScript nicht alles ansprechen kann, was CSS tut (Viel Spaß mit ::after und ::before).
Ich stimme zu… Ich wollte diesen Artikel wirklich zu Ende lesen, aber es gibt keinen einzigen Punkt, der das Fehlen eines „Bedarfs an CSS“ wirklich notwendig macht. Ich könnte schimpfen, ich könnte toben (glauben Sie mir, ich habe es beim Lesen dieses Artikels schon oft angefangen), aber die Antwort auf die Frage ist „Ja, wir brauchen immer noch CSS. Ist doch klar.“
Manchmal lese ich Artikel über solche Probleme und denke nur: Sind das wirklich Probleme?
Ich verstehe vollkommen, dass Anwendungsentwickler Schwierigkeiten mit Technologien haben, die nicht im gleichen Sinne wie ihr Anwendungs-Framework funktionieren. Aber das bedeutet nicht, dass die Technologie kaputt ist. Es bedeutet eigentlich, dass sie für bestimmte Denkweisen nicht geeignet ist.
Ich möchte nicht zu denen gehören, die Dinge einfach abkanzeln, weil sie anders sind, aber das hier scheint einfach verrückt.
Ich stimme zu, CSS kann all die schlechten Dinge sein, die früher im Artikel beschrieben wurden, aber meistens nur, wenn es schlecht geschrieben ist.
Ein "Problem" durch eine Vielzahl neuer ersetzen.
CSS ist nicht das Problem, sondern die Art und Weise, wie viele Entwickler es betrachten und nutzen. HTML soll die Struktur definieren, CSS die Präsentation und JavaScript die Interaktionen. Lasst uns nicht so religiös sein, was Atwoods Gesetz angeht. Zum Beispiel könnten Fokusindikatoren, Hover- und aktive Zustände leicht mit CSS-Pseudoklassen erreicht werden, und Inline-Styles durch JavaScript angewendet werden, indem man auf das entsprechende Ereignis lauscht.
Zustimmung, dass globales CSS seine Nachteile hat, aber es dient auch einem Zweck. Bis wir ein natives Komponenten-Ökosystem haben (ohne React/Polymer), versucht globales CSS ein einheitliches Aussehen der Anwendung zu erzwingen.
Sass ist im Grunde eine Programmiersprache für CSS. JavaScript als Alternative ist eine naheliegende Wahl, obwohl wir zuerst mit einem JavaScript-zu-CSS-Compiler begonnen hätten.
Man muss es einsehen, die Leute wollen ihren Code testen können, um die Korrektheit zu gewährleisten, und CSS kann das noch nicht erreichen und wird sich weiterentwickeln, bis es das tut.
Ich respektiere viele der Entwickler, die hier CSS anzweifeln, aber ich habe in dieser Debatte auch vieles gesehen, das aus einem Missverständnis von CSS resultiert.
Dass CSS zunehmend komplexer wird [1], ist eine Sache, die die Leute dann in die Hände von Frameworks und Bibliotheken treibt; aber wir haben dann eine sehr schlechte Erfolgsbilanz beim Verständnis und der (Post-)Optimierung von CSS [2]. Man muss sich nur ansehen, wie nass die meisten Stylesheets sind, obwohl (!) sie durch Präprozessoren und Ähnliches geschleust wurden. Das ist grundlegendes CSS, und nur wenige machen es richtig.
Der Debatte fehlt oft das Verständnis, warum die Trennung der Belange so wichtig ist. Und das ist für eine weitere schlechte Bilanz: Wir neigen dazu, einfach neu zu machen, anstatt zu wiederholen. Wenn wir alles wegwerfen, was wir zuvor gebaut haben, anstatt zu versuchen, es zu optimieren, zu verbessern, darauf aufzubauen, kümmern wir uns nur darum, wie wir schnell (und schmutzig – qed) arbeiten können, aber nicht, wie immens nützlich die „religiöse“ Trennung ist. (Denken Sie an die Vision der Webentwicklung [3]).
Es gibt noch mehr, ja, aber die Debatte ist seltsam, und Erleuchtung ist hier und jetzt nicht zu finden.
[1] http://meiert.com/en/blog/20150518/fing-up-standards/
[2] http://meiert.com/en/blog/20141009/css-dry-and-optimization/
[3] http://meiert.com/en/blog/20150513/vision-of-web-dev/
CSS für Leute, die CSS nicht verstehen (oder nicht verstehen wollen). Ich kann mir eine Reihe von Entwicklern vorstellen, die ich im Laufe meiner Karriere getroffen habe und die es lieben werden.
Nein. Danke. Ich bleibe bei CSS.
Machen Sie CSS nicht zu einer Programmieraufgabe.
Als jemand, der seit 19 Jahren professionelles Webdesign/-entwicklung betreibt, ist dies absolut die beste Antwort. Gut gesagt!
Für mich hat CSS zwei Probleme, und keines davon hängt mit seiner globalen Natur zusammen.
Das erste ist, dass es kein wirklicher Standard ist, da alle Browser den Code unterschiedlich interpretieren. Es ist frustrierend, dass Entwicklungszeit, die für den Aufbau einer besseren Benutzererfahrung aufgewendet werden könnte, für die Sicherstellung der plattformübergreifenden Kompatibilität (insbesondere mit älteren Browsern wie IE8-10) verschwendet wird. Man sollte einmal schreiben können und es überall funktionieren. Alte Browser sollten automatisch den Code herunterladen, den sie zum korrekten Rendern der Seite benötigen.
Das zweite Problem ist, dass die Entwicklung von CSS schmerzhaft langsam ist und die Prioritäten völlig falsch gesetzt sind. Zum Beispiel gibt es es seit 1996, und wir haben immer noch keine gute, standardmäßige Methode zur Gestaltung der gesamten Seite (z.B. Header, Footer, Spalten). CSS Grids werden dies ändern, aber es erscheint seltsam, dass wir abgerundete Ecken vor Layout Grids bekommen haben. Es gibt auch mehrere Wege, gängige UI-Muster wie Menüs, Akkordeons und Schiebeelemente zu implementieren. Diese gängigen UI-Elemente sollten alle in CSS integriert und mit einer einzigen Codezeile gerendert werden (z.B. ul {ui: sliding-menu;}).
Wenn CSS nicht unter diesen beiden Problemen leiden würde, dann bin ich mir sicher, dass es nicht so viel Hass bekommen würde.
Webkomponenten bieten eine Lösung, aber ich denke, es wird noch lange dauern, bis sie einsatzbereit sind.
Das Inline-Ausgeben von CSS ist sehr unordentlich, nicht leicht zu pflegen und nicht empfehlenswert. Ich bin seit über 20 Jahren im Webdesign-/Dev-Geschäft und habe schon einiges gesehen, und das wird in Zukunft mehr Probleme verursachen. Ich denke, dass CSS/SCSS so weit fortgeschritten ist, dass es schwierig zu pflegen sein kann. Es könnte besser sein, CSS zu vereinfachen, aber solange nicht alle Browser auf dem gleichen Stand sind, glaube ich nicht, dass das bald passieren wird.
Ich persönlich denke, dieser React-Stil der Entwicklung wäre großartig für Web-Apps und schrecklich für Webseiten. Und das ist eine Grenze, die immer unschärfer wird. Wenn es darum geht, Web-Apps zu erstellen, bei denen Sie Logik und Funktionalität entwerfen, die der Browser nicht nativ hat, und Ihre gesamte Arbeit JavaScript-zentriert ist, dann ist React eine natürliche Wahl.
Wenn Sie jedoch an Webseiten arbeiten, ist das Zitat von Keith Grant (und von einigen Kommentatoren hier wiederholt) absurd. Nennen Sie mich altmodisch, aber keine Webseite sollte JavaScript benötigen. JavaScript dient dazu, Annehmlichkeiten hinzuzufügen, die Interaktion zu optimieren und ROFLcopter zu bauen. Wenn Ihre Seiten nicht zumindest eine Basisfunktionalität aufweisen, wenn sie innerhalb der Standardverhaltensweisen des Browsers arbeiten, dann ist Ihre Arbeit noch nicht erledigt.
Es klingt, als würden wir im Krieg um progressive Verbesserung, Trennung der Belange und einfaches Markup an Boden verlieren. Sollen wir einfach wieder Layouts mit Tabellen entwerfen?
Für mich klingt das eher nach dem Streben nach einer universellen Übersprache. Ich erinnere mich an die Haltung "alles, was man braucht, ist Java" und dann Applets und Swing und AWT, dann war es Flex und Air, und dann Dart und Go. Ich erinnere mich, wie Entwickler mir sagten, ich solle zu GWT wechseln, weil es einfach alles für mich generieren würde und ich kein JS mehr schreiben müsste. Wir können zugeben, dass CSS einige Nachteile hat, und auch HTML, und Lösungen finden, die nicht bedeuten, die Konzepte ganz aufzugeben oder sie in Schichten und Schichten von Abstraktion zu vergraben, die von den Leuten viel kognitive Belastung erfordern, um sie nachzuvollziehen. Es gibt eine Reihe von Problemen, die React und JS-gerendertes Styling nicht lösen, die es davon abhalten, die Übersprache zu sein. Das bedeutet nicht, dass es keine wertvollen Erkenntnisse gibt. Es bedeutet nur, dass wir anfangen müssen, einige dieser Szenarien aufzulisten und darüber zu sprechen, wie man sie im Code löst und wie man die Standards für eine bessere Passform neu gestaltet.
Wo passen Webkomponenten in diese Mischung?
Interessant, aber ich glaube, ich bleibe bei CSS. Bitte korrigieren Sie auch Ihr "it's" und "its" richtig. Hat das Lesen teilweise erschwert!
Die React-Crowd sagt also im Grunde, dass Javascript weniger scheiße ist als CSS?
Das glaube ich nicht.
Als jemand, der Webseiten alle 4 Jahre oder so umgestalten muss, behalte ich meine Präsentation getrennt, vielen Dank.
Warten Sie nur, bis Zeldman davon hört.
Guter Artikel, Chris, es ist schwer, die Gründe zu formulieren, warum die Leute sich in diese Richtung bewegen und wie die vorgeschlagenen Änderungen am Ende aussehen würden, aber dies ist ein großartiger Überblick. Die Hauptmotivation ist ein besseres Scoping von Styles und es ist eng mit Web Components verbunden.
Die Idee hinter Web Components ist, dass man einen HTML-, CSS- und JavaScript-Block wiederverwenden können sollte, ohne dass er den Rest der App beeinträchtigt. Die Nähe des Codes ist hier wichtig, HTML / CSS und JavaScript, die sich auf das gleiche Komponentenverhalten und den gleichen Zustand beziehen, sollten so nah wie möglich beieinander liegen, weil es einfacher ist, darüber nachzudenken, sicherer zu ändern usw.
Ihre abschließende Bemerkung zur Progressiven Verbesserung
Es ist immer noch wichtig, und unsere Tools werden so weit ausgereift sein, dass es uns leichtfällt, hier das Richtige zu tun (HTML vom Server senden, selbst für Rich Web Applications).
Der größte Schlag für die progressive Verbesserung war, dass die Leute die App ohne JavaScript vollständig aufgegeben haben.
„Alle Ihre Benutzer haben JavaScript deaktiviert, während Ihr JavaScript heruntergeladen wird“
Das ist der schlimmste Unsinn, den ich seit einiger Zeit gelesen habe. Nach etwa 20 Jahren Webseiten-Programmierung ist es ziemlich traurig, die gleichen müden Argumente wieder aufkommen zu sehen. Aber gleichzeitig bin ich dankbar. Fleischsäcke, die mit Inline-Styles programmieren und versuchen, CSS durch Javascript zu ersetzen, werden wahrscheinlich meine weitere Karriere für weitere 10 Jahre sichern, und wahrscheinlich viele glückliche Kunden, die erkennen, dass sie bei der Einstellung von Talenten wählerischer sein sollten.
Fakt ist: Wenn Sie CSS nicht „verstehen“ oder es nicht schreiben können oder sich nicht die Mühe machen, es zu schreiben. Lassen Sie Profis das tun.
Das ist albern.
Das macht überhaupt keinen Sinn. Alle Probleme, die wir mit CSS haben, sind praktisch durch SASS und LESS behoben. Die Komponentisierung von React ermöglicht es jedem, spezialisierte SCSS-Dateien für jede Komponente zu verwenden. Verdammt, ich würde meine eigenen Tools schreiben, um das für mich zu generieren.
Wenn Sie eine React-Komponente namens Post haben, könnte Ihr Grunt- oder Gulp-Prozess dies identifizieren. Wenn es sich um ein einzelnes Element handelt, erstellt es #Post in Ihrer SASS-Datei. Wenn es andere Elemente enthält, erstellt es diese CSS-Elemente innerhalb der #Post-Definition.
Und wenn es mehrere Beiträge gibt, würde es Ihre SASS-Datei so ändern, dass dort #Posts > .Post oder ähnliches steht. Ein Element innerhalb eines Beitrags hinzufügen: Sie erhalten eine neue, angenehm geordnete Ergänzung zu Ihrer SASS-Datei. Ein Element entfernen oder umbenennen? Es wird dasselbe für Ihre SASS-Datei tun.
Dann können Dinge wie SCSS und andere Optimierungsaufgaben unnötiges CSS aus der endgültigen Ausgabe entfernen. Im Falle der Priorisierung einiger CSS-Dateien gegenüber anderen könnten Sie Ihre Komponenten so einrichten, dass sie eine CSS-Ausgabepriorität oder -Reihenfolge haben.
Alles ist besser als Inline-CSS. Gott, das ist einfach eine schreckliche Idee. Was kommt als Nächstes? Statt Semantik kehren wir einfach zu Div-Suppen zurück? Und "Gott, die meisten Layouts sind tabellenartig. Nehmen wir doch einfach Tabellen!"
Dies scheint das dümmste Argument zu sein, das ich seit langem gehört habe. Die vielen Gründe aufzuzählen, ist die Zeit nicht wert.
Es klingt, als ob ein Haufen Entwickler, die CSS hassen, versuchen, diese Idee gut klingen zu lassen. Einfach und schlicht ist sie es nicht.
Derzeit (Mitte 2015) muss es sich unbedingt auf die Frage reduzieren: „Können Sie garantieren, dass der Endbenutzer JavaScript zur Verfügung hat?“
Wenn Sie das nicht garantieren können, sollten Sie darauf achten, dass alle Daten auch ohne JavaScript verfügbar sind.
Es ist fast so, als ob sich Entwickler nicht mehr um Webstandards kümmern würden. Genau dieselben Webstandards, an denen wir alle gearbeitet haben, um das Web zu vereinheitlichen und für jeden zugänglich zu machen.
Was ist mit Seitengeschwindigkeit und Code-Wartung, Trennung ist definitiv besser!!!
Obwohl ich die Leistungsfähigkeit von React und Inline-Stil liebe, empfinde ich es als schmutzig.
Außerdem muss man Javascript lernen, bevor man es voll genießen kann.
Das andere, woran Sie denken sollten, ist der SEO-Aspekt. Christ erwähnte Browser, die überprüfen müssen, wie sie unsere Inhalte RENDERN, wenn wir Inline-Styling übernehmen, aber wir müssen uns auch Sorgen machen, wie Suchmaschinen unsere "neuen" Inhalte LESEN werden.
Ich bin vorerst nicht bereit für Inline-Styles.
Zustimmung! Ich kann nicht glauben, dass die Unauffindbarkeit von JavaScript noch nicht erwähnt wurde. Ehrlich gesagt, könnte ich diese Technik nur bei weniger als 1% meiner Arbeit anwenden.
Aus meiner C++-Spieleentwicklungserfahrung weiß ich, wie schwierig es sein kann, eine hochdynamische, gut gestaltete Benutzeroberfläche zu erstellen. Als ich in die Webentwicklung einstieg, war ich angenehm überrascht, wie einfach es war, anspruchsvolle Visualisierungen über CSS (und jetzt Sass) zu erstellen, so sehr, dass ich darüber nachgedacht habe, HTML und CSS für das Rendern von In-Game-Interfaces zu verwenden. Hochgradig angepasste Visualisierungen über Code zu erstellen, ist eine sehr schwierige Aufgabe.
Nun, diese Idee könnte gut für stark modulare, anwendungsähnliche Websites funktionieren. Die Art von Websites, die man einfach mit Bootstrap erstellen könnte und sich überhaupt keine Gedanken über CSS machen müsste.
Aber sobald man sich in die tief kreativen, hochraffinierten Visualisierungen einiger Websites (nicht Web-Apps!) vertieft, bricht diese Idee vollständig zusammen.
Die wahrgenommenen Probleme von CSS sind nicht unbedingt Probleme.
Die meisten Leute mögen eine Menge konsistentes Styling auf ihren Websites. Sie wünschen sich im Allgemeinen die gleichen Farbschemata, eine kleine Anzahl (oft 1, selten mehr als 2 oder 3) von Schriftstilen für Überschriften, Links, Schaltflächen usw. und ihre verschiedenen Zustände. Wenn Sie mehr benötigen, müssen Sie Benennungskonventionen und so weiter verwenden.
CSS wächst mit der Zeit. Zeigen Sie mir Code, der das nicht tut?
Leute schreiben wirklich komplexes CSS ohne Präprozessoren, es ist nicht obligatorisch, sie zu verwenden. Wenn Sie dies tun, ist ein Großteil Ihrer Eingabe und Ausgabe immer noch im Wesentlichen CSS. Die meisten Leute, die CSS schreiben, kennen sich gut mit jQuery aus, um die notwendigen Aufgaben für das Hinzufügen von Inline-Styles live zu erledigen, und wissen Sie was, es ist immer noch größtenteils CSS mit einer kleinen Wrapper-Schicht, und es kümmert sich um die gesamte browserübergreifende Kompatibilität für Sie, und wenn Sie gut sind, schreiben Sie es so, dass es in JS-deaktivierten Browsern, die es immer noch gibt, "gut genug" funktioniert.
Ich schreibe zufällig anständiges Javascript, ich habe es lange geschrieben, bevor ich jQuery gelernt habe. Wenn Sie eine Web-App haben, wo Sie Millionen von unterschiedlich gestalteten Dingen haben, die verschiedene Dinge tun und Stile oft ändern, kann ich sehen, dass dies ein attraktiver Ansatz ist. Es ist schön, den gesamten Code für "x passiert" am selben Ort zusammenzuhalten: Wenn Sie ein Spiel schreiben und die hübschen Kugeln in einer Gruppe blinken und verschwinden, möchten Sie als Spielentwickler normalerweise den gesamten Code dort haben, nicht in eine andere Datei abstrahiert, die das Aussehen der Kugeln abdeckt. Natürlich, wenn Sie mit einem MVC-Modell schreiben, tun Sie es sowieso mit einem anderen Ansatz. Aber wenn Sie die nächsten CSS-Tricks stylen, haben Sie wahrscheinlich keine verschwindenden Kugeln in einem Spiel, oder?
Und sofern Ihre Web-App nicht bildschirmfüllend ist, profitiert sie wahrscheinlich immer noch von CSS für die Elemente um sie herum, es sei denn, Sie haben eine religiöse Anforderung, sie nicht zu haben.
Hier geht es nicht darum, CSS verschwinden zu lassen. Es geht auch nicht darum, Inline-Styles manuell zu schreiben. Im Wesentlichen geht es nur darum, eine alternative Methode zur *Auswahl* der Elemente darzustellen, die die Styles erhalten. Und das ist nur für eine Untermenge von Projekten eine gute Idee.
Nur weil wir uns auf eine bestimmte Trennung der Belange geeinigt haben, bedeutet das nicht, dass eine Trennung nach *anderen* Belangen keine Vorzüge hat. Wenn ich gut definiertes HTML/CSS/Javascript für eine Komponente in meiner Anwendung habe, wäre es *großartig*, all diese Dinge an einem Ort zu haben.
Und was die Angst betrifft, CSS zu "programmieren", so macht die Tatsache, dass CSS so wenig Struktur hat, eine Art Ingenieursdisziplin in großen Projekten **unerlässlich**. Deshalb haben wir OOCSS, BEM, SMACSS, SUIT, InuitCSS, Präprozessoren usw. CSS ist täuschend einfach, wenn Sie nur an kleinen Websites ohne viel Funktionalität arbeiten. Darüber hinaus kann es ziemlich herausfordernd sein.
Die Verwendung von Javascript für alles wird nicht als Best Practice vorgeschlagen. Aber es kann eine *großartige* Möglichkeit sein, wenn Sie eine neue Idee prototypisieren, die nicht von standardisierten Tools unterstützt wird. Vielleicht wird die *nächste* Web-Styling-Sprache auf diese Weise entdeckt.
Vielleicht sollten Sie sich GSS ansehen – https://gridstylesheets.org. Ich bevorzuge jedoch immer noch CSS.
Keine Pseudo-Elemente (
::before,::after) mit Inline-Styles. Dasselbe gilt für Pseudo-Selektoren und Media Queries, aber die wurden oben erwähnt.Außerdem kann ich nicht erkennen, wie Performance bei diesem reinen JS-Ansatz kein Problem ist. Das DOM muss CSS bei jeder DOM-Mutation ständig parsen, wo ein Stylesheet nur einmal geparst wird. In Situationen, in denen ReactJS' virtuelles DOM stark beansprucht wird (1000+ Elemente), wird das gleichzeitige Parsen von CSS durch das DOM definitiv die Performance beeinträchtigen.
Aber wie funktioniert das mit Googles Ansatz zur Designkontrolle von Websites? Google bestraft die Verwendung von Java-Script und Inline-Styles. Auch Inline-Styles können dann Probleme bei Template-Updates verursachen.
Wenn mich jemand fragt, ob ich alle Styles inline schreiben könnte
Also, verdammt ja, wir brauchen CSS!
Dieser Kommentar bezieht sich auf die neue Umfrage.
Meine erste Reaktion war, "Nein, das ist eine dumme Idee" zu wählen. Wir haben einen langen Weg in der Trennung von Inhalt, Präsentation und Verhalten zurückgelegt... es wäre eine Schande, das aufzugeben.
Ich habe mich jedoch für „Es stößt mir irgendwie auf, aber ich versuche, offen dafür zu sein“ entschieden, weil ich weiß, dass mich Artikel nerven, die *zu* meinungsbetont sind.
Ich würde nicht sagen, dass ich diesem gegenüber aufgeschlossen bleibe, denn ich halte es für eine ziemlich schlechte Idee, aber ich bin bereit zuzugeben, dass wir vielleicht noch nicht den besten Weg kennen, Dinge zu tun.
Ich mag Ihre Offenheit und denke über Folgendes aus einer anderen Perspektive nach. In den letzten Jahren haben Technologieänderungen es auch Backend-Entwicklern ermöglicht, ins Frontend zu kommen, aber in allen Stacks ist CSS eine wichtige Komponente, die nicht programmierbar, nicht testbar ist, und dieser Mangel an Sicherheit ist frustrierend.
Ich denke, das Ziel ist es, dieses letzte Stück zu erhalten, so dass CSS oder was auch immer daraus wird, zuverlässig, programmierbar und testbar ist. Bis das passiert, werden diese Art von Beiträgen weiterhin auftauchen.
FYI, hier ist eine Folgepräsentation von Christopher Chedeau (Facebook-Ingenieur). Sie behandelt einige der Fragen. Media Queries, Pseudo-States, etc. React: CSS in JS – React France Meetup
Also, äh, er zeigt, warum wir Inline-Styles *nicht* verwenden sollten, richtig?
Beispiele aus den Folien
:hover
::after
…Wirklich? Einige dieser Beispiele sind die größten Rückschritte, die ich je gesehen habe.
Ich liebe SASS, weil es so viele Dinge ermöglicht, die in reinem CSS nicht möglich sind, aber ich hasse die Sprache selbst, SassScript/Ruby usw. ist für mich einfach schrecklich, und ich habe darauf gewartet, dass jemand einen CSS-Präprozessor erstellt, der JS als Skriptsprache verwendet.
Es stellt sich heraus, dass die Antwort vielleicht einfach die ganze Zeit war, Javascript zu verwenden. Ich sehe Probleme mit dieser Idee, aber ich werde sie genau im Auge behalten, um zu sehen, ob sie sich durchsetzt.
Also ... CSS ist fehlertolerant.
Javascript ist NICHT!
Natürlich wird es von Entwicklern übernommen werden, die es hassen, mit Design-Code zu arbeiten, aber ich sehe es nicht als die Zukunft.
Dieser Artikel ist seiner Zeit weit voraus. Danke, aber ich liebe mein CSS zu sehr, um mich davon zu trennen. Und hey, SASS fTw :)
Chris, verarschst du uns? Es fühlt sich an, als ob du es tun könntest.
Jemand bei der Arbeit erzählte mir, dass er die Verwendung von IDs in CSS unterstützt, wegen der „idiotischen jungen Entwickler“, die das Projekt irgendwann erben und seine Stile mit ihren eigenen überschreiben würden und … nun, die Schimpftirade ging weiter.
Ich bin für notwendige Veränderungen, aber ich werde keine Styles inline setzen (ernsthaft, was zum Teufel), egal wie es verpackt ist, genauso wenig wie ich emphatischeren Code schreiben werde (entweder mit # oder !important), nur weil ein schlechter Entwickler meinen Code irgendwann erben und ihn vermasseln könnte.
Auch die Idee, dass Designer „einfach JS lernen“ sollten, muss sterben. Sie sind Designer und keine Entwickler. Nur weil ich eine Website basierend auf Mathematik entwickeln kann, macht mich das nicht zu einem Designer. Design ist viel mehr als das Rastersystem und der goldene Schnitt. Entwickler schaffen das Internet; Designer machen es schön (nicht nur schön anzusehen, sondern auch angenehm zu bedienen). Natürlich gebe ich zu, dass selbst das wahrscheinlich eine zu starke Vereinfachung ist.
Aber im Ernst, verarschst du uns, Chris? Weil es sich irgendwie so anfühlt.
Das Styling mit Stylesheets ist beabsichtigt. Das Scripting mit Javascript war beabsichtigt. Warum sollte man versuchen, Styles rein in Skripte zu packen? Ich persönlich sehe kein Problem mit der Skalierung von CSS, wenn es modular ist, und wer sagt Ihnen, dass dasselbe Problem bei dieser Javascript-Lösung nicht bestehen bleiben würde.
Berücksichtigen wir bei dieser diskutablen Javascript-Lösung auch die ständig wachsende Anzahl von Frameworks, die wir nur zum Stylen lernen müssen? Wenn einem bestimmten Projekt ein Stil hinzugefügt wird, müssten Sie Ihre Stile dann anpassen, wenn Sie Ihr Framework ändern? Oder wahrscheinlicher, wenn Sie an mehreren Projekten mit verschiedenen implementierten Frameworks arbeiten.
Überkomplizieren wir nicht einfach die einfache Aufgabe des Stylings. Ich stimme einem Kommentar weiter oben zu, es ist die falsche Lösung für ein aktuelles Problem. Die realistische Lösung ist wahrscheinlich ein viel bewussteres DOM mit passenden Stilselektoren.
Ein großer Teil des Problems scheint der Mangel an HTTP 2.0-Unterstützung zu sein. Warum wächst CSS mit der Zeit? Weil wir alles in eine einzige minifizierte und zusammengefasste Datei packen.
Warum tun wir das? Weil wir versuchen, die Anzahl der Anfragen an den Server zu begrenzen. Wenn wir fünfzig parallele CSS-Anfragen an den Server stellen könnten, könnten wir die Menge an CSS, die wir auf einmal bereitstellen, reduzieren.
Außerdem sollte erwähnt werden, dass dieses magische Feen-Denken bei React und dem Virtual DOM völlig unsinnig ist. Reddit versuchte, es auf ihrer mobilen Website zu verwenden, und das Laden von Bildern dauerte 47 Sekunden.
https://github.com/reddit/reddit-mobile/issues/247
Zitierend Addy Osmani: „Das Fazit ist: Das ‚Das DOM ist langsam, virtuelles DOM ist schnell‘-Meme ist irgendwo zwischen irreführend und falsch. Jede Art von umfangreicher Arbeit in JavaScript während des Seitenaufbaus wird Sie umbringen, und die JS-Größe ist immer noch wichtig.“
React bläht JavaScript auf, und das wird die Leistung töten.
Haben Sie diesen Audit tatsächlich gelesen?
Sie versuchten, einen 1,1 MB großen minifizierten JS-Kern mit ungerenderten SVG-Grafiken über React MOBIL zu liefern, anstatt ihn richtig zu verwenden. React funktioniert auf vielen Websites, darunter Instagram, Facebook, Netflix, Dropbox usw., aber es scheint, dass ihre Implementierung aufgrund eines Missverständnisses des unilateralen Designmusters, das sowohl Flux als auch React verwenden, vermasselt wurde. Ich verwende es auch gerade auf etwa 10-15 Websites und werde wahrscheinlich nie wieder zu einer anderen Entwicklungsmethode zurückkehren.
TLDR: Wenn Sie ein Werkzeug falsch verwenden, erhalten Sie gemischte Ergebnisse.
Hier spielen mehrere Dinge eine Rolle
Es ist viel einfacher, Designern/Typografen funktionale Programmierung beizubringen, als Programmierern Design/Typografie beizubringen. (Ich weiß, dass dies wahr ist, weil ich so angefangen habe und es in 20 Jahren immer wieder erlebt habe.)
Ich würde behaupten, das Beste an CSS ist die Kaskade. Aber es ist mächtig, daher muss man wirklich verstehen, was man tut, und nicht versuchen, Abkürzungen zu nehmen. Das bedeutet, dass man eine Entwicklungsmethodik und ein Gefühl für Code-Organisation haben muss, das jeder in seinem eigenen CSS-Universum kennt und versteht. Ob man diese Methodik mit einem Präprozessor implementiert oder den Code von Hand schreibt, ist unerheblich. Die Methodik und die Code-Organisation sind die wichtigen Teile. Das Wichtigste ist, daran festzuhalten… In der Praxis scheint sich das jedoch so zu entwickeln, wie einige Teams an Agile-Programmiermethodologie-Konzepten festhalten…
Wenn Sie Ihre Methodik entwickeln und Ihren Code um das Konzept der Kaskade herum organisieren, anstatt zu versuchen, die Kaskade zu bekämpfen oder ihr zu entfliehen, dann erhalten Sie einen einfach zu wartenden/ändernden/erweiternden CSS-Satz, der möglicherweise gelegentliche Zustandsunterstützung von Javascript benötigt.
CSS, wie wir es jetzt kennen, durch Javascript oder React zu ersetzen, ist wirklich ein Versuch, die Hälfte des Babys mit dem Badewasser wegzuschütten.
Ihr Erfolg wird davon abhängen, wie viele Hardcore-Funktionsprogrammierer beteiligt sind, wie viele Designer nicht beteiligt sind und von der allgemeinen Dynamik Ihrer Organisation.
Man weiß nicht, wie viel man wirklich verliert, bis man es versucht. Ich hatte kürzlich das Vergnügen, React Inline-Styles / react-style in unserer App auszuprobieren, und ich muss sagen, das Konzept ist etwas weit von einer erfreulichen Realität entfernt.
Implizites Kopieren und Einfügen bei jedem Schritt, geringe Transparenz des resultierenden Codes, „das Problem“ der natürlichen Vererbung im DOM und das Fehlen von Pseudoelementen… Bedingungen für das Anwenden eines Hover-Effekts und/oder anderer Zustände lassen das Stilattribut der Komponente normalerweise zu mehreren Zeilen schwer lesbaren Unsinn anwachsen. Einen Rahmen vom letzten li im letzten ul ausschließen? Das übergeordnete Element beim Hover ändern, um das Design eines Kindes zu ändern? Sie werden viel loopen, Sie werden viele Zustände über Komponenten-Props senden, Sie werden die Einfachheit wieder auf die harte Tour erleben.
In diesem Stadium von CSS in JS würde ich es nur für kleinere eigenständige Komponenten empfehlen, da die Ausdruckskraft von CSS nicht korrekt oder überhaupt nicht ersetzt wird. Ein Schritt vorwärts, zwei Schritte zurück. Wenn sich das ändert, bin ich bereit für Runde zwei.
Vielleicht ist es nur eine Art stillschweigendes Wissen, aber React, Ember, Angular usw. geben mir alle das gleiche Gefühl wie Flash. Ich war 2006 wirklich begeistert, es zu lernen, aber ich wünschte, ich hätte die Mühe für fast alles andere aufgewendet.
Ich denke, die Programmierer haben ihren Weg verloren; warum? Weil, wenn jemand von Facebook, Google oder einem anderen großen Technologieunternehmen etwas Neues entwickelt. Es wird erwartet, dass alle mitmachen und dem neuesten Trend folgen. Wie viele Kommentatoren bereits gesagt haben, was wäre wenn! und das ist das Problem hier, Wir bauen für die Zuschauer, die Seiten besuchen, nicht um zu sehen, wer die größten Programmierer-Eier hat. Einfachheit ist der Schlüssel und das ist die erste Regel von allem im Leben.
Ein paar, was wäre wenn
Kein Skript ist aktiv?
Programmierer, die kein JS kennen, übernehmen Ihre Arbeit?
Verstehen Sie mich nicht falsch, ich liebe JS, aber es muss zur richtigen Zeit am richtigen Ort eingesetzt werden. Nicht, weil eine neue Bibliothek glorifiziert wird.
Fantastisch!
Lol, muss Lea lieben.
Ich kann ihrem Kommentar nur zu 100% zustimmen. Man kann dies nicht prägnanter und effektiver ausdrücken als sie es getan hat.
Es ist so: Die WIRKLICH guten CSS-Frontend-Leute sind keine Programmierer. Es sind Leute, die aus dem Design kommen. Das wird sich nie ändern. Wenn es um visuelle Frontend-Qualität geht, braucht es immer einen einfachen Kontext, in dem Stile angewendet werden können, ohne sich mit zu vielen Entwicklungsumgebungen, Abhängigkeiten und Co. herumzuschlagen.
Es ist nicht so, dass die wirklich guten CSS-Frontend-Leute IMMER keine Programmierer sind. Viele von uns haben gelernt zu programmieren, um CSS-Werte mit Dingen wie Funktionsrückgaben und anderem zu ergänzen. Wie ich bereits sagte, ist es viel einfacher, einer CSS-Designperson das Programmieren beizubringen, als Programmierern, die in funktionalen Sprachen schreiben, das Handwerk des Designs/der Typografie beizubringen.
Meine Erfahrung ist, dass funktionale Programmierer oft frustriert sind über die Unfähigkeit, Funktionen in CSS zu schreiben. Hinzu kommen Vererbungsregeln und die Kaskade und die Tatsache, dass Programmierer nicht in Begriffen denken, die dem atomaren Design ähneln, das die Hauptfunktionalität antreibt, die sie zu produzieren versuchen, und man endet mit frustrierten Programmierern, die CSS meistens an die Leute delegieren, die die Geduld haben, sich mit den Regeln der Kaskade auseinanderzusetzen. BTW – ich denke, Luke W.s atomares Design ist dem, was der Kaskade am nächsten kommt, von allen Methodologien, die ich da draußen gesehen habe.
Jean, ich sitze im selben Boot.. ich programmiere jQuery-Zeug, ich kenne grundlegendes OOP, ich spiele mit Vagrant, Symfony, Präkompilern, Funktionen, Mixins, agilen Prozessen und so weiter herum. Trotzdem würde ich mich nicht als "Programmierer" bezeichnen, da ich in den 14 Jahren, in denen ich in diesem Geschäft arbeite, viele "echte" Programmierer kenne und treffe. Das Problem ist, Hardcore-Backend-Leute lernen CSS/LESS/SASS an einem Nachmittag und denken dann, sie wüssten alles über Look and Feel oder Designprinzipien. Das funktioniert so nicht :) Ich habe kürzlich ein sehr großes Projekt betreut, das von ein paar sehr intelligenten Programmierern für eine große Schweizer Bank durchgeführt wurde. Das Projekt steckte total fest. Sie verwendeten zum Beispiel Tonnen von sehr intelligenten und komplizierten LESS-Mixins, alles war total überstrukturiert und über-engineered bis zu dem Punkt, dass sie tatsächlich völlig den Überblick verloren. Im Grunde genommen war es großartig und würde theoretisch skalieren, aber es war für Menschen nicht mehr handhabbar :)
Übrigens: Das Projekt basierte auf Atomic Design und Patternlab von Brad Frost – leider muss ich sagen, dass es für ein Projekt dieser Größe überhaupt nicht gut funktionierte. Ich bin sicher, es ist ein brillantes Konzept, aber es gab endlose Diskussionen darüber, wie Dinge zu strukturieren sind. Ein weiterer Grund, warum das Projekt ins Stocken geriet. Ich wurde als Bootstrap/Frontend-Spezialist eingestellt. Sie erwarteten, von mir einige magische Programmiertricks zu hören, um ihre Probleme zu lösen, aber was dem Projekt tatsächlich half, war ein großer Teil Pragmatismus.
@André – Ihr Erfolg wird bei jeder Methodik variieren, je nachdem, wie sie angewendet wird und wie die Menschen, die sie anwenden, intern funktionieren.
Ja. Es gibt Programmierer, die schönen, kreativen Code schreiben können. Niemand außer ihnen kann ihn lesen. Zumindest nicht, ohne den Code sechs Wochen lang zu studieren, um herauszufinden, was zum Teufel sie getan haben.
Hier ist die Dosis Pragmatismus und Best Practices gefragt. Methodologien brauchen Regeln, wie weit man in das Kaninchenloch geht, und Regeln für das Schreiben von Code, damit Entwickler, die in Ihre Fußstapfen treten, den Code zumindest warten und maximal neuen Code nach denselben Regeln schreiben können.
Der wichtigste Teil des Pragmatismus ist es, den Menschen zu helfen zu verstehen, warum Überingenieurisierung oder Überkonstruktion einer Lösung langfristig niemandem helfen wird.
Der Hauptgrund, warum ich CSS-Alternativen – GSS, PostCSS – im Auge behalte, ist, dass CSS sich für mich immer noch fehlerhaft anfühlt. Vieles ist übermäßig kompliziert (Dinge zentrieren, hallo?) und es fühlt sich an, als ob das nur aus historischen Gründen so ist. Ich wäre im Grunde glücklich mit einem von Grund auf neu geschriebenen CSS, aber ich hätte nichts gegen die Flexibilität, die diese CSS-Alternativen zu bieten scheinen.
Inline-Styles, Styles in Javascript machen, das DOM von JS aus ändern, indem man HTML-Elemente hinzufügt? Was ist mit dem Konzept der Trennung von Belangen passiert?
Ich kann verstehen, wie es in großen Anwendungen als nützlich erachtet werden könnte, CSS auf die „React“-Art zu verwenden, aber ich kann auch das Chaos nicht übersehen, das sich aus dem Schreiben von Inline-CSS ergeben würde… es fühlt sich einfach falsch an!