PostCSS gebruiken voor verkleining en optimalisatie

In de laatste zelfstudie hebt u geleerd PostCSS te gebruiken om uw stylesheets beter compatibel te maken met meerdere browsers, met name als gevolg van problemen die voortvloeien uit de ondersteuning van oudere versies van IE.

In deze zelfstudie gaan we leren hoe u uw stylesheets efficiënter kunt maken en sneller kunt laden, door PostCSS te gebruiken voor verschillende minificatie- en optimalisatiebewerkingen.

Je leert hoe je:

  • Combineer meerdere stylesheets in één via de @importeren regel, zelfs als sommige van uw stylesheets afkomstig zijn van Bower-componenten of npm-modules, zodat u zeker bent dat u slechts één single nodig heeft http verzoek om de CSS van uw site te laden.
  • Combineer overeenkomende mediaquery's tot één, zodat u dezelfde mediaquery op meerdere locaties kunt gebruiken tijdens de ontwikkeling, maar toch eindigt met de efficiëntie van geconsolideerde query's in uw definitieve stylesheet.
  • Gebruik het cssnano-pakket om allerlei optimalisaties uit te voeren, van het strippen van witruimte en opmerkingen tot het verkleinen van bepaalde soorten code en nog veel meer.

Laten we beginnen!

Stel uw project in

Het eerste dat u moet doen, is uw project instellen om Gulp of Grunt te gebruiken, afhankelijk van uw voorkeur. Als je nog geen voorkeur hebt voor Gulp, raad ik Gulp aan, omdat je minder code nodig hebt om dezelfde doelen te bereiken, dus je zou het wat eenvoudiger moeten vinden om met Gulp te werken.

U kunt lezen over het instellen van Gulp- of Grunt-projecten voor PostCSS in de vorige zelfstudies

  • PostCSS snelstartgids: Gulp instellen of
  • PostCSS-snelstartgids: Gromde opstelling

respectievelijk.

Als u uw project echter niet helemaal opnieuw wilt instellen, kunt u de bronbestanden downloaden die aan deze zelfstudie zijn gekoppeld en het meegeleverde Gulp- of Grunt-startersproject uitpakken in een lege projectmap. Voer vervolgens de opdracht uit met een terminal of opdrachtprompt die naar de map wijst npm installeren.

Installeer plug-ins

Voor deze zelfstudie gebruiken we twee individuele plug-ins en een plugin-pakket. Installeer ze door de volgende opdracht in uw projectmap uit te voeren:

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

Nu de plug-ins zijn geïnstalleerd, laten we doorgaan en ze in uw project laden.

Laad plug-ins via Gulp

Als u Gulp gebruikt, voegt u deze variabelen toe onder de variabelen die al in het bestand staan:

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

Voeg nu elk van die nieuwe variabelenamen toe aan uw processors array:

 var processors = [atImport, mqpacker, cssnano];

Voer een snelle test uit dat alles werkt door de opdracht uit te voeren slok css controleer vervolgens of er een nieuw "style.css" -bestand is verschenen in de map "dest" van uw project.

Laad plug-ins via Grunt

Als u Grunt gebruikt, werk dan het processors object, dat is genest onder de opties object, naar het volgende:

 processors: [require ('postcss-import') (), require ('css-mqpacker') (), require ('cssnano') ()]

Voer een snelle test uit dat alles werkt door de opdracht uit te voeren grunt postcss controleer vervolgens of er een nieuw "style.css" -bestand is verschenen in de map "dest" van uw project.

Dat heeft alle plug-ins geïnstalleerd en geladen, dus laten we verder gaan met het leren hoe ze te gebruiken voor minificatie en optimalisatie.

Inline / Combineer Bestanden met @import

In plaats van het afzonderlijk laden van meerdere stylesheets, is het efficiënter om waar mogelijk uw stylesheets samen te voegen.

Het gebruik van Normalize.css is bijvoorbeeld heel gebruikelijk, maar als u het als een op zichzelf staand stijlblad vóór uw hoofdstijlblad laadt, vereist dit meerdere http aanvragen, waardoor de laadtijd wordt vertraagd.

Als u echter de postcss-import-plugin van Maxime Thirouin gebruikt, kunt u Normalize.css combineren in uw hoofdstijlblad, via het gebruik van de @importeren regel, zodat je dezelfde CSS hebt met slechts één http verzoek.

@import dan Inline Normalize.css

Laten we doorgaan en dit nu doen, door Normalize.css te importeren en vervolgens in te voegen in de stylesheet van ons project. Begin met het downloaden van "normalize.css" in de map "src" van uw project, op https://necolas.github.io/normalize.css/

Voeg aan de bovenkant van uw "src / style.css" -bestand de volgende regel toe:

@import 'normalize.css';

Omdat postcss-import al is geïnstalleerd, hoeft u niets meer te doen. Het zal de @importeren regel en regel de code van het bestand normalize.css automatisch in uw stylesheet.

Compileer je bestand en als je naar je "dest / style.css" bestand kijkt, zou je de volledige inhoud van "normalize.css" daarin moeten zien:

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

U kunt ditzelfde proces gebruiken om zoveel afzonderlijke stylesheets te combineren als u wilt. Gewoon plaatsen @importeren regels in uw "src / style.css" -bestand waar u de ingevoegde code wilt invoegen.

Automatische detectie van bowercomponenten en knooppuntmodule

Een zeer nuttige functie van deze plug-in is de mogelijkheid om automatisch CSS-bestanden te vinden die zich in de map "bower_components" of "node_modules" bevinden.

Bijvoorbeeld, in plaats van het handmatig downloaden van "normalize.css" zoals we hierboven deden, kon je in plaats daarvan gewoon de opdracht uitvoeren prieel installeren normalize.css - opslaan in je project. Hiermee wordt het nieuwste bestand "normalize.css" automatisch gedownload naar de map "bower_components / normalize.css".

Notitie: Als u de installatie van Bower op uw computer niet hebt, lees dan hier.

Bovenaan je stylesheet kun je nu deze regel gebruiken:

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

De invoegtoepassing postcss-importeert zich in de map "bower_components" en zoekt naar "normalize.css". Vervolgens gaat u naar de inline-versie net als in het vorige voorbeeld.

Hetzelfde proces kan worden gevolgd voor alle stylesheets die zich in de map "node_modules" bevinden, wat betekent dat u Bower of npm kunt gebruiken om downloads, het beheer van afhankelijkheden en updates af te handelen. Wanneer u een van deze services gebruikt, kunt u met deze plug-in eenvoudig CSS-bestanden van derden in uw eigen stylesheets combineren.

Manieren om @import Inlining te benutten

Het op deze manier inlassen van geïmporteerde CSS-bestanden is niet alleen een zeer efficiënte manier om bestanden uit verschillende bronnen te combineren, zoals Bower-componenten, maar het biedt u ook de mogelijkheid om uw project in meerdere afzonderlijke stylesheets te organiseren.

U kunt bijvoorbeeld één bestand maken om uw lay-out te beheren en een ander om uw kleurenschema te beheren. Als u uw kleurenschema wilt wijzigen, kunt u een proces als dit volgen:

  1. Dubbele stylesheet voor originele kleuren
  2. Pas het aan met nieuwe kleurcodes
  3. Importeer de nieuwe kleuren stylesheet in uw project
  4. Compileer om een ​​alternatief gekleurd stylesheet te maken

U kunt dit proces zo vaak herhalen als u wilde, waardoor het efficiënt wordt om meerdere kleurenschema's te maken voor hetzelfde ontwerp.

Sommige projecten maken gebruik van afzonderlijke stylesheets om meerdere kleurenschema's zoals deze te bieden, maar maken in dit proces vertragingen bij toevoegen http verzoeken. Met deze aanpak eindig je altijd met slechts één http verzoek, ondanks dat u veel vrijheid hebt in wat er in uw afzonderlijke stylesheet zou kunnen staan.

Lees meer over postcss-import op: https://github.com/postcss/postcss-import

Combineer overeenkomende mediaquery's

De css-mqpacker-plug-in van Kyo Nagashima vindt overeenkomende mediaquery's in uw stylesheet en combineert ze tot één. Dit stelt u in staat uw CSS te organiseren zoals u wilt in uw ontwikkel stylesheets, het herhalen van mediaquery's als dat nodig is, zonder zorgen over verlies van efficiëntie in uw productiestijlenblad.

Laten we een voorbeeld samenstellen van het type gebruik waarin u mogelijk mediaquery's wilt herhalen, bijvoorbeeld als u de lay-out en visuals van uw ontwerp afzonderlijk indient. In een echt project kan dit betekenen dat je volledig afzonderlijke bestanden gebruikt, een voor lay-out en een voor visuals, maar omwille van de eenvoud doen we dit allemaal in ons "src / style.css" -bestand.

We beginnen met een layout-code. We voegen een toe .kolom klas die er twee zal worden 50% breedtegroepen zitten standaard naast elkaar. Vervolgens gebruiken we een mediaquery om ze op kleinere formaten op elkaar te laten stapelen. Voeg deze code toe aan uw stylesheet:

/ * LAYOUT * / .column width: 50%; zweven: links;  @media (max-width: 50rem) .column width: 100%; zweven: geen; 

Vervolgens voegen we enkele afbeeldingen toe om een ​​grijze rand rondom onze kolommen in te stellen. De eerste kolom heeft de klasse .column_one en de tweede heeft de klas .column_two. We gaan dezelfde mediaquery gebruiken als bij onze lay-out om de manier waarop we een rand toepassen op onze kolommen te wijzigen, afhankelijk van of ze naast elkaar of boven elkaar staan.

Voeg deze code ook toe aan uw stylesheet:

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

Hercompileer nu je "src / style.css" -bestand en bekijk de resulterende "dest / style.css" -inhoud.

Zoals u in de onderstaande code kunt zien, heeft de css-mqpacker-plug-in de twee overeenkomende mediaquery's geïdentificeerd en in één gecombineerd:

/ * LAYOUT * / .column width: 50%; zweven: links;  / * VISUALS * / .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-left: 0;  @media (max-width: 50rem) .column width: 100%; zweven: geen;  .column_one, .column_two border: 0.0625rem solid #ccc;  .column_two border-top: 0; 

Notitie: De bovenstaande code wordt verkleind in je "dest / style.css" -bestand vanwege de cssnano-plug-in. Om de code niet meer te zien, tikt u tijdelijk uit cssnano van je Gulpfile of Gruntfile's processors rangschikking.

Lees meer over css-mqpacker op https://github.com/hail2u/node-css-mqpacker

cssnano Plugin-pakket

Voor uitgebreide en veelzijdige CSS-optimalisatie is het cssnano-pakket van Ben Briggs een zeer krachtige optie, maar toch eentje die vrij veel plug en play is. Het brengt ongeveer vijfentwintig plug-ins samen en kan een indrukwekkend aantal verschillende soorten optimalisatie uitvoeren.

Onder een lange lijst van optimalisaties, kan het:

  • Strip witruimte en laatste puntkomma's
  • Verwijder reacties
  • Optimaliseer lettertype gewichten
  • Negeer regels
  • Optimaliseer calc () gebruik
  • Verklein selectors
  • Minhandige eigenschappen minimaliseren
  • Regels samenvoegen

We gaan enkele voorbeeldcodes in uw project verwerken die alle bovenstaande optimalisaties zullen toepassen.

Voeg deze code toe aan uw "src / style.css" bestand:

.css_nano, .css_nano + p, [class * = "css_nano"], .css_nano / * Dit is een voorbeeld van cssnano in actie * / font-weight: normal; margin-top: 1rem; margin-bottom: 2rem; marge links: 1,5 rem; margin-right: 2,5rem; font-gewicht: normaal; opvulling: 1.75rem; breedte: calc (50rem - (2 * 1,75 rem));  een text-decoration: none; lettertype: vet;  p font-weight: bold; 

Recompileer vervolgens uw bestand.

Notitie: misschien wilt u commentaar geven op elke code die u al had, zodat u de resultaten duidelijk kunt zien.

In je "dest / style.css" -bestand zou je nu de geoptimaliseerde code moeten zien:

.css_nano, .css_nano + p, [class * = css_nano] margin: 1rem 2.5rem 2rem 1.5rem; font-weight: 400; padding: 1.75rem; width: 46.5rem a text-decoration: none a, p font-weight: 700

Bekijk de lijst met optimalisaties die in de bovenstaande lijst met bulletins wordt vermeld en vergelijk de voorbeeldcode voor en na de compilatie om te zien hoe elk van deze wijzigingen plaatsvindt:

  • Whitespace, opmerkingen en laatste puntkomma zijn verdwenen
  • lettertype: normaal en lettertype: vet worden geconverteerd naar lettertype: 400 en font-gewicht: 700
  • De tweede, herhaalde instantie van de regel font-gewicht: normaal; is verwijderd uit de .css_nano stijl
  • De calc () eigenschap is teruggebracht tot een statische waarde
  • De selectors .css_nano, .css_nano + p, [class * = "css_nano"], .css_nano zijn verkleind naar .css_nano, .css_nano + p, [class * = css_nano]
  • De eigenschappen met de lange hand margin-top: 1rem; margin-bottom: 2rem; marge links: 1,5 rem; margin-right: 2,5rem; zijn teruggebracht tot marge: 1rem 2,5rem 2rem 1,5rem;
  • De een en p stijlen zijn samengevoegd om hun gemeenschappelijk te delen font-gewicht: 700; omgeving

Voor een volledige lijst van optimalisaties biedt cssnano check-out: http://cssnano.co/optimisations/

Opties configureren en Modules uitschakelen

Er zijn verschillende onafhankelijke plug-ins die door het cssnano-pakket worden gebruikt en het kan zijn dat u instellingen wilt configureren voor sommige of volledig uitschakelen, sommige.

Om een ​​plug-in uit te schakelen, geeft u de naam door in uw opties voor cssnano met de instelling "false" toegepast. Als u bijvoorbeeld het lettertype niet wilt optimaliseren, stelt u het volgende in uw Gulpfile / Gruntfile in:

// In de array 'processors' van Gulpfile cssnano (minifyFontWeight: false) // In Gruntfile vereist de array van processors ('cssnano') (minifyFontWeight: false)

U kunt dezelfde aanpak volgen om opties voor een plug-in te configureren, eerst de naam van de plug-in te geven en vervolgens de opties in te stellen.

U kunt bijvoorbeeld de precisie (aantal decimalen) instellen die de calc-plug-in moet gebruiken. Standaard calc (100% / 2,76) zou je geven 36,23188%. Maar als je die precisie tot op twee decimalen wilt verkleinen, zou je het als volgt kunnen doen:

// In de array 'processors' van Gulpfile cssnano (calc: precision: 2) // In Gruntfile vereist de array van processors ('cssnano') (calc: precision: 2)

De calc-waarde wordt nu uitgevoerd naar 36.23%.

Ga voor meer informatie over cssnano-opties naar: http://cssnano.co/options

Snelle samenvatting

Laten we een overzicht hebben van wat we hierboven hebben behandeld:

  • De invoegtoepassing postcss-import biedt u een efficiënte manier om stylesheets in te voegen.
  • Het kan worden gebruikt om stylesheets van derden te combineren, inclusief door automatische detectie in uw map "bower_components" of "npm_modules".
  • Het kan worden gebruikt om je stylesheets in delen te splitsen en ze later opnieuw te combineren.
  • Met de css-mqpacker-plug-in kunt u mediaquery's dupliceren, zodat u uw CSS kunt indelen zoals u dat wilt, ook in afzonderlijke bestanden, en dan alle overeenkomende mediaquery's in uw definitieve stylesheet kunt samenvoegen.
  • Het cssnano-pakket bevat ongeveer 25 verschillende plug-ins, waardoor u plug-and-play toegang heeft tot een lange lijst van functies voor minificatie en optimalisatie.
  • Het kan worden geconfigureerd om de gewenste plug-ins te gebruiken, met de gewenste opties.

Up Next: Preprocessing met PreCSS

In de volgende tutorial duiken we in het gebruik van PostCSS voor preprocessing via een uitstekend plug-pack genaamd PreCSS. Dit pakket geeft directe toegang tot Sass-achtige syntaxis en functionaliteit, met variabelen, mixins, conditionals, uitbreidingen en meer.

Tot ziens in de volgende zelfstudie!