Verwenden von PostCSS für Cross-Browser-Kompatibilität

Im letzten Tutorial haben wir unseren Abschnitt "Schnellstart" dieser Serie abgeschlossen. Jetzt können wir PostCSS verwenden, um Stylesheets zu erstellen, die verschiedene Arten von Plugins für verschiedene Zwecke verwenden.

In diesem Lernprogramm verwenden wir PostCSS, um ein Stylesheet zu erstellen, das auf Cross-Browser-Kompatibilität ausgelegt ist. Wir werden:

  • Hersteller-Präfixe automatisch hinzufügen lassen
  • Fügen Sie eine Reihe von Fallbacks für die Internet Explorer-Versionen 8, 9 und 10 hinzu
  • Hinzufügen von Fallbacks für die noch nicht weit verbreiteten wird sich verändern Eigentum

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 andere nicht bereits eine Präferenz haben, empfehle ich die Verwendung von Gulp, da Sie weniger Code benötigen, um dieselben Ziele zu erreichen.

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

Nachdem Sie nun Ihr leeres Gulp- oder Grunt + PostCSS-Projekt vorbereitet haben, müssen Sie die Plugins installieren, die Sie in diesem Lernprogramm verwenden werden.

Wir werden einige Plugins installieren. Statt sie einzeln zu installieren, wie in den „Quickstart Guides“ für Gulp und Grunt, installieren wir sie alle mit einem einzigen Befehl.

Unabhängig davon, ob Sie Gulp oder Grunt verwenden, führen Sie den folgenden Befehl in Ihrem Projektordner aus, um die verwendeten Plugins zu installieren:

npm install autoprefixer postcss-color-rgba-fallback postcss-deckkraft postcss-pseudoelemente postcss-vmin pixrem postcss-will-change --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 autoprefixer = required ('autoprefixer'); var color_rgba_fallback = required ('postcss-color-rgba-fallback'); var opacity = requir ('postcss-opacity'); var pseudoelements = required ('postcss-pseudoelements'); var vmin = required ('postcss-vmin'); var pixrem = required ('pixrem'); var will_change = required ('postcss-will-change');

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

 var-Prozessoren = [will_change, autoprefixer, color_rgba_fallback, Opazität, Pseudoelemente, vmin, pixrem];

Führen Sie einen kurzen Test durch, indem Sie den Befehl ausführen Schluck Css Überprüfen Sie dann, ob im Ordner "dest" Ihres Projekts eine neue Datei "style.css" 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-will-change') (), erfordern ('autoprefixer') (), erfordern ('postcss-color-rgba-fallback') (), erfordern ('postcss-opacity') () , required ('postcss-pseudoelements') (), requir ('postcss-vmin') (), requir ('pixrem') ()]

Führen Sie eine schnelle Testkompilierung aus, indem Sie den Befehl ausführen grunzen postcss Überprüfen Sie dann, ob der Ordner "dest" Ihres Projekts jetzt eine neue Datei "style.css" enthält.

Sie haben jetzt alle Plugins installiert, die für dieses Lernprogramm erforderlich sind, und Sie können fortfahren, zu erfahren, wie Sie diese verwenden können, um die Cross-Browser-Kompatibilität Ihrer Stylesheets zu verbessern.

Hersteller-Präfix automatisch hinzufügen

Einige der Maßnahmen zur Cross-Browser-Kompatibilität, die wir behandeln, sind nur für bestimmte Anwendungsfälle erforderlich. Automatisierte Herstellerpräfixe ist dagegen etwas, was ich vorschlagen sollte jeden Projekt über das von Andrey Sitnik erstellte Autoprefixer-Plugin.

Es kann schwierig sein, zu jeder Zeit einen Überblick darüber zu erhalten, für welche Eigenschaften welche Herstellerpräfixe erforderlich sind. Verwenden Sie Autoprefixer als Teil jedes Projekts. Dabei wird der Code mit den Daten von CanIUse.com verglichen und bei Bedarf Herstellerpräfixe hinzugefügt, ohne dass Sie darüber nachdenken müssen.

Lassen Sie uns einen kleinen Test machen, um Autoprefixer in Aktion zu sehen. Fügen Sie der Datei „src / style.css“ Ihres Projekts den folgenden Animations- und Flexbox-Code hinzu:

@keyframes animationExample from width: 0;  bis Breite: 100%;  .animateThis animation: animationExample 2s; Anzeige: Flex; 

Lauf Schluck Css oder grunzen postcss Um Ihre Datei zu kompilieren, sollte Ihre "dest / style.css" nun den vom Hersteller angegebenen Code enthalten:

@ -webkit-keyframes animationExample from width: 0;  bis Breite: 100%;  @keyframes animationExample von width: 0;  bis Breite: 100%;  .animateThis -webkit-animation: animationExample 2s; Animation: AnimationBeispiel 2s; Anzeige: -webkit-box; Anzeige: -webkit-flex; Anzeige: -ms-flexbox; Anzeige: Flex; 

Wie Sie sehen, wurden automatisch Herstellerpräfixe hinzugefügt, die von den von CanIUse.com bereitgestellten Daten zu Animation und Flexbox vorgegeben werden.

Festlegen der Browser-Unterstützungsstufen

Autoprefixer verwendet Browserlist, um zu ermitteln, für welche Browserversionen Unterstützung hinzugefügt wird. In der Standardeinstellung werden Herstellerpräfixe wie folgt angewendet:

  • > 1% Browser, die von mehr als einem Prozent der Menschen weltweit verwendet werden
  • Letzte 2 Versionen: die letzten beiden Versionen aller von CanIUse.com protokollierten Browser
  • Firefox ESR: die neueste Firefox-Version
  • Opera 12.1: Opera Version 12.1

Das oben durchgeführte Beispiel wurde unter den Standardeinstellungen von Autoprefixer kompiliert. Dies bedeutete, dass Unterstützung für IE10 und Safari 8 enthalten war -Frau- und -Webkit- Präfixe, die sie benötigen Animation und Flexbox wurden automatisch eingefügt.

IE11 und Safari 9 benötigen diese Präfixe jedoch nicht. Wenn Sie Ihre Browserlistenkonfiguration so einstellen, dass sie nur IE11 + und Safari 9+ unterstützt, werden diese Präfixe nicht mehr hinzugefügt.

Probieren Sie dies aus, indem Sie ein Browser Einstellung zu Autoprefixer in Ihrer Gulpfile oder Gruntfile wie folgt:

// Im Gulpfile-Array für Prozessoren: autoprefixer (browsers: 'safari> = 9, dh> = 11'), // im Gruntfile-Array für Prozessoren: required ('autoprefixer') (browser: [ 'Safari> = 9, dh> = 11']),

Wenn Sie jetzt Ihr CSS neu kompilieren, werden Sie feststellen, dass es keinen Unterschied zwischen dem ursprünglichen und dem kompilierten Code gibt. Dies liegt daran, dass keine Unterstützung für Safari 8 oder IE10 angefordert wurde und keine Herstellerpräfixe hinzugefügt wurden.

Ähnliche Links:

  • Autoprefixer: https://github.com/postcss/autoprefixer
  • Browserliste: https://github.com/ai/browserslist

Fügen Sie Fallback für die Eigenschaft "Ändern" hinzu

Das wird sich verändern Diese Eigenschaft wird verwendet, um einen Browser vorab mitzuteilen, dass bestimmte Elemente Ihres Designs animiert werden. Dadurch kann der Browser den Rendering-Prozess optimieren und Verzögerungen und Flicker verhindern. Derzeit wird diese Eigenschaft jedoch nicht von IE / Edge, Safari oder Opera Mini unterstützt.

Das Postcss-Will-Change-Plugin, das ebenfalls von Andrey Sitnik erstellt wurde, fügt einen Fallback hinzu, der diesen Browsern dabei hilft, das Rendern zu verbessern, auch wenn sie nicht so effizient sind, wie sie es könnten, wenn sie unterstützt würden wird sich verändern. Dies geschieht durch Hinzufügen von Sicht auf die Rückseite Diese Eigenschaft löst die Erstellung eines Compositor-Layers aus, der von der GPU verarbeitet wird.

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

.thisWillChange will-change: transform; 

Kompilieren Sie Ihr Stylesheet und Sie sollten den Fallback in Ihrer Datei "dest / style.css" sehen:

.thisWillChange Hintergrundsichtbarkeit: ausgeblendet; will-change: umwandeln; 

Hinweis: Dieses Plugin sollte geladen sein Vor Autoprefixer in Ihrer Gulpfile / Gruntfile. Dies ermöglicht Autoprefixer das Hinzufügen von Herstellerpräfixen zu Sicht auf die Rückseite Eigentum wie so:

/ * Fallback mit Herstellerpräfixen * / .thisWillChange -webkit-backface-visible: hidden; Sicht nach hinten: versteckt; will-change: umwandeln; 

ähnliche Links

  • postcss-will-change-Plugin: https://github.com/postcss/postcss-will-change
  • Alles, was Sie über das CSS wissen müssen, ändert die Eigenschaft
  • CanIUse info: http://caniuse.com/#feat=will-change

Fallbacks für alte IE-Probleme hinzufügen

Dank verbesserter Browserversionen von Microsoft und großer Gruppen, die wegweisend für die Unterstützung für alte IE sind, kommen wir immer näher an die Notwendigkeit heran, nicht ständig Rückschläge und Problemumgehungen für problematische ältere Browser in Betracht zu ziehen. Microsoft selbst wird 2016 die Unterstützung für IE8 einstellen. Bootstrap 4 alpha wurde kürzlich veröffentlicht und die Unterstützung für IE8 wurde eingestellt. Google hat die Unterstützung für IE8 im Jahr 2012 eingestellt und die Unterstützung für IE9 im Jahr 2013 eingestellt.

Alles in allem muss jedes Projekt am Ende des Tages von Fall zu Fall beurteilt werden. Wenn Sie auf eine Zielgruppe mit hohen Nutzungsraten von älteren Browsern abzielen, haben Sie möglicherweise keine andere Wahl, als Ihr Bestes zu geben um sie zu unterstützen. Wenn dies der Fall ist, können die folgenden Plugins Ihnen helfen, diesen Prozess weniger schmerzhaft zu gestalten.

Erstellen rgba () Farbrückschläge

IE8 hat keine Unterstützung für rgba () Farben, so dass das Postcss-Color-Rgba-Fallback-Plugin von Guillaume Demesy als Fallback eine flache Hexadezimalfarbe hinzufügt.

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

.rgbaFallback Hintergrund: rgba (0,0,0,0,5); 

Kompilieren Sie, und Sie sollten den Hexcode zurückfallen sehen, der in Ihre Datei „dest / style.css“ eingefügt wurde:

.rgbaFallback background: # 000000; Hintergrund: rgba (0,0,0,0,5); 

ähnliche Links

  • postcss-color-rgba-fallback plugin: https://github.com/postcss/postcss-color-rgba-fallback
  • CanIUse info: http://caniuse.com/#feat=css3-colors

Erstellen Opazität Fallbacks

IE8 kann nicht damit umgehen Opazität Eigenschaft, so dass das Postcss-Opacity-Plugin von Vincent De Oliveira einen IE-spezifischen Filter hinzufügt, um den gleichen Effekt zu erzielen.

Fügen Sie diesen Code Ihrem Quell-Stylesheet hinzu:

.OpacityFallback Opazität: 0,5; 

Nach dem Kompilieren sollten Sie das entsprechende sehen -ms-filter Fallback hinzugefügt:

.OpacityFallback Opazität: 0,5; -ms-filter: "Progid: DXImageTransform.Microsoft.Alpha (Opacity = 50)"; 

ähnliche Links

  • Postcss-Opacity-Plugin: https://github.com/iamvdo/postcss-opacity
  • CanIUse info: http://caniuse.com/#feat=css-opacity

Konvertieren :: in : auf Pseudo-Elementen

Es gilt als bewährte Methode bei der Generierung von Pseudo-Elemente sowie .Element :: vor eine Doppelpunktnotation verwenden ::. Dies soll helfen, sie von Pseudo zu unterscheiden-Klassen sowie .Element: schweben die sollte eine einzelne Doppelpunktnotation verwenden :.

IE8 unterstützt jedoch nicht die Doppelpunktnotation :: Um Pseudo-Elemente zu erstellen, wird nur ein einzelner Doppelpunkt unterstützt :. Mit dem Postcss-Pseudoelements-Plugin von Sven Tschui können Sie nach bewährten Methoden kodieren und die Notation automatisch ändern.

Fügen Sie das folgende Doppel hinzu :: Notationscode:

.Pseudoelement :: before content: ";

Kompilieren Sie Ihre Datei und Sie sollten sehen, dass sie auf die Single reduziert wurde : Notation:

.Pseudoelement: vor content: ";

Durch die Kodierung bewährter Verfahren und die Verwendung dieses Plugins können Sie, wenn der IE8 vollständig zurückgezogen ist, Ihr CSS ohne das Plugin erneut verarbeiten und die richtige Syntax verwenden.

ähnliche Links

  • Postcss-Pseudoelements-Plugin: https://github.com/axa-ch/postcss-pseudoelements
  • CanIUse info: http://caniuse.com/#feat=css-gencontent

Hinzufügen vm Fallback für vmin

In IE9 die relative Ansicht des Ansichtsfensters vmin wird nicht unterstützt, sondern verwendet die entsprechende Einheit vm. Wenn Sie sich für IE9 interessieren, wird das postcss-vmin-Plugin von Vincent De Oliveira hinzugefügt vm Einheiten als Fallback.

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

.vmFallback width: 50vmin; 

Rekompilieren und der resultierende Code sollte die vm Rückfall der Einheiten hinzugefügt in:

.vmFallback width: 50vm; Breite: 50 Vmin; 

ähnliche Links

  • postcss-vmin-Plugin: https://github.com/iamvdo/postcss-vmin
  • CanIUse info: http://caniuse.com/#feat=viewport-units

Hinzufügen px Fallback für rem Einheiten

IE8 unterstützt nicht rem Einheiten, und sowohl in IE9 als auch in IE10 werden sie nicht unterstützt Pseudo-Elemente und Schriftart Abkürzungserklärung. Mit dem Node-Pixrem-Plugin von Vincent De Oliveira und Rob Wierzbowski können Sie es haben px basierte Fallbacks automatisch hinzugefügt, wo immer Sie sie verwenden rem Einheiten.

Fügen Sie diesen Code Ihrem Quell-Stylesheet hinzu:

.remFallback height: 10rem; Schrift: 2rem Arial;  .remFallback :: before content: "; Zeilenhöhe: 1rem;

Kompilieren Sie neu und Sie sollten alle entsprechenden Informationen sehen px Fallbacks hinzugefügt:

.remFallback height: 160px; Höhe: 10rem; Schrift: 32px Arial; Schrift: 2rem Arial;  .remFallback: before content: "; Zeilenhöhe: 16px; Zeilenhöhe: 1rem;

ähnliche Links

  • node-pixrem plugin: https://github.com/robwierzbowski/node-pixrem
  • CanIUse info: http://caniuse.com/#feat=rem

Lassen Sie uns rekapitulieren

Um zusammenzufassen, was wir oben beschrieben haben:

  • Autoprefixer ist ein Muss für jedes Projekt
  • Autoprefixer kann so konfiguriert werden, dass Herstellerpräfixe hinzugefügt werden, die auf dem Browser basieren, den Sie unterstützen müssen
  • Wenn Sie in Ihrem Projekt eine Animation verwenden, sollten Sie das Plugin postcss-will-change verwenden
  • Wenn Sie IE8 unterstützen, sollten Sie die Plugins postcss-color-rgba-fallback, postcss-opacity, postcss-pseudoelements und postcss-vmin verwenden.
  • Wenn Sie IE8, IE9, IE10 unterstützen, sollten Sie das node-pixrem Plugin verwenden

Im nächsten Tutorial

Als Nächstes in unserer PostCSS Deep Dive-Serie finden Sie ein Tutorial, wie Sie Plugins zur Minimierung und Optimierung von CSS verwenden. Wir werden Inlining behandeln @einführen Dateien, kombinieren Sie Medienabfragen, entfernen Sie Leerraum und mehrere weitere Methoden, um Ihre Stylesheets so rational wie möglich zu gestalten. Wir sehen uns dort!