Verwenden von PostCSS zusammen mit Sass, Stylus oder LESS
() translation by (you can also view the original English article)
Machen Sie sich keine Sorgen, wenn Sie PostCSS verwenden möchten, aber Ihren bevorzugten Präprozessor immer noch lieben. Sie müssen sich nicht zwischen den beiden entscheiden – Sie können sie direkt nebeneinander verwenden.
Es gibt mehrere PostCSS-Plugins, die Präprozessoren sehr gut ergänzen, da sie Ihrem Workflow Funktionen hinzufügen, die ansonsten unmöglich oder zumindest schwieriger wären, wenn Sie nur einen Präprozessor verwenden.
Wir werden einige dieser kostenlosen Plugins ansprechen und dann Setup-Anleitungen durchgehen, um Ihnen zu zeigen, wie Sie PostCSS Seite an Seite mit Sass, Stylus oder LESS verwenden können.
Warum beides verwenden?
Bevor wir darauf eingehen, wie Sie Präprozessoren zusammen mit PostCSS verwenden können, werden wir ein wenig darüber sprechen, warum Sie dies tun möchten. Die kurze Antwort lautet: Zugang zu PostCSS-Plugins zu erhalten, deren Funktionalität Präprozessoren ergänzt. Um Ihnen zu zeigen, warum es sich lohnt, diese zu haben, gehen wir auf eine Handvoll Plugins ein, die mit Präprozessoren wirklich gut funktionieren.
Hinweis: Es ist möglich, ähnliche Endergebnisse zu erzielen, indem Sie Mixins und Funktionen in regulärem Präprozessor-Code verwenden, aber mit jedem der folgenden Beispiele wird der Prozess automatisch gehandhabt. Du schreibst dein CSS ganz normal und die Plugins kümmern sich um alles für dich, ohne Funktionen zum Aufrufen, keine einzuschließenden Mixins oder zu übergebende Argumente.
autoprefixer
Es wurden viele Präprozessor-Mixins geschrieben, um das Einfügen von Herstellerpräfixen zu handhaben. Zum Beispiel könnten Sie @include box-sizing(border-box);
aus der Compass-Bibliothek, um box-sizing
-Regeln mit Präfix des Herstellers auszugeben.
Das Problem, sich auf Mixins für Anbieterpräfixe zu verlassen, ist:
- Sie müssen zuerst wissen, dass eine Eigenschaft Präfixe benötigt, bevor Sie sich entscheiden können, ein Mixin dafür bereitzustellen.
- Sie müssen den Namen des zugehörigen Mixins und dessen Verwendung kennen.
- Sie müssen im Auge behalten, wann für jede Eigenschaft keine Anbieterpräfixe mehr erforderlich sind (ich weiß, dass ich die
box-sizing
viel zu lange vorangestellt habe ...)
Autoprefixer beseitigt diese Bedenken, indem der Prozess der Anbieterpräfixierung automatisch durchgeführt wird. Autoprefixer scannt Ihr CSS, vergleicht es mit Daten von CanIUse.com und fügt dann die erforderlichen Präfixe hinzu.
Lesen Sie mehr über Autoprefixer unter: https://github.com/postcss/autoprefixer
rtlcss
Das Generieren von Standard- und RTL-Stylesheets (von rechts nach links) aus einer einzigen Quelle wurde ebenfalls mit Präprozessoren durchgeführt, erfordert jedoch normalerweise die Verwendung mehrerer Mixins und/oder das Interpolieren von Variablen in Ihrem Code an mehreren Stellen. Anstatt beispielsweise margin-left: 1rem;
zu schreiben. Sie müssen möglicherweise margin-#{dir}: 1rem;
schreiben oder @include margin-left( 1rem );
.
Mit dem rtlcss-Plugin von Mohammad Younes müssen Sie jedoch keine Mixins oder Variableninterpolation verwenden, Sie schreiben einfach Ihr Stylesheet wie gewohnt und das Plugin findet alle Instanzen oder "rechts" oder "links" und tauscht sie aus. Also margin-left: 1rem;
wird automatisch margin-right: 1rem;
ohne dass Sie dafür einen speziellen Code schreiben müssen.
Lesen Sie mehr über rtlcss unter: https://github.com/MohammadYounes/rtlcss
postcss-colorblind
Mit dem postcss-colorblind Plugin von Brian Holt können Sie automatisch verschiedene Versionen Ihres Stylesheets generieren, die Ihnen aus erster Hand zeigen, wie Ihr Design für eine Person mit Farbenblindheit aussehen würde. Es kann acht verschiedene Arten von Farbenblindheit simulieren und hilft Ihnen dabei, ein wirklich solides Verständnis dafür zu bekommen, wie zugänglich Ihre Farbschemata sind.
Dies ist ein Beispiel für eine Funktionalität, die Sie wirklich in PostCSS finden müssen, da sie für Präprozessoren sehr schwierig zu erreichen wäre.
Lesen Sie mehr über postcss-colorblind unter: https://github.com/btholt/postcss-colorblind
postcss-svgo
Mit dem postcss-svgo-Plugin von Ben Briggs können Sie Inline-SVG-Code freihändig optimieren. Zum Beispiel dies:
1 |
background: url('data:image/svg+xml;utf-8,<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"><circle cx="50" cy="50" r="40" fill="yellow" /></svg>'); |
Kann auf weniger als die Hälfte des Codes reduziert werden:
1 |
background: url('data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="40" fill="#ff0"/></svg>'); |
Lesen Sie mehr über postcss-svgo unter: https://github.com/ben-eb/postcss-svgo
cssnano
Während Präprozessoren Leerzeichen und Kommentare entfernen können, kann das cssnano-Paket von Ben Briggs alle Arten von Optimierungen über diese beiden Schritte hinaus durchführen. Wir behandeln cssnano ausführlich im Tutorial For Minification and Optimization.
Lesen Sie mehr über cssnano unter: https://github.com/ben-eb/cssnano
postcss-font-magician
Das postcss-font-magician-Plugin von Jonathan Neal macht das Hinzufügen benutzerdefinierter Schriftarten so einfach wie die Verwendung normaler Schriftarten. Sie müssen keine Mixins verwenden, fügen Sie einfach wie gewohnt eine font-family
-Regel hinzu:
1 |
body { |
2 |
font-family: "Alice"; |
3 |
}
|
...und das Plugin übernimmt die vollständige @font-face
-Generierung für Sie:
1 |
@font-face { |
2 |
font-family: "Alice"; |
3 |
font-style: normal; |
4 |
font-weight: 400; |
5 |
src: local("Alice"), local("Alice-Regular"), |
6 |
url("http://fonts.gstatic.com/s/alice/v7/sZyKh5NKrCk1xkCk_F1S8A.eot?#") format("eot"), |
7 |
url("http://fonts.gstatic.com/s/alice/v7/l5RFQT5MQiajQkFxjDLySg.woff2") format("woff2"), |
8 |
url("http://fonts.gstatic.com/s/alice/v7/_H4kMcdhHr0B8RDaQcqpTA.woff") format("woff"), |
9 |
url("http://fonts.gstatic.com/s/alice/v7/acf9XsUhgp1k2j79ATk2cw.ttf") format("truetype") |
10 |
}
|
11 |
|
12 |
body { |
13 |
font-family: "Alice"; |
14 |
}
|
Lesen Sie mehr über postcss-font-magician unter: https://github.com/jonathantneal/postcss-font-magician
Projektaufbau
Im Folgenden finden Sie sechs Setup-Anleitungen: eine Gulp- und Grunt-Anleitung für jeden wichtigen Präprozessor. Sie müssen nicht alle sechs lesen, Sie können einfach direkt zum Handbuch für Ihren bevorzugten Präprozessor und Build-Tool springen. Wenn Sie sich nicht sicher sind, ob Sie Gulp oder Grunt verwenden sollen, ist Gulp definitiv die einfachere Wahl für dieses Tutorial.
Unabhängig davon, welcher Anleitung Sie folgen, müssen Sie mit einem leeren Gulp- oder Grunt-Projekt beginnen. Sie können in den vorherigen Tutorials lesen, wie Sie Gulp- oder Grunt-Projekte für PostCSS einrichten
beziehungsweise.
Wenn Sie Ihr Projekt jedoch nicht manuell von Grund auf neu 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 mit einem Terminal oder einer Eingabeaufforderung, die auf den Ordner zeigt, den Befehl npm install
aus.
Installieren Sie PostCSS-Plugins in Ihrem Projekt
Nachdem Sie ein leeres Projekt für einen der folgenden Abschnitte eingerichtet haben, müssen Sie auch zwei PostCSS-Plugins installieren: Autoprefixer und cssnano. Sie können dies tun, indem Sie den Befehl ausführen:
1 |
npm install autoprefixer cssnano --save-dev |
Wir werden diese beiden Plugins verwenden, um zu testen, ob PostCSS und Ihr Präprozessor wie erwartet zusammenarbeiten.
Vorverarbeitung vor PostCSS
Die erste Regel bei der Verwendung eines Präprozessors mit PostCSS lautet, dass Sie diesen Präprozessor immer zuerst ausführen sollten. Dies liegt daran, dass Sie keine präprozessorspezifische Syntax in Ihrem Code haben möchten, die ein PostCSS-Plugin ersticken könnte, und Sie möchten auch nicht, dass PostCSS Änderungen an Ihrem Code vornimmt, die verhindern könnten, dass ein Präprozessor wie erwartet ausgeführt wird.
PostCSS-Plugins und „PostCSS-Testcode“
Für jeden der von uns eingerichteten Präprozessoren lassen wir sie autoprefixer und cssnano ausführen, nachdem der Präprozessor seine Kompilierung abgeschlossen hat. In jedem Fall müssen wir Testcode hinzufügen, damit diese beiden Plugins funktionieren.
Wenn Sie eine Anweisung sehen, die Sie zum Hinzufügen Ihres PostCSS-Testcodes auffordert, fügen Sie dies der Präprozessor-Quelldatei, an der Sie gerade arbeiten, hinzu, um das Wiederholen desselben Codes in jedem der folgenden Abschnitte zu vermeiden:
1 |
.css_nano, .css_nano + p, [class*="css_nano"], .css_nano { |
2 |
/* cssnano will remove this comment */
|
3 |
display: flex; |
4 |
font-weight: normal; |
5 |
margin-top: 1rem; |
6 |
margin-bottom: 2rem; |
7 |
margin-left: 1.5rem; |
8 |
margin-right: 2.5rem; |
9 |
font-weight: normal; |
10 |
padding: 1.75rem; |
11 |
width: calc(50rem - (2 * 1.75rem)); |
12 |
}
|
Bei Erfolg wird Ihr kompilierter Code in jedem Fall wie folgt aussehen:
1 |
.css_nano,.css_nano+p,[class*=css_nano]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1rem 2.5rem 2rem 1.5rem;font-weight:400;padding:1.75rem;width:46.5rem} |
Hinweis: Die Verwendung von Flexbox wurde automatisch mit einem Präfix versehen, und cssnano hat mehrere Optimierungen des Codes durchgeführt. Wir verwenden denselben Code zum Testen von cssnano wie im vorherigen Tutorial zur Minimierung und Optimierung. Einzelheiten zu den durchgeführten Optimierungen finden Sie daher im Abschnitt „cssnano“.
1. Sass + PostCSS
Da Sie bereits mit Node.js arbeiten, um Gulp oder Grunt und PostCSS auszuführen, können Sie Sass am einfachsten über LibSass verwenden. Dies ist auch erheblich schneller als Ruby Sass. Wir werden LibSass über die Module gulp-sass oder grunt-contrib-sass bereitstellen.
Einrichtung über Gulp
Installieren Sie das Modul gulp-sass in Ihrem Projekt mit npm install gulp-sass --save-dev
.
Jetzt können Sie Ihr Gulpfile auf Folgendes aktualisieren:
1 |
var gulp = require('gulp'); |
2 |
var postcss = require('gulp-postcss'); |
3 |
var sass = require('gulp-sass'); |
4 |
|
5 |
var autoprefixer = require('autoprefixer'); |
6 |
var cssnano = require('cssnano'); |
7 |
|
8 |
gulp.task('css', function () { |
9 |
var processors = [ |
10 |
autoprefixer, |
11 |
cssnano
|
12 |
];
|
13 |
return gulp.src('./src/*.scss') |
14 |
.pipe(sass().on('error', sass.logError)) |
15 |
.pipe(postcss(processors)) |
16 |
.pipe(gulp.dest('./dest')); |
17 |
});
|
Lassen Sie uns aufschlüsseln, was wir vom Standard-Starter-Gulpfile geändert haben:
- Variablen zum Laden von
gulp-sass
,autoprefixer
undcssnano
hinzugefügt -
autoprefixer
undcssnano
-Variablen zumprocessors
-Array hinzugefügt - Die Dateierweiterung der Quelldatei, die wir zu ".scss" anstelle von ".css" kompilieren, wurde bearbeitet
- Eine neue
pipe()
-Zeile,.pipe(sass()...
, hinzugefügt, um den Sass zu verarbeiten, wobei darauf zu achten ist, dass sie vor der Zeile platziert wird, die PostCSS verarbeitet
Jetzt können wir einige Tests durchführen, um sicherzustellen, dass sowohl Sass als auch PostCSS wie erwartet kompiliert werden.
Präprozessor testen
Benennen Sie Ihre vorhandene Datei „src/style.css“ in „src/style.scss“ um und fügen Sie den folgenden Testcode hinzu:
1 |
$font-stack: Helvetica, sans-serif; |
2 |
$primary-color: #333; |
3 |
|
4 |
body { |
5 |
font: 100% $font-stack; |
6 |
color: $primary-color; |
7 |
}
|
Führen Sie gulp css
aus und Sie sollten eine neue Datei „style.css“ in Ihrem Ordner „dest“ mit dem Inhalt sehen:
1 |
body { |
2 |
font: 100% Helvetica, sans-serif; |
3 |
color: #333; } |
PostCSS testen
Fügen Sie nun den zuvor in diesem Tutorial bereitgestellten PostCSS-Testcode zu Ihrer Datei „style.scss“ hinzu.
Führen Sie Ihren gulp css
-Befehl aus und Sie sollten den richtigen Code in Ihrer Datei „dest/style.css“ sehen:
1 |
body{font:100% Helvetica,sans-serif;color:#333}.css_nano,.css_nano+p,[class*=css_nano]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1rem 2.5rem 2rem 1.5rem;font-weight:400;padding:1.75rem;width:46.5rem} |
Einrichtung über Grunt
Installieren Sie in Ihrem neuen Grunt-Projekt das Modul grunt-contrib-sass mit npm install grunt-contrib-sass
.
Fügen Sie dann eine grunt.loadNpmTasks()
-Funktion dafür unter der vorhandenen hinzu, die Sie für PostCSS haben:
1 |
grunt.loadNpmTasks('grunt-postcss'); |
2 |
grunt.loadNpmTasks('grunt-contrib-sass'); |
Sie müssen nun eine neue Aufgabe für die Verarbeitung von Sass einrichten. Nach dieser Zeile:
1 |
grunt.initConfig({ |
...aber vor der bestehenden postcss
-Aufgabe fügen Sie diesen Code hinzu:
1 |
sass: { |
2 |
dist: { |
3 |
files: { |
4 |
'src/style.css': 'src/style.scss' |
5 |
}
|
6 |
}
|
7 |
},
|
Jetzt registrieren wir eine Aufgabe, die Sass und dann PostCSS ausführt. Fügen Sie nach der gerade eingefügten Funktion grunt.loadNpmTasks()
Folgendes hinzu:
1 |
grunt.registerTask('css', ['sass', 'postcss']); |
Präprozessor testen
Um Ihr Setup zu testen, benennen Sie Ihre vorhandene Datei „src/style.css“ in „style.scss“ um. Fügen Sie diesen Sass-Code hinzu:
1 |
$font-stack: Helvetica, sans-serif; |
2 |
$primary-color: #333; |
3 |
|
4 |
body { |
5 |
font: 100% $font-stack; |
6 |
color: $primary-color; |
7 |
}
|
Führen Sie den Befehl grunt css
aus und Sie sollten eine neue Datei sehen, die in Ihrem "dest" -Ordner namens "style.css" erstellt wurde und diesen Code enthält:
1 |
body { |
2 |
font: 100% Helvetica, sans-serif; |
3 |
color: #333; } |
PostCSS einrichten
Wir werden jetzt unsere Autoprefixer- und cssnano-Plugins zum Laufen bringen. Aktualisieren Sie das processors
-Array Ihres Gruntfiles auf Folgendes:
1 |
processors: [ |
2 |
require('autoprefixer')(), |
3 |
require('cssnano')() |
4 |
]
|
PostCSS testen
Fügen Sie den PostCSS-Testcode zu Ihrer Datei „style.scss“ hinzu, führen Sie den Befehl grunt css
erneut aus und Sie sollten feststellen, dass Ihre neu kompilierte Datei „dest/style.css“ jetzt den korrekten Code mit automatischem Präfix und optimiertem Code enthält.
2. Stylus + PostCSS
Stylus und PostCSS arbeiten dank der Entwicklung des PostStylus-Pakets von Sean King, das die Verarbeitung von Stylus und PostCSS kombiniert, besonders gut zusammen. Wenn Sie ein Stylus-Entwickler sind, können Sie einfach PostStylus zu Ihrem Kompilierungsprozess hinzufügen und haben sofort Zugriff auf die Verwendung von PostCSS-Plugins als Teil Ihres Workflows.
PostStylus: https://github.com/seaneking/postStylus
Einrichtung über Gulp
Wenn Sie das vorgefertigte Gulpfile aus dem Starterprojekt verwenden, werden Sie feststellen, dass es das gulp-postcss-Plugin verwendet. Dies ist eigentlich nur da, da es für die Sass- und LESS-Setup-Prozesse benötigt wird, aber für Stylus brauchen wir es nicht, da wir stattdessen PostStylus als Compiler verwenden.
Sie können es mit npm uninstall gulp-postcss --save-dev
aus Ihrem Projekt entfernen und diese Zeile aus Ihrem Gulpfile löschen:
1 |
var postcss = require('gulp-postcss'); |
Jetzt können wir die beiden Plugins installieren, die wir für die Stylus- und PostCSS-Kompilierung benötigen, indem wir den Befehl ausführen:
1 |
npm install gulp-stylus poststylus --save-dev |
Aktualisieren Sie Ihr Gulpfile, um:
1 |
var gulp = require('gulp'); |
2 |
var stylus = require('gulp-stylus'); |
3 |
var poststylus = require('poststylus'); |
4 |
|
5 |
var autoprefixer = require('autoprefixer'); |
6 |
var cssnano = require('cssnano'); |
7 |
|
8 |
gulp.task('css', function () { |
9 |
var processors = [ |
10 |
autoprefixer, |
11 |
cssnano
|
12 |
];
|
13 |
return gulp.src('./src/*.styl') |
14 |
.pipe(stylus({ |
15 |
use: [ |
16 |
poststylus(processors) |
17 |
]
|
18 |
}))
|
19 |
.pipe(gulp.dest('./dest')); |
20 |
});
|
Das haben wir oben gemacht:
- Variablen zum Laden von
gulp-stylus
,poststylus
,autoprefixer
undcssnano
hinzugefügt -
autoprefixer
undcssnano
-Variablen zumprocessors
-Array hinzugefügt - Die Dateierweiterung der Quelldatei, die wir zu ".styl" anstelle von ".css" kompilieren, wurde bearbeitet
- Die
.pipe()
-Zeile, die.pipe(postcss(processors))
liest, wurde entfernt. - Ersetzt durch
.pipe(stylus({...
, um die Module gulp-stylus und poststylus so einzustellen, dass sie unsere Kompilierung verarbeiten
Präprozessor testen
Jetzt können wir die Kompilierung testen. Benennen Sie in Ihrem „src“-Ordner „style.css“ in „style.styl“ um und fügen Sie diesen Test-Stylus-Code hinzu:
1 |
$font-stack = Helvetica, sans-serif |
2 |
$primary-color = #333 |
3 |
|
4 |
body
|
5 |
font: 100% $font-stack |
6 |
color: $primary-color |
Führen Sie den Befehl gulp css
aus und Sie sollten eine Datei „style.css“ mit diesem Inhalt in Ihrem Ordner „dest“ sehen:
1 |
body { |
2 |
font: 100% Helvetica, sans-serif; |
3 |
color: #333; |
4 |
}
|
PostCSS testen
Fügen Sie den zuvor bereitgestellten PostCSS-Testcode zu Ihrer Datei „style.styl“ hinzu und stellen Sie sicher, dass im eingefügten Code nur Tabulatoreinzüge enthalten sind, keine Leerzeichen.
Kompilieren Sie neu und überprüfen Sie, ob Sie die entsprechende Ausgabe in Ihrer Datei „dest/style.css“ haben.
1 |
body{font:100% Helvetica,sans-serif;color:#333}.css_nano,.css_nano+p,[class*=css_nano]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1rem 2.5rem 2rem 1.5rem;font-weight:400;padding:1.75rem;width:46.5rem} |
Einrichtung über Grunt
Wie beim Gulp-Projekt für Stylus ist der standardmäßige PostCSS-Compiler, der mit dem Starterprojekt geliefert wird, nicht erforderlich, da er nur für Sass- und LESS-Setup-Prozesse da ist. Sie können es mit npm uninstall grunt-postcss --save-dev
aus Ihrem Projekt entfernen.
Jetzt können wir grunt-contrib-stylus und poststylus mit dem Befehl installieren:
1 |
npm install grunt-contrib-stylus poststylus --save-dev |
Wir werden grunt-postcss nicht mehr verwenden, also suchen Sie diese Zeile:
1 |
grunt.loadNpmTasks('grunt-postcss'); |
Und ersetzen Sie es durch:
1 |
grunt.loadNpmTasks('grunt-contrib-stylus'); |
Da wir grunt-postcss nicht verwenden, bedeutet dies, dass wir die postcss
-Aufgabe, die wir in grunt.initConfig({...});
definiert haben, nicht mehr benötigen. Löschen Sie diese Aufgabenkonfiguration und ersetzen Sie sie durch diese neue stylus
-Aufgabe:
1 |
stylus: { |
2 |
compile: { |
3 |
options: { |
4 |
},
|
5 |
files: { |
6 |
'dest/style.css': 'src/style.styl' |
7 |
}
|
8 |
}
|
9 |
}
|
Präprozessor testen
Jetzt können wir die Kompilierung testen. Benennen Sie in Ihrem „src“-Ordner „style.css“ in „style.styl“ um und fügen Sie diesen Test-Stylus-Code hinzu:
1 |
$font-stack = Helvetica, sans-serif |
2 |
$primary-color = #333 |
3 |
|
4 |
body
|
5 |
font: 100% $font-stack |
6 |
color: $primary-color |
Führen Sie den Befehl grunt stylus
aus und Sie sollten eine Datei „style.css“ mit diesem Inhalt in Ihrem Ordner „dest“ sehen:
1 |
body{font:100% Helvetica,sans-serif;color:#333} |
PostCSS einrichten
Um unsere PostCSS-Plugins zum Kompilierungsprozess hinzuzufügen, müssen wir zuerst diesen Code ganz oben in unserer Gruntdatei über der Zeile module.exports...
einfügen:
1 |
var poststylus = function() { |
2 |
return require('poststylus')(['autoprefixer', 'cssnano']) |
3 |
};
|
Hier laden Sie alle PostCSS-Plugins, die Sie verwenden möchten, und nicht in ein processors
-Array, wie Sie es von unseren anderen Tutorials gewohnt sind.
Suchen Sie dann das options
-Objekt in der Stiftaufgabe und aktualisieren Sie es wie folgt:
1 |
options: { |
2 |
use: [poststylus] |
3 |
},
|
Dies weist grunt-contrib-stylus an, poststylus während der Kompilierung und seine Plugins zusammen mit ihm zu verwenden.
PostCSS testen
Fügen Sie den „PostCSS-Testcode“ zu Ihrer Datei „src/style.styl“ hinzu, führen Sie grunt stylus
aus und Sie sollten den folgenden Inhalt in Ihrer Datei „dest/style.css“ sehen:
1 |
body{font:100% Helvetica,sans-serif;color:#333}.css_nano,.css_nano+p,[class*=css_nano]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1rem 2.5rem 2rem 1.5rem;font-weight:400;padding:1.75rem;width:46.5rem} |
3. LESS + PostCSS
Einrichtung über Gulp
Installieren Sie das gulp-less-Modul in Ihrem Projekt mit npm install gulp-less --save-dev
.
Jetzt können Sie Ihr Gulpfile auf Folgendes aktualisieren:
1 |
var gulp = require('gulp'); |
2 |
var postcss = require('gulp-postcss'); |
3 |
var less = require('gulp-less'); |
4 |
|
5 |
var autoprefixer = require('autoprefixer'); |
6 |
var cssnano = require('cssnano'); |
7 |
|
8 |
gulp.task('css', function () { |
9 |
var processors = [ |
10 |
autoprefixer, |
11 |
cssnano
|
12 |
];
|
13 |
return gulp.src('./src/*.less') |
14 |
.pipe(less()) |
15 |
.pipe(postcss(processors)) |
16 |
.pipe(gulp.dest('./dest')); |
17 |
});
|
Lassen Sie uns aufschlüsseln, was wir vom Standard-Starter-Gulpfile geändert haben:
- Variablen zum
gulp-less
Laden,autoprefixer
undcssnano
hinzugefügt -
autoprefixer
undcssnano
-Variablen zumprocessors
-Array hinzugefügt - Die Dateierweiterung der Quelldatei, die wir zu ".less" anstelle von ".css" kompilieren, wurde bearbeitet
-
.pipe(less())
hinzugefügt, um das LESS zu verarbeiten, wobei darauf zu achten ist, dass es vor der Zeile platziert wird, die PostCSS verarbeitet
Präprozessor testen
Jetzt können wir einige Tests durchführen, um sicherzustellen, dass sowohl LESS als auch PostCSS wie erwartet kompiliert werden.
Benennen Sie die vorhandene Datei „src/style.css“ in „src/style.less“ um und fügen Sie den folgenden Testcode hinzu:
1 |
@font-stack: Helvetica, sans-serif; |
2 |
@primary-color: #333; |
3 |
|
4 |
body { |
5 |
font: 100% @font-stack; |
6 |
color: @primary-color; |
7 |
}
|
Führen Sie gulp css
aus und Sie sollten eine neue Datei „style.css“ in Ihrem Ordner „dest“ mit dem Inhalt sehen:
1 |
body{font:100% Helvetica,sans-serif;color:#333} |
PostCSS testen
Fügen Sie nun zu Ihrer Datei „style.less“ den PostCSS-Testcode hinzu, der weiter oben in diesem Tutorial bereitgestellt wurde.
Führen Sie Ihren gulp css
-Befehl aus und Sie sollten jetzt den richtigen Code in Ihrer Datei „dest/style.css“ sehen.
1 |
body{font:100% Helvetica,sans-serif;color:#333}.css_nano,.css_nano+p,[class*=css_nano]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1rem 2.5rem 2rem 1.5rem;font-weight:400;padding:1.75rem;width:46.5rem} |
Einrichtung über Grunt
Installieren Sie in Ihrem neuen Grunt-Projekt das grunt-contrib-less-Modul mit npm install grunt-contrib-less
und fügen Sie dann eine grunt.loadNpmTasks()
-Funktion dafür unter der vorhandenen Funktion für PostCSS hinzu:
1 |
grunt.loadNpmTasks('grunt-postcss'); |
2 |
grunt.loadNpmTasks('grunt-contrib-less'); |
Sie müssen nun eine neue Aufgabe für die Verarbeitung von LESS einrichten. Nach dieser Zeile:
1 |
grunt.initConfig({ |
...aber vor der bestehenden postcss
-Aufgabe fügen Sie diesen Code hinzu:
1 |
less: { |
2 |
production: { |
3 |
files: { |
4 |
'src/style.css': 'src/style.less' |
5 |
}
|
6 |
}
|
7 |
},
|
Jetzt registrieren wir eine Aufgabe, um LESS und dann PostCSS auszuführen. Fügen Sie nach der gerade eingefügten Funktion grunt.loadNpmTasks()
Folgendes hinzu:
1 |
grunt.registerTask('css', ['less', 'postcss']); |
Präprozessor testen
Um Ihr Setup zu testen, benennen Sie Ihre Datei „src/style.css“ in „style.less“ um. Fügen Sie diesen LESS Code hinzu:
1 |
@font-stack: Helvetica, sans-serif; |
2 |
@primary-color: #333; |
3 |
|
4 |
body { |
5 |
font: 100% @font-stack; |
6 |
color: @primary-color; |
7 |
}
|
Führen Sie den Befehl grunt css
aus und Sie sollten eine neue Datei sehen, die in Ihrem "dest" -Ordner namens "style.css" erstellt wurde und diesen Code enthält:
1 |
body { |
2 |
font: 100% Helvetica, sans-serif; |
3 |
color: #333333; |
4 |
}
|
PostCSS einrichten
Jetzt fügen wir unsere PostCSS-Plugins zum Kompilierungsfluss hinzu. Aktualisieren Sie das processors
-Array Ihres Gruntfiles auf Folgendes:
1 |
processors: [ |
2 |
require('autoprefixer')(), |
3 |
require('cssnano')() |
4 |
]
|
PostCSS testen
Fügen Sie den PostCSS-Testcode zu Ihrer Datei „style.less“ hinzu, führen Sie den Befehl grunt css
erneut aus und Sie sollten feststellen, dass Ihre neu kompilierte Datei „dest/style.css“ jetzt den korrekten Code mit automatischem Präfix und optimiertem Code enthält:
1 |
body{font:100% Helvetica,sans-serif;color:#333}.css_nano,.css_nano+p,[class*=css_nano]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1rem 2.5rem 2rem 1.5rem;font-weight:400;padding:1.75rem;width:46.5rem} |
Im nächsten Tutorial
Als nächstes werden wir uns etwas ansehen, das Sie fast als eine andere Art der Vorverarbeitung betrachten könnten – die Verwendung von PostCSS für automatisch generierte BEM/SUIT-kompatible CSS-Klassen. Dieser Prozess macht die BEM/SUIT-Entwicklung viel einfacher und effizienter.
Wir sehen uns im nächsten Tutorial!