PostCSS gebruiken voor compatibiliteit met Cross Browser

In de laatste zelfstudie hebben we onze "Snelstart" -sectie van deze serie ingepakt, en we zijn nu klaar om verder te gaan met PostCSS om stylesheets te genereren, waarbij verschillende soorten plug-ins voor verschillende doeleinden worden gebruikt.

In deze zelfstudie gebruiken we PostCSS om een ​​stylesheet te maken die is ontworpen voor compatibiliteit met verschillende browsers. Wij zullen:

  • Zorg dat leveranciersvoorvoegsels automatisch worden toegevoegd
  • Voeg een reeks fallbacks toe voor Internet Explorer-versies 8, 9 en 10
  • Voeg fallbacks toe voor de nog niet algemeen ondersteunde zal veranderen eigendom

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 een van de twee, raad ik Gulp aan, omdat je minder code nodig hebt om dezelfde doelen te bereiken.

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 naar de map gericht npm installeren.

Installeer plug-ins

Nu u uw lege Gulp- of Grunt + PostCSS-project klaar hebt staan, moeten we de plug-ins installeren die u in deze zelfstudie zult gebruiken.

We zullen behoorlijk wat plug-ins installeren, dus in plaats van ze een voor een te installeren, zoals we deden in de "Quickstart-handleidingen" voor Gulp en Grunt, zullen we ze allemaal tegelijk installeren met een enkele opdracht.

Of je nu Gulp of Grunt gebruikt, voer de volgende opdracht in je projectmap uit om de plug-ins te installeren die we zullen gebruiken:

npm installeer autoprefixer postcss-color-rgba-fallback postcss-opacity postcss-pseudoelements postcss-vmin pixrem postcss-will-change --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 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');

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

 var processors = [will_change, autoprefixer, color_rgba_fallback, opacity, pseudoelements, vmin, pixrem];

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-will-change') (), require ('autoprefixer') (), require ('postcss-color-rgba-fallback') (), require ('postcss-opacity') () , require ('postcss-pseudoelements') (), require ('postcss-vmin') (), require ('pixrem') ()]

Voer een snelle test uit door het commando uit te voeren grunt postcss controleer vervolgens of de map "dest" van uw project nu een nieuw "style.css" -bestand bevat.

U hebt nu alle geïnstalleerde plug-ins die vereist zijn voor deze zelfstudie en u bent klaar om verder te gaan met hoe u ze kunt gebruiken om de compatibiliteit met uw cross-browser te verbeteren.

Automatisch voorvoegsel van leveranciers toevoegen

Sommige van de maatregelen voor cross-browser compatibiliteit die we zullen behandelen, zullen alleen nodig zijn voor specifieke use-cases. Geautomatiseerde prefixing van leveranciers, aan de andere kant, is iets waarvan ik zou willen voorstellen dat het moet worden gedaan elk project, via de plug-in Autoprefixer gemaakt door Andrey Sitnik.

Het kan moeilijk zijn om bij te houden welke eigenschappen op welk moment voorvoegsels van leveranciers vereisen, en met Autoprefixer hoeft dat niet. Gebruik Autoprefixer als onderdeel van elk project en het zal uw code controleren op basis van de gegevens van CanIUse.com en vervolgens indien nodig leveranciersprefixen toevoegen zonder dat u erover hoeft na te denken.

Laten we een kleine test doen om Autoprefixer in actie te zien. Voeg de volgende animatie- en flexboxcode toe aan het "src / style.css" -bestand van uw project:

@keyframes animationExample from width: 0;  tot width: 100%;  .animerenThis animation: animationExample 2s; weergave: flex; 

Rennen slok css of grunt postcss om uw bestand te compileren, en uw "dest / style.css" zou nu de prefix van deze leverancier moeten bevatten:

@ -webkit-keyframes-animatieVoorbeeld from width: 0;  tot width: 100%;  @keyframes animationExample from width: 0;  tot width: 100%;  .animerenThis -webkit-animation: animationExample 2s; animatie: animatieVoorbeeld 2s; weergave: -webkit-box; weergave: -webkit-flex; weergave: -ms-flexbox; weergave: flex; 

Zoals u kunt zien, zijn voorvoegsels van leveranciers automatisch toegevoegd, zoals bepaald door de gegevens die door CanIUse.com worden verstrekt over animatie en flexbox.

Browserondersteuningsniveaus opgeven

Autoprefixer gebruikt Browserlist om te bepalen voor welke browserversies het ondersteuning zal toevoegen. Bij standaardinstellingen worden voorvoegsels van leveranciers toegepast zoals vereist voor:

  • > 1%: browsers die door meer dan één procent van de mensen wereldwijd worden gebruikt
  • laatste 2 versies: de laatste twee versies van elke browser gevolgd door CanIUse.com
  • Firefox ESR: de nieuwste Firefox-versie
  • Opera 12.1: Opera versie 12.1

Het bovenstaande voorbeeld is gecompileerd onder de standaardinstellingen van Autoprefixer. Dit betekende dat ondersteuning voor IE10 en Safari 8 was inbegrepen, dus de -Mevrouw- en -webkit- voorvoegsels die ze nodig hebben voor animatie en flexbox werden automatisch ingevoegd.

Voor IE11 en Safari 9 zijn deze voorvoegsels echter niet vereist, dus als u uw browserlijstconfiguratie instelt om alleen IE11 + en Safari 9+ te ondersteunen, worden deze voorvoegsels niet meer toegevoegd.

Probeer dit uit door een browsers doorschakelen naar Autoprefixer in je Gulpfile of Gruntbestand zoals zo:

// In de array 'processors' van Gulpfile: autoprefixer (browsers: 'safari> = 9, ie> = 11'), // In de array 'processors' van gruntfile: require ('autoprefixer') (browsers: [ 'safari> = 9, ie> = 11']),

Als u nu uw CSS opnieuw compileert, ziet u dat er geen verschil is tussen uw originele en gecompileerde code. Dit komt omdat zonder ondersteuning voor Safari 8 of IE10 geen leveranciersprefixen zijn toegevoegd die bij hen passen.

Gerelateerde Links:

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

Voeg fallback toe voor "wijzig" eigenschap

De zal veranderen property wordt gebruikt om een ​​browser vooraf te laten weten dat bepaalde elementen van uw ontwerp geanimeerd zullen worden. Hierdoor kan de browser het weergaveproces optimaliseren en vertragingen en flikkeringen voorkomen. Momenteel wordt deze eigenschap echter niet ondersteund door IE / Edge, Safari of Opera Mini.

De postcss-will-change plug-in, ook gemaakt door Andrey Sitnik, voegt een fallback toe die deze browsers helpt bij het beter renderen, zelfs als ze niet de efficiëntie hebben die ze zouden kunnen bieden als ze zouden ondersteunen zal veranderen. Het doet dit door het toevoegen van de achtervlak-zichtbaarheid eigenschap, waarmee een compositor-laag wordt gemaakt die door de GPU wordt verwerkt.

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

.thisWillChange will-change: transform; 

Stel uw stylesheet samen en u zou de fallback in uw "dest / style.css" -bestand moeten zien verschijnen:

.thisWillChange backface-visibility: hidden; will change: transform; 

Notitie: deze plug-in moet worden geladen voor Autoprefixer in uw Gulpfile / Grunt-bestand. Dit is om Autoprefixer toe te staan ​​om voorvoegsels van leveranciers toe te voegen aan de achtervlak-zichtbaarheid eigendom, zoals zo:

/ * Terugval met voorvoegsels van leveranciers * / .thisWillChange -webkit-backface-visibility: hidden; backface-visibility: verborgen; will change: transform; 

Gerelateerde Links

  • postcss-will-change plug-in: https://github.com/postcss/postcss-will-change
  • Alles wat u moet weten over de CSS zal eigenschap veranderen
  • CanIse info: http://caniuse.com/#feat=will-change

Voeg fallbacks toe voor oude IE-problemen

Dankzij de verbeterde browserversies van Microsoft en de grote groepen die toonaangevend zijn in het wegvallen van de ondersteuning van het oude IE, komen we geleidelijk dichter bij het niet voortdurend overwegen van fallbacks en oplossingen voor problematische oudere browsers. Microsoft zal zelf in 2016 de ondersteuning voor IE8 laten vallen. Bootstrap 4 alpha is onlangs uitgebracht en heeft ook de ondersteuning voor IE8 laten vallen. Google stopte met het ondersteunen van IE8 in 2012 en stopte IE9-ondersteuning in 2013.

Uiteindelijk moet elk project van geval tot geval worden beoordeeld en als u een demografische doelgroep met een hoge gebruikscapaciteit van oudere browsers target, heeft u misschien geen andere keuze dan uw best te doen om hen te ondersteunen. Als dat het geval is, kunnen de volgende plug-ins u helpen dat proces een beetje minder pijnlijk te maken.

creëren RGBA () Color Fallbacks

IE8 heeft geen ondersteuning voor RGBA () kleuren, dus de postcss-color-rgba-fallback plugin van Guillaume Demesy voegt een platte hexadecimale kleur toe als een fallback.

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

.rgbaFallback background: rgba (0,0,0,0.5); 

Compileer en je zou moeten zien dat de hexcode terugvalt aan je "dest / style.css" bestand:

.rgbaFallback background: # 000000; achtergrond: rgba (0,0,0,0.5); 

Gerelateerde Links

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

creëren ondoorzichtigheid fallbacks

IE8 kan het niet aan ondoorzichtigheid eigenschap, dus voegt de postcss-opacity-plug-in van Vincent De Oliveira een IE-specifiek filter toe om hetzelfde effect te bereiken.

Voeg deze code toe aan uw bronstijlblad:

.opacityFallback opacity: 0,5; 

Na het compileren zou je het juiste moeten zien -ms-filter fallback toegevoegd:

.opacityFallback opacity: 0,5; -ms-filter: "progid: DXImageTransform.Microsoft.Alpha (Dekking = 50)"; 

Gerelateerde Links

  • postcss-opacity plug-in: https://github.com/iamvdo/postcss-opacity
  • CanIUse-info: http://caniuse.com/#feat=css-opacity

Converteren :: in : op pseudo-elementen

Het wordt als de beste methode beschouwd bij het genereren van pseudo-elementen zoals .element :: vóór om een ​​dubbele dubbele punt notatie te gebruiken ::. Dit is om hen te helpen onderscheiden van pseudo-klassen zoals .element: hover die een enkele colon-notatie zou moeten gebruiken :.

IE8 ondersteunt echter niet de dubbele-dubbele puntnotatie :: om pseudo-elementen te maken, ondersteunt het slechts één dubbele punt :. Door de plug-in postcss-pseudoelements van Sven Tschui te gebruiken, kunt u coderen volgens de beste werkwijzen en de notatie automatisch laten wijzigen.

Voeg het volgende dubbel toe :: notatie code:

.pseudo-element :: before content: ";

Stel uw bestand samen en u zou moeten zien dat het teruggebracht is tot de single : notatie:

.pseudo-element: before content: ";

Door te coderen naar de beste werkwijzen en deze plug-in te gebruiken, kan IE8, nadat IE8 volledig met pensioen is, uw CSS opnieuw verwerken zonder de plug-in en de juiste syntaxis op zijn plaats hebben.

Gerelateerde Links

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

Toevoegen vm Fallback voor Vmin

In IE9 de relatieve eenheid van het kijkvenster Vmin wordt niet ondersteund, maar gebruikt in plaats daarvan de equivalente eenheid vm. Als u op IE9 let, voegt de postcss-vmin-plugin van Vincent De Oliveira toe vm eenheden als een fallback.

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

.vmFallback width: 50vmin; 

Opnieuw compileren en de resulterende code moet de vm unit fallback toegevoegd in:

.vmFallback width: 50vm; breedte: 50vmin; 

Gerelateerde Links

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

Toevoegen px Fallback voor rem eenheden

IE8 ondersteunt dit niet rem eenheden en in zowel IE9 als IE10 worden ze niet ondersteund pseudo-elementen en doopvont steno-verklaring. Met de node-pixrem plugin van Vincent De Oliveira en Rob Wierzbowski die je kunt hebben px gebaseerde fallbacks worden automatisch toegevoegd, waar je ook gebruikt rem units.

Voeg deze code toe aan uw bronstijlblad:

.remFallback height: 10rem; lettertype: 2rem Arial;  .remFallback :: before content: "; line-height: 1rem;

Hercompileer en je zou al het juiste moeten zien px fallbacks toegevoegd:

.remFallback height: 160px; hoogte: 10rem; lettertype: 32px Arial; lettertype: 2rem Arial;  .remFallback: vóór content: "; regelhoogte: 16px; regelhoogte: 1rem;

Gerelateerde Links

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

Laten we samenvatten

Om samen te vatten wat we in het bovenstaande hebben behandeld:

  • Autoprefixer is een must-tool voor elk project
  • Autoprefixer kan worden geconfigureerd om leveranciersvoorvoegsels toe te voegen op basis van de browsers die u nodig hebt om te ondersteunen
  • Als je animatie gebruikt in je project, overweeg dan om de plug-in postcss-will-change te gebruiken
  • Als u IE8 ondersteunt, overweeg dan het gebruik van de plug-ins postcss-color-rgba-fallback, postcss-opacity, postcss-pseudoelements en postcss-vmin.
  • Als u IE8, IE9 of IE10 ondersteunt, overweeg dan om de plug-in node-pixrem te gebruiken

In de volgende zelfstudie

De volgende stap in onze PostCSS Deep Dive-serie is een tutorial over het gebruik van plug-ins om uw CSS te verkleinen en te optimaliseren. We zullen inlining behandelen @importeren bestanden, het combineren van mediaquery's, het verwijderen van witruimte en verschillende andere methoden om uw stylesheets zo gestroomlijnd mogelijk te maken. Zie je daar!