logo Dove iniziare Linguaggi Aiuto Blog
Home Dove iniziare Linguaggi Aiuto e Supporto Info e Blog

Le trasformazioni 2D in CSS

Le trasformazioni 2D in CSS permettono di applicare effetti visivi agli elementi HTML, come spostamenti, rotazioni, zoom e inclinazioni. In questa lezione, vediamo come funziona la proprietà transform in CSS e le funzioni da utilizzare.

La proprietà transform accetta i seguenti metodi:

  • translate(): sposta un elemento lungo gli assi X e Y.
  • rotate(): ruota un elemento attorno al suo centro.
  • scale(): ridimensiona un elemento lungo gli assi X e Y.
  • skew(): inclina un elemento lungo gli assi X e Y.
  • matrix(): combina più trasformazioni in una singola funzione.

Il metodo translate()

Il metodo translate() sposta un elemento lungo l'asse orizzontale (X) e/o l'asse verticale (Y).

La sintassi di translate() è: transform: translate(asseX, asseY). L'asseX sposta l'elemento in orizzontale, l'asseY sposta l'elemento in verticale. Il valore dell'asseY non è obbligatorio. Se non inserito, l'elemento verrà spostato soltanto sull'asse X. Sia asseX che asseY possono essere valori positivi o negativi.

Originale
Modificato

div {
  transform: translate(90px, 30px);
  background-color: lightblue;
  width: 100px;
  height: 100px;
}

Nell'esempio, il <div> viene traslato di 90px verso destra e 30px verso il basso. Considera, però, che questo spostamento non altera la posizione dell'elemento nella struttura del documento, ma solo la sua posizione visiva. Quindi, se c'è un altro elemento nella posizione in cui viene traslato, il <div> andrà sopra di esso.

I metodi translateX() e translateY()

Se vogliamo spostare un elemento solo in una particolare direzione, possiamo usare i metodi translateX() e translateY(). La loro sintassi è: transform: translateX(asseX) e transform: translate(asseY).

Questi sotto-metodi funzionano allo stesso modo di translate().

Ecco un esempio di translateX(), dove l'elemento viene spostato di 90px verso destra:

div {
  transform: translateX(90px);
}

Ecco un esempio di translateY(), dove l'elemento viene spostato di 30px verso il basso:

div {
  transform: translateY(30px);
}

Il metodo rotate()

Il metodo rotate() ruota un elemento di un certo angolo, specificato in gradi (deg), attorno al suo centro.

La sintassi di rotate() è: transform: rotate(valore). Il valore deve essere in deg, che indica i gradi della rotazione. Un valore positivo ruota l'elemento in senso orario, mentre un valore negativo lo ruota in senso antiorario.

Originale
Modificato

div {
  transform: rotate(20deg);
  background-color: lightcoral;
  width: 100px;
  height: 100px;
}

Nell'esempio, il <div> è stato ruotato di 20 gradi.

I metodi rotateX(), rotateY() e rotateZ()

I metodi rotateX(), rotateY() e rotateZ() permettono di trasformare l'elemento in 3D, deformandolo in base all'asse di riferimento.

In questa lezione, trattiamo soltanto le trasformazioni 2D. Parleremo dei vari metodi di rotate() nella prossima lezione.

Il metodo scale()

Il metodo scale() ridimensiona un elemento lungo gli assi X e Y, ingrandendo o rimpicciolendo l'elemento (e gli elementi all'interno) del valore indicato.

La sintassi di scale() è: transform: scale(valoreX, valoreY) oppure transform: scale(valoreXY). Ecco come funzionano i parametri:

  • Con due parametri (valoreX, valoreY): il valoreX determina il fattore di scala lungo l'asse X, mentre il valoreY determina il fattore di scala lungo l'asse Y. Il valoreX e valoreY devono essere senza unità, oppure in percentuale. Un valore maggiore di 1 ingrandisce l'elemento, mentre un valore compreso tra 0 e 1 lo riduce.
  • Con un parametro (valoreXY): con un solo parametro, l'elemento viene ingrandito su entrambe le coordinate dello stesso valore, in base al valoreXY. Il valoreXY deve essere senza unità, oppure in percentuale. Un valore maggiore di 1 ingrandisce l'elemento, mentre un valore compreso tra 0 e 1 lo riduce.
Originale
Modificato

div {
  transform: scale(1.5, 0.5);
  background-color: lightgreen;
  width: 100px;
  height: 100px;
}

Nell'esempio, il <div> viene ingrandito del 50% (1.5) sull'asse orizzontale, rimpicciolito del 50% (0.5) sull'asse verticale. La scritta all'intero viene deformata.

I metodi scaleX() e scaleY()

I metodi scaleX() e scaleY() permettono di ingrandire o rimpicciolire un elemento sull'asse X o sull'asse Y. La loro sintassi è: transform: scaleX(asseX) e transform: scaleY(asseY).

Questi sotto-metodi funzionano allo stesso modo di scale().

Ecco un esempio di scaleX(), dove l'elemento viene rimpicciolito dell'80% sull'asse X (e rimane il 20%):

div {
  transform: scaleX(20%);
}

Ecco un esempio di scaleY(), dove l'elemento viene ingrandito di 2 volte sull'asse Y:

div {
  transform: scaleY(2);
}

Il metodo skew()

Il metodo skew() inclina un elemento lungo l'asse X e/o Y. L'inclinazione viene specificata in gradi (deg).

La sintassi è: transform: skew(angoloX, angoloY). L'angoloX rappresenta l'angolo da usare per distorcere l'elemento lungo l'asse X, mentre l'angoloY rappresenta l'angolo da usare per distorcere l'elemento lungo l'asse Y. Entrambi i valori devono essere seguiti da deg. L'angoloY non è obbligatorio. Sia l'angoloX che l'angoloY possono avere valore positivo o negativo.

Originale
Modificato

div {
  transform: skew(15deg, 15deg);
  background-color: LightGoldenrodYellow;
  width: 100px;
  height: 100px;
}

Nell'esempio, abbiamo inclinato l'elemento di 15 gradi sull'asse X e 15 gradi sull'asse Y.

I metodi skewX() e skewY()

I metodi skewX() e skewY() permettono di inclinare l'elemento in una specifica asse, X o Y. La loro sintassi è: transform: skewX(angoloX) e transform: skewY(angoloY).

Questi sotto-metodi funzionano allo stesso modo di skew().

Ecco un esempio di skewX(), dove l'elemento viene inclinato di 15 in senso antiorario sull'asse X:

div {
  transform: skewX(-15deg);
}

Ecco un esempio di skewY(), dove l'elemento viene inclinato di 25 in senso orario sull'asse Y:

div {
  transform: skewY(25deg);
}

Il metodo matrix()

Il metodo matrix() raccoglie tutte le funzioni di transform in un singolo valore.

La sintassi è: transform: matrix(scaleX, skewY, skewX, scaleY, translateX, translateY). Ognuno dei parametri di matrix() rappresenta le funzioni che abbiamo visto finora. Nessuno dei parametri richiede un'unità di misura.

Originale
Modificato

div {
  transform: matrix(1, 0.5, -0.5, 1, 50, 20);
  background-color: lightpink;
  width: 100px;
  height: 100px;
}

Nell'esempio, il <div> ha i seguenti valori di transform:

  • 1 e 1: indicano che non c'è ingrandimento lungo gli assi X e Y.
  • 0.5 e -0.5: rappresentano gli effetti di inclinazione lungo gli assi X e Y.
  • 50 e 20: indicano la traslazione dell'elemento di 50px a destra e 20px verso il basso.

Più funzioni in transform

È possibile inserire più funzioni contemporaneamente in transform separandole con lo spazio. Non esiste un ordine obbligatorio.

Ad esempio, ruotiamo e trasliamo l'elemento:

div {
  transform: rotate(20deg) translate(20px, 30px);
  background-color: lightpink;
  width: 100px;
  height: 100px;
}

Prova!Completa gli spazi vuoti con il testo appropriato.
/* Ruota l'elemento di 90 gradi con CSS */
div {
  : (90deg);
  background-color: lightcoral;
  width: 100px;
  height: 100px;
}

Prova!Scegli l'opzione corretta tra quelle elencate.
/* Sposta l'elemento con transform in CSS */
div {
  transform: _________(20px, 50px);
}