Funzioni

Podcast CSS - 020: Funzioni

Finora in questo corso ti abbiamo illustrato diverse funzioni CSS. Nel modulo grid, ti sono stati presentati minmax() e fit-content(), che consentono di dimensionare gli elementi. Nel modulo color, ti sono stati presentati rgb() e hsl(), che ti aiutano a definire i colori.

Come molti altri linguaggi di programmazione, il CSS ha molte funzioni integrate a cui puoi accedere ogni volta che ne hai bisogno.

Ogni funzione CSS ha uno scopo specifico. In questa lezione otterrai una panoramica generale che ti consentirà di capire meglio dove e come utilizzarle.

Che cos'è una funzione?

Una funzione è una porzione di codice indipendente e denominata che completa un'attività specifica. Una funzione viene denominata in modo che tu possa chiamarla all'interno del tuo codice e passare dati alla funzione. Questo è noto come passaggio di argomenti.

Diagramma di una funzione descritta in precedenza

Molte funzioni CSS sono funzioni pure; ciò significa che se trasferisci gli stessi argomenti alle funzioni, ti restituiranno sempre lo stesso risultato, indipendentemente da ciò che accade nel resto del codice. Queste funzioni vengono spesso ricalcolate man mano che i valori cambiano nel tuo CSS, in modo simile ad altri elementi del linguaggio, ad esempio valori a cascata calcolati come currentColor.

In CSS puoi utilizzare solo le funzioni fornite, anziché scriverne di personalizzate, ma possono essere nidificate l'una all'interno dell'altra in alcuni contesti, per una maggiore flessibilità. Approfondiremo l'argomento più avanti nel modulo.

Selettori funzionali

.post :is(h1, h2, h3) {
    line-height: 1.2;
}

Hai imparato a conoscere i selettori funzionali nel modulo pseudo-classi, in cui sono dettagliate funzioni come :is() e :not(). Gli argomenti passati a queste funzioni sono selettori CSS, che vengono poi valutati. In caso di corrispondenza con gli elementi, a questi verrà applicata la resto della regola CSS.

Proprietà personalizzate e var()

:root {
    --base-color: #ff00ff;
}

.my-element {
    background: var(--base-color);
}

Una proprietà personalizzata è una variabile che ti consente di tokenizzare i valori nel tuo codice CSS. Anche le proprietà personalizzate sono influenzate dalla cascata, il che significa che possono essere manipolate o ridefinite in base al contesto. Una proprietà personalizzata deve essere preceduta da due trattini (--) e fare distinzione tra maiuscole e minuscole.

La funzione var() prende un argomento richiesto: la proprietà personalizzata che stai cercando di restituire come valore. Nello snippet riportato sopra, la funzione var() ha superato --base-color come argomento. Se --base-color è definito, var() restituirà il valore.

.my-element {
    background: var(--base-color, hotpink);
}

Puoi anche passare un valore di dichiarazione di riserva alla funzione var(). Ciò significa che se non è possibile trovare --base-color, verrà utilizzata la dichiarazione passata, che nel caso di questo esempio è il colore hotpink.

Funzioni che restituiscono un valore

La funzione var() è solo una delle funzioni CSS che restituiscono un valore. Funzioni come attr() e url() hanno una struttura simile a var(): passi uno o più argomenti e li utilizzi sul lato destro della tua dichiarazione CSS.

a::after {
  content: attr(href);
}

La funzione attr() qui prende il contenuto dell'attributo href dell'elemento <a> e lo imposta come content dello pseudo-elemento ::after. Se il valore dell'attributo href dell'elemento <a> dovesse cambiare, la modifica verrebbe visualizzata automaticamente in questo attributo content.

.my-element {
    background-image: url('/path/to/image.jpg');
}

La funzione url() prende un URL string e viene utilizzata per caricare immagini, caratteri e contenuti. Se non viene trasmesso un URL valido o se non è possibile trovare la risorsa a cui punta l'URL, la funzione url() non restituisce nulla.

Funzioni colore

Hai imparato tutto ciò che riguarda le funzioni colore nel modulo color. Ti consigliamo vivamente di leggere un articolo, se non l'hai ancora fatto.

Alcune funzioni colore disponibili in CSS sono rgb(), rgba(), hsl(), hsla(), hwb(), lab() e lch(). Tutte queste configurazioni hanno un formato simile, in cui vengono trasmessi gli argomenti della configurazione e viene restituito un colore.

Espressioni matematiche

Come tanti altri linguaggi di programmazione, CSS offre funzioni matematiche utili per i vari tipi di calcolo.

calc()

Supporto dei browser

  • 26
  • 12
  • 16
  • 7

Fonte

La funzione calc() prende una singola espressione matematica come parametro. Questa espressione matematica può essere una combinazione di tipi, ad es. lunghezza, numero, angolo e frequenza. Puoi anche combinare le unità.

.my-element {
    width: calc(100% - 2rem);
}

In questo esempio, la funzione calc() viene utilizzata per ridimensionare la larghezza di un elemento al 100% dell'elemento principale contenitore, quindi rimuovere 2rem dal valore calcolato.

:root {
  --root-height: 5rem;
}

.my-element {
  width: calc(calc(10% + 2rem) * 2);
  height: calc(var(--root-height) * 3);
}

La funzione calc() può essere nidificata all'interno di un'altra funzione calc(). Puoi anche passare proprietà personalizzate in una funzione var() come parte di un'espressione.

min() e max()

Supporto dei browser

  • 79
  • 79
  • 75
  • 11.1

Fonte

La funzione min() restituisce il valore calcolato più piccolo di uno o più argomenti passati. La funzione max() fa il contrario: ottiene il valore più alto di uno o più argomenti passati.

.my-element {
  width: min(20vw, 30rem);
  height: max(20vh, 20rem);
}

In questo esempio, la larghezza deve essere il valore più basso tra 20vw (20% della larghezza dell'area visibile) e 30rem. L'altezza deve essere il valore massimo tra 20vh (20% dell'altezza dell'area visibile) e 20rem.

clamp()

Supporto dei browser

  • 79
  • 79
  • 75
  • 13.1

Fonte

La funzione clamp() accetta tre argomenti: la dimensione minima, la dimensione ideale e la massima.

h1 {
  font-size: clamp(2rem, 1rem + 3vw, 3rem);
}

In questo esempio, font-size sarà fluido in base alla larghezza dell'area visibile. L'unità vw viene aggiunta a un'unità rem per facilitare lo zoom dello schermo perché, indipendentemente dal livello di zoom, un'unità vw avrà le stesse dimensioni. Moltiplicando per un'unità rem, in base alla dimensione del carattere principale, la funzione clamp() fornisce un punto di calcolo relativo.

Per saperne di più sulle funzioni min(), max() e clamp(), consulta questo articolo.

Forme

Le proprietà CSS clip-path, offset-path e shape-outside utilizzano le forme per ritagliare visivamente la casella o fornire una forma a cui i contenuti possano scorrere.

Esistono funzioni di forma che possono essere utilizzate con entrambe le proprietà. Forme semplici come circle(), ellipse() e inset() adottano argomenti di configurazione per ridimensionarle. Le forme più complesse, ad esempio polygon(), utilizzano coppie di valori degli assi X e Y separate da virgole per creare forme personalizzate.

.circle {
  clip-path: circle(50%);
}

.polygon {
  clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%);
}

Come polygon(), esiste anche una funzione path() che utilizza una regola di riempimento SVG come argomento. In questo modo è possibile creare forme molto complesse che possono essere disegnate in uno strumento di grafica come Illustrator o Inkscape e poi copiate nel CSS.

Trasformazioni

Infine, in questa panoramica sulle funzioni CSS ci sono le funzioni di trasformazione che distorcono, ridimensionano e modificano persino la profondità di un elemento. Tutte le seguenti funzioni vengono utilizzate con la proprietà transform.

Rotazione

Supporto dei browser

  • 1
  • 12
  • 3,5
  • 3.1

Fonte

Puoi ruotare un elemento utilizzando la funzione rotate(), che ruoterà un elemento sul suo asse centrale. Inoltre, puoi utilizzare le funzioni rotateX(), rotateY() e rotateZ() per ruotare un elemento su un asse specifico. Puoi passare le unità di gradi, rotazione e radianti per determinare il livello di rotazione.

.my-element {
  transform: rotateX(10deg) rotateY(10deg) rotateZ(10deg);
}

La funzione rotate3d() accetta quattro argomenti.

Supporto dei browser

  • 12
  • 12
  • 10
  • 4

Fonte

I primi tre argomenti sono numeri, che definiscono le coordinate X, Y e Z. Il quarto argomento è la rotazione che, come le altre funzioni, accetta gradi, angoli e svolte.

.my-element {
  transform: rotate3d(1, 1, 1, 10deg);
}

Scalabilità

Supporto dei browser

  • 1
  • 12
  • 3,5
  • 3.1

Fonte

Puoi modificare il ridimensionamento di un elemento con transform e la funzione scale(). La funzione accetta uno o due numeri come valore che determina una scala positiva o negativa. Se definisci un solo argomento numerico, entrambi gli assi X e Y saranno scalati allo stesso modo e la definizione di entrambi è un'abbreviazione per X e Y. Come rotate(), esistono funzioni scaleX(), scaleY() e scaleZ() per scalare un elemento su un asse specifico.

.my-element {
  transform: scaleX(1.2) scaleY(1.2);
}

Come la funzione rotate, esiste anche una funzione scale3d(). È simile a scale(), ma richiede tre argomenti: i fattori di scala X, Y e Z.

Traduci

Supporto dei browser

  • 1
  • 12
  • 3,5
  • 3.1

Fonte

Le funzioni translate() spostano un elemento mentre questo mantiene la sua posizione nel flusso del documento. Accettano valori di lunghezza e percentuale come argomenti. La funzione translate() traduce un elemento sull'asse X se è stato definito un argomento e traduce un elemento sull'asse X e Y se sono stati definiti entrambi gli argomenti.

.my-element {
  transform: translatex(40px) translatey(25px);
}

Come con altre funzioni di trasformazione, puoi usare funzioni specifiche per un asse specifico usando translateX, translateY e translateZ. Puoi anche utilizzare translate3d per definire la traduzione di X, Y e Z in una sola funzione.

Inclinata

Supporto dei browser

  • 1
  • 12
  • 3,5
  • 3.1

Fonte

Puoi distorcere un elemento utilizzando le funzioni skew() che accettano gli angoli come argomenti. La funzione skew() funziona in modo molto simile a translate(). Se definisci un solo argomento, questo influirà solo sull'asse X e, se definisci entrambi, influirà sugli assi X e Y. Puoi anche utilizzare skewX e skewY per influire su ciascun asse in modo indipendente.

.my-element {
  transform: skew(10deg);
}

Prospettiva

Supporto dei browser

  • 36
  • 12
  • 16
  • 9

Fonte

Infine, puoi utilizzare la proprietà perspective, che fa parte della famiglia di proprietà di trasformazione, per modificare la distanza tra l'utente e il piano Z. In questo modo puoi creare una sensazione di distanza e creare una profondità di campo nei tuoi progetti.

L'esempio dell'utilissimo articolo di David Desandro mostra come utilizzarlo, insieme alle proprietà perspective-origin-x e perspective-origin-y, per creare esperienze davvero 3D.

Funzioni di animazione, gradienti e filtri

CSS fornisce anche funzioni che consentono di animare gli elementi, applicare gradienti e utilizzare filtri grafici per modificarne l'aspetto. Per rendere questo modulo il più conciso possibile, vengono illustrati nei moduli collegati. Hanno tutte una struttura simile alle funzioni mostrate in questo modulo.

Verifica le tue conoscenze

Verifica la tua conoscenza delle funzioni

Con quali caratteri è possibile identificare le funzioni CSS?

[]
Questi caratteri si riferiscono agli array in JavaScript.
{}
Questi caratteri vanno a capo delle regole nel CSS.
()
Le funzioni usano questi caratteri per aggregare gli argomenti.
::
Questi caratteri sono destinati agli pseudo-elementi in CSS.
:
Questi caratteri sono destinati alle pseudo-classi in CSS.

Il CSS ha funzioni matematiche integrate?

True
Ce ne sono molti e altri vengono aggiunti a specifiche e browser.
False
Riprova.

Una funzione calc() può essere inserita all'interno di un'altra calc() come font-size: calc(10px + calc(5px * 3));

True
🎉
False
Riprova.

Quali delle seguenti sono funzioni di forma CSS?

ellipse()
🎉
square()
Riprova.
circle()
🎉
rect()
Riprova.
inset()
🎉
polygon()
🎉