Dans le dernier tutoriel, nous avons terminé notre section «Démarrage rapide» de cette série. Nous sommes maintenant prêts à utiliser PostCSS pour générer des feuilles de style, en utilisant différents types de plugins à des fins diverses..
Dans ce tutoriel, nous allons utiliser PostCSS pour créer une feuille de style conçue pour la compatibilité entre navigateurs. Nous allons:
changera
propriétéCommençons!
La première chose à faire est de configurer votre projet pour qu’il utilise Gulp ou Grunt, selon vos préférences. Si vous n'avez pas encore de préférence pour l'un ou l'autre, je vous recommande d'utiliser Gulp car vous aurez besoin de moins de code pour atteindre les mêmes objectifs..
Vous pouvez lire comment configurer des projets Gulp ou Grunt pour PostCSS dans les tutoriels précédents.
respectivement.
Si vous ne souhaitez pas configurer manuellement votre projet à partir de rien, vous pouvez télécharger les fichiers source joints à ce didacticiel et extraire le projet de démarrage fourni Gulp ou Grunt dans un dossier de projet vide..
Ensuite, avec un terminal ou une invite de commande pointée sur le dossier, exécutez la commande npm installer
.
Maintenant que votre projet Gulp ou Grunt + PostCSS est prêt, nous devons installer les plugins que vous utiliserez dans ce tutoriel..
Nous allons installer pas mal de plugins, donc au lieu de les installer un à un, comme nous l'avons fait dans les «Guides de démarrage rapide» pour Gulp et Grunt, nous les installerons tous en même temps avec une seule commande.
Que vous utilisiez Gulp ou Grunt, exécutez la commande suivante dans votre dossier de projet pour installer les plugins que nous utiliserons:
npm installer autoprefixer postcss-color-rgba-fallback postcss-opacity postcss-pseudoelements postcss-vmin pixrem postcss-will-change --save-dev
Maintenant que les plugins sont installés, allons-y et chargez-les dans votre projet.
Si vous utilisez Gulp, ajoutez ces variables sous les variables déjà présentes dans le fichier:
var autoprefixer = require ('autoprefixer'); var color_rgba_fallback = require ('postcss-color-rgba-fallback'); var opacity = require ('postcss-opacity'); var pseudoelements = require ('postcss-pseudoelements'); var vmin = require ('postcss-vmin'); var pixrem = require ('pixrem'); var will_change = require ('postcss-will-change');
Maintenant, ajoutez chacun de ces nouveaux noms de variables dans votre processeurs
tableau:
processeurs var = [will_change, autoprefixer, color_rgba_fallback, opacité, pseudo-éléments, vmin, pixrem];
Faites un test rapide pour vérifier que tout fonctionne en exécutant la commande gulp css
puis en vérifiant qu'un nouveau fichier “style.css” est apparu dans le dossier “dest” de votre projet.
Si vous utilisez Grunt, mettez à jour le processeurs
objet, qui est imbriqué sous le options
objet, à ce qui suit:
processeurs: [require ('postcss-will-change') (), require ('autoprefixer') (), require ('postcss-color-rgba-fallback') (), require ('postcss-opacity') () , require ('postcss-pseudoelements') (), require ('postcss-vmin') (), require ('pixrem') ()]
Faites un test rapide pour compiler en lançant la commande grunt postcss
puis en vérifiant que le dossier «dest» de votre projet contient maintenant un nouveau fichier «style.css».
Vous avez maintenant tous les plugins installés requis pour ce tutoriel et vous êtes prêt à voir comment les utiliser pour améliorer la compatibilité entre navigateurs de vos feuilles de style..
Certaines des mesures de compatibilité inter-navigateurs que nous allons couvrir ne seront nécessaires que pour des cas d'utilisation spécifiques. Le préfixage automatisé des fournisseurs, en revanche, est quelque chose que j’aimerais suggérer qui devrait être fait avec chaque projet, via le plugin Autoprefixer créé par Andrey Sitnik.
Il peut être difficile de garder un œil sur les propriétés qui nécessitent les préfixes de fournisseur à un moment donné, et en utilisant Autoprefixer, vous n'avez pas à le faire. Utilisez Autoprefixer dans chaque projet. Votre code comparera avec les données de CanIUse.com, puis ajoutera les préfixes du fournisseur, au besoin, sans que vous ayez à y penser..
Faisons un petit test pour voir Autoprefixer en action. Ajoutez l'animation et le code flexbox suivants au fichier “src / style.css” de votre projet:
@keyframes animationExample from width: 0; à largeur: 100%; .animateThis animation: animationExample 2s; affichage: flex;
Courir gulp css
ou grunt postcss
pour compiler votre fichier, et votre “dest / style.css” devrait maintenant contenir ce code préfixé par le vendeur:
@ -webkit-keyframes animationExample from width: 0; à largeur: 100%; @keyframes animationExample from width: 0; à largeur: 100%; .animateThis -webkit-animation: animationExample 2s; animation: animationExample 2s; afficher: -webkit-box; afficher: -webkit-flex; display: -ms-flexbox; affichage: flex;
Comme vous pouvez le constater, des préfixes de vendeurs ont été automatiquement ajoutés, comme l'indiquent les données fournies par CanIUse.com sur l'animation et la flexbox..
Autoprefixer utilise Browserlist pour déterminer les versions de navigateur pour lesquelles il prendra en charge. Sous les paramètres par défaut, il appliquera les préfixes de fournisseur requis pour:
L'exemple ci-dessus a été compilé sous les paramètres par défaut d'Autoprefixer. Cela signifiait que le support pour IE10 et Safari 8 était inclus, donc le -Mme-
et -webkit-
préfixes dont ils ont besoin pour animation
et boîte souple
ont été automatiquement insérés.
Cependant, IE11 et Safari 9 ne nécessitent pas ces préfixes. Par conséquent, si vous définissez la configuration de votre liste de navigateurs de manière à ne prendre en charge que IE11 + et Safari 9+, ces préfixes ne seront plus ajoutés..
Essayez ceci en passant un navigateurs
passant à Autoprefixer dans votre Gulpfile ou Gruntfile comme ceci:
// Dans le tableau 'processeurs' de Gulpfile: préfixe automatique (navigateurs: 'safari> = 9, c'est-à-dire> = 11'], // Dans le tableau 'processeurs' de Gruntfile: require ('préfixe automatique') (navigateurs: [ 'safari> = 9, c'est-à-dire> = 11']),
Maintenant, si vous recompilez votre CSS, vous verrez qu'il n'y a pas de différence entre votre code original et le code compilé. En effet, aucun support n'ayant été demandé pour Safari 8 ou IE10, aucun préfixe de fournisseur n'a été ajouté pour les adapter..
le changera
Cette propriété est utilisée pour informer à l'avance le navigateur que certains éléments de votre conception vont être animés. Cela permet au navigateur d’optimiser le processus de rendu et d’éviter les retards et les scintillements. Cependant, cette propriété n'est actuellement pas prise en charge par IE / Edge, Safari ou Opera Mini..
Le plug-in postcss-will-change, également créé par Andrey Sitnik, ajoute un repli qui aidera ces navigateurs à améliorer le rendu, même avec l'efficacité qu'ils pourraient obtenir s'ils étaient compatibles. changera
. Il le fait en ajoutant le visibilité arrière
propriété, qui déclenche la création d'une couche de composition qui sera gérée par le GPU.
Par exemple, ajoutez ce code à votre fichier «src / style.css»:
.thisWillChange will-change: transform;
Compilez votre feuille de style et vous devriez voir la solution de secours apparaître dans votre fichier «dest / style.css»:
.thisWillChange backface-accessibility: masqué; va changer: transformer;
Remarque: ce plugin devrait être chargé avant Autoprefixer dans votre Gulpfile / Gruntfile. Cela permet à Autoprefixer d’ajouter des préfixes de fournisseur au visibilité arrière
propriété, comme si:
/ * Repli avec les préfixes de fournisseur * / .thisWillChange -webkit-backface-visibilité: hidden; visibilité face arrière: masquée; va changer: transformer;
Grâce aux versions améliorées des navigateurs de Microsoft et aux grands groupes qui ont abandonné le support de l'ancienne IE, nous nous rapprochons progressivement de la nécessité de ne pas constamment envisager les solutions de rechange et les solutions de contournement pour les anciens navigateurs problématiques. Microsoft lui-même cessera de prendre en charge IE8 en 2016. Bootstrap 4 alpha a récemment été publié et le support pour IE8 a également été abandonné. Google a cessé de prendre en charge IE8 en 2012 et a cessé de prendre en charge IE9 en 2013.
Cela dit, au final, chaque projet doit être évalué au cas par cas. Si vous ciblez un groupe démographique où les taux d'utilisation des navigateurs traditionnels sont élevés, vous n'aurez peut-être pas d'autre choix que de faire de votre mieux. pour les soutenir. Si tel est le cas, les plugins suivants peuvent vous aider à rendre ce processus un peu moins pénible..
rgba ()
Repli de couleurIE8 n'a pas de support pour rgba ()
couleurs, le plugin postcss-color-rgba-fallback de Guillaume Demesy ajoute donc une couleur hexadécimale plate comme solution de secours.
Par exemple, ajoutez ce code à votre fichier «src / style.css»:
.rgbaFallback arrière-plan: rgba (0,0,0,0,5);
Compilez et vous devriez voir l'hexcode fall back ajouté dans votre fichier «dest / style.css»:
.rgbaFallback background: # 000000; arrière-plan: rgba (0,0,0,0,5);
opacité
Les replisIE8 ne peut pas gérer le opacité
le plugin postcss-opacity de Vincent De Oliveira ajoute un filtre spécifique à IE pour obtenir le même effet.
Ajoutez ce code à votre feuille de style source:
.opacityFallback opacity: 0.5;
Après la compilation, vous devriez voir le fichier approprié -ms-filter
repli ajouté:
.opacityFallback opacity: 0.5; -ms-filter: "progid: DXImageTransform.Microsoft.Alpha (Opacity = 50)";
::
dans :
sur les pseudo-élémentsIl est considéré comme la meilleure pratique lors de la génération de pseudo-éléments tel que .element :: before
utiliser une notation à deux points ::
. C'est pour aider à les distinguer des pseudo-Des classes tel que .élément: survol
qui devrait utiliser une seule notation du côlon :
.
Cependant, IE8 ne supporte pas la notation double-colon ::
pour créer des pseudo-éléments, il ne prend en charge qu'un seul deux points :
. En utilisant le plugin postcss-pseudoelements de Sven Tschui, vous pouvez coder selon les meilleures pratiques et modifier automatiquement la notation..
Ajouter le double suivant ::
code de notation:
.pseudo-élément :: before content: ";
Compilez votre fichier et vous devriez voir qu'il a été réduit au simple :
notation:
.pseudo-élément: before content: ";
En codant selon les meilleures pratiques et en utilisant ce plugin, une fois que IE8 est complètement retiré, vous pouvez simplement retraiter votre CSS sans le plugin et disposer de la syntaxe appropriée..
vm
Fallback pour vmin
Dans IE9, l'unité relative de la fenêtre vmin
n'est pas pris en charge, mais utilise plutôt l'unité équivalente vm
. Si vous vous adonnez à IE9, le plugin postcss-vmin de Vincent De Oliveira ajoutera vm
unités de repli.
Ajoutez ce code à votre fichier “src / style.css”:
.vmFallback width: 50vmin;
Recompiler, et le code résultant devrait avoir le vm
repli d'unité ajouté dans:
.vmFallback width: 50vm; largeur: 50vmin;
px
Fallback pour rem
UnitésIE8 ne supporte pas rem
unités du tout, et à la fois dans IE9 et IE10, ils ne sont pas pris en charge dans éléments en pseudo
et Police de caractère
déclaration abrégée. Avec le plugin node-pixrem de Vincent De Oliveira et Rob Wierzbowski, vous pouvez avoir px
des replis basés automatiquement ajoutés où que vous soyez rem
des unités.
Ajoutez ce code à votre feuille de style source:
.remFallback hauteur: 10rem; police: 2rem Arial; .remFallback :: before content: "; line-height: 1rem;
Recompiler et vous devriez voir tous les fichiers appropriés px
les replis ajoutés:
.remFallback hauteur: 160px; hauteur: 10rem; police: 32px Arial; police: 2rem Arial; .remFallback: before content: "; hauteur de ligne: 16px; hauteur de ligne: 1rem;
Pour résumer ce que nous avons couvert dans ce qui précède:
La suite de notre série PostCSS Deep Dive est un tutoriel sur l’utilisation des plugins pour minifier et optimiser votre CSS. Nous couvrirons l'inline @importation
fichiers, en combinant des requêtes de média, en supprimant l’espace blanc et plusieurs autres méthodes pour rendre vos feuilles de style aussi simples que possible. On se voit là-bas!