Bruk av PostCSS for Minifisering og Optimalisering

I den siste opplæringen lærte du hvordan du bruker PostCSS for å gjøre stilarkene dine mer kryssre kompatible med nettleseren, spesielt når det gjelder problemer som oppstår som følge av støtte for eldre versjoner av IE.

I denne opplæringen skal vi lære hvordan du gjør stilarkene mer effektive og laster raskere, ved å bruke PostCSS til å utføre ulike minifiserings- og optimaliseringsoperasjoner.

Du lærer å:

  • Kombiner flere stilark til en via @importere regelen, selv om noen av stilarkene dine kommer fra Bower-komponenter eller npm-moduler, slik at du trenger bare en enkelt http Be om å laste inn nettstedets CSS.
  • Kombiner matchende medieforespørsler til en, slik at du kan bruke samme mediesøk på flere steder under utviklingen, men likevel ende opp med effektiviteten av konsoliderte spørringer i ditt endelige stilark.
  • Bruk cssnano-pakken til å utføre alle typer optimaliseringer fra å fjerne hvitt mellomrom og kommentarer for å redusere bestemte typer kode og mye mer.

La oss komme i gang!

Konfigurer prosjektet ditt

Det første du må gjøre er å sette opp prosjektet ditt for å bruke enten Gulp eller Grunt, avhengig av dine preferanser. Hvis du ikke allerede har en preferanse for den ene eller den andre, anbefaler jeg at du bruker Gulp, da du trenger mindre kode for å oppnå samme mål, så du bør finne det litt enklere å jobbe med.

Du kan lese om hvordan du konfigurerer Gulp eller Grunt-prosjekter for PostCSS i de tidligere opplæringsprogrammene

  • PostCSS Quickstart Guide: Gulp Setup eller
  • PostCSS Quickstart Guide: Grunt Setup

henholdsvis.

Hvis du ikke vil opprette prosjektet manuelt fra starten, kan du laste ned kildefilene som er vedlagt denne opplæringen, og trekke ut enten det forsynte Gulp eller Grunt-startprosjektet i en tom prosjektmappe. Deretter kjører kommandoen med en terminal eller kommandoprompt på mappen npm installasjon.

Installer plugger

For denne opplæringen skal vi bruke to individuelle plugins, pluss en plugin-pakke. Installer dem ved å kjøre følgende kommando inne i prosjektmappen din:

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

Nå er plugins installert, la oss gå videre og laste dem inn i prosjektet ditt.

Legg inn plugins via Gulp

Hvis du bruker Gulp, legger du til disse variablene under variablene som allerede finnes i filen:

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

Legg nå til hver av de nye variabelenavnene i din prosessorer matrise:

 var prosessorer = [atImport, mqpacker, cssnano];

Gjør en rask test at alt fungerer ved å kjøre kommandoen gulp css og deretter sjekker du at en ny "style.css" -fil har dukket opp i prosjektets "dest" -mappe.

Legg inn plugger via Grunt

Hvis du bruker Grunt, oppdaterer du prosessorer objekt, som er nestet under opsjoner objekt til følgende:

 prosessorer: [krever ('postcss-import') (), krever ('css-mqpacker') (), krever ('cssnano') ()]

Gjør en rask test at alt fungerer ved å kjøre kommandoen grunt postcss og deretter sjekker du at en ny "style.css" -fil har dukket opp i prosjektets "dest" -mappe.

Det har alle plugins installert og lastet, så la oss gå videre til å lære hvordan de skal brukes til minifisering og optimalisering.

Inline / Kombiner filer med @import

I stedet for å laste inn flere stilark, er det mer effektivt når det er mulig å kombinere stilarkene dine i en.

For eksempel er bruk av Normalize.css svært vanlig, men hvis du laster den som et frittstående stilark før ditt hovedformatark, krever det flere http forespørsler, og dermed redusere belastningstiden.

Men hvis du bruker Postcss-Import-plugin av Maxime Thirouin, kan du kombinere Normalize.css til hovedformatarket ditt, ved bruk av @importere regelen, og gir deg samme CSS med bare en http be om.

@import deretter Inline Normalize.css

La oss fortsette å gjøre dette nå, importere og deretter legge inn Normalize.css i prosjektets stilark. Start med å laste ned "normalize.css" i prosjektets "src" -mappe, fra https://necolas.github.io/normalize.css/

Øverst på filen "src / style.css" legger du til følgende linje:

@import 'normalize.css';

Som du allerede har postcss-import installert, er alt du trenger å gjøre. Det vil se @importere regelen og legg inn koden automatisk fra filen normalize.css i stilarket.

Kompilér filen, og når du ser på "dest / style.css" -filen din, bør du se hele innholdet i "normalize.css" deri:

/ *! normalize.css v3.0.2 | MIT-lisens | git.io/normalize * / html font-family: sans-serif; ... 

Du kan bruke samme prosess for å kombinere så mange separate stilark som du trenger. Bare plass @importere linjer i filen "src / style.css", uansett hvor du vil at den innrammede koden skal settes inn.

Automatisk Bower Component og Node Module Discovery

En veldig nyttig funksjon av dette pluginet er evnen til automatisk å oppdage CSS-filer som er plassert i mappen "bower_components" eller "node_modules".

For eksempel, i stedet for å manuelt laste ned "normalize.css" som vi gjorde ovenfor, kan du i stedet bare kjøre kommandoen bower installer normalize.css - save i prosjektet ditt. Dette vil automatisk laste ned den siste "normalize.css" -filen i mappen "bower_components / normalize.css".

Merk: Hvis du ikke har Bower-oppsett på datamaskinen, lær deg hvordan.

Øverst på stilarket, kan du nå bruke denne linjen i stedet:

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

Post-plug-import-pluginet vil se inne i mappen "bower_components" og finne "normalize.css", og fortsett deretter innline det som i forrige eksempel.

Den samme prosessen kan følges for alle stilark som er i mappen "node_modules", noe som betyr at du kan bruke enten Bower eller npm til å håndtere nedlastinger, avhengighetsstyring og oppdateringer. Når du bruker enten tjeneste, gir dette plugin deg en enkel måte å kombinere tredjeparts CSS-filer med i dine egne stilark.

Måter å utnytte @import Inlining

Inlining importerte CSS-filer på denne måten er ikke bare en svært effektiv måte å kombinere filer fra forskjellige kilder, for eksempel Bower-komponenter, det gir deg også muligheten til å organisere prosjektet ditt i flere separate stilark.

For eksempel kan du opprette en fil for å kontrollere oppsettet ditt, og et annet for å kontrollere fargeskjemaet. Hvis du vil endre fargeskjemaet ditt, kan du følge en prosess som dette:

  1. Kopiere originale fargestiler
  2. Endre det med nye fargekoder
  3. Importer det nye fargeformatarket til prosjektet ditt
  4. Kompilere for å lage alternative farget stilark

Du kan da gjenta denne prosessen så mange ganger du vil, noe som gjør det effektivt å lage flere fargeskjemaer for samme design.

Noen prosjekter bruker separate stilark for å gi flere fargeplaner som dette, men i prosessen opprettholder avmatning fra lagt til http forespørsler. Med denne tilnærmingen ende du alltid med bare en http forespørsel, til tross for å ha mye frihet i det som kan inkluderes i ditt enkle stilark.

Les mer om postcss-import på: https://github.com/postcss/postcss-import

Kombiner matchende medieforespørsler

Css-mqpacker-pluginet av Kyo Nagashima vil finne matchende medieforespørsler i stilarket ditt og kombinere dem til en. Dette gjør at du kan organisere CSS-en slik du vil ha i utviklingsstilarkene dine, gjentatte medieforespørsler hvis du trenger det, uten å bekymre deg for eventuelle tap av effektivitet i produksjonsstiler.

La oss sette sammen et eksempel på bruksformålet hvor du kanskje vil gjenta mediaforespørsler, for eksempel hvis du organiserer designets layout og visualer separat. I et ekte prosjekt kan dette bety at du bruker helt separate filer, en for layout og en for visuelle, men for enkelhets skyld vil vi gjøre alt dette i vår "src / style.css" -fil.

Vi starter med litt layoutkode. Vi legger til en .kolonne klasse som vil gjøre to 50% Bredde kolonner sitte side ved side, som standard. Deretter bruker vi en medieforespørsel for å få dem stablet på hverandre i mindre størrelser. Legg til denne koden i stilarket ditt:

/ * LAYOUT * / .kolumn bredde: 50%; flyte: venstre;  @media (maksimal bredde: 50rem) .column width: 100%; flyte: ingen; 

Deretter legger vi til noen visuals for å sette en grå kant rundt våre kolonner. Den første kolonnen vil ha klassen .column_one og den andre vil ha klassen .column_two. Vi skal bruke samme medieforespørsel som vi gjorde med vårt oppsett for å endre hvordan vi bruker en grense til våre kolonner, avhengig av om de sitter ved siden av hverandre eller den ene på toppen av den andre.

Legg også denne koden til stilarket ditt også:

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

Nå, kompilere filen "src / style.css" og ta en titt på det resulterende "dest / style.css" innholdet.

Som du kan se i koden nedenfor, har css-mqpacker-pluginet identifisert de to matchende medieforespørslene, og kombinert dem til en:

/ * LAYOUT * / .kolumn bredde: 50%; flyte: venstre;  / * VISUALS * / .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-left: 0;  @media (maksimal bredde: 50rem) .column width: 100%; flyte: ingen;  .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-top: 0; 

Merk: Koden ovenfor blir minifisert i filen "dest / style.css" på grunn av cssnano-plugin. For å se koden unminified, kommentere du midlertidig cssnano fra Gulpfile eller Gruntfile s prosessorer matrise.

Les mer om css-mqpacker på https://github.com/hail2u/node-css-mqpacker

cssnano Plugin Pack

For omfattende og mangesidig CSS-optimalisering er cssnano-pakken fra Ben Briggs et meget kraftig alternativ, men det er ganske mye plug-and-play. Det samler rundt tjuefem plugins, og kan utføre et imponerende antall forskjellige typer optimalisering.

Blant en lang liste over optimaliseringer kan den:

  • Strip hvite plass og siste semikolon
  • Fjern kommentarer
  • Optimaliser fontverdier
  • Kaste bort dupliserte regler
  • Optimal calc () bruk
  • Minifiser velgere
  • Minimer longhand egenskaper
  • Merge regler

Vi skal behandle noen eksempler på kode i prosjektet som vil se alle de ovennevnte optimaliseringene som er brukt.

Legg til denne koden i filen "src / style.css":

.css_nano, .css_nano + p, [class * = "css_nano"], .css_nano / * Dette er et eksempel på cssnano i handling * / font-weight: normal; margin-topp: 1rem; margin-bunn: 2rem; margin-left: 1.5rem; margin-høyre: 2,5rem; font-weight: normal; polstring: 1,75rem; bredde: calc (50rem - (2 * 1,75rem));  en tekst-dekorasjon: ingen; font-weight: bold;  p font-weight: bold; 

Så kompilere filen din.

Merk: Du vil kanskje kommentere noen kode du allerede hadde, så du kan tydelig se resultatene.

I filen "dest / style.css" bør du nå se den optimaliserte koden:

.css_nano, .css_nano + p, [class * = css_nano] margin: 1rem 2.5rem 2rem 1.5rem; font-weight: 400; polstring: 1,75rem; bredde: 46,5rem en tekstdekorasjon: ingen a, p font-vekt: 700

Se gjennom listen over optimaliseringer som er nevnt i punktlisten ovenfor, og sammenlign deretter eksempelkoden før og etter samlingen for å se hvordan hver enkelt av disse endringene skjer:

  • Whitespace, kommentarer og siste semikolon er borte
  • font-weight: normal og font-weight: bold konverteres til font-weight: 400 og font-weight: 700
  • Den andre, gjentatte forekomsten av regelen font-weight: normal; har blitt fjernet fra .css_nano stil
  • De calc () Egenskapen er redusert til en statisk verdi
  • Seleksjonene .css_nano, .css_nano + p, [class * = "css_nano"], .css_nano har blitt minifisert til .css_nano, .css_nano + p, [klasse * = css_nano]
  • The Longhand egenskaper margin-topp: 1rem; margin-bunn: 2rem; margin-left: 1.5rem; margin-høyre: 2,5rem; har blitt redusert til margin: 1rem 2.5rem 2rem 1.5rem;
  • De en og p stiler har blitt slått sammen for å dele sine felles font-weight: 700; innstilling

For en fullstendig liste over optimaliseringer gir cssnano sjekk ut: http://cssnano.co/optimisations/

Konfigurere alternativer og deaktivere moduler

Det er flere uavhengige plugins ansatt av cssnano-pakken, og du kan ønske å konfigurere innstillinger for eller deaktivere noen av dem.

Hvis du vil deaktivere et plugin, må du sende navnet sitt i alternativene dine for cssnano med innstillingen "false" brukt. Hvis du for eksempel ikke ønsker å optimalisere skriftvekter, angir du følgende i Gulpfile / Gruntfile:

// I Gulpfile-prosessorens array cssnano (minifyFontWeight: false) // I Gruntfile krever "prosessorer" -arrangement ('cssnano') (minifyFontWeight: false)

Du kan følge samme tilnærming til å konfigurere alternativer for et plugin, og gi navnet på plugin-modulen først og deretter angi alternativer.

For eksempel kan du angi presisjonen, (antall desimaler), kalkpluggen skal bruke. Som standard kalk (100% / 2,76) ville gi deg 36,23188%. Men hvis du ønsket å trimme den presisjonen ned til to desimaler, kan du gjøre det slik:

// I Gulpfile-prosessorens array cssnano (calc: precision: 2) // I Gruntfile krever "prosessorer" array ('cssnano') (calc: precision: 2)

Kalkverdien vil nå utgjøre til 36,23%.

For mer informasjon om cssnano opsjoner besøk: http://cssnano.co/options

Quick Recap

La oss få en oversikt over hva vi dekket over:

  • Post-plug-import-plugin gir deg en effektiv måte å legge inn stilark.
  • Den kan brukes til å kombinere tredjeparts stilark, blant annet gjennom automatisk oppdagelse i mappen "bower_components" eller "npm_modules".
  • Det kan brukes til å la deg splitte stilarkene dine i deler, og deretter kombinere dem senere.
  • Css-mqpacker-pluginet lar deg duplisere medieforespørsler, slik at du kan organisere CSS slik du vil, inkludert i separate filer, og deretter få alle matchende medieforespørsler kombinert i det endelige stilarket.
  • Cssnano-pakken samler rundt 25 forskjellige plugins, noe som gir plug-and-play tilgang til en lang liste over minifiserings- og optimaliseringsfunksjoner.
  • Det kan konfigureres til å bruke det som følger med plugins du vil ha, med alternativene du vil ha.

Opp Neste: Forbehandling med PreCSS

I neste opplæring vil vi dykke inn i bruk av PostCSS for forhåndsbehandling via en utmerket plugin-pakke med navnet PreCSS. Denne pakken gir umiddelbar tilgang til Sass-lignende syntaks og funksjonalitet, med variabler, mixins, conditionals, strekker seg og mer.

Se deg i neste opplæring!