Site icon Blog ARC Optimizer

Une introduction à PostCSS –


Les préprocesseurs CSS sont populaires, mais ils présentent certains inconvénients. Dans cette introduction à PostCSS, nous explorerons les avantages de PostCSS, son fonctionnement et ce que sa vaste gamme de plugins peut réaliser.

La valeur et les limites des préprocesseurs

La plupart des développeurs CSS connaissent les préprocesseurs. Des outils tels que Sass, Less et Stylus ont introduit des concepts tels que les fichiers partiels, l'imbrication, les variables et les mixins. Certaines fonctionnalités apparaissent progressivement dans le CSS natif, mais un préprocesseur est toujours utile pour gérer de grandes bases de code et maintenir la cohérence du style et du codage.

Il peut être difficile d'imaginer la vie sans un préprocesseur CSS, mais il y a des inconvénients :

  • Les préprocesseurs ne sont ni extensibles ni limitables . La plupart des préprocesseurs sont une boîte noire qui vous fournit un ensemble spécifique de fonctionnalités prises en charge. Il peut être possible d'écrire des fonctions personnalisées, mais les fonctionnalités au-delà de la portée de cet outil restent impossibles, comme l'intégration d'un SVG en tant qu'image d'arrière-plan.

    De même, vous ne pouvez pas empêcher les développeurs d'utiliser des options que vous préférez éviter, telles que@étendre ou nidification profonde. Le peluchage peut aider, mais cela n'empêchera pas le préprocesseur de compiler un fichier valide.

  • Les préprocesseurs fournissent leur propre syntaxe . Le code du préprocesseur peut ressembler à CSS, mais aucun navigateur ne peut analyser le fichier de manière native. La syntaxe est différente et, si votre outil change ou n'est pas disponible, votre code nécessitera des mises à jour pour le rendre utilisable.

Les avantages l'emportent largement sur ces risques, mais il existe une alternative…

Qu'est-ce que PostCSS ?

PostCSS estpas un préprocesseur (bien qu'il puisse se comporter comme tel). C'est un outil Node.js qui prend du CSS valide et l'améliore. Même ceux qui utilisent Sass, Less ou Stylus exécutent souvent une étape PostCSS après la compilation CSS initiale. Vous avez peut-être rencontré le PostCSSAutoprefixer pluginqui s'ajoute automatiquement-webkit,-mozet-Mmepréfixes de fournisseur aux propriétés CSS qui en ont besoin.

Par lui-même, PostCSS ne fait rien. C'est un analyseur qui tokenise le code CSS pour créer un arbre de syntaxe abstraite. Un plugin peut traiter cet arbre et mettre à jour les propriétés en conséquence. Une fois que tous les plugins ont terminé leur travail, PostCSS reformate tout dans une chaîne et les sorties dans un fichier CSS.

Environ350 plugins sont disponibleset la plupart effectuent une seule tâche telle queinlining@importerdéclarations,simplifiercalcul()les fonctions,gestion des éléments d'image,peluche de syntaxe,minimiser , et plus. Une recherche de plug-in plus conviviale est disponible sur PostCSScatalogue de plugins.

Les avantages de PostCSS incluent :

  • Vous commencez avec le CSS standard . PostCSS est à CSS ce queBabel est à JavaScript. Il peut prendre une feuille de style standard qui fonctionne dans les navigateurs récents et produire du CSS qui fonctionne partout – par exemple, transpiler le plus récentencartbiensretour dansHaut,bas,la gaucheetà droite Propriétés. Au fil du temps, vous pourriez abandonner ce processus à mesure que de plus en plus de navigateurs prennent en chargeencart.

    Certes, certains plugins vous permettent d'analyser une syntaxe de type préprocesseur qui n'est pas du CSS standard, mais vous n'êtes pas obligé de les utiliser.

  • Utilisez les plugins et les fonctionnalités dont vous avez besoin . PostCSS est configurable et vous pouvez adopter les plugins dont vous avez besoin. Par exemple, vous pourriez soutenirpartielsetimbricationmais n'autorise pas les variables, boucles, mixins, cartes et autres fonctionnalités disponibles dans Sass.

  • Fournir une configuration personnalisée pour chaque projet . Une configuration de projet individuel peut améliorer ou réduire l'ensemble de plugins utilisés ailleurs. Les options sont bien plus variées que n'importe quel préprocesseur.

  • Écrivez vos propres plugins PostCSS . Une large gamme de plugins est disponible pour étendre la syntaxe, analyser les propriétés futures, ajouter des solutions de secours, optimiser le code, traiter les couleurs, les images, les polices et même écrire du CSS dans d'autres langages tels queEspagnoletrusse.

    Dans le cas peu probable où vous ne trouveriez pas ce dont vous avez besoin, vous pouvezécrivez votre proprePlug-in PostCSS en JavaScript.

  • Vous utilisez peut-être déjà PostCSS . Vous pourrez peut-être supprimer vos dépendances de préprocesseur si vous exécutez déjà un plug-in PostCSS tel que AutoPrefixer. PostCSS n'est pas nécessairement plus rapide ou plus léger que l'utilisation d'un préprocesseur, mais il peut gérer tout le traitement CSS en une seule étape.

Installer PostCSS

PostCSS nécessiteNode.js , mais ce didacticiel montre comment installer et exécuter PostCSS à partir de n'importe quel dossier, même ceux qui ne sont pas des projets Node.js. Vous pouvez également utiliser PostCSS à partir dewebpack, Parcel, Gulp.js et autres outilsmais nous nous en tiendrons à la ligne de commande.

Installez PostCSS globalement sur votre système en exécutant ce qui suit :

au dessus du niveau de la mer installer-g postcss-cli

Assurez-vous qu'il fonctionne en saisissant ceci :

postcss --aide

Installation de votre premier plugin PostCSS

Vous aurez besoin d'au moins un plugin pour faire quoi que ce soit de pratique. Le PostCSSimporterplugin est une bonne option qui inline tout@importer déclarations et fusionne votre CSS en un seul fichier. Installez-le globalement comme ceci :

au dessus du niveau de la mer installer-g postcss-import

Pour tester ce plugin, ouvrez ou créez un nouveau dossier de projet tel quecssprojectpuis créez unsrc sous-dossier pour vos fichiers source. Créer unmain.cssfichier pour charger tous les partiels :


@importer '_réinitialiser';
@importer '_éléments';

Créez ensuite un_reset.cssfichier dans le même dossier :


* {
  rembourrage: 0;
  marge: 0;
}

Suivez ceci avec un_elements.cssdossier:


corps {
  famille de polices:sans empattement;
}

étiqueter {
  sélection de l'utilisateur:rien;
}

Exécutez PostCSS à partir du dossier racine du projet en transmettant le fichier CSS d'entrée, une liste de plugins à--utiliserEt un--productionnom de fichier:

postcss ./src/main.css --use postcss-import --output ./styles.css

Si vous n'avez pas d'erreurs, le code suivant sera envoyé à un nouveaustyles.cssfichier à la racine du projet :



* {
  rembourrage: 0;
  marge: 0;
}

corps {
  famille de polices:sans empattement;
}
étiqueter {
  sélection de l'utilisateur:rien;
}/* sourceMappingURL=Les données:application/json;base64,...

Notez que PostCSS peut générer des fichiers CSS n'importe où, mais le dossier de sortie doit exister ; il ne créera pas la structure des dossiers pour vous.

Activation et désactivation des cartes source

Une carte source en ligne est sortie par défaut. Lorsque le fichier CSS compilé est utilisé dans une page HTML, l'examiner dans les outils de développement du navigateur affichera l'originalsrc fichier et ligne. Par exemple, visionner les styles mettront en évidencesrc/_elements.cssligne 2 plutôt questyles.cssligne 8.

Vous pouvez créer une carte source externe en ajoutant un--carte(ou alors-m) passer à lapostcss commande. Il y a peu d'avantages autres que le fichier CSS est plus propre et le navigateur n'a pas besoin de charger la carte source à moins que les outils de développement ne soient ouverts.

Vous pouvez supprimer la carte source avec--no-map . Utilisez toujours cette option lors de la sortie de fichiers CSS pour le déploiement en production.

Installer et utiliser le plugin AutoPrefixer

LeAutoprefixer plugin est souvent la première rencontre d'un développeur avec PostCSS. Il ajoute des préfixes de fournisseur en fonction de l'utilisation du navigateur et des règles définies àcaniuse.com . Les préfixes de fournisseur sont moins utilisés dans les navigateurs modernes qui cachent des fonctionnalités expérimentales derrière des drapeaux. Cependant, il existe encore des propriétés telles quesélection de l'utilisateur qui nécessitent-webkit-,-moz-et-Mme-préfixes.

Installez le plugin globalement avec ceci :

au dessus du niveau de la mer installer-g autoprefixer

Ensuite, référencez-le comme un autre--utiliseroption sur votrepostcsscommande:

postcss ./src/main.css --use postcss-import --use autoprefixer --output ./styles.css

Examinez leétiqueterdéclaration de la ligne 11 destyles.csspour afficher les propriétés préfixées par le fournisseur :

étiqueter {
  -webkit-user-select:rien;
     -moz-user-select:rien;
      -ms-user-select:rien;
          sélection de l'utilisateur:rien;
}

AutoPrefixer utilise leliste des navigateurs module pour déterminer les préfixes de navigateur à ajouter. La valeur par défaut est :

  • > 0,5 %: un navigateur avec au moins 0,5 % de part de marché
  • 2 dernières versions: les deux dernières versions de ces navigateurs
  • Firefox ESR: incluant les versions de support étendu de Firefox
  • pas mort: tout navigateur qui n'est pas discontinué

Vous pouvez modifier ces valeurs par défaut en créant un.browserslistrc dossier. Par example:

> 2%

Ou vous pouvez ajouter un"liste des navigateurs"tableau àpackage.json dans un projet Node.js. Par example:

"liste des navigateurs": [
   "> 2%"
]

Cibler les navigateurs avec une part de marché de 2 % ou plus ne nécessite qu'un-webkit-préfixe dans Safari :

étiqueter {
  -webkit-user-select:rien;
          sélection de l'utilisateur:rien;
}

Minifier le CSS avec cssnano

cssnano réduit le CSS en supprimant les espaces, les commentaires et autres caractères inutiles. Les résultats varient, mais vous pouvez vous attendre à une réduction de 30 % des fichiers que vous pouvez déployer sur des serveurs de production pour de meilleures performances des pages Web.

Installez cssnano globalement :

au dessus du niveau de la mer installer-g cssnano

Ajoutez-le ensuite à votrepostcss commande. Nous inclurons également--no-mappour désactiver la carte source :

postcss ./src/main.css --use postcss-import --use autoprefixer --use cssnano --no-map --output ./styles.css

Cela réduit le fichier CSS à 97 caractères :

*{marge:0;rembourrage:0}corps{famille de polices:sans empattement}étiqueter{-webkit-user-select:rien;sélection de l'utilisateur:rien}

Construire automatiquement lorsque les fichiers source changent

Le PostCSS--Regardez L'option construit automatiquement votre fichier CSS lorsque l'un des fichiers source change. Vous pouvez également ajouter le--verbeuxcommutateur qui signale quand une construction se produit :

postcss ./src/main.css --use postcss-import --use autoprefixer --use cssnano --no-map --output ./styles.css --watch --verbose

Votre terminal afficheraEn attente de modifications de fichiers . Apportez une modification à n'importe quel fichier etstyles.css est reconstruit. PostCSS signalera également tout problème tel que les erreurs de syntaxe.

Pour terminer, appuyez surCtrl|Commande+Cdans l'aérogare.

Créer un fichier de configuration PostCSS

Lepostcss La commande deviendra longue et fastidieuse à mesure que vous ajouterez d'autres plugins et options. Vous pouvez créer un fichier de configuration JavaScript qui définit toutes les options et peut logiquement déterminer s'il s'exécute dans un environnement de développement ou de production.

Créez un fichier de configuration nommépostcss.config.cjs à la racine de votre dossier de projet. Notez également ce qui suit :

  • vous pouvez placer le fichier dans un autre dossier, mais vous devrez spécifier--config lors de la coursepostcss
  • vous pouvez utiliserpostcss.config.jscomme nom de fichier, mais PostCSS peut échouer dans les projets Node.js qui ont"type": "module"s'installerpackage.json

Ajoutez le code suivant àpostcss.config.cjs:


module.exportations = (cfg) => {

  constantedevMode= (cfg.env === 'développement');

  retourner {carte:devMode? 'en ligne' : nul,plugins: [
      exiger('importation postcss')(),
      exiger('autoprefixer')(),devMode? nul : exiger('cssnano')()
    ]

  };

};

PostCSS passe uncfg objet qui contient les options de la ligne de commande. Par example:

{CWD: '/home/votrenom/cssproject',env: indéfini,choix: {carte: {en ligne: vrai },analyseur: indéfini,syntaxe: indéfini,stringifier: indéfini
  },dossier: {dirname: '/home/votrenom/cssproject/src',nom de base: 'main.css',nom_ext: '.css'
  }
}

Le module doit renvoyer un objet avec des propriétés facultatives :

  • carte: le réglage de la carte source
  • analyseur: s'il faut utiliser un analyseur de syntaxe non-CSS (comme lescssbrancher)
  • plugins: un tableau de plugins et de configurations à traiter dans l'ordre spécifié

Le code ci-dessus détecte si lepostcssla commande a un--env option. Il s'agit d'un raccourci pour régler leNODE_ENV variables d'environnement. Pour compiler CSS en mode développement, exécutezpostcssavec--développement envet, éventuellement, définissez--watch --verbose . Cela crée une carte source en ligne et ne minimise pas la sortie :

postcss ./src/main.css --output ./styles.css --env development --watch --verbose

Pour exécuter en mode production et compiler le CSS minifié sans carte source, utilisez ceci :

postcss ./src/main.css --output ./styles.css

Idéalement, vous pouvez les exécuter en tant que terminal ouau dessus du niveau de la merscripts pour réduire davantage l'effort de frappe.

Progrès post-CSS

Vous connaissez maintenant les bases de PostCSS. L'amélioration de la fonctionnalité consiste à ajouter et à configurer d'autres plugins. Investissez du temps et vous aurez bientôt un flux de travail que vous pourrez adapter à n'importe quel projet Web.

Le tutoriel sur l'utilisation de PostCSS en tant quealternative configurable à Sassfournit plus d'exemples de configuration et d'options de plug-in.

Autres liens :




Source link

Quitter la version mobile