Verwenden von PostCSS zur Minimierung und Optimierung

Im letzten Tutorial haben Sie gelernt, wie Sie PostCSS verwenden, um Ihre Stylesheets besser browserübergreifender zu machen, insbesondere bei Problemen, die sich aus der Unterstützung von älteren Versionen von IE ergeben.

In diesem Lernprogramm erfahren Sie, wie Sie Ihre Stylesheets effizienter und schneller laden können, indem Sie PostCSS verwenden, um verschiedene Minifizierungs- und Optimierungsvorgänge auszuführen.

Sie lernen, wie Sie:

  • Kombinieren Sie mehrere Stylesheets über das Symbol @einführen Selbst wenn einige Ihrer Stylesheets aus Bower-Komponenten oder npm-Modulen stammen, stellen Sie sicher, dass Sie nur ein einziges benötigen http Anfrage zum Laden der CSS Ihrer Site.
  • Kombinieren Sie übereinstimmende Medienabfragen in einer einzigen, sodass Sie dieselbe Medienabfrage während der Entwicklung an mehreren Speicherorten verwenden können und dennoch die Effizienz konsolidierter Abfragen in Ihrem endgültigen Stylesheet erhalten bleibt.
  • Mit dem cssnano-Paket können Sie alle Arten von Optimierungen durchführen, z. B. Leerzeichen und Kommentare entfernen, bestimmte Arten von Code minimieren und vieles mehr.

Lass uns anfangen!

Richten Sie Ihr Projekt ein

Als Erstes müssen Sie Ihr Projekt so einrichten, dass es entweder Gulp oder Grunt verwendet, abhängig von Ihren Vorlieben. Wenn Sie für das eine oder das andere nicht bereits eine Präferenz haben, empfehle ich die Verwendung von Gulp, da Sie weniger Code benötigen, um die gleichen Ziele zu erreichen, so dass Sie mit dem Arbeiten ein bisschen einfacher sein sollten.

Wie Sie Gulp- oder Grunt-Projekte für PostCSS einrichten, erfahren Sie in den vorherigen Tutorials

  • PostCSS Quickstart Guide: Gulp Setup oder
  • PostCSS-Schnellstartanleitung: Grunt-Setup

beziehungsweise.

Wenn Sie Ihr Projekt jedoch nicht manuell einrichten möchten, können Sie die an dieses Tutorial angehängten Quelldateien herunterladen und entweder das bereitgestellte Gulp- oder Grunt-Starterprojekt in einen leeren Projektordner extrahieren. Führen Sie dann den Befehl mit einer Terminal- oder Eingabeaufforderung auf den Ordner aus npm installieren.

Installiere Plugins

Für dieses Tutorial verwenden wir zwei individuelle Plugins plus ein Plugin-Pack. Installieren Sie sie, indem Sie den folgenden Befehl in Ihrem Projektordner ausführen:

npm install postcss-import css-mqpacker cssnano --save-dev

Nun sind die Plugins installiert, laden wir sie in Ihr Projekt.

Plugins über Gulp laden

Wenn Sie Gulp verwenden, fügen Sie diese Variablen unter den bereits in der Datei vorhandenen Variablen hinzu:

var atImport = required ('postcss-import'); var mqpacker = required ('css-mqpacker'); var cssnano = erfordern ('cssnano');

Fügen Sie nun jeden dieser neuen Variablennamen in Ihre hinzu Prozessoren Array:

 var-Prozessoren = [atImport, mqpacker, cssnano];

Führen Sie einen kurzen Test durch, indem Sie den Befehl ausführen Schluck Css Vergewissern Sie sich, dass eine neue Datei „style.css“ im Ordner „dest“ Ihres Projekts angezeigt wurde.

Plugins über Grunt laden

Wenn Sie Grunt verwenden, aktualisieren Sie die Prozessoren Objekt, das unter dem verschachtelt ist Optionen Objekt zu Folgendem:

 Prozessoren: [erfordern ('postcss-import') (), erfordern ('css-mqpacker') (), erfordern ('cssnano') ()]

Führen Sie einen kurzen Test durch, indem Sie den Befehl ausführen grunzen postcss Vergewissern Sie sich, dass eine neue Datei „style.css“ im Ordner „dest“ Ihres Projekts angezeigt wurde.

Das hat alle Plugins installiert und geladen, also lernen wir, wie man sie zur Minifizierung und Optimierung einsetzt.

Inline / Kombinieren von Dateien mit @import

Anstatt mehrere Stylesheets einzeln zu laden, ist es, wo immer möglich, effizienter, Ihre Stylesheets zu einem einzigen zu kombinieren.

Die Verwendung von Normalize.css ist zum Beispiel sehr üblich. Wenn Sie es jedoch als eigenständiges Stylesheet vor Ihrem Haupt-Stylesheet laden, sind mehrere erforderlich http Anfragen, wodurch die Ladezeit verlangsamt wird.

Wenn Sie jedoch das Postcss-Import-Plugin von Maxime Thirouin verwenden, können Sie Normalize.css mithilfe von in Ihrem Haupt-Stylesheet kombinieren @einführen In der Regel erhalten Sie dasselbe CSS mit nur einem http anfordern.

@import dann Inline Normalize.css

Lassen Sie uns dies jetzt tun, indem Sie Normalize.css importieren und dann in das Stylesheet unseres Projekts einfügen. Beginnen Sie mit dem Herunterladen von „normalize.css“ in den Ordner „src“ Ihres Projekts von https://necolas.github.io/normalize.css/.

Fügen Sie oben in Ihrer Datei "src / style.css" die folgende Zeile ein:

@import 'normalize.css';

Da Sie bereits Postcss-Import installiert haben, müssen Sie das nicht tun. Es wird das sehen @einführen Regel und automatisch den Code aus der Datei normalize.css in Ihr Stylesheet einfügen.

Kompilieren Sie Ihre Datei und wenn Sie Ihre "dest / style.css" -Datei betrachten, sollten Sie den gesamten Inhalt von "normalize.css" darin sehen:

/ *! normalize.css v3.0.2 | MIT-Lizenz | git.io/normalize * / html font-family: serifenlos;… 

Sie können diesen Prozess verwenden, um so viele separate Stylesheets zu kombinieren, wie Sie benötigen. Einfach platzieren @einführen Zeilen in Ihrer Datei "src / style.css", wo immer der Inline-Code eingefügt werden soll.

Automatische Erkennung von Bower-Komponenten und Knotenmodulen

Eine sehr hilfreiche Funktion dieses Plugins ist die Fähigkeit, CSS-Dateien, die sich in Ihrem Ordner „bower_components“ oder „node_modules“ befinden, automatisch zu ermitteln.

Anstatt "normalize.css" wie oben beschrieben manuell herunterzuladen, können Sie stattdessen einfach den Befehl ausführen bower install normalize.css --save in Ihrem Projekt. Dadurch würde automatisch die neueste Datei "normalize.css" in den Ordner "bower_components / normalize.css" heruntergeladen.

Hinweis: Wenn Sie Bower nicht auf Ihrem Computer installiert haben, erfahren Sie hier, wie.

Am oberen Rand Ihres Stylesheets können Sie jetzt stattdessen diese Zeile verwenden:

@import 'normalize.css / normalize.css';

Das Postcss-Import-Plugin wird in Ihrem Ordner „bower_components“ nach „normalize.css“ suchen und dann wie in dem vorherigen Beispiel mit dem Inline-Vorgang fortfahren.

Derselbe Vorgang kann für alle Stylesheets in Ihrem Ordner "node_modules" ausgeführt werden. Dies bedeutet, dass Sie entweder Bower oder npm verwenden können, um Downloads, Abhängigkeitsverwaltung und Updates auszuführen. Wenn Sie einen dieser Dienste verwenden, können Sie mit diesem Plugin CSS-Dateien von Drittanbietern auf einfache Weise in Ihre eigenen Stylesheets integrieren.

Möglichkeiten, @import Inlining zu nutzen

Das Importieren von importierten CSS-Dateien auf diese Weise ist nicht nur eine sehr effiziente Methode zum Kombinieren von Dateien aus verschiedenen Quellen, z. B. Bower-Komponenten, sondern bietet Ihnen auch die Möglichkeit, Ihr Projekt in mehreren separaten Stylesheets zu organisieren.

Sie können beispielsweise eine Datei erstellen, um Ihr Layout zu steuern, und eine andere, um Ihr Farbschema zu steuern. Wenn Sie Ihr Farbschema ändern möchten, können Sie einem Vorgang wie folgt folgen:

  1. Originales Stylesheet der Farbe duplizieren
  2. Ändern Sie es mit neuen Farbcodes
  3. Importieren Sie das neue Farb-Stylesheet in Ihr Projekt
  4. Kompilieren, um ein alternatives farbiges Stylesheet zu erstellen

Sie können diesen Vorgang dann beliebig oft wiederholen, sodass Sie mehrere Farbschemata für dasselbe Design erstellen können.

Einige Projekte verwenden separate Stylesheets, um mehrere Farbschemata wie diese bereitzustellen, sie erzeugen jedoch eine Verlangsamung durch Hinzufügen http Anfragen. Mit diesem Ansatz erhalten Sie immer nur einen http Bitte, obwohl Sie viel Freiheit haben, was in Ihrem einzelnen Stylesheet enthalten sein könnte.

Weitere Informationen zum Postcss-Import finden Sie unter: https://github.com/postcss/postcss-import

Kombinieren Sie passende Medienabfragen

Das css-mqpacker-Plugin von Kyo Nagashima findet passende Media-Abfragen in Ihrem Stylesheet und kombiniert sie zu einer. Auf diese Weise können Sie Ihr CSS in Ihren Entwicklungs-Stylesheets nach Ihren Wünschen organisieren und Medienabfragen bei Bedarf wiederholen, ohne die Effizienz Ihres Produktions-Stylesheets zu beeinträchtigen.

Lassen Sie uns ein Beispiel für die Art des Anwendungsfalls zusammenstellen, bei dem Sie möglicherweise Medienabfragen wiederholen möchten, z. B. wenn Sie das Layout und die Grafiken Ihres Designs separat organisieren. In einem realen Projekt kann dies bedeuten, dass völlig separate Dateien verwendet werden, eine für Layout und eine für visuelle Elemente. Der Einfachheit halber werden wir dies alles in unserer Datei "src / style.css" tun.

Wir beginnen mit einem Layoutcode. Wir werden ein hinzufügen .Säule Klasse, die zwei machen wird 50% Spalten in der Breite sitzen standardmäßig nebeneinander. Dann verwenden wir eine Medienabfrage, um sie in kleineren Größen übereinander stapeln zu lassen. Fügen Sie diesen Code Ihrem Stylesheet hinzu:

/ * LAYOUT * / .spalte Breite: 50%; Schwimmer: links;  @media (max-width: 50rem) .column width: 100%; Float: keine; 

Als Nächstes fügen wir einige visuelle Elemente hinzu, um einen grauen Rahmen um unsere Spalten zu setzen. Die erste Spalte enthält die Klasse .column_one und der zweite wird die Klasse haben .column_two. Wir werden dieselbe Medienabfrage wie bei unserem Layout verwenden, um zu ändern, wie wir einen Rand auf unsere Spalten anwenden, je nachdem, ob sie nebeneinander oder übereinander sitzen.

Fügen Sie diesen Code auch Ihrem Stylesheet hinzu:

/ * VISUALS * / .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-left: 0;  @media (max-width: 50rem) .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-top: 0; 

Kompilieren Sie nun Ihre Datei "src / style.css" neu und sehen Sie sich den resultierenden Inhalt von "dest / style.css" an.

Wie Sie im folgenden Code sehen können, hat das css-mqpacker-Plugin die beiden übereinstimmenden Medienabfragen identifiziert und in einer zusammengefasst:

/ * LAYOUT * / .spalte Breite: 50%; Schwimmer: links;  / * VISUALS * / .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-left: 0;  @media (max-width: 50rem) .column width: 100%; Float: keine;  .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-top: 0; 

Hinweis: Der obige Code wird in der Datei "dest / style.css" aufgrund des cssnano-Plugins minimiert. Um den Code unbemerkt zu sehen, kommentieren Sie ihn vorübergehend aus Cssnano von Ihrer Gulpfile oder Gruntfile Prozessoren Array.

Weitere Informationen zu css-mqpacker finden Sie unter https://github.com/hail2u/node-css-mqpacker

cssnano Plugin Pack

Für eine umfassende und vielseitige CSS-Optimierung ist das cssnano-Pack von Ben Briggs eine sehr leistungsfähige Option, die jedoch Plug-and-Play-Funktionen bietet. Es bringt ungefähr fünfundzwanzig Plugins zusammen und kann eine beeindruckende Anzahl von verschiedenen Arten der Optimierung durchführen.

Unter einer langen Liste von Optimierungen kann es:

  • Entfernen Sie Leerzeichen und letzte Semikolons
  • Kommentare entfernen
  • Schriftgewichte optimieren
  • Verwerfen Sie doppelte Regeln
  • Optimieren calc () benutzen
  • Selektoren reduzieren
  • Minimieren Sie die Eigenschaften von Langusten
  • Regeln zusammenführen

Wir werden in Ihrem Projekt Beispielcode bearbeiten, in dem alle oben genannten Optimierungen angewendet werden.

Fügen Sie diesen Code zu Ihrer Datei "src / style.css" hinzu:

.css_nano, .css_nano + p, [class * = "css_nano"], .css_nano / * Dies ist ein Beispiel für die Verwendung von cssnano * / font-weight: normal; Rand oben: 1rem; Rand unten: 2rem; Rand links: 1.5rem; Rand rechts: 2.5rem; Schriftgewicht: normal; Polsterung: 1,75rem; Breite: berechnet (50rem - (2 * 1,75rem));  eine Textdekoration: keine; Schriftdicke: fett;  p font-weight: fett; 

Dann kompilieren Sie Ihre Datei neu.

Hinweis: Sie möchten eventuell bereits vorhandenen Code auskommentieren, damit Sie die Ergebnisse deutlich sehen können.

In Ihrer Datei "dest / style.css" sollte jetzt der optimierte Code angezeigt werden:

.css_nano, .css_nano + p, [class * = css_nano] Marge: 1rem 2.5rem 2rem 1.5rem; Schriftgewicht: 400; Polsterung: 1.75rem; Breite: 46.5rem Schriftgewicht: 700

Sehen Sie sich die Liste der Optimierungen an, die in der Aufzählungsliste oben aufgeführt ist, und vergleichen Sie dann den Beispielcode vor und nach der Kompilierung, um zu sehen, wie jede dieser Änderungen stattfindet:

  • Leerzeichen, Kommentare und abschließende Semikolons sind weg
  • Schriftgewicht: normal und Schriftdicke: fett werden in konvertiert Schriftgewicht: 400 und Schriftgewicht: 700
  • Die zweite, wiederholte Instanz der Regel Schriftgewicht: normal; wurde aus dem entfernt .css_nano Stil
  • Das calc () Eigenschaft wurde auf einen statischen Wert reduziert
  • Die Selektoren .css_nano, .css_nano + p, [class * = "css_nano"], .css_nano wurden minimiert .css_nano, .css_nano + p, [class * = css_nano]
  • Die langjährigen Eigenschaften Rand oben: 1rem; Rand unten: 2rem; Rand links: 1.5rem; Rand rechts: 2.5rem; wurden auf reduziert Marge: 1rem 2.5rem 2rem 1.5rem;
  • Das ein und p Stile wurden zusammengeführt, um ihre Gemeinsamkeiten zu teilen Schriftgewicht: 700; Rahmen

Eine vollständige Liste der Optimierungen bietet cssnano unter http://cssnano.co/optimisations/.

Konfigurieren von Optionen und Deaktivieren von Modulen

Es gibt mehrere unabhängige Plugins, die vom cssnano-Paket verwendet werden. Möglicherweise möchten Sie Einstellungen für einige davon konfigurieren oder vollständig deaktivieren.

Um ein Plugin zu deaktivieren, übergeben Sie seinen Namen in Ihren Optionen für cssnano mit der Einstellung "false". Wenn Sie beispielsweise die Schriftgewichtungen nicht optimieren möchten, legen Sie Folgendes in Ihrer Gulpfile / Gruntfile fest:

// In Gulpfile 'Prozessor-Array' cssnano (minifyFontWeight: false) // // In Gruntfile 'Prozessor-Array' benötigt ('cssnano') (minifyFontWeight: false)

Sie können auf dieselbe Weise Optionen für ein Plugin konfigurieren, indem Sie zunächst den Namen des Plugins angeben und dann seine Optionen festlegen.

Sie können beispielsweise die Genauigkeit (Anzahl der Dezimalstellen) festlegen, die das calc-Plugin verwenden soll. Standardmäßig berechnet (100% / 2,76) würde dir geben 36.23188%. Wenn Sie diese Genauigkeit jedoch auf zwei Dezimalstellen reduzieren möchten, können Sie dies folgendermaßen tun:

// In Gulpfile 'Prozessoren' Array cssnano (calc: Präzision: 2) // // In Gruntfile 'Prozessoren' Array benötigen ('cssnano') (calc: Präzision: 2)

Der Berechnungswert würde jetzt in ausgegeben 36,23%.

Weitere Informationen zu den Optionen von cssnano finden Sie unter: http://cssnano.co/options

Schneller Überblick

Lassen Sie uns einen Überblick darüber erhalten, was wir oben behandelt haben:

  • Das Postcss-Import-Plugin bietet Ihnen eine effiziente Möglichkeit, Inline-Stylesheets zu erstellen.
  • Es kann verwendet werden, um Stylesheets von Drittanbietern zu kombinieren, z. B. durch automatische Erkennung in Ihrem Ordner „bower_components“ oder „npm_modules“.
  • Damit können Sie Ihre Stylesheets in Teile aufteilen und später neu kombinieren.
  • Mit dem css-mqpacker-Plugin können Sie Medienabfragen duplizieren, sodass Sie Ihr CSS nach Belieben organisieren können, einschließlich in separaten Dateien, und dann alle passenden Medienabfragen in Ihrem endgültigen Stylesheet zusammenfassen lassen.
  • Das cssnano-Paket umfasst rund 25 verschiedene Plugins und bietet Plug & Play-Zugriff auf eine lange Liste von Minifizierungs- und Optimierungsfunktionen.
  • Es kann so konfiguriert werden, dass es die von Ihnen gewünschten Plugins mit den gewünschten Optionen verwendet.

Up Next: Vorverarbeitung mit PreCSS

Im nächsten Tutorial werden wir uns mit PostCSS für die Vorverarbeitung über ein hervorragendes Plugin-Paket namens PreCSS beschäftigen. Dieses Paket bietet sofortigen Zugriff auf Sass-ähnliche Syntax und Funktionalität, mit Variablen, Mixins, Bedingungen, Erweiterungen und mehr.

Wir sehen uns im nächsten Tutorial!