Utilizzo di PostCSS per la compatibilità tra browser

Nell'ultimo tutorial abbiamo concluso la nostra sezione "Avvio rapido" di questa serie, e ora siamo pronti per passare a utilizzare PostCSS per generare fogli di stile, utilizzando diversi tipi di plugin per vari scopi.

In questo tutorial utilizzeremo PostCSS per creare un foglio di stile progettato per la compatibilità tra browser. Noi:

  • Sono stati aggiunti automaticamente i prefissi dei fornitori
  • Aggiungi una serie di fallback per le versioni di Internet Explorer 8, 9 e 10
  • Aggiungi fallback per il non ancora ampiamente supportato cambierà proprietà

Cominciamo!

Imposta il tuo progetto

La prima cosa che devi fare è impostare il tuo progetto in modo che utilizzi Gulp o Grunt, a seconda delle tue preferenze. Se non hai già una preferenza per l'uno o l'altro, ti consiglio di utilizzare Gulp in quanto avrai bisogno di meno codice per raggiungere gli stessi fini.

Puoi leggere come configurare i progetti Gulp o Grunt per PostCSS nelle esercitazioni precedenti

  • Guida rapida per PostCSS: Gulp Setup o
  • Guida rapida per PostCSS: installazione Grunt

rispettivamente.

Se non si desidera configurare manualmente il progetto da zero, è possibile scaricare i file sorgente allegati a questo tutorial ed estrarre il progetto di avviamento Gulp o Grunt in una cartella di progetto vuota. 

Quindi, con un terminale o un prompt dei comandi puntato sulla cartella, eseguire il comando installazione di npm.

Installa i plugin

Ora che hai pronto il tuo progetto Gulp o Grunt + PostCSS vuoto, dobbiamo installare i plug-in che utilizzerai in questo tutorial.

Installeremo un bel po 'di plugin, quindi invece di installarli uno alla volta come abbiamo fatto nelle "Guide Quickstart" per Gulp e Grunt, li installeremo tutti insieme con un singolo comando.

Sia che tu stia utilizzando Gulp o Grunt, esegui il seguente comando all'interno della cartella del progetto per installare i plug-in che utilizzeremo:

npm install autoprefixer postcss-color-rgba-fallback postcss-opacity postcss-pseudoelements postcss-vmin pixrem postcss-will-change --save-dev

Ora i plugin sono installati, andiamo avanti e li cariciamo nel tuo progetto.

Carica i plugin via Gulp

Se stai usando Gulp, aggiungi queste variabili sotto le variabili già presenti nel file:

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');

Ora aggiungi ognuno di questi nuovi nomi di variabili nel tuo processori array:

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

Fai un rapido test per verificare che tutto funzioni eseguendo il comando gulp css quindi controlla che un nuovo file "style.css" sia apparso nella cartella "dest" del tuo progetto.

Carica i plugin via Grunt

Se stai usando Grunt, aggiorna il processori oggetto, che è annidato sotto il opzioni oggetto, al seguente:

 processori: [require ('postcss-will-change') (), require ('autoprefixer') (), require ('postcss-color-rgba-fallback') (), require ('postcss-opacity') () , require ('postcss-pseudoelements') (), require ('postcss-vmin') (), require ('pixrem') ()]

Esegui un test rapido eseguendo il comando grunt postcss quindi controlla che la cartella "dest" del tuo progetto ora contenga un nuovo file "style.css".

Ora hai tutti i plug-in installati che sono necessari per questo tutorial e sei pronto per passare a vedere come usarli per migliorare la compatibilità tra browser dei tuoi fogli di stile.

Aggiungi automaticamente il prefisso del fornitore

Alcune delle misure per la compatibilità tra browser che tratteremo saranno necessarie solo per casi d'uso specifici. D'altra parte, il prefisso automatico del venditore è qualcosa che vorrei suggerire di fare ogni progetto, tramite il plugin Autoprefixer creato da Andrey Sitnik.

Può essere difficile tenere sotto controllo le proprietà che richiedono i prefissi dei produttori in un dato momento e utilizzando Autoprefixer che non è necessario. Utilizza Autoprefixer come parte di ogni progetto e controllerà il tuo codice con i dati di CanIUse.com, quindi aggiungerà i prefissi dei fornitori se necessario senza che tu debba pensarci.

Facciamo un piccolo test per vedere in azione Autoprefixer. Aggiungi il seguente codice di animazione e codice flessibile al file "src / style.css" del tuo progetto:

@keyframes animationEsempio da larghezza: 0;  a larghezza: 100%;  .animateThis animation: animationExample 2s; display: flex; 

Correre gulp css o grunt postcss per compilare il tuo file, e il tuo "dest / style.css" dovrebbe ora contenere questo codice prefissato dal fornitore:

@ -webkit-keyframes animationEsempio da larghezza: 0;  a larghezza: 100%;  @keyframes animationEsempio da larghezza: 0;  a larghezza: 100%;  .animateQuesto -webkit-animation: animationExample 2s; animazione: animationExample 2s; mostra: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; 

Come puoi vedere, i prefissi dei fornitori sono stati aggiunti automaticamente, come dettato dai dati forniti da CanIUse.com su animazione e flexbox.

Specifica dei livelli di supporto del browser

Autoprefixer utilizza la lista dei browser per determinare a quali versioni del browser aggiungere il supporto. Nelle impostazioni predefinite verranno applicati i prefissi dei fornitori come richiesto per:

  • > 1%: browser utilizzati da oltre l'un per cento delle persone a livello globale
  • ultime 2 versioni: le ultime due versioni di ogni browser tracciate da CanIUse.com
  • Firefox ESR: l'ultima versione di Firefox
  • Opera 12.1: Opera versione 12.1

L'esempio sopra riportato è stato compilato nelle impostazioni predefinite di Autoprefixer. Ciò significava che il supporto per IE10 e Safari 8 era incluso, quindi -Signorina- e -webkit- prefissi che richiedono per animazione e FlexBox sono stati inseriti automaticamente.

Tuttavia, IE11 e Safari 9 non richiedono questi prefissi, quindi se si dovesse impostare la configurazione della lista dei browser per supportare solo IE11 + e Safari 9+ questi prefissi non verrebbero più aggiunti.

Prova questo facendo passare a i browser impostando su Autoprefixer nel tuo Gulpfile o Gruntfile in questo modo:

// Nell'array dei processori Gulpfile: autoprefixer (browser: 'safari> = 9, ie> = 11'), // Nell'array 'processors' di Gruntfile: require ('autoprefixer') (browser: [ 'safari> = 9, cioè> = 11']),

Ora se ricompili il tuo CSS vedrai che non c'è differenza tra il tuo codice originale e quello compilato. Questo perché, senza il supporto richiesto per Safari 8 o IE10, non sono stati aggiunti prefissi ai fornitori per adattarli.

Link correlati:

  • Autoprefixer: https://github.com/postcss/autoprefixer
  • Elenco dei browser: https://github.com/ai/browserslist

Aggiungi fallback per la proprietà "will change"

Il cambierà la proprietà viene utilizzata per consentire a un browser di sapere in anticipo che alcuni elementi del tuo progetto verranno animati. Ciò consente al browser di ottimizzare il processo di rendering e prevenire ritardi e sfarfallio. Tuttavia, al momento questa proprietà non è supportata da IE / Edge, Safari o Opera Mini.

Il plugin postcss-will-change, anch'esso creato da Andrey Sitnik, aggiunge un fallback che aiuterà questi browser a fare un miglior lavoro di rendering, anche se non con l'efficienza che potrebbero se supportassero cambierà. Lo fa aggiungendo il controfaccia visibilità proprietà, che attiva la creazione di un livello di composizione che verrà gestito dalla GPU.

Ad esempio, aggiungi questo codice al tuo file "src / style.css":

.thisWillChange will-change: transform; 

Compila il tuo foglio di stile e dovresti vedere il fallback apparire nel tuo file "dest / style.css":

.thisWillChange backface-visibility: hidden; cambierà: trasformare; 

Nota: questo plugin dovrebbe essere caricato prima Autoprefixer nel tuo Gulpfile / Gruntfile. Questo per consentire a Autoprefixer di aggiungere i prefissi dei fornitori al controfaccia visibilità proprietà, in questo modo:

/ * Fallback con prefissi fornitore * / .thisWillChange -webkit-backface-visibility: hidden; backface-visibility: hidden; cambierà: trasformare; 

Link correlati

  • plugin postcss-will-change: https://github.com/postcss/postcss-will-change
  • Tutto ciò che devi sapere sul CSS cambierà proprietà
  • CanIUse informazioni: http://caniuse.com/#feat=will-change

Aggiungi fallback per vecchi problemi di IE

Grazie alle migliori versioni dei browser di Microsoft e ai principali gruppi che hanno contribuito a far cadere il supporto per il vecchio IE, ci avviciniamo gradualmente a non dover considerare costantemente fallback e soluzioni alternative per i browser legacy problematici. Microsoft stessa lascerà il supporto per IE8 nel 2016. Bootstrap 4 alpha è stato rilasciato di recente e ha anche abbandonato il supporto per IE8. Google ha smesso di supportare IE8 nel 2012 e ha abbandonato il supporto di IE9 nel 2013.

Detto questo, alla fine della giornata ogni progetto deve essere valutato caso per caso, e se hai come obiettivo una fascia demografica con alti tassi di utilizzo di browser legacy, potresti non avere altra scelta che fare del tuo meglio per sostenerli. In questo caso, i seguenti plugin possono aiutarti a rendere quel processo un po 'meno doloroso.

Creare RGBA () Fallback a colori

IE8 non ha supporto per RGBA () colori, quindi il plugin postcss-color-rgba-fallback di Guillaume Demesy aggiunge un colore esadecimale piatto come ripiego.

Ad esempio, aggiungi questo codice al tuo file "src / style.css":

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

Compilati e dovresti vedere il codice esadecimale di fallback aggiunto al tuo file "dest / style.css":

.rgbaFallback background: # 000000; sfondo: rgba (0,0,0,0,5); 

Link correlati

  • plugin postcss-color-rgba-fallback: https://github.com/postcss/postcss-color-rgba-fallback
  • CanIUse informazioni: http://caniuse.com/#feat=css3-colors

Creare opacità fallback

IE8 non può gestire il opacità proprietà, quindi il plugin postcss-opacity di Vincent De Oliveira aggiunge un filtro specifico IE per ottenere lo stesso effetto.

Aggiungi questo codice al tuo foglio di stile sorgente:

.opacityFallback opacità: 0.5; 

Dopo la compilazione dovresti vedere l'appropriato -ms-filtro ripiego aggiunto:

.opacityFallback opacità: 0.5; -ms-filter: "progid: DXImageTransform.Microsoft.Alpha (Opacity = 50)"; 

Link correlati

  • plugin postcss-opacity: https://github.com/iamvdo/postcss-opacity
  • CanIUse informazioni: http://caniuse.com/#feat=css-opacity

Convertire :: in : su Pseudo-elementi

È considerato una buona pratica quando si genera pseudo-elementi ad esempio .elemento :: prima usare una doppia notazione dei due punti ::. Questo per aiutarli a distinguerli dallo pseudo-classi ad esempio .Elemento: hover che dovrebbe usare una notazione di due punti :.

Tuttavia, IE8 non supporta la notazione dei due punti :: per creare pseudo-elementi, supporta solo un singolo punto :. Usando il plugin postcss-pseudoelements di Sven Tschui puoi codificare secondo le migliori pratiche e far cambiare automaticamente la notazione.

Aggiungi il seguente doppio :: codice di notazione:

.pseudo-elemento :: before content: ";

Compila il tuo file e dovresti vedere che è stato ridotto al singolo : notazione:

.pseudo-elemento: prima di content: ";

Mediante la codifica delle best practice e l'utilizzo di questo plug-in, una volta che IE8 è completamente ritirato puoi semplicemente rielaborare il tuo CSS senza il plugin e avere una sintassi corretta in atto.

Link correlati

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

Inserisci vm Fallback per Vmin

In IE9 l'unità relativa del viewport Vmin non è supportato, ma utilizza invece l'unità equivalente vm. Se ti occupi di IE9, il plugin postcss-vmin di Vincent De Oliveira aggiungerà vm unità come ripiego.

Aggiungi questo codice al tuo file "src / style.css":

.vmFallback width: 50vmin; 

Ricompila e il codice risultante dovrebbe avere il vm unità di riserva aggiunta in:

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

Link correlati

  • plugin postcss-vmin: https://github.com/iamvdo/postcss-vmin
  • CanIUse informazioni: http://caniuse.com/#feat=viewport-units

Inserisci px Fallback per rem unità

IE8 non supporta rem unità, e in entrambi IE9 e IE10 non sono supportati in pseudo-elementi e font dichiarazione stenografica. Con il plugin node-pixrem di Vincent De Oliveira e Rob Wierzbowski puoi avere px fallbacks basati automaticamente aggiunti ovunque tu usi rem unità.

Aggiungi questo codice al tuo foglio di stile sorgente:

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

Ricompila e dovresti vedere tutto il necessario px aggiunte di fallback:

.remFallback height: 160px; altezza: 10rem; font: 32px Arial; font: 2rem Arial;  .remFallback: before content: "; line-height: 16px; line-height: 1rem;

Link correlati

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

Riassumiamo

Per riassumere ciò che abbiamo trattato in precedenza:

  • Autoprefixer è uno strumento indispensabile per ogni progetto
  • È possibile configurare Autoprefixer per aggiungere prefissi di produttori in base ai browser che è necessario supportare
  • Se usi l'animazione nel tuo progetto, considera l'utilizzo del plugin postcss-will-change
  • Se si supporta IE8, prendere in considerazione l'utilizzo dei plugin postcss-color-rgba-fallback, postcss-opacity, postcss-pseudoelements e postcss-vmin.
  • Se si supporta IE8, IE9, IE10 si consideri l'utilizzo del plugin node-pixrem

Nel prossimo tutorial

Il prossimo articolo della serie PostCSS Deep Dive è un tutorial su come usare i plugin per minimizzare e ottimizzare il tuo CSS. Copriremo inlining @importare file, combinando le query multimediali, eliminando lo spazio bianco e molti altri metodi per rendere i fogli di stile il più semplici possibile. Ci vediamo lì!