CodeGym /Corsi /Frontend SELF IT /Funzione calc()

Funzione calc()

Frontend SELF IT
Livello 32 , Lezione 0
Disponibile

6.1 Funzionalità principali della funzione calc()

La funzione calc() ti permette di fare operazioni matematiche nei CSS, rendendo gli stili più flessibili e adattivi. Questa funzione è particolarmente utile per combinare diverse unità di misura e calcolare dinamicamente valori come dimensioni, margini, bordi e altre proprietà.

La funzione calc() permette di effettuare quattro operazioni matematiche di base: addizione, sottrazione, moltiplicazione e divisione. Queste operazioni possono essere usate per combinare diverse unità di misura (pixel, percentuali, em, rem, ecc.), semplificando la creazione di stili adattivi e dinamici.

Sintassi:

    
      selettore {
        proprietà: calc(espressione);
      }
    
  

Esempi di operazioni

  • Addizione: calc(100% + 20px)
  • Sottrazione: calc(50% - 10px)
  • Moltiplicazione: calc(10px * 2)
  • Divisione: calc(100px / 2)

Esempio:

HTML
    
      <div>
        Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
        Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
      </div>
    
  
CSS
    
      div {
        width: calc(100% - 50px);
        margin: calc(1em + 10px);
        background: lightblue;
      }
    
  

In questo esempio:

  • La larghezza dell'elemento è calcolata come 100% meno 50px
  • Il margine è calcolato come somma di 1em e 10px

6.2 Esempi di utilizzo della funzione calc()

1. Addizione e sottrazione

La funzione calc() viene spesso utilizzata per l'addizione e la sottrazione di valori, permettendo un controllo più preciso sulle dimensioni e i margini degli elementi.

Esempio 1: Addizione di percentuali e pixel

In questo esempio, la larghezza del contenitore è calcolata come 100% della larghezza dell'elemento padre meno 40 pixel. Questo permette di prendere in considerazione margini e altri elementi all'interno del contenitore:

HTML
    
      <div class="container">
        Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
        Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
      </div>
    
  
CSS
    
      .container {
        width: calc(100% - 40px);
        margin: 20px;
        background: lightgreen;
      }
    
  

Esempio 2: Sottrazione di un valore fisso

In questo esempio, la larghezza della barra laterale è calcolata come 100% della larghezza dell'elemento padre meno 250 pixel, lasciando spazio per il contenuto principale:

HTML
    
      <div class="sidebar">
        <ul>
          <li><a href="#"></a>Articolo 1</li>
          <li><a href="#"></a>Articolo 2</li>
          <li><a href="#"></a>Articolo 3</li>
        </ul>
      </div>
    
  
CSS
    
      .sidebar {
        width: calc(100% - 250px);
        background: tomato;
      }
    
  

2. Moltiplicazione e divisione

La funzione calc() permette anche di moltiplicare e dividere, il che può essere utile per creare dimensioni e margini proporzionali.

Esempio 3: Moltiplicazione

In questo esempio, l'altezza dell'elemento è calcolata come 20 pixel moltiplicati per 3, ottenendo 60 pixel:

HTML
    
      <div class="element">Element</div>
    
  
CSS
    
      .element {
        height: calc(20px * 3);
        background: lightpink;
      }
    
  

Esempio 4: Divisione

In questo esempio, la larghezza del blocco è calcolata come un terzo della larghezza dell'elemento padre, creando tre colonne uguali:

HTML
    
      <div class="box">
        Box
      </div>
    
  
CSS
    
      .box {
        width: calc(100% / 3);
        background: yellow;
      }
    
  

6.3 Combinazione di diverse unità di misura

Una delle caratteristiche chiave della funzione calc() è la possibilità di combinare diverse unità di misura, consentendo la creazione di stili adattivi e flessibili.

Esempio 5: Combinazione di percentuali e pixel

In questo esempio, l'altezza dell'intestazione è calcolata come 100% dell'altezza della finestra del browser (viewport height) meno 50 pixel, permettendo di considerare un margine fisso.

HTML
    
      <header class="header">
        <nav>
          <ul>
            <li>Home</li>
            <li>Chi Siamo</li>
            <li>Contatti</li>
          </ul>
        </nav>
      </header>
    
  
CSS
    
      .header {
        height: calc(100vh - 100px);

        background: lightgreen;
      }

      nav ul {
        list-style: none;
        display: flex;
        justify-content: space-around;
        padding: 10px;
      }
    
  

Calcolo dinamico delle dimensioni

La funzione calc() è utile per creare dimensioni dinamicamente calcolate degli elementi, rendendo il design più adattivo e flessibile.

Esempio 6: Calcolo dinamico della larghezza

In questo esempio, la larghezza del contenuto è calcolata come 100% della larghezza dell'elemento padre meno il doppio del margine di 20 pixel su ciascun lato:

HTML
    
      <div class="content">
        Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
        Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
      </div>
    
  
CSS
    
      .content {
        width: calc(100% - 2 * 20px);
        background: lightgreen;
      }
    
  

6.4 Utilizzo di calc() nei media query

La funzione calc() può essere utilizzata all'interno dei media query per creare stili adattivi.

Esempio 7: Margini adattivi nei media query

In questo esempio, i margini del contenitore aumentano considerando la larghezza della finestra del browser al raggiungimento di una larghezza minima di 600 pixel:

HTML
    
      <div class="container">
        Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
        Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
      </div>
    
  
CSS
    
      .container {
        padding: 10px;
        background: tomato;
      }

      @media (min-width: 600px) {
        .container {
          padding: calc(10px + 2vw);
        }
      }
    
  

Esempio 8: Dimensioni adattive nei media query

In questo esempio, i margini del contenitore vengono dimezzati su schermi con larghezza fino a 600 pixel, migliorando l'adattività del design:

HTML
    
      <div class="container">
        Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
        Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
      </div>
    
  
CSS
    
      :root {
        --main-padding: 20px;
      }

      .container {
        padding: var(--main-padding);
        background: yellow;
      }

      @media (max-width: 600px) {
        .container {
          padding: calc(var(--main-padding) / 2);
        }
      }
    
  

6.5 Vantaggi e svantaggi

Vantaggi dell'utilizzo della funzione calc():

1. Flessibilità. La funzione calc() permette di creare design più flessibili e adattivi, combinando diverse unità di misura e effettuando operazioni matematiche.

2. Gestione dinamica degli stili. Con calc() è possibile modificare dinamicamente dimensioni e margini degli elementi, rendendo il design più reattivo e adattivo.

3. Semplificazione dei calcoli complessi. La funzione calc() semplifica l'esecuzione di calcoli complessi direttamente nei CSS, evitando la necessità di utilizzare JavaScript per semplici operazioni matematiche.

Limitazioni e caratteristiche della funzione calc():

1. Spazi attorno agli operatori. Nelle espressioni calc() devono essere presenti spazi attorno agli operatori. Ad esempio, calc(100% - 50px) è corretto, mentre calc(100%-50px) provocherà un errore.

2. Compatibilità dei browser. La funzione calc() è supportata dalla maggior parte dei browser moderni, ma per le versioni obsolete potrebbe essere necessaria una verifica della compatibilità.

3. Prestazioni. L'uso della funzione calc() può leggermente aumentare il tempo di rendering della pagina, soprattutto per calcoli complessi o frequenti cambiamenti di valori.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION