Massimiliano Carnevale

Massimiliano Carnevale

Co-Founder
Stile e grafica

Le rotazioni con i CSS e la compatibilità cross-browser

Come scrivere CSS per ruotare blocchi funzionante su tutti i browser più diffusi e non.

Pubblicato il 06/08/2015

Abbiamo già visto come utilizzare le rotazioni con i CSS 3 in questi due articoli: etichette a 45 gradi e effetti di trasformazione con i css. E, in entrambi, abbiamo visto come il codice usato non sia funzionante su tutti i browser, in particolare su quelli di casa Microsoft

Per capire come renderlo cross-browser ripartiamo dal codice usato nel primo articolo:

#testBlk .testo {
	-webkit-transform:rotate(45deg);
	-moz-transform:rotate(45deg);
}


Tale codice, come noterete di sicuro, utilizza i cosiddetti prefissi CSS dei fornitori di browser, o in inglese vendor prefix CSS. Se vi chiedete a cosa servano, e perché si utilizzino, la risposta è pronta: servono a permettere ai produttori di browser l'aggiunta di nuove funzionalità CSS, per sperimentazione e test, senza causare problemi di (retro)compatibilità.

Dopo tale fase, soprattutto se le funzionalità appaiono innovative, utili e comuni, succede spesso che vengano inglobate nel cosiddetto CSS standard. Ad esempio anni fa, per fare un angolo arrotondato servivano i vari -webkit-border-radius, -moz-border-radius e così via. Oggi si è sufficientemente certi che il solo uso di border-radius basti per il 99% dei browser in uso

Beh, ma perché usarli allora?

Semplice: per utilizzare le funzionalità richieste. Stando attenti però a lasciare sempre una via d'uscita per quei browser che non le supportano. Anche qui, un esempio visuale spiega meglio di 100 parole.
Supponiamo di avere un contenitore, con dentro un altro contenitore a cui vogliamo applicare un effetto neon

Pulsante Testo descrittivo
.containerEx {
	background:#333;
	width:300px;
	text-align:center; 
	padding:10px;
}
	.neonEx {
		display:block;
		background:#333;
		box-shadow:0 0 2px orange;
		padding:10px;
		margin-bottom:10px;
		color:orange;
	}

PulsanteTesto descrittivo

Nel caso in cui il nostro browser non supporti il border-radius avremo questo risultato:


PulsanteTesto descrittivo

In pratica perderemo la percezione del blocco. Come ovviare? Beh, dipende da voi: si può pensare di usare un colore alternativo al pulsante, di aggiungere un bordo arancio allo stesso e così via. L'importante è il dare sempre un'alternativa

 

Quali sono i prefissi e a quali browser sono associati?

I vendor prefix dei CSS sono essenzialmente:

  • -moz- per Firefox
  • -ms- per Internet Explorer
  • -o- per Opera
  • -webkit- per Android, iOS, Safari e Chrome

Probabilmente vi è chiaro che quasi tutto il traffico mobile si appoggi a Webkit: se progettate versioni mobile, tenetene conto!

 

Utilizzo pratico

È importante notare come tutti i browser moderni offrano supporto alle funzionalità più diffuse dei CSS con le ultime versioni. Ma per le versioni vecchie non sempre è vero. È necessario pertanto cercare di utilizzare codice per tutti i vendor a meno di non esser certi che il CSS sia compatibile con il 99% dei browser

Nell'esempio con cui abbiamo iniziato l'articolo ciò è ancora più vero perché la proprietà transform, supportata da quasi tutti i browser in commercio oggi e in passato, sia stata definita da molte regole diverse

Affinché sia il più cross-browser possibile, la regola che permette di ruotare un box di 45 gradi dovrebbe esser scritta in questo modo

.box {
	-webkit-transform:rotate(45deg); /* Chrome, iOS, Safari e Android */
	-moz-transform:rotate(45deg); /* Firefox */
	-o-transform:rotate(45deg); /* Opera */
	-ms-transform:rotate(45deg); /* IE 9 */
	transform:rotate(45deg); /* tutti i nuovi browser */
	filter: progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476); /* IE6,IE7 */
	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"; /* IE8 */
}

 

Conclusioni

C'è da notare come il codice appena postato sia un filo prolisso: non siate pigri pensando che tanto il solo transform:rotate mi assicuri una compatibilità con quasi tutti i nuovi browser. Certo, poi c'è da dire che le regole per IE6-7-8 in alcuni casi potrebbero anche essere omesse, soprattutto se il progetto non prevede la completa compatibilità con questi browser, e che la regola -ms-transform non sia obbligatoria visto che IE9 supporta di già il transform.

 

Qual è quindi il modo migliore per scrivere CSS corretto?

Semplice, e complicato allo stesso tempo: studiate bene il progetto, le specifiche e le necessità obiettive e solo in base a ciò valutate se spender tempo ad assicurare la retro-compatibilità richiesta.
Ricordate infine che la differenza tra i tanti arruffoni che popolano il nostro settore e un vero professionista sta qui: saper conciliare le richieste, analizzarle e offrire un prodotto ragionato, pensato e, soprattutto, funzionale.

CONDIVIDI SUI SOCIAL
Ueppy Blog

Leggi articoli correlati

Stile e grafica

CSS3 ed effetti speciali: rotazione, spostamento, scala ed animazione.

Le funzioni di trasformazione dei CSS3, ovvero come manipolare, ruotare, spostare gli oggetti delle pagine HTML.

Leggi l'articolo
Stile e grafica

Introduzione a SASS e LESS: come utilizzare al meglio i CSS

Variabili, operazioni, calcoli con i CSS? Se hai queste (e altre esigenze), hai la soluzione a portata di click!

Leggi l'articolo
Stile e grafica

L'ottavina reale e i CSS3

Un omaggio a Francesco Nuti per mostrare la potenza dei CSS3: un colpo da biliardo, sono con i css, senza immagini, video e javascript!

Leggi l'articolo
Stile e grafica

Sintassi e prime basi SASS: seconda parte

Primi esempi pratici di codice per SASS, il pre-processore di CSS - seconda parte

Leggi l'articolo
Scopri Ueppy

Scopri Ueppy

un network di professionisti specializzati
nel web.

Scopri Ueppy
Contatta Ueppy
Contatta Ueppy VUOI COSTRUIRE UN NUOVO PROGETTO WEB?

Contatta Ueppy

Scrivici