<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ CSS - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Impara a programmare gratuitamente! Tutorial di programmazione su Python, JavaScript, Linux e molto altro. ]]>
        </description>
        <link>https://www.freecodecamp.org/italian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ CSS - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 16 May 2026 19:16:16 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/tag/css/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Allineamento verticale in CSS - Come centrare un div, un testo o un'immagine (con esempi di codice) ]]>
                </title>
                <description>
                    <![CDATA[ Anche con l'aiuto di strumenti come CSS Grid e Flexbox, centrare gli elementi in CSS rimane un compito abbastanza complicato. È il tema di molte battute e meme, e quando si riesce a centrare qualcosa con successo, di solito ci si vanta di averlo fatto. Perché centrare elementi in CSS ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/allineamento-verticale-in-css-come-centrare-un-div-un-testo-o-unimmagine-con-esempi-di-codice/</link>
                <guid isPermaLink="false">67a5eff589635a042bc7010b</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ivan Forcati ]]>
                </dc:creator>
                <pubDate>Tue, 06 Jan 2026 20:17:03 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2026/01/center.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/css-vertical-align-how-to-center-a-div-text-or-an-image-example-code/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Vertical Align – How to Center a Div, Text, or an Image [Example Code]</a>
      </p><p>Anche con l'aiuto di strumenti come CSS Grid e Flexbox, centrare gli elementi in CSS rimane un compito abbastanza complicato.</p><p>È il tema di molte battute e meme, e quando si riesce a centrare qualcosa con successo, di solito ci si vanta di averlo fatto.</p><h2 id="perch-centrare-elementi-in-css-cos-difficile"><strong>Perché centrare elementi in CSS è così difficile?</strong></h2><p>Non è sempre facile lavorare con CSS. Ad esempio, allineare qualcosa orizzontalmente OPPURE verticalmente non è troppo difficile.</p><p>Si può impostare l'allineamento del testo centrato con <code>text-align: center</code> per un elemento a livello di linea e <code>margin: 0 auto</code> per un elemento a livello di blocco.</p><p>Ma se si prova a combinare sia l'allineamento verticale sia l'allineamento orizzontale, allora iniziano a comparire diversi problemi.</p><p>In questo tutorial, vedremo tre metodi diversi per centrare correttamente un div, un testo o un'immagine in CSS.</p><h2 id="come-centrare-un-elemento-con-la-propriet-css-position"><strong>Come centrare un elemento con la proprietà CSS <code>position</code></strong></h2><p>La proprietà CSS <code>position</code> accetta i valori <code>relative</code>, <code>absolute</code>, <code>fixed</code> e <code>static</code> (il valore di default). Quando viene impostata per un elemento, si possono poi utilizzare le proprietà <code>top</code>, <code>right</code>, <code>bottom</code> e <code>left</code> per quell'elemento.</p><p>Con una combinazione di valori assoluti e relativi si possono ottenere molte cose diverse e si possono utilizzare per centrare qualsiasi cosa.</p><p>Diamo un'occhiata ai frammenti di codice sottostanti, considerando alcuni esempi.</p><h3 id="come-centrare-il-testo-con-la-posizione-in-css"><strong>Come centrare il testo con la posizione in CSS</strong></h3><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;p&gt;I'm a Camper, and I'm vertically centered&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
} 

.container {
  position: relative;
  height: 400px;
  border: 2px solid #006100;
}

.centered-element {
  margin: 0;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss1b.png" class="kg-image" alt="ss1b" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-un-immagine-con-la-posizione-in-css"><strong>Come centrare un'immagine con la posizione in CSS</strong></h3><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;img src="freecodecamp.png" alt="centered" /&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  position: relative;
  height: 400px;
  border: 2px solid #006100;
}

.centered-element {
  margin: 0;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss2b.png" class="kg-image" alt="ss2b" width="600" height="400" loading="lazy"></figure><p>Il codice qui sopra ha reso il testo e l'immagine centrati verticalmente. Per ottenere un allineamento centrato sia verticale sia orizzontale, dobbiamo utilizzare un piccolo trucco in CSS. Dobbiamo impostare la proprietà <code>top</code> a <code>50%</code> e aggiungere una traslazione per entrambi gli assi X e Y.</p><pre><code>* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  position: relative;
  height: 400px;
  border: 2px solid #006100;
}

.centered-element {
  margin: 0;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
</code></pre><p>Il testo ora appare così:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss4b.png" class="kg-image" alt="ss4b" width="600" height="400" loading="lazy"></figure><p>E l'immagine così:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss3b.png" class="kg-image" alt="ss3b" width="600" height="400" loading="lazy"></figure><p>Abbiamo usato la proprietà <code>transform</code> perché il figlio (con la classe <code>centered-element</code>) era leggermente spostato dal centro. <code>translateY()</code> lo sposta verticalmente al centro e la traslazione sugli assi X e Y (<code>translate()</code>) lo sposta al centro sia orizzontalmente sia verticalmente.</p><h2 id="come-centrare-un-elemento-con-flexbox-in-css"><strong>Come centrare un elemento con Flexbox in CSS</strong></h2><p>In CSS il metodo di layout Flexbox è in grado di gestire i layout in una dimensione (riga o colonna). Con Flexbox, è abbastanza semplice centrare un div, del testo o un immagine utilizzando solo tre righe di codice.</p><p>Ecco i frammenti di codice con gli esempi.</p><h3 id="come-centrare-del-testo-con-flexbox"><strong>Come centrare del testo con Flexbox</strong></h3><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;p&gt;I'm a Camper, and I'm vertically centered&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.container {
    display: flex;
    align-items: center;
    height: 600px;
    border: 2px solid #006100; 
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss5b-1.png" class="kg-image" alt="ss5b-1" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-un-immagine-con-flexbox"><strong>Come centrare un'immagine con Flexbox</strong></h3><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;img src="freecodecamp.png" alt="centered" /&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.container {
    display: flex;
    align-items: center;
    height: 600px;
    border: 2px solid #006100; 
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss6b.png" class="kg-image" alt="ss6b" width="600" height="400" loading="lazy"></figure><p>Siamo riusciti ad ottenere un allineamento verticale in sole due righe di codice. Per rendere l'immagine e il testo centrati orizzontalmente, aggiungiamo <code>justify-content: center</code>.</p><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;p&gt;I'm a Camper, I'm now vertically and horizontally centered&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;img src="freecodecamp.png" alt="centered" /&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 600px;
    border: 2px solid #006100;
}
</code></pre><p>Il testo ora appare così:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss7bb.png" class="kg-image" alt="ss7bb" width="600" height="400" loading="lazy"></figure><p>E l'immagine così:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss11bb.png" class="kg-image" alt="ss11bb" width="600" height="400" loading="lazy"></figure><h2 id="come-centrare-un-elemento-con-grid-in-css"><strong>Come centrare un elemento con Grid in CSS</strong></h2><p>Con Flexbox è abbastanza semplice centrare qualsiasi cosa, no? Ma con Grid è ancora più facile centrare tutto, perché bastano solo due righe di codice.</p><h3 id="come-centrare-del-testo-con-grid"><strong>Come centrare del testo con Grid</strong></h3><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;p&gt;I'm a Camper, and I'm vertically centered&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.container {
    display: grid;
    align-items: center;
    height: 600px;
    border: 2px solid #006100;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss8bb.png" class="kg-image" alt="ss8bb" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-un-immagine-con-grid"><strong>Come centrare un'immagine con Grid</strong></h3><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;div class="centered-element"&gt;
      &lt;img src="freecodecamp.png" alt="centered" /&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.container {
    display: grid;
    align-items: center;
    height: 600px;
    border: 2px solid #006100;
}
</code></pre><p>Gli esempi qui sopra si occupano di centrare verticalmente gli oggetti. Per far sì che il testo e l'immagine siano anche centrati orizzontalmente, sostituiamo <code>align-items</code> con <code>place-items</code> – una combinazione di <code>align-items</code> e <code>justify-content</code>:</p><pre><code class="language-css">.container {
    display: grid;
    place-items: center;
    height: 600px;
    border: 2px solid #006100;
}
</code></pre><p>Il testo ora appare così:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss7bb-1.png" class="kg-image" alt="ss7bb-1" width="600" height="400" loading="lazy"></figure><p>E l'immagine così:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss11bb-1.png" class="kg-image" alt="ss11bb-1" width="600" height="400" loading="lazy"></figure><h2 id="come-centrare-un-div-del-testo-o-un-immagine-in-css-senza-contenitori"><strong>Come centrare un div, del testo o un'immagine in CSS senza contenitori</strong></h2><p>I tre metodi visti sopra ci permettono di centrare un div, del testo o un'immagine che sono racchiusi in un contenitore. Ma possiamo anche centrare un div, del testo o un'immagine senza contenitore.</p><p>Vediamo come fare.</p><h3 id="come-centrare-un-div-in-css-senza-contenitore"><strong>Come centrare un div in CSS senza contenitore</strong></h3><pre><code class="language-html">&lt;div class="container"&gt;&lt;/div&gt;
</code></pre><pre><code class="language-css">div.container {
    height: 300px;
    width: 300px;
    border: 2px solid #006100;
    margin: 0 auto;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss12bb.png" class="kg-image" alt="ss12bb" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-del-testo-in-css-senza-contenitore"><strong>Come centrare del testo in CSS senza contenitore</strong></h3><pre><code class="language-html">&lt;p&gt;I'm a Camper, and I'm centered&lt;/p&gt;
</code></pre><pre><code class="language-css">     p {
         text-align: center;
     }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss13bb.png" class="kg-image" alt="ss13bb" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-un-immagine-in-css-senza-contenitore"><strong>Come centrare un'immagine in CSS senza contenitore</strong></h3><pre><code class="language-html">&lt;img src="freecodecamp.png" alt="centered" /&gt;
</code></pre><pre><code class="language-css">img {
      display: block;
      margin: 0 auto;
 }
 /* Applica il valore block alla proprietà display, un margine nullo in alto e in basso e un margine automatico a destra e a sinistra */
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/ss14bb.png" class="kg-image" alt="ss14bb" width="600" height="400" loading="lazy"></figure><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Spero che questo tutorial ti abbia fornito abbastanza elementi per allineare al centro verticalmente e orizzontalmente diversi elementi in CSS così che sia meno problematico nei tuoi progetti futuri.</p><p>Grazie per la lettura e continua a programmare!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come impostare intervalli di lunghezza per le media query in CSS ]]>
                </title>
                <description>
                    <![CDATA[ Una media query è una funzionalità del CSS. Permette di creare e implementare layout che si adattano alle caratteristiche del dispositivo che si sta utilizzando. L'altezza e la lunghezza di una pagina sono alcune di queste caratteristiche. In questa breve guida, vedremo come si possono impostare diverse proprietà di lunghezza ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/intervalli-di-lunghezza-media-query/</link>
                <guid isPermaLink="false">6798b53dd26031044ce8440c</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ivan Forcati ]]>
                </dc:creator>
                <pubDate>Fri, 07 Feb 2025 17:12:44 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2025/02/amirali-mirhashemian-jh5XyK4Rr3Y-unsplash-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/media-queries-width-ranges/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Set Width Ranges for Your CSS Media Queries</a>
      </p><p>Una media query è una funzionalità del CSS. Permette di creare e implementare layout che si adattano alle caratteristiche del dispositivo che si sta utilizzando. L'altezza e la lunghezza di una pagina sono alcune di queste caratteristiche.</p><p>In questa breve guida, vedremo come si possono impostare diverse proprietà di lunghezza nella regola di una media query. Per il momento, vediamo prima le cose fondamentali.</p><h2 id="come-funzionano-le-media-query-in-css"><strong>Come funzionano le media query in CSS</strong></h2><p>Ora che abbiamo un'idea di base di cos'è una media query, diamo un'occhiata a come funziona davvero questa particolare funzionalità del CSS.</p><p>Ecco una semplice media query:</p><pre><code class="language-css">@media only screen and (max-width: 576px) {
    // stili da applicare
}

@media only screen and (min-width: 576px) {
    // stili da applicare
}
</code></pre><p>Ciò significa che gli stili scritti all'interno delle media query qui sopra funzioneranno o verranno applicati solo con le proprietà di lunghezza specificate.</p><p>Letteralmente, stiamo chiedendo al CSS che per questa lunghezza particolare (cioè, la proprietà <code>max-width</code> di <code>576px</code>) vengano applicati gli stili che scriveremo qui, specifici solo per questa lunghezza, a partire dalla lunghezza iniziale di <code>0px</code>.</p><h2 id="le-propriet-max-width-e-min-width"><strong>Le proprietà max-width e min-width</strong></h2><p>Ci sono due cose che bisogna tener presenti quando creiamo media query per diverse dimensioni di schermi: le proprietà <code>max-width</code> e <code>min-width</code>.</p><p>Quando a una media query viene passata la proprietà <code>max-width</code>, CSS la interpreta come una lunghezza a partire da zero – cioè come se non fosse stata impostata una proprietà di lunghezza minima. Ci arriveremo tra poco.</p><p>Una volta che alla proprietà <code>max-width</code> viene assegnato un valore, tutti gli stili all'interno di quella particolare media query verranno applicati a qualsiasi dispositivo le cui dimensioni dello schermo vanno da <code>0px</code> alla lunghezza massima specificata.</p><p>La proprietà <code>min-width</code>, d'altra parte, prende il valore iniziale che gli è stato assegnato e applica gli stili all'interno della regola media fino alla successiva <code>max-width</code> presente. Supponiamo, ad esempio:</p><pre><code class="language-css">@media only screen and (min-width: 576px) {
    // applica gli stili dalla lunghezza minima di 
    // 576px (dispositivi con schermo di grandezza media)
}
</code></pre><p>Gli stili che verranno scritti nella media query qui sopra saranno applicati solo ai dispositivi con lunghezza dello schermo a partire dalla lunghezza minima specificata.</p><h2 id="come-impostare-l-intervallo-di-lunghezza-con-una-media-query"><strong>Come impostare l'intervallo di lunghezza con una media query</strong></h2><p>Il metodo che abbiamo appena visto per creare le media query applicando solo una proprietà <code>width</code> risolve solo un problema.</p><p>Impostando un "intervallo di lunghezza", si ha un certo grado di flessibilità nella creazione di layout che si adattano a schermi di tutte le dimensioni.</p><p>Per impostare un "intervallo di lunghezza" preciso si crea una media query come abbiamo visto in precedenza. L'unica differenza è l'aggiunta di più espressioni media (cioè, dimensioni di schermi).</p><p>Diamo un'occhiata:</p><pre><code class="language-css">@media only screen and (min-width: 360px) and (max-width: 768px) {
    // stili da applicare in questo intervallo di dimensioni
}
</code></pre><p>La media query precedente verrà applicata solo quando l'espressione definita in alto è valida (cioè per gli schermi di dispositivi mobili per cui stiamo scrivendo uno stile).</p><p>Questa media query prende il primo valore di lunghezza come valore iniziale e il secondo come valore finale.</p><p>Ricordate la differenza tra le proprietà <code>max-width</code> e <code>min-width</code>? Stiamo semplicemente dicendo al browser di applicare gli stili CSS che scriviamo all'interno di questa regola ai dispositivi mobili le cui dimensioni di schermo vanno da <code>360px</code> a <code>768px</code>.</p><p>In parole semplici, stiamo creando layout che si adatteranno anche a schermi di piccole e medie dimensioni, come tablet o dispositivi mobili.</p><p>Si possono consultare i punti di passaggio tra le varie dimensioni degli schermi che sono disponibili nella <a href="https://getbootstrap.com/docs/5.0/layout/breakpoints/">documentazione di Bootstrap</a>. A partire da questi, si possono impostare gli intervalli che si preferiscono.</p><h2 id="proviamo-le-media-query-con-flexbox"><strong>Proviamo le media query con flexbox</strong></h2><p>Abbiamo visto come creare una media query di base che considera espressioni con diverse dimensioni di schermo. E abbiamo visto la differenza tra le proprietà <code>max-width</code> e <code>min-width</code> e come applicarle.</p><p>In questa sezione, vedremo come creare un semplice layout il cui aspetto cambia in diversi punti di passaggio (breakpoint, corrispondenti a specifiche dimensioni di schermo). Iniziamo creando la pagina HTML che contiene il layout.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="it"&gt;
  &lt;head&gt;
    &lt;title&gt;Esempio della Media Query&lt;/title&gt;
    &lt;link rel="stylesheet" href="style.css" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="container"&gt;
      &lt;div class="boxes box1"&gt;
        &lt;h1&gt;Primo Box&lt;/h1&gt;
        &lt;p&gt;
        Informazioni del primo box
        &lt;/p&gt;
      &lt;/div&gt;
      &lt;div class="boxes box2"&gt;
        &lt;h1&gt;Secondo Box&lt;/h1&gt;
        &lt;p&gt;
          Informazioni del secondo box
        &lt;/p&gt;
      &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Il codice qui sopra mostrerà due box con le loro rispettive informazioni, quando gli stili vengono applicati.</p><pre><code class="language-css">.container {
  display: flex;
  flex-wrap: wrap;
  width: 980px;
  margin: 0 auto;
  margin-top: 40px;
}

@media only screen and (min-width: 320px) and (max-width: 576px) {
  .container {
    width: 100%;
    padding-left: 23px;
    flex-direction: column-reverse;
  }
  .boxes {
    width: 100%;
  }
}
</code></pre><p>Osservando il file CSS, possiamo notare che la media query ha una lunghezza minima di <code>320px</code> e una lunghezza massima di <code>576px</code>. Questo significa che tutti gli stili scritti all'interno di questa regola si applicano solo ai dispositivi con dimensioni di schermo piccole e molto piccole.</p><p>Anche il layout dei box cambia anche in questo particolare intervallo di lunghezza. Questo è causato dal selettore <code>.container</code>, la cui proprietà <code>flex-direction</code> cambia da <code>row</code> a <code>column-reverse</code>.</p><p>Si possono utilizzare anche altri valori per la proprietà <code>flex-direction</code>. <a href="https://www.w3schools.com/cssref/css3_pr_flex-direction.php">Qui</a> si possono consultare i valori disponibili.</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Se non si imposta un intervallo di lunghezza, gli stili CSS dell'esempio precedente verranno applicati a tutti i dispositivi con una dimensione minima di <code>576px</code>.</p><p>Quando si imposta un intervallo di dimensioni, si ha un miglior controllo. Si possono specificare quali stili dovrebbero essere applicati a un dispositivo con una particolare dimensione dello schermo, ottenendo così un'applicazione più flessibile.</p><p>Grazie per aver letto questo articolo. Condividilo se ti è stato utile per capire perché si dovrebbero impostare intervalli di lunghezza nella creazione di media query.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Colore del testo in CSS - Come applicare uno stile al testo in HTML ]]>
                </title>
                <description>
                    <![CDATA[ Impostare un colore al testo di un sito web che stai costruendo potrebbe essere poco chiaro all'inizio. Ma in questo articolo impareremo come si fa. Come impostare il colore del testo in HTML In CSS, la proprietà background-color è abbastanza semplice da utilizzare per impostare il colore di sfondo di ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/colore-del-testo-in-css/</link>
                <guid isPermaLink="false">679205acd26031044ce84279</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ivan Forcati ]]>
                </dc:creator>
                <pubDate>Thu, 06 Feb 2025 15:10:57 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2025/02/Cssfontcolor.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/css-font-color-how-to-style-text-in-html/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Font Color – How to Style Text in HTML</a>
      </p><p>Impostare un colore al testo di un sito web che stai costruendo potrebbe essere poco chiaro all'inizio. Ma in questo articolo impareremo come si fa.</p><h2 id="come-impostare-il-colore-del-testo-in-html">Come impostare il colore del testo in HTML</h2><p>In CSS, la proprietà <code>background-color</code> è abbastanza semplice da utilizzare per impostare il colore di sfondo di qualsiasi elemento.</p><p>Ma se vogliamo impostare il colore di qualcosa che è in primo piano nella pagina? Soprattutto del testo, di cui normalmente non si vuole impostare un colore di sfondo.</p><p>Non c'è una proprietà <code>foreground-color</code> in CSS, ma è la proprietà <code>color</code> che si occupa di questo.</p><p>In questo articolo, ti mostrerò come impostare il colore del testo utilizzando la proprietà <code>color</code>. Vedremo anche i vari modi in cui specificare i valori.</p><p>Ci sono 4 modi diversi per specificare i valori della proprietà color: nomi dei colori, valori esadecimali, valori RGB e valori HSL. Vediamo ora ciascuno di questi.</p><h2 id="nomi-dei-colori"><strong>Nomi dei colori</strong></h2><p>Come implica il nome, si utilizza la proprietà color e si applica il valore scrivendo il nome del colore che si vuole. Questo può essere red, green, blue, orange, crimson, cyan, o qualsiasi altro nome (inglese) di colore. Esistono 147 nomi di colori riconosciuti dai browser.</p><p>La sintassi di base è questa:</p><pre><code class="language-css">elemento {
    color: nomeColore;
}
</code></pre><pre><code class="language-html">&lt;p&gt;freeCodeCamp&lt;/p&gt;
</code></pre><pre><code class="language-css"> p {
     color: crimson;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/named-color.png" class="kg-image" alt="named-color" width="600" height="400" loading="lazy"></figure><h2 id="colori-esadecimali"><strong>Colori esadecimali</strong></h2><p>I valori esadecimali vengono utilizzati per rappresentare i colori con un totale di 6 caratteri. Iniziano con il carattere # seguito da una cifra da 0 a 9 o da una qualsiasi lettera da A a F.</p><p>I primi 2 valori rappresentano il rosso, i successivi 2 il verde e gli ultimi 2 il blu. Con i valori esadecimali, non c'è limite alle tonalità di colori che si possono utilizzare.</p><pre><code class="language-html">&lt;p&gt;freeCodeCamp&lt;/p&gt;
</code></pre><pre><code class="language-css"> p {
    color: #dc143c;
 }
</code></pre><h2 id="colori-rgb"><strong>Colori RGB</strong></h2><p>RGB è l'abbreviazione di Red, Green e Blue (rosso, verde e blu). Con i colori RGB, si specificano i colori in termini di quanto rosso, verde e blu si vuole. Tutti e tre sono espressi con numeri tra 0 e 255.</p><p>C'è un tipo di RGB chiamato <code>rgba</code>. La ‘a’ aggiuntiva sta per alpha, che permette di specificare l'opacità (o trasparenza) del colore. Assume un valore che va da 0.0 a 1.0 – 0.0 significa 0% di opacità, 0.5 significa 50% di opacità e 1.0 significa 100% di opacità.</p><p>La sintassi di base è <code>rgb(quantitàDiRosso, quantitàDiVerde, quantitàDiBlu, alpha)</code>.</p><p>Ci si può fermare a <code>rgb(quantitàDiRosso, quantitàDiVerde, quantitàDiBlu)</code> se non si vuole specificare un valore per alpha.</p><p>Ecco la sintassi per valori RGB standard:</p><pre><code class="language-html">&lt;p&gt;freeCodeCamp&lt;/p&gt;
</code></pre><pre><code class="language-css"> p {
   color: rgb(220, 20, 60);
 }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/rgb-color.png" class="kg-image" alt="rgb-color" width="600" height="400" loading="lazy"></figure><p>Ed ecco l'esempio con un valore alpha del 50% (0.5) di opacità:</p><pre><code class="language-css">p {
    color: rgb(219, 20, 60, 0.5);
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/rgb-fifty-percent-opacity.png" class="kg-image" alt="rgb-fifty-percent-opacity" width="600" height="400" loading="lazy"></figure><h2 id="colori-hsl"><strong>Colori HSL</strong></h2><p>HSL è l'abbraviazione di hue, saturation, e lightness (tonalità, saturazione e luminosità). È un altro modo per specificare il colore del testo (e di qualsiasi altra cosa che abbia un colore) in CSS.</p><ul><li>La tonalità rappresenta la ruota dei colori con 360°, dove il rosso è 0°, il verde è 120°e il blu è 240°.</li><li>La saturazione è la quantità di grigio nel colore, espressa in percentuale. 0% rappresenta una tonalità di grigio mentre 100% è il colore stesso.</li><li>La luminosità è la quantità di oscurità e luminosità nel colore espressa come una percentuale. 0% è nero e 100% è bianco.</li></ul><p>Proprio come i colori RGB, si può anche impostare l'opacità del colore. Quindi, c'è anche <code>hsla</code>.</p><p>La sintassi di base completa è <code>hsl(gradoDiColore, percentualeDiSaturazione, percentualeDiLuminosità, alpha)</code>. Ci si può fermare a <code>hsl(gradoDiColore, percentualeDiSaturazione, percentualeDiLuminosità)</code> se non si vuole un valore alpha.</p><pre><code class="language-html">&lt;p&gt;freeCodeCamp&lt;/p&gt;
</code></pre><pre><code class="language-css"> p {
   color: hsl(348, 83%, 47%);
 }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/hsl-color.png" class="kg-image" alt="hsl-color" width="600" height="400" loading="lazy"></figure><p>Si può applicare un'opacità particolare al colore HSL in questo modo:</p><pre><code class="language-css"> p {
   color: hsla(348, 83%, 47%, 0.5);
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/hsl-fifty-percent-opacity-1.png" class="kg-image" alt="hsl-fifty-percent-opacity-1" width="600" height="400" loading="lazy"></figure><h2 id="per-impostare-un-colore-si-dovrebbero-utilizzare-i-nomi-dei-colori-i-colori-esadecimali-i-colori-rgb-o-i-colori-hsl"><strong>Per impostare un colore si dovrebbero utilizzare i nomi dei colori, i colori esadecimali, i colori RGB o i colori HSL?</strong></h2><p>Una delle cose meravigliose di CSS è che ci sono molteplici modi per fare la stessa cosa, come hai visto per l'applicazione di colori al testo.</p><p>Dato che abbiamo applicato i colori in 4 modi diversi, ci si potrebbe chiedere qual è il migliore da utilizzare.</p><p>Quando si usano i nomi dei colori, si è abbastanza limitati nel numero di colori diversi che si può applicare. Il rosso, il verde, il blu, il giallo o qualsiasi altro nome di colore hanno tante varianti che non sono disponibili usando solo i nomi dei colori. Abbiamo accesso solo a 147 colori predefiniti riconosciuti dai browser.</p><p>I colori esadecimali sono molto dinamici. Sono i più utilizzati tra gli sviluppatori perché il limite è solo la creatività. Con i colori esadecimali, si possono utilizzare varie tonalità e persino un colore che nessuno ha mai utilizzato prima.</p><p>I colori RGB sono tanto dinamici quanto i colori esadecimali. Oltre ad essere in grado di specificare quanto rosso, verde e blu si vuole da 0 a 255, si può anche impostare la trasparenza del colore con un valore alpha aggiuntivo.</p><p>HSL è il più dinamico di tutti. Si può specificare l'esatto colore che si desidera in gradi da 0 a 360 sulla ruota dei colori, si può impostare la saturazione e la luminosità che si desidera in percentuale, ed anche impostare un'opacità da 0.0 a 1.0.</p><p>Quindi dipende solo da ciò che si vuole e dai propri casi d'uso – e da quanto creativi o specifici si vuole essere.</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Applicare i colori al testo aiuta a rendere un sito web più accattivante per i visitatori. La giusta combinazione di colori può anche aiutare a rendere il contenuto più leggibile.</p><p>In questo articolo abbiamo imparato come applicare dei colori al testo con i 4 diversi tipi di valori che si possono usare con la proprietà color.</p><p>Grazie per aver letto questo articolo e continua a programmare!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Immagini di background in CSS - con esempi di codice HTML ]]>
                </title>
                <description>
                    <![CDATA[ Quello che un utente vede in un sito web ha un impatto sulla qualità della sua esperienza. Questo influenza anche la facilità con cui gli utenti possono interagire con l'intero sito in generale. Aggiungere immagini allo sfondo di certe parti di un sito è spesso più attraente e interessante dal ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/immagini-di-background-in-css-con-esempi-di-codice-html/</link>
                <guid isPermaLink="false">671a223ea104b204722483d6</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Andrea Sisti ]]>
                </dc:creator>
                <pubDate>Thu, 12 Dec 2024 14:27:24 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2024/12/kobu-agency-ipARHaxETRk-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/css-background-image-with-html-example-code/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Background Image – With HTML Example Code</a>
      </p><p>Quello che un utente vede in un sito web ha un impatto sulla qualità della sua esperienza. Questo influenza anche la facilità con cui gli utenti possono interagire con l'intero sito in generale.</p><p>Aggiungere immagini allo sfondo di certe parti di un sito è spesso più attraente e interessante dal punto di vista visivo che cambiare meramente il colore di sfondo.</p><p>I browser moderni supportano una varietà di file di immagine come <code>.jpg</code>, <code>.png</code>, <code>.gif</code> e<code>.svg</code>.</p><p>Questo articolo spiega come aggiungere immagini al tuo codice HTML e come raffinarle per migliorarne l'aspetto.</p><h2 id="sintassi-delle-immagini-di-background"><strong>Sintassi delle immagini di background</strong></h2><p>Il primo passo è assicurarsi di creare una cartella per contenere le immagini che vuoi usare nel tuo progetto.</p><p>Per esempio possiamo creare una cartella <code>images</code> nel progetto su cui stiamo lavorando ed aggiungere un'immagine chiamata <code>sunset.png</code> che vogliamo usare.</p><p>La proprietà CSS <code>background-image</code> ti permette di posizionare l'immagine dietro all'elemento HTML che desideri.</p><p>Potrebbe essere l'intera pagina (utilizzando il selettore CSS <code>body</code> che seleziona l'elemento <code>&lt;body&gt;</code> del nostro HTML), oppure solo una specifica parte della pagina come un elemento <code>section</code>, come nell'esempio sotto.</p><p>Per aggiungere un'immagine di sfondo a un elemento section nel tuo file <code>.css</code>, scrivi il seguente codice:</p><pre><code class="language-css">section {
  background-image: url("images/sunset.png");
}
</code></pre><p>Vediamo cosa succede nel dettaglio:</p><ul><li><code>section</code> specifica l'elemento a cui vuoi applicare l'immagine.</li><li><code>url()</code> è utilizzato per dire al CSS dove si trova l'immagine che vuoi utilizzare.</li><li>All'interno delle parentesi, <code>"images/sunset.png"</code> è il percorso all'immagine. Questo fa sapere al browser quale URL considerare.</li><li>Il percorso in questo esempio è definito un percorso relativo: l'immagine a cui si riferisce è un file locale, relativo al nostro progetto ed alla nostra cartella di lavoro corrente, non è un indirizzo web. Per aggiungere un'immagine possiamo usare anche un percorso assoluto, che è un indirizzo web completo e inizia con un dominio URL (<code>http://www.</code>).</li><li>Usare le virgolette è una buona abitudine, ma possiamo ometterle, per cui <code>background-image: url(images/sunset.png)</code> funziona ugualmente.</li><li>Non dimenticare il punto e virgola!</li></ul><h2 id="come-evitare-la-ripetizione-del-background"><strong>Come evitare la ripetizione del background</strong></h2><p>Quando applichi un'immagine di sfondo a un elemento, questa viene ripetuta di default.</p><p>Se l'immagine è più piccola dell'elemento di cui è lo sfondo, essa si ripeterà in modo da riempirlo.</p><p>Come possiamo evitare che ciò accada?</p><p>La proprietà <code>background-repeat</code> necessita di 4 valori e consente di cambiare la direzione in cui l'immagine si ripete oppure bloccare la ripetizione dell'immagine completamente.</p><pre><code class="language-css">section {
  background-repeat: repeat;
}
</code></pre><p>Questo è il valore di default se non forniamo alla proprietà <code>background-repeat</code> un valore. In questo caso, l'immagine viene ripetuta <strong>sia orizzontalmente che verticalmente</strong>, ovvero <strong>sia nella direzione x che nella direzione y</strong>, fino a riempire completamente lo spazio.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screenshot-2021-07-20-at-9.10.06-PM.png" class="kg-image" alt="Screenshot-2021-07-20-at-9.10.06-PM" width="600" height="400" loading="lazy"></figure><pre><code class="language-css">section {
  background-repeat: no-repeat;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screenshot-2021-07-20-at-9.11.39-PM.png" class="kg-image" alt="Screenshot-2021-07-20-at-9.11.39-PM" width="600" height="400" loading="lazy"></figure><p>Il valore <code>no-repeat</code> blocca la ripetizione dell'immagine in tutte le direzioni, facendo sì che venga mostrata solo una volta.</p><pre><code class="language-css">section {
  background-repeat: repeat-x;
}
</code></pre><p>Questo valore ripete l'immagine <em>solo </em>orizzontalmente nella pagina. L'immagine viene ripetuta nella pagina nella direzione x. La direzione x in matematica è la direzione da sinistra a destra.</p><pre><code class="language-css">section {
  background-repeat: repeat-y;
}
</code></pre><p>Questo valore ripete l'immagine <em>solo </em>verticalmente nella pagina. L'immagine viene ripetuta nella pagina nella direzione y. La direzione y in matematica è la direzione dall'alto al basso.</p><h2 id="come-impostare-la-posizione-del-background"><strong>Come impostare la posizione del background</strong></h2><p>Dopo aver aggiunto l'immagine di background e averne impedito la ripetizione, possiamo controllare ulteriormente come viene visualizzata nello sfondo dell'elemento migliorandone la posizione.</p><p>A questo scopo, utilizzeremo la proprietà <code>background-position</code>.</p><p>La proprietà necessita di due valori. Il si riferisce alla posizione orizzontale, o direzione x (distanza nel senso della larghezza del tag). Il secondo si riferisce alla posizione verticale, o direzione y (distanza nel senso dell'altezza del tag).</p><p>I valori possono essere unità come il pixel:</p><pre><code class="language-css">section {
  background-position: 20px 30px;
}
</code></pre><p>Questo sposterà l'immagine di 20px nel senso della larghezza e di 30px nel senso dell'altezza dell'elemento contenitore. </p><p>Invece dei pixel, possiamo usare un insieme di parole chiave come <strong><strong>right, left, top, down, </strong></strong>o<strong><strong> center</strong> </strong>per posizionare l'immagine alla destra, sinistra, in alto, in basso o al centro dell'elemento.</p><pre><code class="language-css">section {
  background-position: right center;
}
</code></pre><p>Questo posiziona l'immagine sul lato destro del centro del tag.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screenshot-2021-07-21-at-9.02.55-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.02.55-AM" width="600" height="400" loading="lazy"></figure><p>Se vogliamo centrare l'immagine sia orizzontalmente che verticalmente, possiamo fare come nell'esempio seguente:</p><pre><code class="language-css">section {
  background-position: center center;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screenshot-2021-07-21-at-9.07.41-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.07.41-AM" width="600" height="400" loading="lazy"></figure><p>Per posizionare un'immagine con maggiore dettaglio, vale la pena menzionare l'uso delle percentuali:</p><pre><code class="language-css">section {
  background-position: 20% 40%;
}
</code></pre><p>Questo posiziona l'immagine al 20% nel senso della larghezza dell'elemento e al 40% nel senso dell'altezza dell'elemento.</p><p>Finora abbiamo visto valori usati in combinazione, ma possiamo anche specificare un singolo valore come <code>background-position: 20px;</code> o <code>background-position: center;</code> or <code>background-position: 20%;</code>, che viene applicato a entrambe le direzioni.</p><h2 id="come-ridimensionare-l-immagine-di-background"><strong>Come ridimensionare l'immagine di background</strong></h2><p>Pe controllare le dimensione dell'immagine di background possiamo usare la proprietà <code>background-size</code>.</p><p>Nuovamente, come nelle proprietà menzionate precedentemente, sono necessari due valori. Il primo per la dimensione orizzontale (x) ed il secondo per la dimensione verticale (y).</p><p>Possiamo usare i pixel, in questo modo:</p><pre><code class="language-css">section {
  background-size: 20px 40px;
  /* ridimensiona l'immagine a 20px di larghezza e 40px di altezza */
}
</code></pre><p>Se non conosciamo la larghezza esatta del contenitore in cui stiamo posizionando l'immagine, ci sono una serie di specifici valori che possiamo fornire alla proprietà.</p><ul><li><code>background-size: cover;</code> ridimensiona l'immagine di background in modo da coprire l'intero spazio dello sfondo dell'elemento indipendentemente dall'ampiezza dello stesso. Se l'immagine è troppo grande e ha una rapporto dimensionale più grande dell'elemento in cui è contenuta, essa verrà stirata e poi tagliata ai bordi.</li><li><code>background-size: contain;</code> <em>contiene </em>l'immagine, come il nome suggerisce. Fa sì che l'intera immagine sia mostrata in background senza tagliare nessuna parte. Se l'immagine è molto più piccola dell'elemento, lo spazio rimasto vuoto verrà riempito con la ripetizione dell'immagine, così possiamo usare la regola <code>background-repeat: no-repeat;</code>, menzionata in precendenza.</li></ul><p>Nell'immagine di seguito, la regola <code>background-size:cover;</code> in questo caso taglia parti dell'immagine.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screenshot-2021-07-21-at-9.18.15-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.18.15-AM" width="600" height="400" loading="lazy"></figure><p>Quando cambiamo la regola in &nbsp;<code>background-size:contain;</code> possiamo vedere che l'immagine si rimpicciolisce per adeguarsi alla dimensione del contenitore (in questo caso, section).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screenshot-2021-07-21-at-9.18.49-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.18.49-AM" width="600" height="400" loading="lazy"></figure><h2 id="come-usare-la-propriet-background-attachment"><strong>Come usare la proprietà background-attachment</strong></h2><p>Con la proprietà <code>background-attachment</code> possiamo controllare dove viene ancorata l'immagine di background , ovvero se l'immagine è fissa oppure no rispetto alla finestra del browser.</p><p>Il valore di default è <code>background-attachment: scroll;</code>, dove l'immagine di background resta solidale al suo elemento e segue il naturale flusso delle pagine dato dallo scorrimento verso l'alto e verso il basso.</p><p>Il secondo valore della proprietà che possiamo avere è <code>background-attachment: fixed;</code>. Questo rende l'immagine di background fissa nella stessa posizione, rispetto alla pagina e rispetto al viewport (area visibile) del browser. Questo crea un effetto di parallasse di cui puoi vedere un esempio qui:</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_ZEKyRpp" src="https://codepen.io/deniselemonaki/embed/preview/ZEKyRpp?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=ZEKyRpp" title="Contenuto incorporato" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><h2 id="i-gradienti-di-background"><strong>I gradienti di background</strong></h2><p>Un caso differente rispetto alla proprietà <code>background-image</code> è richiedere al browser di creare un gradiente.</p><p>La <code>background-image</code> in questo caso non ha un URL, ma invece ha un gradiente lineare.</p><p>Il modo più semplice per creare un gradiente è specificare un angolo. Questo controlla la direzione del gradiente e il passaggio da un colore all'altro. Infine somma i due colori che vuoi unire insieme in un gradiente per lo sfondo del tag.</p><p>Un gradiente che va dall'alto al basso e dal nero al bianco è:</p><pre><code class="language-css">section {
  background-image: linear-gradient(black,white);
}
</code></pre><p>Gli angoli più comuni usati per i gradienti sono:</p><ul><li><code>0deg</code> dall'alto al basso</li><li><code>90deg</code> da sinistra a destra</li><li><code>180deg</code> dal basso all'alto</li><li><code>270deg</code> da destra a sinistra</li></ul><p>Gli angoli soprariportati corrispondono a <code>to top</code>, <code>to right</code>, <code>to bottom</code> e <code>to left</code>, rispettivamente.</p><pre><code class="language-css">section {
  background-image: linear-gradient(to left,pink,orange);
}
</code></pre><figure class="kg-card kg-embed-card"><iframe id="cp_embed_poPrPjo" src="https://codepen.io/deniselemonaki/embed/preview/poPrPjo?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=poPrPjo" title="Contenuto incorporato" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><p>Invece del nome dei colori, possiamo utilizzare i colori in notazione esadecimale per essere più dettagliati ed avere una maggiore varietà di opzioni:</p><pre><code class="language-css">section{
  background-image: linear-gradient(to left,#42275a, #734b6d)
      }
</code></pre><figure class="kg-card kg-embed-card"><iframe id="cp_embed_LYyjWwL" src="https://codepen.io/deniselemonaki/embed/preview/LYyjWwL?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=LYyjWwL" title="Contenuto incorporato" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><p>Possiamo anche includere più di due colori in un gradiente, creando differenti effetti e schemi di colore.</p><h2 id="conclusioni"><strong>Conclusioni</strong></h2><p>Questo segna la fine della nostra introduzione alla sintassi di base della proprietà <code>background-image</code>.</p><p>Da qui le possibilità sono infinite e lasciano spazio a un sacco di creatività. Questi effetti aiutano l'utente ad avere una piacevole esperienza mentre visitano il tuo sito.</p><p>Spero che questo ti sia stato utile, grazie per aver letto il mio articolo.</p><p>Divertiti con i tuoi progetti e buona programmazione!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ La proprietà CSS position spiegata con esempi ]]>
                </title>
                <description>
                    <![CDATA[ Per poter padroneggiare il CSS, c'è bisogno prima di comprendere i concetti base, ovvero le proprietà CSS e i loro valori.  In questo articolo ci focalizzeremo sulla proprietà CSS position. Impareremo i vari valori di questa proprietà ed il loro funzionamento. Partiamo! Cos'è la proprietà CSS position?  La ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/la-proprieta-css-position/</link>
                <guid isPermaLink="false">671b5fe5a104b2047224854e</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Laura Albano ]]>
                </dc:creator>
                <pubDate>Mon, 04 Nov 2024 10:16:47 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2024/11/5f9c9a3e740569d1a4ca247b.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/learn-the-basics-the-css-position-property/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The CSS Position Property Explained with Examples</a>
      </p><p>Per poter padroneggiare il CSS, c'è bisogno prima di comprendere i concetti base, ovvero le proprietà CSS e i loro valori. </p><p>In questo articolo ci focalizzeremo sulla proprietà CSS position. Impareremo i vari valori di questa proprietà ed il loro funzionamento. Partiamo!</p><h2 id="cos-la-propriet-css-position"><strong>Cos'è la proprietà CSS position? </strong></h2><p>La proprietà CSS position determina la posizione dell'elemento all'interno del documento. Questa proprietà lavora insieme alle proprietà left, right, top, bottom e z-index, per indicare la posizione finale di un elemento all'interno di una pagina. </p><p>Ci sono cinque valori che possiamo utilizzare con la proprietà position: &nbsp;</p><ol><li>static</li><li>relative</li><li>absolute</li><li>fixed &nbsp;</li><li>sticky </li></ol><p>Analizziamoli uno alla volta. </p><h3 id="static"><strong><strong>Static</strong></strong></h3><p>Questo è il valore predefinito per un elemento. L'elemento è posizionato seguendo il normale flusso del documento. Le proprietà left, right, top, bottom e z-index non possono modificare la posizione di un elemento che ha la proprietà <code>position: static</code>.</p><p>Utilizziamo un esempio per dimostrare che <code>position: static</code> non ha effetto sulla posizione di un elemento. Abbiamo tre div posizionati in un elemento contenitore. Utilizzeremo questo esempio per tutto l'articolo. &nbsp;</p><pre><code class="language-html">&lt;html&gt;
    &lt;body&gt;
        &lt;div class="parent-element"&gt;
            &lt;div class="sibling-element"&gt;
                I'm the other sibling element.
            &lt;/div&gt;

            &lt;div class="main-element"&gt;
                All eyes on me. I am the main element.
            &lt;/div&gt;

            &lt;div class="sibling-element"&gt;
                I'm the other sibling element.
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;html&gt;
</code></pre><p>Aggiungiamo <code>position: static</code> insieme alle proprietà left e top al div con la classe <code>main-element</code>. Impostiamo anche uno stile diverso dagli altri div, in modo da distinguerli dall'elemento che abbiamo preso in considerazione.</p><pre><code class="language-css">.main-element {
    position: static;
    left: 10px;
    bottom: 10px;
    background-color: yellow;
    padding: 10px;
}

.sibling-element {
    padding: 10px;
    background-color: #f2f2f2;
}
</code></pre><p>Questo è il risultato: </p><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/4vsm3o1d/5/embedded/result,css/" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle;"></iframe></figure><p>Hai notato che la posizione è sempre la stessa? Ciò conferma il fatto che le proprietà left e bottom non funzionano con un elemento con <code>position: static</code>.</p><p>Passiamo al prossimo valore.</p><h3 id="relative"><strong><strong>Relative</strong> </strong></h3><p>Gli elementi con <code>position: relative</code> mantengono la loro posizione nel normale flusso del documento. In questo caso però, a differenza degli elementi con il valore static, le proprietà left, right, top, bottom e z-index possono modificare la posizione dell'elemento. Uno spostamento basato sui valori delle proprietà left, right, top e bottom, è applicato all'elemento relativamente a sé stesso. </p><p>Sostituiamo <code>position: static</code> con <code>position: relative</code> nel nostro esempio.</p><pre><code class="language-css">.main-element {
    position: relative;
    left: 10px;
    bottom: 10px;
    background-color: yellow;
    padding: 10px;
}
</code></pre><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/78tbavnu/14/embedded/result,css/" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle;"></iframe></figure><p>Possiamo notare che le proprietà left e bottom in questo caso modificano la posizione dell'elemento. Inoltre osserviamo il fatto che l'elemento rimanga nel normale flusso del documento, e lo spostamento si applica relativamente a sé stesso. È bene tenere a mente questa cosa nel momento in cui parleremo degli altri valori. </p><h3 id="absolute"><strong><strong>Absolute</strong> </strong></h3><p>Gli elementi con <code>position: absolute</code> hanno una posizione che dipende dal loro elemento contenitore. In questo caso, l'elemento viene rimosso dal normale flusso del documento, gli altri elementi si comporteranno come se non esistesse e per esso non viene creato alcuno spazio nella disposizione della pagina web. I valori di left, top, bottom e right determinano la posizione finale dell'elemento. </p><p>È bene notare che un elemento con <code>position: absolute</code> si posiziona relativamente al primo elemento non avente <code>position: static</code> che lo contiene. </p><p>Se l'elemento genitore più prossimo non ha una posizione specificata, &nbsp;il nostro elemento si rivolgerà al genitore successivo, fino a risalire all'elemento <code>&lt;html&gt;</code>, in caso non ci siano genitori che hanno la proprietà position specificata. </p><p>Torniamo al nostro esempio. In questo caso, cambiamo la proprietà position dell'elemento main-element in <code>position: absolute</code>. Impostiamo anche per il contenitore una posizione relativa, in modo che il nostro elemento non si disponga relativamente all'elemento <code>&lt;html&gt;</code>.</p><pre><code class="language-css">.main-element {
    position: absolute;
    left: 10px;
    bottom: 10px;
    background-color: yellow;
    padding: 10px;
}

.parent-element {
    position: relative;
    height: 100px;
    padding: 10px;
    background-color: #81adc8;
}

.sibling-element {
    background: #f2f2f2;
    padding: 10px;
    border: 1px solid #81adc8;
}
</code></pre><p>Ecco il risultato.</p><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/5qyp4m2z/5/embedded/result,css/" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle;"></iframe></figure><p>Puoi notare come non è stato creato alcuno spazio nel documento per l'elemento, ma adesso è posizionato relativamente al genitore. È bene prendere nota di questa cose, prima di passare al prossimo valore. </p><h3 id="fixed"><strong><strong>Fixed</strong></strong></h3><p>Elementi con la proprietà position impostata su fixed, hanno un comportamento simile agli elementi con il valore absolute ma, a differenza di quest'ultimi, la loro posizione è sempre relativa all'elemento <code>&lt;html&gt;</code>.</p><p>Si può notare che gli elementi con una posizione fissa non si muovono, anche se si scorre verso il basso nella pagina. La loro posizione è fissata sullo schermo. </p><pre><code class="language-css">.main-element {
    position: fixed;
    bottom: 10px;
    left: 10px;
    background-color: yellow;
    padding: 10px;
}

html {
    height: 800px;
}
</code></pre><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/L4gsxwft/2/embedded/result,css/" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle;"></iframe></figure><p>In questo caso l'elemento è posizionato relativamente all'elemento <code>&lt;html&gt;</code>. Prova a scorre in basso per osservare che l'elemento è fissato sullo schermo. </p><p>Passiamo all'ultimo valore. </p><h3 id="sticky"><strong><strong>Sticky</strong></strong></h3><p><code>position: sticky</code> è una combinazione di <code>position: relative</code> e <code>position: fixed</code>. Si comporta come un elemento posizionato relativamente fino ad un certo punto nello scorrimento della pagina, ma oltre questo punto si comporta invece come un elemento fisso. Non preoccuparti se non riesci a capire cosa ciò voglia dire, l'esempio ti aiuterà a capirlo meglio. </p><pre><code class="language-css">.main-element {
    position: sticky;
    top: 10px;
    background-color: yellow;
    padding: 10px;
}

.parent-element {
    position: relative;
    height: 800px;
    padding: 50px 10px;
    background-color: #81adc8;
}
</code></pre><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/f3m0qxgn/8/embedded/result,css/" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle;"></iframe></figure><p>Scorri in basso nella finestra per vedere il risultato finale. Puoi vedere che si comporta come un elemento relativo fino ad un certo punto sullo schermo, &nbsp;<code>top: 10px</code> e poi come un elemento fisso. </p><h2 id="conclusioni">Conclusioni </h2><p>Whooho! È stata proprio una bella avventura. Ma spero davvero che questo articolo ti abbia aiutato a capire la proprietà CSS position e il suo funzionamento. </p><p>Sentiti libero di sperimentare con gli esempi, in caso non riuscissi a capire qualunque di questi concetti. Puoi cambiare i valori e osservare la differenza o, ancora meglio, puoi provare a utilizzare la proprietà position in un tuo progetto personale.</p><p>Ricorda che migliorare con il CSS comporta pratica costante, quindi continua a fare pratica e migliorerai. </p><p><em>Vuoi ricevere una notifica per ogni mio nuovo articolo? <a href="https://mailchi.mp/69ea601a3f64/join-sarahs-mailing-list">Clicca qui</a>. </em></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Centrare un'Immagine in Verticale e in Orizzontale con il CSS ]]>
                </title>
                <description>
                    <![CDATA[ Molti sviluppatori si trovano in difficoltà a lavorare con le immagini. Gestire la responsività [/italian/news/come-rendere-le-immagini-responsive-con-il-css-un-tutorial-sulle-immagini-responsive-in-css/]  e l'allineamento è particolarmente difficile, soprattutto centrare un'immagine al centro della pagina. In questo post ti mostrerò alcuni dei modi più comuni per centrare un'immagine sia in verticale che in orizzontale, utilizzando diverse proprietà ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-centrare-unimmagine-in-verticale-e-in-orizzontale-con-il-css/</link>
                <guid isPermaLink="false">652d532392a32b03f51fd0c6</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Stefano Are ]]>
                </dc:creator>
                <pubDate>Tue, 17 Oct 2023 10:26:24 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/10/5f9c9a4c740569d1a4ca24c2.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-center-an-image-in-css/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Center an Image Vertically and Horizontally with CSS</a>
      </p><p>Molti sviluppatori si trovano in difficoltà a lavorare con le immagini. Gestire la <a href="https://www.freecodecamp.org/italian/news/come-rendere-le-immagini-responsive-con-il-css-un-tutorial-sulle-immagini-responsive-in-css/">responsività</a> e l'allineamento è particolarmente difficile, soprattutto centrare un'immagine al centro della pagina.</p><p>In questo post ti mostrerò alcuni dei modi più comuni per centrare un'immagine sia in verticale che in orizzontale, utilizzando diverse proprietà CSS.</p><h3 id="ecco-uno-schema-interattivo-su-come-centrare-un-immagine-in-verticale-e-in-orizzontale-">Ecco uno schema interattivo su come centrare un'immagine in verticale e in orizzontale:</h3><figure class="kg-card kg-embed-card"><iframe src="https://scrimba.com/scrim/cmPm8eSw?embed=freecodecamp,mini-header" width="100%" height="420" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle;"></iframe></figure><p>Ho analizzato le proprietà CSS <a href="https://www.freecodecamp.org/news/how-to-use-the-position-property-in-css-to-align-elements-d8f49c403a26/">Position</a> e <a href="https://www.youtube.com/watch?v=hgoFi0fCv3w&amp;ab_channel=CemEygiMedia">Display</a> nel miei post precedenti. Se non hai familiarità con queste proprietà, ti consiglio di dar loro un'occhiata prima di leggere questo articolo.</p><p>Ecco una versione video:</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.25%;" class="fluid-width-video-wrapper">
            <iframe width="480" height="270" src="https://www.youtube.com/embed/mwVNVxpkly0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 720px; height: 405px;"></iframe>
          </div>
        </div>
      </figure><h2 id="centrare-un-immagine-orizzontalmente"><strong>Centrare un'Immagine Orizzontalmente</strong></h2><p>Iniziamo centrando un'immagine orizzontalmente utilizzando 3 differenti proprietà CSS.</p><h3 id="text-align"><strong><strong>Text-Align</strong></strong></h3><p>Il primo modo per centrare un'immagine in orizzontale è usare la proprietà <code>text-align</code>. Tuttavia, questo metodo funziona solo se l'immagine si trova all'interno di un contenitore a livello di blocco, come ad esempio un <code>&lt;div&gt;</code>:</p><pre><code class="language-html">&lt;style&gt;
  div {
    text-align: center;
  }
&lt;/style&gt;

&lt;div&gt;
  &lt;img src="your-image.jpg"&gt;
&lt;/div&gt;</code></pre><h3 id="margin-auto"><strong><strong>Margin: Auto</strong></strong></h3><p>Un altro modo per centrare un'immagine è utilizzare la proprietà <code>margin: auto</code> (per il margine sinistro e il margine destro).</p><p>Tuttavia, il solo utilizzo di <code>margin: auto</code> non funzionerà per le immagini. Se hai bisogno di utilizzare <code>margin: auto</code>, è necessario utilizzare anche altre due proprietà.</p><p>La proprietà margin-auto non ha alcun effetto sugli elementi in linea. Poiché il tag <code>&lt;img&gt;</code> è un'elemento in linea, abbiamo prima bisogno di convertirlo in un'elemento a livello di blocco:</p><pre><code class="language-css">img {
  margin: auto;
  display: block;
}</code></pre><p>In secondo luogo, è necessario definire una larghezza. In questo modo, i margini destro e sinistro possono occupare il resto dello spazio vuoto e allinearsi automaticamente, il che funziona (a meno che non si dia una larghezza del 100%):</p><pre><code class="language-css">img {
  width: 60%;
  margin: auto;
  display: block;
}</code></pre><h3 id="display-flex"><strong><strong>Display: Flex</strong></strong></h3><p>Il terzo modo per centrare un'immagine in orizzontale è quello di usare <code>display: flex</code>. Così come abbiamo usato la proprietà <code>text-align</code> per un contenitore, usiamo ugualmente <code>display: flex</code> per un contenitore.</p><p>Tuttavia, l'uso del solo <code>display: flex</code> non è abbastanza. Il contenitore deve anche avere in aggiunta una proprietà chiamata <code>justify-content</code>:</p><pre><code class="language-css">div {
  display: flex;
  justify-content: center;
}

img {
  width: 60%;
}</code></pre><p>La proprietà <code>justify-content</code> funziona insieme con <code>display: flex</code>, che possiamo utilizzare per centrare l'immagine in orizzontale.</p><p>Infine, la larghezza dell'immagine deve essere inferiore alla larghezza del contenitore, altrimenti occupa il 100% dello spazio e non è possibile centrarla.</p><p><strong><strong>Important</strong>e<strong>:</strong></strong> la proprietà <code>display: flex</code> non è supportata nelle vecchie versioni dei browser. Per maggiori informazioni <a href="https://caniuse.com/?search=display%20flex">guarda qui</a>.</p><h2 id="centrare-un-immagine-verticalmente"><strong>Centrare un'Immagine Verticalmente</strong></h2><h3 id="display-flex-1"><strong><strong>Display: Flex</strong></strong></h3><p>Per l'allineamento verticale, ancora una volta torna molto utile utilizzare <code>display: flex</code>.</p><p>Consideriamo il caso in cui il nostro contenitore ha un'altezza di 800px, ma l'altezza dell'immagine è solo di 500px:</p><pre><code class="language-css">div {
  display: flex;
  justify-content: center;
  height: 800px;
}

img {
  width: 60%;
  height: 500px;
}</code></pre><p>In questo caso, l'aggiunta di una singola riga di codice al contenitore, <code>align-items: center</code>, risolve il problema:</p><pre><code class="language-css">div {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 800px;
}</code></pre><p>La proprietà <code>align-items</code> può posizionare gli elementi verticalmente se usata assieme con <code>display: flex</code>.</p><h3 id="position-absolute-le-propriet-transform"><strong><strong>Position: Absolute &amp;</strong> le Proprietà <strong>Transform </strong></strong></h3><p>Un altro metodo per l'allineamento verticale è utilizzare le proprietà <code>position</code> e <code>transform</code> assieme. Quest'ultimo metodo è un po' complicato, quindi procediamo per gradi.</p><h3 id="passaggio-1-definire-position-absolute"><strong>Passaggio<strong> 1: Defin</strong>ire<strong> Position Absolute</strong></strong></h3><p>Per prima cosa, cambiamo il comportamento di posizionamento dell'immagine da <code>static</code> a <code>absolute</code>:</p><pre><code class="language-css">div {
  height: 800px;
  position: relative;
  background: red;
}

img {
  width: 80%;
  position: absolute;
}</code></pre><p>Inoltre, dovrebbe essere all'interno di un contenitore posizionato relativamente, quindi aggiungiamo <code>position: relative</code> al suo contenitore div.</p><h3 id="passaggio-2-definire-le-propriet-top-left"><strong>Passaggio <strong>2: Defin</strong>ire le Proprietà<strong> Top &amp; Left</strong></strong></h3><p>In secondo luogo, definiamo le proprietà top e left dell'immagine e le impostiamo al 50%. Questo sposterà il punto di partenza (top-left) dell'immagine al centro del contenitore:</p><pre><code class="language-css">img {
  width: 80%;
  position: absolute;
  top: 50%;
  left: 50%;
}</code></pre><h3 id="passaggio-3-definire-la-propriet-transform"><strong>Passaggio<strong> 3: Defin</strong>ire la Proprietà <strong>Transform </strong></strong></h3><p>Il secondo passaggio ha spostato l'immagine parzialmente al di fuori del suo contenitore. È quindi necessario riportarla all'interno.</p><p>La definizione di una proprietà <code>transform</code> e l'aggiunta di un -50% ai suoi assi X e Y sono sufficienti:</p><pre><code class="language-css">img {
  width: 80%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}</code></pre><p>Esistono altri modi per centrare le immagini in orizzontale e in verticale, ma ho spiegato quelli più comuni. Spero che questo post ti abbia aiutato a capire come allineare le immagini al centro della pagina.</p><p><strong>Se vuoi saperne di più sullo sviluppo web, visita il mio<strong> </strong><a href="https://www.youtube.com/channel/UC1EgYPCvKCXFn8HlpoJwY3Q?view_as=subscriber">Canale Youtube</a>.</strong></p><p>Grazie per la lettura!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ <div> in HTML  - Cos'è l'Elemento <div> e Come Definirne lo Stile in CSS ]]>
                </title>
                <description>
                    <![CDATA[ L'elemento HTML division, chiamato in breve "div", è un elemento speciale che ti permette di raggruppare su una pagina degli elementi simili per contenuto. Puoi usarlo come un generico contenitore per associare contenuti dello stesso tipo. L'elemento <div> è uno dei più usati e non sembra voler scomparire, nonostante l'introduzione ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/cose-lelemento-div-e-come-definirne-lo-stile-in-css/</link>
                <guid isPermaLink="false">640dc5179896040622f6f9f0</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberta Garavaglia ]]>
                </dc:creator>
                <pubDate>Mon, 27 Mar 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/03/divTag.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/html-div-what-is-a-div-tag-and-how-to-style-it-with-css/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Div – What is a Div Tag and How to Style it with CSS</a>
      </p><p>L'elemento HTML division, chiamato in breve "div", è un elemento speciale che ti permette di raggruppare su una pagina degli elementi simili per contenuto. Puoi usarlo come un generico contenitore per associare contenuti dello stesso tipo.</p><p>L'elemento <code>&lt;div&gt;</code> è uno dei più usati e non sembra voler scomparire, nonostante l'introduzione degli elementi semantici (molti di questi elementi possono essere usati come contenitori).</p><p>In questo tutorial, ti mostrerò varie cose che puoi fare con un <code>div</code>, come usarne diversi nello stesso file HTML senza confonderti, e come definirne lo stile. </p><h2 id="quando-usare-l-elemento-div"><strong>Quando usare l'elemento <code>div</code></strong></h2><p>L'elemento <code>div</code> è multiuso – puoi usarlo per fare varie cose in una pagina web. Lo userai per lo più per definire la disposizione e lo stile in CSS, ma è molto flessibile.</p><p>In definitiva, lo userai quasi sempre per dare stile a quel che contiene o manipolarne il contenuto con JavaScript. </p><h3 id="1-div-per-il-layout"><strong>1. <code>div</code> per il layout</strong></h3><p>L'uso primario che farai dell'elemento <code>div</code> sarà raggruppare contenuti simili per dare loro uno stile facilmente. Un buon esempio è usare un <code>div</code> per riunire diverse sezioni di una pagina. Puoi mettere insieme intestazione, barra di navigazione, sezioni e piè di pagina in uno stesso <code>div</code> per poter impostare per tutti lo stesso stile. </p><p>Più avanti in questo tutorial, ti accompagnerò nella costruzione di un layout con diversi <code>div</code> senza fare confusione. </p><p>L'elemento <code>div</code> da solo non ha un effetto diretto sulla presentazione del contenuto se non si definisce uno stile. </p><h3 id="2-div-per-css"><strong>2. <code>div</code> per CSS</strong></h3><p>Con l'elemento <code>div</code> puoi fare diverse forme e disegnare qualsiasi cosa, perché è facile definirne lo stile.</p><ul><li>Come fare un quadrato con l'elemento <code>div</code></li></ul><p>Per fare un quadrato con l'elemento <code>div</code>, per prima cosa bisogna definire nel file HTML un <code>div</code> vuoto e attribuirgli una classe. Nel CSS si seleziona il <code>div</code> attraverso la classe, per poi impostare altezza e larghezza.</p><pre><code class="language-html">&lt;div class="square"&gt;&lt;/div&gt;
</code></pre><pre><code class="language-css"> body {
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 0 auto;
      height: 100vh;
      background-color: #f1f1f1;
    }
.square {
      background-color: #2ecc71;
      width: 200px;
      height: 200px;
    }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/square.png" class="kg-image" alt="square" width="600" height="400" loading="lazy"></figure><ul><li>Come fare un cerchio con l'elemento <code>div</code></li></ul><p>Puoi fare un cerchio definendo un <code>div</code> vuoto, dandogli un'altezza uguale alla larghezza nel file CSS, e poi un <code>border-radius</code> del 50%.</p><pre><code class="language-html">&lt;div class="circle"&gt;&lt;/div&gt;
</code></pre><pre><code class="language-css">  body {
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 0 auto;
      height: 100vh;
      background-color: #f1f1f1;
    }

    .circle {
      background-color: #2ecc71;
      width: 200px;
      height: 200px;
      border-radius: 50%;
    }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/circle.png" class="kg-image" alt="circle" width="600" height="400" loading="lazy"></figure><ul><li>Come fare la bandiera della Nigeria in CSS</li></ul><p>Fare la bandiera della Nigeria con l'elemento <code>div</code> non è tanto difficile. La bandiera è di forma rettangolare e di colore verde, bianco e di nuovo verde.</p><p>Per farla, definiamo tre <code>div</code>, ciascuno con una sua classe, poi impostiamo adeguatamente lo stile nel file CSS.</p><pre><code class="language-html">&lt;div class="naija-flag"&gt;
    &lt;div class="first-green"&gt;&lt;/div&gt;
    &lt;div class="white"&gt;&lt;/div&gt;
    &lt;div class="second-green"&gt;&lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.naija-flag {
  display: flex;
}
.first-green {
  height: 100px;
  width: 60px;
  background-color: green;
}
.white {
  height: 100px;
  width: 60px;
  background-color: white;
}
.second-green {
  height: 100px;
  width: 60px;
  background-color: green;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/naija-flag.png" class="kg-image" alt="naija-flag" width="600" height="400" loading="lazy"></figure><h2 id="come-impostare-lo-stile-di-un-elemento-div"><strong>Come impostare lo stile di un elemento <code>div</code></strong></h2><p>Come detto sopra, è molto semplice impostare lo stile di un elemento <code>div</code>. Questo è uno dei motivi per cui gli sviluppatori lo usano per raggruppare contenuti simili. </p><p>L'elemento <code>div</code> accetta quasi tutte le proprietà CSS senza problemi. Vediamo alcuni esempi. </p><h3 id="1-come-aggiungere-propriet-al-carattere-di-un-div"><strong>1. Come aggiungere proprietà al carattere di un </strong><code>div</code></h3><p>Puoi applicare proprietà CSS come <code>font-size</code>, <code>font-family</code>, <code>font-weight</code> e <code>font-style</code> a contenuti raggruppati insieme in un elemento <code>&lt;div&gt;</code>:</p><pre><code class="language-html">&lt;div class="font-properties"&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptate quo
        ullam modi alias assumenda, itaque libero? Quas quidem sint illo.
      &lt;/p&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit, amet consectetur adipisicing elit. Necessitatibus
        ipsam eaque rem dicta, quos quas ipsum.
      &lt;/p&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">body {
      max-width: 900px;
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 0 auto;
      height: 100vh;
      background-color: #f1f1f1;
    }

.font-properties {
      font-family: cursive, sans-serif;
      font-size: 1.3rem;
      font-weight: bolder;
      font-style: italic;
    }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/font.png" class="kg-image" alt="font" width="600" height="400" loading="lazy"></figure><h3 id="2-come-applicare-un-colore-con-un-div"><strong>2. Come applicare un colore con un <code>div</code></strong></h3><p>Puoi applicare proprietà CSS come <code>color</code> e <code>background-color</code> a contenuti raggruppati in un elemento <code>div</code>:</p><pre><code class="language-html">&lt;div class="color-properties"&gt;
  &lt;p&gt;
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptate quo
    ullam modi alias assumenda, itaque libero? Quas quidem sint illo.
  &lt;/p&gt;
  &lt;p&gt;
    Lorem ipsum dolor sit, amet consectetur adipisicing elit. Necessitatibus
    ipsam eaque rem dicta, quos quas ipsum.
  &lt;/p&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.color-properties {
  color: white;
  background-color: #2ecc71;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/color.png" class="kg-image" alt="color" width="600" height="400" loading="lazy"></figure><h3 id="3-come-definire-lo-stile-del-testo-con-div"><strong>3. Come definire lo stile del testo con <code>div</code></strong></h3><p>Puoi applicare proprietà CSS come <code>text-transform</code> e <code>text-decoration</code> a un elemento <code>div</code> in questo modo:</p><pre><code class="language-html">&lt;div class="text-properties"&gt;
  &lt;p&gt;
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptate quo
    ullam modi alias assumenda, itaque libero? Quas quidem sint illo.
  &lt;/p&gt;
  &lt;p&gt;
    Lorem ipsum dolor sit, amet consectetur adipisicing elit. Necessitatibus
    ipsam eaque rem dicta, quos quas ipsum.
   &lt;/p&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.text-properties {
    text-transform: uppercase;
    text-decoration: underline;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/text.png" class="kg-image" alt="text" width="600" height="400" loading="lazy"></figure><h3 id="4-come-creare-un-effetto-ombra-con-un-div"><strong>4. Come creare un effetto ombra con un <code>div</code></strong></h3><p>Puoi aggiungere un effetto ombra a un elemento <code>div</code> attraverso la proprietà <code>box-shadow</code>:</p><pre><code class="language-html">&lt;div class="box-shadow"&gt;
      &lt;p&gt;
        Before paying to learn programming, checkout freeCodeCamp.org
        &lt;br /&gt;
        The HTML, CSS, and JavaScript curricula would take you from zero to hero
        in web development.
      &lt;/p&gt;
      &lt;p&gt;
        There is a Python curriculum that will get you a considerable knowledge
        in Python &lt;br /&gt;
        And an upcoming Data Science curriculum.
      &lt;/p&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.box-shadow {
      font-family: cursive, sans-serif;
      background-color: #2ecc71;
      color: white;
      padding: 10px;
      border-radius: 4px;
      box-shadow: 2px 2px 20px 23px #7fecad;
    }
</code></pre><p>Cosa succede nel CSS qui sopra?</p><p>Sono riuscito a creare un effetto ombra con la proprietà CSS <code>box-shadow</code>.</p><ul><li>Il primo valore (2px) rappresenta lo sfalsamento rispetto all'asse x (offset-x).</li><li>Il secondo valore (un altro 2px) rappresenta lo sfalsamento rispetto all'asse y (offset-y).</li><li>Il successivo 20px è il grado di sfocatura, cioè quanto vuoi che sia sfocata l'ombra.</li><li>Il valore 23px è il grado di diffusione (quanto vuoi che si propaghi l'ombra).</li><li>L'ultimo valore è il colore dell'ombra - in questo caso #7fecad.</li></ul><p>Il risultato è questo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/box-shadow.png" class="kg-image" alt="box-shadow" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/box-shadow.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/box-shadow.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/box-shadow.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="765" loading="lazy"></figure><h2 id="come-usare-pi-di-un-elemento-div-senza-confonderti"><strong>Come usare più di un elemento <code>div</code> senza confonderti</strong></h2><p>L'elemento <code>div</code> è molto usato per tenere insieme contenuti simili. Troverai i <code>div</code> un po' dappertutto, nelle pagine web vecchie ma anche in quelle più recenti, nonostante i tag semantici siano raccomandati per SEO e accessibilità. </p><p>Dato che l'elemento <code>div</code> è ancora molto usato, ti consiglio di applicargli classe e id per poterlo maneggiare individualmente attraverso questi attributi.</p><p>Ti mostrerò come, costruendo un semplice layout.</p><p>La prima sezione che creeremo è l'intestazione, che contiene il logo e una barra di navigazione.</p><pre><code class="language-html"> &lt;div class="header"&gt;
      &lt;h2 class="logo"&gt;freeCodeCamp&lt;/h2&gt;

      &lt;ul class="nav"&gt;
        &lt;li&gt;&lt;a href=""&gt;Home&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=""&gt;About&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=""&gt;Serices&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=""&gt;Contact&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
&lt;/div&gt;
</code></pre><p>Prima di definire lo stile della barra di navigazione, ho fatto un po' di reset in CSS per allineare tutto correttamente e far sì che gli elementi vengano resi in modo gradevole:</p><pre><code class="language-css">* {
   margin: 0;
   padding: 0;
   box-sizing: border-box;
 }

.hero,
.about,
.services,
.contact {
  max-width: 1000px;
  margin: 0 auto;
  margin-bottom: 20px;
}
</code></pre><p>Nello snippet qui sopra:</p><ul><li>Ho rimosso margine e padding preimpostati.</li><li>Ho impostato una lunghezza massima per le sezioni principali, in modo che non si incrocino, per migliorare l'esperienza dell'utente.</li><li>Ho stabilito un margine inferiore per ogni sezione per lasciare più spazio.</li><li>Ho impostato un margine superiore e inferiore di 0, automatico destro e sinistro per centrare il tutto.</li></ul><p>Per impostare in modo adeguato lo stile della barra di navigazione, prenderò il contenitore <code>div</code> col suo attributo di classe <code>header</code>. Userò la proprietà <code>flex</code>, insieme ad altre, per dargli un aspetto gradevole. Prenderò anche il <code>div</code> che contiene la barra (l'elemento <code>ul</code>) con la sua classe e lo disporrò con Flexbox.</p><pre><code class="language-css">.header {
      padding: 0 70px;
      display: flex;
      align-content: center;
      justify-content: space-between;
      margin-top: 20px;
      margin-bottom: 20px;
    }

.nav {
      display: flex;
      align-content: center;
      justify-content: center;
      gap: 60px;
      list-style-type: none;
    }

.nav li a {
      text-decoration: none;
      color: black;
      font-size: 1.2rem;
    }
</code></pre><p>Per le altre sezioni, ad eccezione del piè di pagina, HTML e stile sono generici:</p><pre><code class="language-html">&lt;div class="hero"&gt;
      &lt;h1&gt;Hero Section&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="about"&gt;
      &lt;h1&gt;About Us&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="services"&gt;
      &lt;h1&gt;Our Services&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="contact"&gt;
      &lt;h1&gt;Contact Us&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="footer"&gt;
      &lt;p&gt;&amp;copy; 2021 All Rights Reserved&lt;/p&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">.hero {
      background-color: #eee;
      height: 200px;
    }

.hero h1 {
      display: flex;
      align-items: center;
      justify-content: center;
      line-height: 6;
    }

.about {
      background-color: #eee;
      height: 200px;
    }

.about h1 {
      display: flex;
      align-items: center;
      justify-content: center;
      line-height: 6;
    }

.services {
      background-color: #eee;
      height: 200px;
    }

.services h1 {
      display: flex;
      align-items: center;
      justify-content: center;
      line-height: 6;
    }

.contact {
      background-color: #eee;
      height: 200px;
    }

.contact h1 {
      display: flex;
      align-items: center;
      justify-content: center;
      line-height: 6;
    }

.footer {
      background-color: #777;
      height: 40px;
    }

.footer p {
      margin: 0 auto;
      line-height: 1.7;
    }
</code></pre><p>Ho impostato individualmente alle sezioni un colore di sfondo grigio e un altezza di 200px. Ho posizionato l'elemento <code>h1</code> al centro con Flexbox e applicato un'interlinea di 1.5.</p><p>Infine, ho aggiunto al piè di pagina un colore di sfondo più scuro, per distinguerlo, e centrato il contenuto con un'interlinea di 1.7.</p><p>Il risultato è questo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/layout.gif" class="kg-image" alt="layout" width="600" height="400" loading="lazy"></figure><h2 id="conclusione"><strong>Conclusione</strong></h2><p>L'elemento HTML <code>div</code> è ampiamente usato dagli sviluppatori praticamente ovunque. </p><p>Tieni ben presente che dovresti usare un HTML semantico al posto dei <code>div</code>, a meno che nessuno (dei tag semantici) si accordi al contenuto che raggruppa. La ragione è che gli elementi semantici sono molto meglio in un'ottica di accessibilità e SEO.</p><p>In breve, il <code>div</code> rimane utile e non ci lascerà molto presto, quindi sentiti libero di usarlo ogni volta che ti è necessario.</p><p>Grazie della lettura e buon divertimento.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Centrare un'Immagine con CSS – Come Centrare un'Immagine in un Div ]]>
                </title>
                <description>
                    <![CDATA[ Quando lavori sul front-end di una pagina web, a volte hai bisogno di centrare un'immagine all'interno di un div (contenitore). Delle volte può risultare complesso e, a seconda di certe condizioni, a un certo punto un particolare metodo potrebbe non funzionare, lasciandoti in cerca di alternative. In questo articolo, imparerai ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/centrare-unimmagine-con-css-come-centrare-unimmagine-in-un-div/</link>
                <guid isPermaLink="false">640ae6c59896040622f6f442</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Mon, 13 Mar 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/03/cover-template.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-center-an-image-in-a-div-css/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Image Centering – How to Center an Image in a Div</a>
      </p><p>Quando lavori sul front-end di una pagina web, a volte hai bisogno di centrare un'immagine all'interno di un <code>div</code> (contenitore).</p><p>Delle volte può risultare complesso e, a seconda di certe condizioni, a un certo punto un particolare metodo potrebbe non funzionare, lasciandoti in cerca di alternative.</p><p>In questo articolo, imparerai come centrare un'immagine in un <code>div</code> con CSS.</p><h2 id="come-centrare-un-div-con-css"><strong>Come centrare un <code>div</code> con CSS</strong></h2><p>Puoi centrare un'immagine in un <code>div</code> in due modi: orizzontalmente e verticalmente. Quando combini questi due metodi, ottieni un'immagine completamente centrata:</p><figure class="kg-card kg-image-card"><img src="https://paper-attachments.dropbox.com/s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660599829888_Untitled.png" class="kg-image" alt="s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660599829888_Untitled" width="600" height="400" loading="lazy"></figure><p>Come impostazione predefinita, il contenuto web parte sempre dall'angolo dello schermo in alto a sinistra e procede da sinistra a destra – eccetto per alcune lingue come l'arabo che vanno da destra a sinistra.</p><p>Iniziamo vedendo come centrare orizzontalmente un'immagine all'interno di un <code>div</code>. Poi vedremo come centrarla verticalmente. Infine, vedremo come fare entrambe le cose insieme.</p><figure class="kg-card kg-image-card"><img src="https://paper-attachments.dropbox.com/s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660702367688_image.png" class="kg-image" alt="s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660702367688_image" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-orizzontalmente-un-immagine-in-un-div-con-text-align"><strong>Come centrare orizzontalmente un'immagine in un div con text-align</strong></h3><p>Supponi di avere un <code>div</code> in cui hai posizionato un'immagine in questo modo:</p><pre><code class="language-html">&lt;div class="container"&gt;
    &lt;img src="./fcc-logo.png" alt="FCC Logo" /&gt;
&lt;/div&gt;
</code></pre><p>E di applicare dei semplici stili CSS in modo che l'immagine sia visibile:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
}
.container img {
    width: 100px;
}
</code></pre><p>Il metodo <code>text-align</code> non funzionerà in tutti i casi, dato che è usato tipicamente per centrare il testo. Ma quando hai un'immagine all'interno di un contenitore al livello di blocco come un <code>div</code>, allora questo metodo funziona:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    text-align: center;
}

.container img {
    width: 100px;
}
</code></pre><p>A questo scopo, devi aggiungere la proprietà <code>text-align</code> assieme al suo valore <code>center</code> al contenitore e non all'immagine stessa.</p><h3 id="come-centrare-orizzontalmente-un-immagine-in-un-div-con-margin-auto"><strong>Come centrare orizzontalmente un'immagine in un div con margin: auto</strong></h3><p>Un altro metodo che puoi usare per centrare orizzontalmente un'immagine all'interno di un <code>div</code> (contenitore) è la proprietà <code>margin</code> con il valore <code>auto</code>.</p><p>L'elemento prenderà una larghezza (<code>width</code>) <strong>specificata</strong>, e lo spazio restante sarà diviso equamente tra i margini destro e sinistro.</p><p>Di solito questo metodo si applica all'immagine stessa e non al contenitore. Sfortunatamente, questa proprietà da sola non funziona. Per prima cosa, occorre specificare la larghezza che l'immagine dovrà assumere. In questo modo, la larghezza rimanente è nota e può essere divisa equamente.</p><p>In secondo luogo, <code>img</code> è un elemento inline e la proprietà <code>margin: auto</code> non influisce sugli elementi inline. Ciò significa che devi prima convertirlo in un elemento al livello di blocco con la proprietà <code>display</code> impostata su <code>block</code>.</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
}

.container img {
    width: 100px;
    margin: auto;
    display: block;
}
</code></pre><h3 id="come-centrare-orizzontalmente-un-immagine-in-un-div-con-le-propriet-position-e-transform"><strong>Come centrare orizzontalmente un'immagine in un div con le proprietà position e transform</strong></h3><p>Un altro metodo che puoi usare per posizionare un'immagine orizzontalmente è la proprietà <code>position</code> insieme alla proprietà <code>transform</code>.</p><p>Questo metodo può essere complicato, ma funziona. Devi prima impostare la proprietà <code>position</code> del contenitore su <code>relative</code> e poi quella dell'immagine su <code>absolute</code>.</p><p>Una volta fatto ciò, puoi muovere l'immagine in qualsiasi posizione desideri usando le proprietà <code>left</code>, <code>top</code>, <code>bottom</code> o <code>right</code> sull'immagine.</p><p>In questo caso, vuoi spostare l'immagine solo per centrarla orizzontalmente. Ciò vuol dire che devi spostare l'immagine con <code>left</code> al 50% o <code>right</code> a -50%:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    position: relative;
}

.container img {
    width: 100px;
    height: 100px;
    position: absolute;
    left: 50%;
}
</code></pre><p>Ma controllando l'immagine, noterai che non è ancora perfettamente posizionata al centro. Questo perché parte dal 50%, che è la posizione centrale.</p><p>In questo caso, devi usare la proprietà <code>transform-translateX</code> per regolarla e centrarla orizzontalmente alla perfezione:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    position: relative;
}

.container img {
    width: 100px;
    height: 100px;
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
}
</code></pre><h3 id="come-centrare-orizzontalmente-un-immagine-in-un-div-con-display-flex"><strong>Come centrare orizzontalmente un'immagine in un div con display: flex</strong></h3><p>Flexbox rende semplice la progettazione di layout strutturali flessibili e responsivi senza usare float o il posizionamento. Possiamo anche usarlo per posizionare un'immagine al centro di un contenitore orizzontalmente tramite la proprietà <code>display</code> impostata sul valore <code>flex</code>.</p><p>Ma solo questo non è sufficiente. Occorre anche definire la posizione in cui mettere l'immagine. Ad esempio <code>center,</code> <code>left</code> o magari <code>right</code>:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    display: flex;
    justify-content: center;
}

.container img {
    width: 100px;
    height: 100px;
}
</code></pre><p><strong><strong>Not</strong>a<strong>:</strong></strong> la proprietà <code>display: flex</code> non è supportata nelle vecchie versioni dei browser. Puoi leggere di più <a href="https://caniuse.com/#search=display%20flex">qui</a>. Noterai anche che l'altezza e la larghezza dell'immagine sono definite per assicurare che l'immagine non rimpicciolisca.</p><p>E adesso impariamo come centrare un'immagine verticalmente in un <code>div</code>. In seguito vedremo come centrare un'immagine in un <code>div</code> orizzontalmente e verticalmente allo stesso tempo, ottenendo una centratura perfetta.</p><figure class="kg-card kg-image-card"><img src="https://paper-attachments.dropbox.com/s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660702330431_image.png" class="kg-image" alt="s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660702330431_image" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-verticalmente-un-immagine-in-un-div-con-display-flex"><strong>Come centrare verticalmente un'immagine in un div con display: flex</strong></h3><p>Allo stesso modo in cui sei stato in grado di centrare orizzontalmente un'immagine con il metodo display: flex, puoi fare lo stesso verticalmente.</p><p>Ma questa volta, non dovrai usare la proprietà <code>justify-content</code>. Invece userai la proprietà <code>align-items</code>:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    display: flex;
    align-items: center;
}

.container img {
    width: 100px;
    height: 100px;
}
</code></pre><p>Affinché il metodo funzioni, il contenitore deve avere un'altezza (<code>height</code>) specificata, che verrà usata per calcolare esattamente dove si trova il centro.</p><h3 id="come-centrare-verticalmente-un-immagine-in-un-div-con-le-propriet-position-e-transform"><strong>Come centrare verticalmente un'immagine in un div con le proprietà position e transform</strong></h3><p>In modo simile a come hai usato le proprietà <code>position</code> e <code>transform</code> precedentemente per centrare l'immagine orizzontalmente, puoi fare lo stesso verticalmente.</p><p>Stavolta, non userai <code>left</code> o <code>right,</code>. Invece userai <code>top</code> o <code>bottom</code> insieme a <code>translateY</code> piuttosto che <code>translateX</code>:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    position: relative;
}

.container img {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}
</code></pre><p>Hai imparato come centrare un'immagine in un <code>div</code> orizzontalmente o verticalmente usando tutti i metodi possibili. Adesso impariamo come centrarla orizzontalmente e verticalmente allo stesso tempo.</p><figure class="kg-card kg-image-card"><img src="https://paper-attachments.dropbox.com/s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660702293626_image.png" class="kg-image" alt="s_E4F69027FF573CB7A65859895F7B6CD8342925344584ACB8BE37F8B299430A72_1660702293626_image" width="600" height="400" loading="lazy"></figure><h3 id="come-centrare-orizzontalmente-e-verticalmente-un-immagine-in-un-div-con-display-flex"><strong>Come centrare orizzontalmente e verticalmente un'immagine in un div con display: flex</strong></h3><p>La proprietà <code>display: flex</code> in combinazione con altre due proprietà consente di centrare l'immagine verticalmente e orizzontalmente.</p><p>Per questo metodo dovrai usare le proprietà <code>justify-content</code> e <code>align-items</code> impostate su <code>center</code>:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    display: flex;
    justify-content: center;
    align-items: center;
}

.container img {
    width: 100px;
    height: 100px;
}
</code></pre><h3 id="come-centrare-orizzontalmente-e-verticalmente-un-immagine-in-un-div-con-le-propriet-position-e-transform"><strong>Come centrare orizzontalmente e verticalmente un'immagine in un div con le proprietà position e transform</strong></h3><p>Anche questo è molto simile, in quanto tutto ciò che devi fare è combinare la centratura verticale e orizzontale:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    position: relative;
}

.container img {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translateX(-50%) translateY(-50%);
}
</code></pre><p>Puoi anche combinare <code>translateX</code> e <code>translateY</code> usando <code>translate(x,y)</code>:</p><pre><code class="language-css">.container {
    width: 200px;
    height: 200px;
    background-color: #0a0a23;
    position: relative;
}

.container img {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
</code></pre><h2 id="conclusione"><strong>Conclusione</strong></h2><p>In questo articolo, hai imparato come centrare un'immagine in un div verticalmente, orizzontalmente oppure verticalmente e orizzontalmente in contemporanea.</p><p>Userai spesso il metodo Flexbox per postare un'immagine al centro, dato che il metodo <code>position</code> può distorcere la pagina web e ha un funzionamento ingannevole.</p><p>Puoi imparare altro sui metodi di posizionamento CSS <a href="https://www.freecodecamp.org/news/css-position-property-explained/">qui</a> e sul metodo flexbox <a href="https://www.freecodecamp.org/news/css-flexbox-tutorial-with-cheatsheet/">qui</a>.</p><p>Buona programmazione!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Fogli di Stile CSS Esterni - Come Collegare CSS a HTML e Importarlo nell'Head ]]>
                </title>
                <description>
                    <![CDATA[ Avere i fogli di stile CSS in un file esterno viene considerata una buona pratica. Ma come si può collegare il CSS al file HTML? Il collegamento a un file CSS esterno è una parte importante del b [https://www.freecodecamp.org/news/basic-html5-template-boilerplate-code-example/] oilerplate [/italian/news/template-base-html5/] di ogni pagina HTML [/italian/news/template-base-html5/]. In questo articolo impareremo ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/fogli-di-stile-css-esterni/</link>
                <guid isPermaLink="false">63b43a45e612d50632ae9aae</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniele Perottoni ]]>
                </dc:creator>
                <pubDate>Wed, 04 Jan 2023 12:38:01 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/01/arc.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/external-css-stylesheets-how-to-link-css-to-html-and-import-into-head/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">External CSS Stylesheets – How to Link CSS to HTML and Import into Head</a>
      </p><p>Avere i fogli di stile CSS in un file esterno viene considerata una buona pratica. Ma come si può collegare il CSS al file HTML?</p><p>Il collegamento a un file CSS esterno è una parte importante del <a href="https://www.freecodecamp.org/italian/news/template-base-html5/"></a><a href="https://www.freecodecamp.org/italian/news/template-base-html5/"></a><a href="https://www.freecodecamp.org/news/basic-html5-template-boilerplate-code-example/">b</a>oilerplate di ogni pagina HTML. In questo articolo impareremo come farlo.</p><h2 id="come-collegare-un-file-css-a-un-file-html"><strong>Come Collegare un File CSS a un File HTML</strong></h2><p>È possibile collegare il tuo file CSS al tuo file HTML aggiungendo l'elemento <code>link</code> dentro l'elemento <code>head</code> del documento HTML, in questo modo:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
  &lt;html&gt;
    &lt;head&gt;
      &lt;link rel="stylesheet" href="style.css"&gt;
    &lt;/head&gt;
    &lt;body&gt;
    
    &lt;/body&gt;
&lt;/html&gt;</code></pre><p>L'elemento <code>link</code> ha diversi utilizzi, ed è importante specificare gli attributi corretti così che tu possa usarlo per importare un foglio di stile CSS esterno. Ora vediamo alcuni attributi importanti.</p><h2 id="l-attributo-rel"><strong>L'attributo<strong><strong> <code>rel</code></strong></strong></strong></h2><p>Il primo dei due attributi indispensabili è <code>rel</code>. Questo attributo viene utilizzato per indicare al browser la relazione con il file importato.</p><p>Si scriverà <code>rel="stylesheet"</code> per comunicare al browser che si sta importando un foglio di stile.</p><h2 id="l-attributo-href"><strong>L'attributo <strong><strong><code>href</code></strong></strong></strong></h2><p>Il secondo attributo indispensabile è <code>href</code>, che specifica il file da importare.</p><p>Una situazione comune è che il file CSS e il file HTML si trovino nella stessa cartella. In questo caso puoi scrivere <code>href="style.css"</code>.</p><p>Se il file CSS e il file HTML sono in cartelle differenti, è necessario scrivere il percorso corretto che deve andare dal file HTML al file CSS.</p><p>Per esempio, una situazione comune è che il file CSS si trovi in una cartella sorella del file HTML, come in questo caso:</p><pre><code>project --- index.html
            css ---------- style.css</code></pre><p>In questo caso è necessario scrivere un percorso come <code>"css/styles.css"</code>.</p><h2 id="l-attributo-type"><strong>L'attributo<strong><strong> <code>type</code></strong></strong></strong></h2><pre><code class="language-html">&lt;link rel="stylesheet" href="style.css" type="text/css"&gt;</code></pre><p>Si utilizza l'attributo <code>type</code> per definire il tipo di contenuto che si sta collegando. Per un foglio di stile è <code>text/css</code>. Ma siccome <code>css</code> è l'unico linguaggio per fogli di stile utilizzato nel web, non solo è opzionale, ma è addirittura una buona pratica non includerlo.</p><h2 id="l-attributo-media"><strong>L'attributo <strong><strong><code>media</code></strong></strong></strong></h2><pre><code class="language-html">&lt;link rel="stylesheet" href="style.css" media="screen and (max-width: 600px)"&gt;</code></pre><p>L'attributo media non è visibile nell'esempio. È un attributo opzionale che si può usare per specificare quando importare un determinato foglio di stile. Il suo valore deve essere un tipo di media / media query.</p><p>Questo può essere utile nel caso si vogliano separare gli stili per dispositivi differenti e dimensioni dello schermo in file diversi. È necessario importare ogni file CSS con il proprio elemento <code>link</code>.</p><p>Puoi consultare questi articoli (o altre fonti) sulle media query per saperne di più su ciò che è possibile scrivere come valore di attributo:</p><ul><li><a href="https://www.freecodecamp.org/news/how-to-use-css-media-queries-to-create-responsive-websites/">How to Use CSS Media Queries to Create Responsive Websites</a></li><li><a href="https://www.freecodecamp.org/news/media-queries-width-ranges/">How to Set Width Ranges for Your CSS Media Queries</a></li><li><a href="https://www.freecodecamp.org/italian/news/tutorial-sulle-media-query-css/">T</a><a href="https://www.freecodecamp.org/italian/news/tutorial-sulle-media-query-css/">utorial sulle Media Query CSS – risoluzioni standard, breakpoint CSS e dimensioni per smartphone</a></li></ul><h1 id="conclusione"><strong><strong><strong>Conclusion</strong></strong>e</strong></h1><p>In questo articolo abbiamo imparato come aggiungere un foglio di stile esterno a una pagina web utilizzando l'elemento <code>link</code> e gli attributi <code>href</code> e <code>rel</code>.</p><p>Hai anche appreso che è possibile importare più fogli di stile e utilizzare l'attributo <code>media</code> per determinare quando ciascuno di essi deve essere applicato.</p><p>Divertiti a creare pagine web!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Il Manuale CSS: una Comoda Guida al CSS per Sviluppatori ]]>
                </title>
                <description>
                    <![CDATA[ Ho scritto questo manuale per aiutarti a imparare velocemente il CSS e acquisire familiarità con concetti avanzati. Il CSS è spesso liquidato dagli sviluppatori come una cosa facile da imparare, o considerato come qualcosa da usare soltanto quando si ha bisogno di impostare rapidamente lo stile di una pagina o ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/il-manuale-css-una-comoda-guida-al-css-per-sviluppatori/</link>
                <guid isPermaLink="false">633d5cda271b000641be47c7</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Tue, 08 Nov 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/10/1_aeXtrs9UI4WniMd1miDIDw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/the-css-handbook-a-handy-guide-to-css-for-developers-b56695917d11/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The CSS Handbook: A Handy Guide to CSS for Developers</a>
      </p><p>Ho scritto questo manuale per aiutarti a imparare velocemente il CSS e acquisire familiarità con concetti avanzati.</p><p>Il CSS è spesso liquidato dagli sviluppatori come una cosa facile da imparare, o considerato come qualcosa da usare soltanto quando si ha bisogno di impostare rapidamente lo stile di una pagina o di una app. Per questa ragione, viene spesso imparato sul momento, oppure si tende a imparare concetti isolati quando occorre utilizzarli. Ciò può essere un'enorme fonte di frustrazione quando scopriamo che uno strumento non funziona nel modo desiderato.</p><p>Questo manuale ti aiuterà a imparare rapidamente il CSS e ad avere una panoramica delle principali funzionalità moderne che puoi usare per impostare lo stile di pagine web e app.</p><p>Spero di aiutarti a ottenere dimestichezza con il CSS e a diventare subito operativo utilizzando questo meraviglioso strumento che ti permette di creare splendidi design sul web.</p><p><a href="https://thevalleyofcode.com/download/css/"><strong>Clicca qui per scaricare questo manuale in versione PDF / ePub / Mobi (versione originale inglese)</strong></a></p><p>CSS è l'acronimo di Cascading Style Sheets, ed è una delle principali unità costituenti del web. La sua storia risale agli anni '90 e, insieme all'HTML, è cambiato molto sin dalle sue umili origini.</p><p>Dato che creo siti web da prima che il CSS esistesse, ho assistito alla sua evoluzione.</p><p>Il CSS è uno strumento straordinario e negli ultimi anni è cresciuto molto, introducendo molte funzionalità incredibili come CSS Grid, Flexbox e le proprietà &nbsp;CSS personalizzate.</p><p>Questo manuale è dedicato a un pubblico vasto.</p><p>Prima, ai principianti. Spiegherò il CSS da zero in un modo succinto ma completo, in modo da poter usare questo manuale per imparare il CSS dalle basi.</p><p>Poi, ai professionisti. Il CSS è spesso considerato come una cosa secondaria da imparare, specialmente dagli sviluppatori JavaScript. Sanno che il CSS non è un vero linguaggio di programmazione, sono programmatori e quindi non dovrebbero preoccuparsi di imparare il CSS nel modo giusto. Ho scritto questo manuale anche per voi.</p><p>Infine, a chi conosce il CSS da pochi anni ma non ha avuto l'opportunità di imparare cose nuove. Parleremo a lungo delle nuove funzionalità del CSS, quelle con cui si costruirà il web nella prossima decade.</p><p>Il CSS è migliorato molto negli ultimi anni e si sta evolvendo velocemente.</p><p>Anche se non scrivi CSS per lavoro, conoscere come funziona ti può risparmiare dei mal di testa quando hai bisogno di capirlo di tanto in tanto, ad esempio ritoccando una pagina web.</p><p>Grazie per leggere questo manuale. Il mio obiettivo è di darti una panoramica veloce ma completa del CSS.</p><p>Flavio</p><p>Puoi contattarmi via mail a <a href="mailto:flavio@flaviocopes.com" rel="noopener">flavio@flaviocopes.com</a>, o su Twitter <a href="https://twitter.com/flaviocopes" rel="noopener">@flaviocopes</a>.</p><p>Il mio sito web è <a href="https://flaviocopes.com/" rel="noopener">flaviocopes.com</a>.</p><h2 id="sommario"><strong>Sommario</strong></h2><ul><li><a href="#introduzione-al-css">INTRODUZIONE AL CSS</a></li><li><a href="#breve-storia-del-css">BREVE STORIA DEL CSS</a></li><li><a href="#aggiungere-il-css-a-una-pagina-html">AGGIUNGERE IL CSS A UNA PAGINA HTML</a></li><li><a href="#selettori">SELETTORI</a></li><li><a href="#cascade">CASCADE</a></li><li><a href="#specificit-">SPECIFICITÀ</a></li><li><a href="#ereditariet-">EREDITARIETÀ</a></li><li><a href="#import">IMPORT</a></li><li><a href="#selettori-di-attributo">SELETTORI DI ATTRIBUTO</a></li><li><a href="#pseudo-classi">PSEUDO-CLASSI</a></li><li><a href="#pseudo-elementi">PSEUDO-ELEMENTI</a></li><li><a href="#colori">COLORI</a></li><li><a href="#unit-">UNITÀ</a></li><li><a href="#url">URL</a></li><li><a href="#calc">CALC</a></li><li><a href="#sfondi">SFONDI</a></li><li><a href="#commenti">COMMENTI</a></li><li><a href="#propriet-personalizzate">PROPRIETÀ PERSONALIZZATE</a></li><li><a href="#font">FONT</a></li><li><a href="#tipografia">TIPOGRAFIA</a></li><li><a href="#modello-a-scatola">MODELLO A SCATOLA</a></li><li><a href="#bordi">BORDI</a></li><li><a href="#padding">PADDING</a></li><li><a href="#margini">MARGINI</a></li><li><a href="#box-sizing">BOX SIZING</a></li><li><a href="#display">DISPLAY</a></li><li><a href="#posizionamento">POSIZIONAMENTO</a></li><li><a href="#float-e-clear">FLOAT E CLEAR</a></li><li><a href="#z-index">Z-INDEX</a></li><li><a href="#css-grid">CSS GRID</a></li><li><a href="#flexbox">FLEXBOX</a></li><li><a href="#tabelle">TABELLE</a></li><li><a href="#centratura">CENTRATURA</a></li><li><a href="#liste">LISTE</a></li><li><a href="#media-query-e-design-responsivo">MEDIA QUERY E DESIGN RESPONSIVO</a></li><li><a href="#feature-query">FEATURE QUERY</a></li><li><a href="#filtri">FILTRI</a></li><li><a href="#trasformazioni">TRASFORMAZIONI</a></li><li><a href="#transizioni">TRANSIZIONI</a></li><li><a href="#animazioni">ANIMAZIONI</a></li><li><a href="#normalizzare-il-css">NORMALIZZARE IL CSS</a></li><li><a href="#gestione-degli-errori">GESTIONE DEGLI ERRORI</a></li><li>PREFISSI <a href="#prefissi-vendor">VENDOR</a></li><li><a href="#css-per-la-stampa">CSS PER LA STAMPA</a></li><li><a href="#conclusione">CONCLUSIONE</a></li></ul><h3 id="introduzione-al-css"><strong>INTRODUZIONE AL CSS</strong></h3><p>Il <strong>CSS </strong>(acronimo di <strong>Cascading Style Sheets</strong>) è il linguaggio che utilizziamo per definire lo stile di un file HTML e comunicare al browser come dovrebbe presentare gli elementi sulla pagina.</p><blockquote><em>In questo manuale parlerò esclusivamente dello stile dei documenti HTML, anche se il CSS può essere usato anche per altro<em>.</em></em></blockquote><p>Un file CSS contiene svariate regole CSS.</p><p>Ogni regola è composta da due parti:</p><ul><li>il<strong> selettore</strong></li><li>il <strong>blocco di dichiarazione</strong></li></ul><p>Il selettore è una stringa che identifica uno o più elementi della pagina, secondo una sintassi speciale di cui parleremo accuratamente.</p><p>Il blocco di dichiarazione contiene una o più <strong>dichiarazioni</strong>, ognuna composta da coppie di <strong>proprietà</strong> e <strong>valori</strong>.</p><p>Questo è tutto ciò che abbiamo nel CSS.</p><p>Organizzare attentamente le proprietà, associar loro valori e applicarli a specifici elementi sulla pagina usando un selettore, corrisponde all'intero programma di questo manuale.</p><h4 id="che-aspetto-ha-il-css"><strong>Che aspetto ha il CSS</strong></h4><p>Un <strong>insieme di regole</strong> CSS ha una parte chiamata <strong>selettore </strong>e un'altra parte chiamata <strong>dichiarazione</strong>. La dichiarazione contiene varie regole, ognuna composta da una <strong>proprietà </strong>e da un <strong>valore</strong>.</p><p>In questo esempio, <code>p</code> è il selettore e applica una regola che imposta il valore <code>20px</code> alla proprietà <code>font-size</code>:</p><pre><code class="language-css">p {
  font-size: 20px;
}</code></pre><p>Più regole possono susseguirsi una dopo l'altra:</p><pre><code class="language-css">p {
  font-size: 20px;
}

a {
  color: blue;
}</code></pre><p>Un selettore può seleziona uno o più elementi:</p><pre><code class="language-css">p, a {
  font-size: 20px;
}</code></pre><p>E può selezionare tag HTML, come qui sopra, o elementi HTML che contengono un certo attributo <code>class</code> con <code>.nome-classe</code>, o elementi HTML che hanno uno specifico attributo <code>id</code> con <code>#nome-id</code>.</p><p>Selettori più avanzati consentono di scegliere elementi i cui attributi corrispondono a un valore specifico, o anche elementi che corrispondono a pseudo-classi (ne riparleremo in seguito).</p><h4 id="punti-e-virgola"><strong>Punti e virgola</strong></h4><p>Ogni regola CSS termina con un punto e virgola. I punti e virgola <strong>non</strong> sono opzionali, eccetto per l'ultima regola. Ma suggerisco di usali sempre per uniformità e per evitare errori se aggiungi un'altra proprietà e dimentichi aggiungere il punto e virgola nella riga precedente.</p><h4 id="formattazione-e-indentazione"><strong>Formattazione e indentazione</strong></h4><p>Non esiste una regole fissa per la formattazione. Questo è CSS valido:</p><pre><code class="language-css">p
      {
  font-size:           20px   ;
                      }
                      
a{color:blue;}</code></pre><p>Ma basta vederlo per provare dolore. Adotta una convenzione, come quella che hai visto negli esempi precedenti: scrivi i selettori e le parentesi sulla sinistra, indenta di due spazi ogni regola, metti la parentesi d'apertura sulla stessa riga del selettore, separati da uno spazio.</p><p>Un uso corretto e uniforme della spaziatura e dell'indentazione è un aiuto visuale per comprendere il tuo codice.</p><h3 id="breve-storia-del-css"><strong>BREVE STORIA DEL CSS</strong></h3><p>Prima di proseguire, voglio darti un piccolo riepilogo della storia del CSS.</p><p>Il CSS è nato dalla necessità di definire lo stile delle pagine web. Prima che il CSS fosse adottato, le persone volevano un modo per determinare lo stile delle pagine web, che a quei tempi avevano tutte un aspetto molto simile e "accademico". Non si poteva fare molto in termini di personalizzazione.</p><p>L'HTML 3.2 ha introdotto l'opzione di definire i colori <em>inline</em>,<em> </em>come attributi degli elementi HTML, e i tag di presentazione come <code>center</code> e <code>font</code>, ma il tutto è diventato velocemente una situazione ben lontana da quella ideale.</p><p>Il CSS ci fa spostare tutto ciò che è legato alla presentazione dall'HTML al CSS, in modo che l'HTML possa ritornare al formato che definisce la struttura del documento, piuttosto che definire l'aspetto che dovrebbe avere nel browser.</p><p>Il CSS è in costante evoluzione e il CSS che hai utilizzato 5 anni fa potrebbe essere obsoleto, con le nuove tecniche CSS idiomatiche e i cambiamenti dei browser.</p><p>È difficile immaginare quanto fosse diverso il web ai tempi in cui è nato il CSS.</p><p>In quel momento, c'erano svariati browser in competizione, i principali erano Internet Explorer o Netscape Navigator.</p><p>Lo stile delle pagine veniva definito usando l'HTML, con speciali tag di presentazione come <code>bold</code> e attributi speciali, la maggior parte dei quali ora è obsoleta.</p><p>Ciò voleva dire avere opportunità di personalizzazione limitate.</p><p>Il grosso delle decisioni riguardanti lo stile veniva lasciato al browser.</p><p>Inoltre, si costruiva un sito specificamente per un browser, perché ognuno usava dei tag non standard per avere più potere e possibilità.</p><p>Presto le persone si sono rese conto della necessità di un modo per definire lo stile delle pagine, un modo che funzionasse in tutti i browser.</p><p>Dopo l'idea iniziale proposta nel 1994, il primo rilascio del CSS risale al 1996, quando le linee guida per il CSS di livello 1 ("CSS 1") furono pubblicate.</p><p>Il CSS di livello 2 (“CSS 2”) fu pubblicato nel 1998.</p><p>Da allora, iniziò il lavoro sul CSS di livello 3. Il gruppo di lavoro del CSS decise di dividere ogni funzionalità e lavorarvi separatamente, in moduli.</p><p>I browser non erano molto rapidi a implementare il CSS. Abbiamo dovuto attendere fino al 2002 per avere il primo browser in grado di implementare tutte le caratteristiche del CSS, ovvero IE per Mac.</p><p>Internet Explorer implementava il modello a scatola (box model) in modo errato fin dall'inizio, portando ad anni dolorosi verso la ricerca di uno stile applicato in modo uniforme sui browser. Avevamo diversi stratagemmi e trucchetti per fare i modo che i browser presentassero le cose nel modo desiderato.</p><p>Oggi va molto molto meglio. Possiamo usare semplicemente il CSS standard senza pensare a cose strane, per la maggior parte del tempo, e il CSS non è mai stato così potente.</p><p>Ora non abbiamo più numeri di rilascio ufficiali per il CSS, ma il gruppo di lavoro del CSS rilascia uno "snapshot" (ovvero un'istantanea) dei moduli attualmente considerati stabili e pronti per essere inclusi nei browser. Questo è l'ultimo snapshot, del 2018: <a href="https://www.w3.org/TR/css-2018/" rel="noopener">https://www.w3.org/TR/css-2018/</a></p><blockquote><em>N.d.T.<br>L'ultimo snapshot rilasciato al momento della traduzione è: <a href="https://www.w3.org/TR/css-2021/">https://www.w3.org/TR/css-2021/</a></em></blockquote><p>Il CSS di livello 2 è ancora la base per il CSS che scriviamo oggi, e abbiamo molte altre funzionalità costruite su di esso.</p><h3 id="aggiungere-il-css-a-una-pagina-html"><strong>AGGIUNGERE IL CSS A UNA PAGINA HTML</strong></h3><p>Il CSS viene incluso in una pagina HTML in diversi modi.</p><h4 id="1-usare-il-tag-link"><strong>1: usare il tag <code>link</code></strong></h4><p>Il tag <code>link</code> è il modo per includere un file CSS. È il modo preferibile per usare il CSS, così come ne è stato progettato l'utilizzo: un file CSS viene incluso in tutte le pagine di un sito e cambiare una riga di questo file influisce sulla presentazione di tutte le pagine del sito.</p><p>Per usare questo metodo, devi aggiungere un tag <code>link</code> con un attributo <code>href</code> che punta al file CSS che vuoi includere. Va aggiunto all'interno del tag <code>head</code> del sito (non all'interno del tag <code>body</code>):</p><pre><code class="language-html">&lt;link rel="stylesheet" type="text/css" href="myfile.css"&gt;</code></pre><p>Sono richiesti anche gli attributi <code>rel</code> e <code>type</code>, in quanto dicono al browser che tipo di file stai linkando.</p><h4 id="2-usare-il-tag-style"><strong>2: usare il tag <code>style</code></strong></h4><p>Invece di usare il tag <code>link</code> per selezionare un foglio di stile separato contenente il CSS, possiamo aggiungere il CSS direttamente in un tag <code>style</code>. La sintassi è:</p><pre><code class="language-html">&lt;style&gt;
...il nostro CSS...
&lt;/style&gt;</code></pre><p>Usare questo metodo evita di creare un file CSS separato. Trovo che questo sia un buon modo per sperimentare prima di "formalizzare" il CSS in un &nbsp;file separato o per aggiungere una riga speciale di CSS a un file.</p><h4 id="3-stili-inline"><strong>3: stili inline</strong></h4><p>Gli stili <em>inline </em>sono il terzo modo per aggiungere del CSS a una pagina. Possiamo aggiungere un attributo <code>style</code> a ogni tag HTML e aggiungere il CSS all'interno.</p><pre><code>&lt;div style=""&gt;...&lt;/div&gt;</code></pre><p>Esempio:</p><pre><code class="language-html">&lt;div style="background-color: yellow"&gt;...&lt;/div&gt;</code></pre><h3 id="selettori"><strong>SELETTORI</strong></h3><p>Un selettore ci consente di associare una o più dichiarazioni a uno o più elementi sulla pagina.</p><h4 id="selettori-base"><strong>Selettori base</strong></h4><p>Supponiamo di avere un elemento <code>p</code> sulla pagina e che vogliamo mostrare le parole al suo interno usando il colore giallo.</p><p>Possiamo selezionare questo elemento usando un selettore <code>p</code>, che seleziona tutti gli elementi che hanno il tag <code>p</code> nella pagina. Una semplice regola CSS per ottenere ciò che vogliamo è:</p><pre><code class="language-css">p {
  color: yellow;
}</code></pre><p>Ogni elemento HTML ha un selettore corrispondente, per esempio: <code>div</code>, <code>span</code>, <code>img</code>.</p><p>Se un selettore corrisponde a più elementi, tutti questi elementi nella pagina saranno interessati dal cambiamento.</p><p>Gli elementi HTML hanno 2 attributi che sono usati molto frequentemente nel CSS per associare uno stile a uno specifico elemento sulla pagina: <code>class</code> e <code>id</code>.</p><p>C'è una grande differenza tra questi due: all'interno di un documento HTML puoi ripetere lo stesso valore di attributo <code>class</code> su più elementi, ma puoi usare un <code>id</code> soltanto una volta. A corollario, usando le classi puoi selezionare un elemento con 2 o più attributi <code>class</code> specifici, cosa che non è possibile con gli <code>id</code>.</p><p>Le classi sono identificate dal simbolo <code>.</code>, mentre gli id dal simbolo <code>#</code>.</p><p>Esempio usando una classe:</p><pre><code class="language-css">&lt;p class="dog-name"&gt;
  Roger
&lt;/p&gt;

.dog-name {
  color: yellow;
}</code></pre><p>Esempio usando un id:</p><pre><code class="language-css">&lt;p id="dog-name"&gt;
  Roger
&lt;/p&gt;

#dog-name {
  color: yellow;
}</code></pre><h4 id="combinare-i-selettori">Combinare i selettori</h4><p>Finora, abbiamo visto come selezionare un elemento, una classe o un id. Adesso, introduciamo dei selettori più potenti.</p><h4 id="selezionare-un-elemento-con-una-classe-o-un-id"><strong>Selezionare un elemento con una classe o un id</strong></h4><p>Puoi selezionare uno specifico elemento che possiede un attributo class o id.</p><p>Esempio usando una classe:</p><pre><code class="language-css">&lt;p class="dog-name"&gt;
  Roger
&lt;/p&gt;

p.dog-name {
  color: yellow;
}</code></pre><p>Esempio usando un id:</p><pre><code class="language-css">&lt;p id="dog-name"&gt;
  Roger
&lt;/p&gt;

p#dog-name {
  color: yellow;
}</code></pre><p>Perché dovresti farlo se la classe o l'id forniscono già un modo per selezionare l'elemento? Per avere più specificità. Vedremo più avanti cosa vuol dire.</p><h4 id="selezionare-classi-multiple"><strong>Selezionare classi multiple</strong></h4><p>Puoi selezionare un elemento con una classe specifica usando <code>.nome-classe</code>, come abbiamo visto precedentemente. Puoi selezionare un elemento con 2 (o più) classi combinando i nomi delle classi separati da un punto, senza spazi.</p><p>Esempio:</p><pre><code class="language-css">&lt;p class="dog-name roger"&gt;
  Roger
&lt;/p&gt;

.dog-name.roger {
  color: yellow;
}</code></pre><h4 id="combinare-classi-e-id"><strong>Combinare classi e id</strong></h4><p>Nello stesso modo puoi combinare una classe e un id.</p><p>Esempio:</p><pre><code class="language-css">&lt;p class="dog-name" id="roger"&gt;
  Roger
&lt;/p&gt;

.dog-name#roger {
  color: yellow;
}</code></pre><h4 id="raggruppare-i-selettori"><strong>Raggruppare i selettori</strong></h4><p>Puoi combinare dei selettori per applicare le stesse dichiarazioni a selettori multipli. Per farlo, devi separarli con una virgola.</p><p>Esempio:</p><pre><code class="language-css">&lt;p&gt;
  My dog name is:
&lt;/p&gt;
&lt;span class="dog-name"&gt;
  Roger
&lt;/span&gt;

p, .dog-name {
  color: yellow;
}</code></pre><p>Per rendere le cose più chiare, in queste dichiarazioni puoi aggiungere degli spazi:</p><pre><code class="language-css">p,
.dog-name {
  color: yellow;
}</code></pre><h4 id="seguire-l-albero-del-documento-con-i-selettori"><strong>Seguire l'albero del documento con i selettori</strong></h4><p>Abbiamo visto come selezionare un elemento nella pagina usando il nome di un tag, di una classe o di un id.</p><p>Puoi creare un selettore più specifico combinando più elementi per seguire la struttura ad albero del documento. Ad esempio, se hai un tag <code>span</code> annidato all'interno di un tag <code>p</code>, puoi selezionarlo senza applicare lo stile a un tag <code>span</code> non incluso in un tag <code>p</code>:</p><pre><code class="language-css">&lt;span&gt;
  Hello!
&lt;/span&gt;
&lt;p&gt;
  My dog name is:
  &lt;span class="dog-name"&gt;
    Roger
  &lt;/span&gt;
&lt;/p&gt;

p span {
  color: yellow;
}</code></pre><p>Osserva come abbiamo usato una spazio tra <code>p</code> e <code>span</code>.</p><p>Ciò funziona anche se l'elemento sulla destra si trova in profondità di vari livelli.</p><p>Per rendere restringere la dipendenza al primo livello, puoi usare il simbolo <code>&gt;</code> tra i due elementi:</p><pre><code class="language-css">p &gt; span {
  color: yellow;
}</code></pre><p>In questo caso, se uno <code>span</code> non è il primo figlio di un elemento <code>p</code>, non gli verrà applicato il colore giallo .</p><p>Ai figli diretti verrà applicato lo stile:</p><pre><code class="language-html">&lt;p&gt;
  &lt;span&gt;
    Questo è giallo
  &lt;/span&gt;
  &lt;strong&gt;
    &lt;span&gt;
      Questo non è giallo
    &lt;/span&gt;
  &lt;/strong&gt;
&lt;/p&gt;</code></pre><p>I selettori di fratelli adiacenti ci consentono di definire lo stile di un elemento solo se preceduto da un elemento specifico. Possiamo farlo usando l'operatore <code>+</code>.</p><p>Esempio:</p><pre><code class="language-css">p + span {
  color: yellow;
}</code></pre><p>In questo modo, il colore giallo sarà assegnato a tutti gli elementi <code>span</code> preceduti da un elemento <code>p</code>:</p><pre><code class="language-html">&lt;p&gt;Questo è un paragrafo&lt;/p&gt;
&lt;span&gt;Questo è uno span giallo&lt;/span&gt;</code></pre><p>Esistono tanti altri selettori da poter usare:</p><ul><li>selettori di attributi</li><li>selettori di pseudo-classi</li><li>selettori di pseudo-elementi</li></ul><p>Parleremo di loro nelle prossime sezioni.</p><h3 id="cascade"><strong>CASCADE</strong></h3><p>Cascade (letteralmente "cascata"), è un concetto fondamentale del CSS. Dopo tutto, è il suo nome, la prima C di CSS – Cascading Style Sheets – deve essere una cosa importante.</p><p>Cosa vuol dire?</p><p>Cascade è il processo, o algoritmo, che determina le proprietà applicate a ogni elemento sulla pagina, provando a convergere da una lista di regole CSS definite in varie posizioni.</p><p>Fa tutto ciò prendendo in considerazione:</p><ul><li>specificità</li><li>importanza</li><li>ereditarietà</li><li>ordine nel file</li></ul><p>Si occupa anche di risolvere i conflitti.</p><p>Due o più regole CSS in competizione per la stessa proprietà applicata allo stesso elemento devono essere elaborate secondo le specifiche CSS, per determinare quale deve essere applicata.</p><p>Anche se hai solo un file CSS caricato dalla tua pagina, c'è altro CSS che fa parte del processo, come il CSS del browser (user agent). I browser possiedono un insieme di regole predefinite, tutte diverse tra i browser.</p><p>Poi entra in gioco il tuo CSS.</p><p>E il browser applica il foglio di stile dell'utente, che potrebbe essere anche applicato da estensioni del browser.</p><p>Tutte queste regole concorrono alla presentazione della pagina.</p><p>Adesso ci occuperemo dei concetti di specificità e ereditarietà.</p><h3 id="specificit-"><strong>SPECIFICITÀ</strong></h3><p>Cosa accade se un elemento viene selezionato da più regole, con diversi selettori che influiscono sulla stessa proprietà?</p><p>Ad esempio, prendiamo in considerazione questo elemento:</p><pre><code class="language-html">&lt;p class="dog-name"&gt;
  Roger
&lt;/p&gt;</code></pre><p>Possiamo avere</p><pre><code class="language-css">.dog-name {
  color: yellow;
}</code></pre><p>e un'altra regola che seleziona <code>p</code>, che imposta il colore su un altro valore</p><pre><code class="language-css">p {
  color: red;
}</code></pre><p>e un'altra regola che seleziona <code>p.dog-name</code>. Quale regola avrà la precedenza sulle altre e perché?</p><p><strong>Vince la regola più specifica</strong>. Se due o più regole hanno la <strong>stessa specificità, quella che appare per ultima vince</strong>.</p><p>A volte, ciò che è in pratica più specifico crea un po' di confusione nei principianti. Direi che confonde anche gli esperti che non hanno a che fare frequentemente con queste regole, o semplicemente le sottovalutano.</p><h4 id="come-calcolare-la-specificit-"><strong>Come calcolare la specificità</strong></h4><p>La specificità è calcolata usando una convenzione.</p><p>Abbiamo 4 slot, ognuno parte da 0: <code>0 0 0 0</code>. Lo slot a sinistra è il più importante e quello a destra il meno importante.</p><p>Come per i numeri nel sistema decimale: <code>1 0 0 0</code> è maggiore di <code>0 1 0 0</code>.</p><h4 id="slot-1"><strong>Slot 1</strong></h4><p>Il primo slot, quello più a destra, è il meno importante.</p><p>Aumentiamo questo valore quando abbiamo un <strong>selettore di elemento</strong>. Un elemento è il nome di un tag. Se c'è più di un selettore di elemento nella regola, di conseguenza si aumenta il valore dello slot.</p><p>Esempi:</p><pre><code class="language-css">p {}                    /* 0 0 0 1 */
span {}                 /* 0 0 0 1 */
p span {}               /* 0 0 0 2 */
p &gt; span {}             /* 0 0 0 2 */
div p &gt; span {}         /* 0 0 0 3 */</code></pre><h4 id="slot-2"><strong>Slot 2</strong></h4><p>Il secondo slot è incrementato da 3 cose:</p><ul><li>selettori di classe</li><li>selettori di pseudo-classe</li><li>selettori di attributi</li></ul><p>Ogni volta che una regola contiene uno di questi selettori, incrementiamo il valore della seconda colonna da destra.</p><p>Esempi:</p><pre><code class="language-css">.name {}                 /* 0 0 1 0 */
.users .name {}          /* 0 0 2 0 */
[href$='.pdf'] {}        /* 0 0 1 0 */
:hover {}                /* 0 0 1 0 */</code></pre><p>Naturalmente, i selettori dello slot 2 possono essere combinati con quelli dello slot 1:</p><pre><code class="language-css">div .name {}             /* 0 0 1 1 */
a[href$='.pdf'] {}       /* 0 0 1 1 */
.pictures img:hover {}   /* 0 0 2 1 */</code></pre><p>Un trucco utile con le classi è ripetere la stessa classe per aumentare la specificità. Ad esempio:</p><pre><code class="language-css">.name {}              /* 0 0 1 0 */
.name.name {}         /* 0 0 2 0 */
.name.name.name {}    /* 0 0 3 0 */</code></pre><h4 id="slot-3"><strong>Slot 3</strong></h4><p>Lo slot 3 contiene le cose più importanti che possono influire sulla specificità in un file CSS: gli <code>id</code>.</p><p>A ogni elemento può essere assegnato un attributo <code>id</code> e possiamo usarlo nel nostro foglio di stile per selezionare un elemento.</p><p>Esempi:</p><pre><code class="language-css">#name {}                    /* 0 1 0 0 */
.user #name {}              /* 0 1 1 0 */
#name span {}               /* 0 1 0 1 */</code></pre><h4 id="slot-4"><strong>Slot 4</strong></h4><p>Lo slot 4 risente degli stili inline. Qualsiasi stile inline avrà precedenza su ogni regola definita in un file CSS esterno o all'interno del tag <code>style</code> nell'intestazione della pagina.</p><p>Esempi:</p><pre><code class="language-html">&lt;p style="color: red"&gt;Test&lt;/p&gt; /* 1 0 0 0 */</code></pre><p>Anche se un'altra regola CSS definisce il colore, questo stile inline sarà applicato. Eccetto per un caso – se viene usato <code>!important</code>, il che riempie lo slot 5.</p><h4 id="importanza"><strong>Importanza</strong></h4><p>La specificità non conta se una regola termina con <code>!important</code>:</p><pre><code class="language-css">p {
  font-size: 20px!important;
}</code></pre><p>Questa regola avrà la precedenza su ogni altra regola con più specificità.</p><p>Aggiungere <code>!important</code> in una regola CSS, la renderà più importante di qualsiasi altra regola, in accordo con le regole di specificità. L'unico altro modo in cui una regola può acquisire precedenza è avere anch'essa <code>!important</code> e avere specificità maggiore negli altri slot meno importanti.</p><h4 id="suggerimenti"><strong>Suggerimenti</strong></h4><p>In generale, dovresti usare la specificità necessaria, ma non di più. In questo modo, puoi creare altri selettori per sovrascrivere le regole definite in precedenza senza diventare matto.</p><p><code>!important</code> è uno strumento altamente discusso che ci offre il CSS. Molti esperti di CSS sono contrari al suo utilizzo. Mi trovo a utilizzarlo soprattutto quando ho davanti una regola CSS che ha una specificità così alta che ho bisogno di usare <code>!important</code> per applicare nel browser il mio nuovo CSS.</p><p>Ma in generale, <code>!important</code> non dovrebbe trovare posto nei tuoi file CSS.</p><p>Anche l'uso dell'attributo <code>id</code> per il CSS è altamente discusso, dato che possiede una specificità molto elevata. Una buona alternativa è usare le classi, che hanno meno specificità, sono facili da utilizzare e sono molto efficaci (puoi avere più classi per un elemento e una classe può essere riutilizzata più volte).</p><h4 id="strumenti-per-calcolare-la-specificit-"><strong>Strumenti per calcolare la specificità</strong></h4><p>Puoi usare il sito <a href="https://specificity.keegan.st/" rel="noopener">https://specificity.keegan.st/</a> per eseguire automaticamente calcoli di specificità.</p><p>È utile soprattutto se stai cercando di capire delle cose, visto che può essere uno strumento per avere un riscontro.</p><h3 id="ereditariet-"><strong>EREDITARIETÀ</strong></h3><p>Quando imposti alcune proprietà su un selettore CSS, queste vengono ereditate da tutti i figli del selettore.</p><p>Ho detto <em>alcune </em>proprietà, perché non tutte mostrano questo comportamento.</p><p>Ciò accade perché ha senso che delle proprietà vengano ereditate. Questo aiuta a scrivere del CSS più conciso, dato che non dobbiamo definire esplicitamente di nuovo una proprietà per ogni singolo discendente.</p><p>Altre proprietà invece, non ha senso che vengano ereditate.</p><p>Pensa al tipo di carattere: non c'è bisogno di applicare <code>font-family</code> a ogni singolo tag di una pagina. Imposti il font nel tag <code>body</code> e ogni discendente lo eredita insieme ad altre proprietà.</p><p>La proprietà <code>background-color</code> (il colore di sfondo), d'altro canto, non ha molto senso che venga ereditata.</p><h4 id="propriet-che-vengono-ereditate"><strong>Proprietà che vengono ereditate</strong></h4><p>Ecco una lista delle proprietà che vengono ereditate. La lista non è esaustiva, ma queste proprietà sono alcune delle più comuni che ti troverai a usare:</p><ul><li>border-collapse</li><li>border-spacing</li><li>caption-side</li><li>color</li><li>cursor</li><li>direction</li><li>empty-cells</li><li>font-family</li><li>font-size</li><li>font-style</li><li>font-variant</li><li>font-weight</li><li>font-size-adjust</li><li>font-stretch</li><li>font</li><li>letter-spacing</li><li>line-height</li><li>list-style-image</li><li>list-style-position</li><li>list-style-type</li><li>list-style</li><li>orphans</li><li>quotes</li><li>tab-size</li><li>text-align</li><li>text-align-last</li><li>text-decoration-color</li><li>text-indent</li><li>text-justify</li><li>text-shadow</li><li>text-transform</li><li>visibility</li><li>white-space</li><li>widows</li><li>word-break</li><li>word-spacing</li></ul><p>Le ho riportate da questo bell'<a href="https://www.sitepoint.com/css-inheritance-introduction/">articolo su Sitepoint</a> sull'ereditarietà in CSS (risorsa in lingua originale inglese).</p><h4 id="forzare-delle-propriet-a-essere-ereditate"><strong>Forzare delle proprietà a essere ereditate</strong></h4><p>E se hai una proprietà che non viene ereditata di default e vuoi che sia ereditata da un figlio?</p><p>Nel figlio, devi impostare il valore della proprietà sulla parola chiave speciale <code>inherit</code>.</p><p>Esempio:</p><pre><code class="language-css">body {
    background-color: yellow;
}

p {
  background-color: inherit;
}</code></pre><h4 id="forzare-delle-propriet-a-non-essere-ereditate"><strong>Forzare delle proprietà a NON essere ereditate</strong></h4><p>Viceversa, potresti avere una proprietà che viene ereditata e volere che non lo sia.</p><p>Puoi usare la parola chiave <code>revert</code> per farlo. In questo caso, viene ripristinato il valore dato dal browser nel suo foglio di stile predefinito.</p><p>In pratica, viene usata di rado e il più delle volte ti troverai a impostare semplicemente un altro valore per la proprietà, per sovrascrivere il valore ereditato.</p><h4 id="altri-valori-speciali"><strong>Altri valori speciali</strong></h4><p>In aggiunta alle parole chiave speciali <code>inherit</code> e <code>revert</code> che abbiamo appena visto, puoi impostare una proprietà su:</p><ul><li><code>initial</code>: usa il foglio di stile predefinito del browser, se disponibile. Altrimenti, se la proprietà viene ereditata di default, eredita il valore. In caso contrario, non fa nulla.</li><li><code>unset</code>: se la proprietà viene ereditata di default, lo fa. Altrimenti non fa nulla.</li></ul><h3 id="import"><strong>IMPORT</strong></h3><p>Da qualsiasi file CSS puoi importare un altro file usando la direttiva <code>@import</code>.</p><p>Ecco come usarla:</p><pre><code class="language-css">@import url(myfile.css)</code></pre><p><code>url()</code> può gestire URL assoluti o relativi.</p><p>Una cosa importante che hai bisogno di sapere è che le direttive <code>@import</code> devono essere posizionate prima dell'altro CSS nel file oppure saranno ignorate.</p><p>Puoi usare i descrittori dei dispositivi solo per caricare un file CSS su uno specifico dispositivo:</p><pre><code class="language-css">@import url(myfile.css) all;
@import url(myfile-screen.css) screen;
@import url(myfile-print.css) print;</code></pre><h3 id="selettori-di-attributo"><strong>SELETTORI DI ATTRIBUTO</strong></h3><p>Abbiamo già introdotto diversi selettori CSS di base: usando elementi, classi, id, abbiamo visto come combinarli, come selezionare più classi, come definire lo stile per più selettori nella stessa regola, come seguire la gerarchia della pagina con selettori per i discendenti e i discendenti diretti e per fratelli adiacenti.</p><p>In questa sezione, analizzeremo i selettori di attributi e parleremo di selettori di pseudo-classi e pseudo-elementi nelle prossime 2 sezioni.</p><h4 id="selettori-per-la-presenza-di-un-attributo"><strong>Selettori per la presenza di un attributo</strong></h4><p>Il primo tipo di selettore è quello che seleziona un attributo in base alla sua presenza.</p><p>Possiamo verificare se un elemento ha un attributo usando la sintassi <code>[]</code>. <code>p[id]</code> selezionerà tutti i tag <code>p</code> nella pagina che hanno un attributo <code>id</code>, indipendentemente dal suo valore:</p><pre><code class="language-css">p[id] {
  /* ... */
}</code></pre><h4 id="selettori-per-il-valore-esatto-di-un-attributo"><strong>Selettori per il valore esatto di un attributo</strong></h4><p>All'interno delle parentesi puoi controllare il valore dell'attributo usando il simbolo <code>=</code>, e il CSS sarà applicato solo se l'attributo corrisponde all'esatto valore specificato:</p><pre><code class="language-css">p[id="my-id"] {
  /* ... */
}</code></pre><h4 id="corrispondenza-della-parte-del-valore-di-un-attributo"><strong>Corrispondenza della parte del valore di un attributo</strong></h4><p>Mentre <code>=</code> ci consente di controllare un valore esatto, abbiamo anche altri operatori:</p><ul><li><code>*=</code> verifica se un attributo contiene la parte</li><li><code>^=</code> verifica se un attributo inizia con la parte</li><li><code>$=</code> verifica se un attributo finisce con la parte</li><li><code>|=</code> verifica se un attributo inizia con la parte ed è seguito da un trattino (comune per le classi, ad esempio), o contiene la parte</li><li><code>~=</code> verifica se la parte è contenuta nell'attributo, ma separata da spazi dal resto</li></ul><p>Tutte le verifiche che abbiamo menzionato sono <strong><strong>case sensitive</strong> </strong>(maiuscole e minuscole sono importanti).</p><p>Se aggiungi una <code>i</code> prima di chiudere le parentesi, il controllo sarà case insensitive. È supportato da molti browser ma non da tutti, controlla su <a href="https://caniuse.com/#feat=css-case-insensitive" rel="noopener">https://caniuse.com/#feat=css-case-insensitive</a>.</p><h3 id="pseudo-classi"><strong>PSEUDO-CLASSI</strong></h3><p>Le pseudo-classi sono parole chiave predefinite che sono usate per selezionare un elemento in base al suo <strong>stato</strong>, o per selezionare uno specifico elemento figlio.</p><p>Iniziano con i due punti <code>:</code>.</p><p>Possono essere usati come parte di un selettore e sono molto utili per definire lo stile di link attivi o visitati, ad esempio, cambiare lo stile su hover, focus, o selezionare il primo figlio, o righe dispari. Davvero utile in molti casi.</p><p>Queste sono le pseudo-classi più comuni che ti troverai a utilizzare:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Pseudo-classe</th>
<th>Selezione</th>
</tr>
</thead>
<tbody>
<tr>
<td>:active</td>
<td>Un elemento attivato (ad esempio, cliccato) dall'utente, principalmente usato per link e pulsanti.</td>
</tr>
<tr>
<td>:checked</td>
<td>Input di tipo casella di spunta, opzione o radio che sono abilitati.</td>
</tr>
<tr>
<td>:default</td>
<td>La scelta predefinita di un insieme (come l'opzione di pulsanti radio o menu di scelta).</td>
</tr>
<tr>
<td>:disabled</td>
<td>Un elemento disabilitato.</td>
</tr>
<tr>
<td>:empty</td>
<td>Un elemento senza figli.</td>
</tr>
<tr>
<td>:enabled</td>
<td>Un elemento abilitato (opposto a <code>:disabled</code>).</td>
</tr>
<tr>
<td>:first-child</td>
<td>Il primo figlio di un gruppo di fratelli.</td>
</tr>
<tr>
<td>:focus</td>
<td>L'elemento selezionato.</td>
</tr>
<tr>
<td>:hover</td>
<td>L'elemento su cui si trova il mouse.</td>
</tr>
<tr>
<td>:last-child</td>
<td>L'ultimo figlio di un gruppo di fratelli.</td>
</tr>
<tr>
<td>:link</td>
<td>Un link che non è stato visitato.</td>
</tr>
<tr>
<td>:not()</td>
<td>Ogni elemento che non corrisponde al selettore (ad esempio <code>:not(span)</code>).</td>
</tr>
<tr>
<td>:nth-child()</td>
<td>Un elemento che corrisponde alla posizione specificata.</td>
</tr>
<tr>
<td>:nth-last-child()</td>
<td>Un elemento che corrisponde alla posizione specificata, partendo dalla fine.</td>
</tr>
<tr>
<td>:only-child</td>
<td>Un elemento senza fratelli.</td>
</tr>
<tr>
<td>:required</td>
<td>Un elemento di un modulo con l'attributo <code>required</code>.</td>
</tr>
<tr>
<td>:root</td>
<td>Rappresenta l'elemento <code>html</code>. È come selezionare l'elemento <code>html</code> ma è più specifico. Utile per le variabili CSS.</td>
</tr>
<tr>
<td>:target</td>
<td>L'elemento che corrisponde a un frammento di URL (per navigazione interna alla pagina).</td>
</tr>
<tr>
<td>:valid</td>
<td>Elemento di un modulo validato con successo dal lato client.</td>
</tr>
<tr>
<td>:visited</td>
<td>Un link che è stato visitato.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Facciamo un esempio, uno davvero comune. Se desideri definire lo stile di un link, crei una regola CSS per selezionare l'elemento <code>a</code>:</p><pre><code class="language-css">a {
  color: yellow;
}</code></pre><p>Sembra andare tutto bene, finché clicchi sul link. Il link torna al colore predefinito (blu) quando viene cliccato. Quando apri un link e poi torni indietro sulla pagina, puoi vedere che il link è blu.</p><p>Perché accade?</p><p>Perché una volta cliccato, il link cambia stato e passa allo stato <code>:active</code>. E quando è stato visitato si trova nello stato <code>:visited</code>. Per sempre, finché l'utente cancella la cronologia del browser.</p><p>Quindi, per far apparire correttamente un link giallo in tutti i suoi stati, devi scrivere:</p><pre><code class="language-css">a,
a:visited,
a:active {
  color: yellow;
}</code></pre><p><code>:nth-child()</code> merita una menzione speciale. Può essere usato per selezionare discendenti dispari o pari con <code>:nth-child(odd)</code> e <code>:nth-child(even)</code>.</p><p>È comunemente usato nelle liste per colorare le righe dispari in modo diverso dalle righe pari:</p><pre><code class="language-css">ul:nth-child(odd) {
  color: white;
  background-color: black;
}</code></pre><p>Puoi usarlo anche per selezionare i primi 3 discendenti di un elemento con <code>:nth-child(-n+3)</code>. O puoi anche usarlo per selezionare 1 elemento ogni 5 con <code>:nth-child(5n)</code>.</p><p>Alcune pseudo-classi sono usate solo per la stampa, come <code>:first</code>, <code>:left</code>, <code>:right</code>, in modo da poter selezionare la prima pagina, tutte le pagine a sinistra e tutte le pagine a destra, che hanno generalmente degli stili leggermente diversi.</p><h3 id="pseudo-elementi"><strong>PSEUDO-ELEMENTI</strong></h3><h4 id="gli-pseudo-elementi-sono-usati-per-definire-lo-stile-di-una-parte-specifica-di-un-elemento-"><strong>Gli pseudo-elementi sono usati per definire lo stile di una parte specifica di un elemento.</strong></h4><p>Iniziano con i due punti doppi <code>::</code>.</p><blockquote><em>A volte potrai avvistarli in natura con dei due punti singoli, ma questa è una sintassi supportata solo per ragioni di retrocompatibilità. Dovresti usare i due punti doppi per distinguerli dalle pseudo-classi<em>.</em></em></blockquote><p><code>::before</code> e &nbsp;<code>::after</code> sono probabilmente gli pseudo-elementi più utilizzati. Vengono usati per aggiungere contenuto prima e dopo un elemento, come delle icone ad esempio.</p><p>Ecco la lista degli pseudo-elementi:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Pseudo-elemento</th>
<th>Selezione</th>
</tr>
</thead>
<tbody>
<tr>
<td>::after</td>
<td>Crea uno pseudo-elemento dopo l'elemento.</td>
</tr>
<tr>
<td>::before</td>
<td>Crea uno pseudo-elemento prime dell'elemento.</td>
</tr>
<tr>
<td>::first-letter</td>
<td>Può essere usato per definire lo stile della prima lettera di un blocco di testo.</td>
</tr>
<tr>
<td>::first-line</td>
<td>Può essere usato per definire lo stile della prima riga di un blocco di testo.</td>
</tr>
<tr>
<td>::selection</td>
<td>Seleziona il testo selezionato dall'utente.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Facciamo un esempio. Diciamo che vogliamo far sì che la prima riga di un paragrafo abbia una dimensione del carattere leggermente più grande, una cosa comune in tipografia:</p><pre><code class="language-css">p::first-line {
  font-size: 2rem;
}</code></pre><p>O magari che la prima lettera sia più marcata:</p><pre><code class="language-css">p::first-letter {
  font-weight: bolder;
}</code></pre><p><code>::after</code> e <code>::before</code> sono un po' meno intuitivi. Ricordo di averli usati per aggiungere delle icone con il CSS.</p><p>Devi specificare la proprietà <code>content</code> per inserire qualsiasi tipo di contenuto dopo o prima di un elemento:</p><pre><code class="language-css">p::before {
  content: url(/myimage.png);
}

.myElement::before {
    content: "Hey Hey!";
}</code></pre><h3 id="colori"><strong>COLORI</strong></h3><p>Di default, una pagina HTML viene presentata dai browser in modo piuttosto triste, in termini di colori usati.</p><p>C'è uno sfondo bianco, del nero e i link blu. Ecco tutto.</p><p>Fortunatamente il CSS ci dà la possibilità di aggiungere colori ai nostri design.</p><p>Abbiamo a disposizione queste proprietà:</p><ul><li><code>color</code></li><li><code>background-color</code></li><li><code>border-color</code></li></ul><p>Tutte accettano un valore di colore, che può essere espresso in diversi modi.</p><h4 id="nomi-di-colori"><strong>Nomi di colori</strong></h4><p>Per iniziare, abbiamo le parole chiave CSS che definiscono i colori. Il CSS ha iniziato con 16, ma oggi c'è un numero enorme di nomi di colori:</p><ul><li><code>aliceblue</code></li><li><code>antiquewhite</code></li><li><code>aqua</code></li><li><code>aquamarine</code></li><li><code>azure</code></li><li><code>beige</code></li><li><code>bisque</code></li><li><code>black</code></li><li><code>blanchedalmond</code></li><li><code>blue</code></li><li><code>blueviolet</code></li><li><code>brown</code></li><li><code>burlywood</code></li><li><code>cadetblue</code></li><li><code>chartreuse</code></li><li><code>chocolate</code></li><li><code>coral</code></li><li><code>cornflowerblue</code></li><li><code>cornsilk</code></li><li><code>crimson</code></li><li><code>cyan</code></li><li><code>darkblue</code></li><li><code>darkcyan</code></li><li><code>darkgoldenrod</code></li><li><code>darkgray</code></li><li><code>darkgreen</code></li><li><code>darkgrey</code></li><li><code>darkkhaki</code></li><li><code>darkmagenta</code></li><li><code>darkolivegreen</code></li><li><code>darkorange</code></li><li><code>darkorchid</code></li><li><code>darkred</code></li><li><code>darksalmon</code></li><li><code>darkseagreen</code></li><li><code>darkslateblue</code></li><li><code>darkslategray</code></li><li><code>darkslategrey</code></li><li><code>darkturquoise</code></li><li><code>darkviolet</code></li><li><code>deeppink</code></li><li><code>deepskyblue</code></li><li><code>dimgray</code></li><li><code>dimgrey</code></li><li><code>dodgerblue</code></li><li><code>firebrick</code></li><li><code>floralwhite</code></li><li><code>forestgreen</code></li><li><code>fuchsia</code></li><li><code>gainsboro</code></li><li><code>ghostwhite</code></li><li><code>gold</code></li><li><code>goldenrod</code></li><li><code>gray</code></li><li><code>green</code></li><li><code>greenyellow</code></li><li><code>grey</code></li><li><code>honeydew</code></li><li><code>hotpink</code></li><li><code>indianred</code></li><li><code>indigo</code></li><li><code>ivory</code></li><li><code>khaki</code></li><li><code>lavender</code></li><li><code>lavenderblush</code></li><li><code>lawngreen</code></li><li><code>lemonchiffon</code></li><li><code>lightblue</code></li><li><code>lightcoral</code></li><li><code>lightcyan</code></li><li><code>lightgoldenrodyellow</code></li><li><code>lightgray</code></li><li><code>lightgreen</code></li><li><code>lightgrey</code></li><li><code>lightpink</code></li><li><code>lightsalmon</code></li><li><code>lightseagreen</code></li><li><code>lightskyblue</code></li><li><code>lightslategray</code></li><li><code>lightslategrey</code></li><li><code>lightsteelblue</code></li><li><code>lightyellow</code></li><li><code>lime</code></li><li><code>limegreen</code></li><li><code>linen</code></li><li><code>magenta</code></li><li><code>maroon</code></li><li><code>mediumaquamarine</code></li><li><code>mediumblue</code></li><li><code>mediumorchid</code></li><li><code>mediumpurple</code></li><li><code>mediumseagreen</code></li><li><code>mediumslateblue</code></li><li><code>mediumspringgreen</code></li><li><code>mediumturquoise</code></li><li><code>mediumvioletred</code></li><li><code>midnightblue</code></li><li><code>mintcream</code></li><li><code>mistyrose</code></li><li><code>moccasin</code></li><li><code>navajowhite</code></li><li><code>navy</code></li><li><code>oldlace</code></li><li><code>olive</code></li><li><code>olivedrab</code></li><li><code>orange</code></li><li><code>orangered</code></li><li><code>orchid</code></li><li><code>palegoldenrod</code></li><li><code>palegreen</code></li><li><code>paleturquoise</code></li><li><code>palevioletred</code></li><li><code>papayawhip</code></li><li><code>peachpuff</code></li><li><code>peru</code></li><li><code>pink</code></li><li><code>plum</code></li><li><code>powderblue</code></li><li><code>purple</code></li><li><code>rebeccapurple</code></li><li><code>red</code></li><li><code>rosybrown</code></li><li><code>royalblue</code></li><li><code>saddlebrown</code></li><li><code>salmon</code></li><li><code>sandybrown</code></li><li><code>seagreen</code></li><li><code>seashell</code></li><li><code>sienna</code></li><li><code>silver</code></li><li><code>skyblue</code></li><li><code>slateblue</code></li><li><code>slategray</code></li><li><code>slategrey</code></li><li><code>snow</code></li><li><code>springgreen</code></li><li><code>steelblue</code></li><li><code>tan</code></li><li><code>teal</code></li><li><code>thistle</code></li><li><code>tomato</code></li><li><code>turquoise</code></li><li><code>violet</code></li><li><code>wheat</code></li><li><code>white</code></li><li><code>whitesmoke</code></li><li><code>yellow</code></li><li><code>yellowgreen</code></li></ul><p>più <code>tranparent</code> e <code>currentColor</code> che puntano alla proprietà <code>color</code>. Ad esempio, è utile fare in modo che <code>border-color</code> li erediti.</p><p>Sono definiti nel <a href="https://www.w3.org/TR/css-color-4/">Modulo CSS Colori, livello 4</a>, e sono case insensitive.</p><p>Wikipedia ha una <a href="https://en.wikipedia.org/wiki/Web_colors">simpatica tabella</a> che ti permette di scegliere un colore con il suo nome.</p><p>I nomi dei colori non solo la sola opzione.</p><h3 id="rgb-e-rgba"><strong>RGB e RGBa</strong></h3><p>Puoi usare la funzione <code>rgb()</code> per calcolare un colore dalla notazione RGB (red-green-blue), che imposta il colore in base alle sue parti di rosso-verde-blu. Da 0 a 255:</p><pre><code class="language-css">p {
  color: rgb(255, 255, 255); /* white */
    background-color: rgb(0, 0, 0); /* black */
}</code></pre><p><code>rgba()</code> ti consente di aggiungere il canale alfa per inserire la trasparenza. Può essere un numero tra 0 e 1:</p><pre><code class="language-css">p {
    background-color: rgb(0, 0, 0, 0.5);
}</code></pre><h4 id="notazione-esadecimale"><strong>Notazione esadecimale</strong></h4><p>Un'altra opzione è esprimere le parti RGB dei colori in notazione esadecimale, che è composta da tre blocchi.</p><p>Il nero, che è <code>rgb(0,0,0)</code>, è espresso come <code>#000000</code> o <code>#000</code> (possiamo accorciare i 2 numeri in 1 se sono uguali).</p><p>Il bianco, <code>rgb(255,255,255)</code>, è espresso come <code>#ffffff</code> o <code>#fff</code>.</p><p>La notazione esadecimale ci permette di esprimere un numero da 0 a 255 in sole due cifre, dato che vanno da 0 a "15" (f).</p><p>Possiamo aggiungere il canale alfa aggiungendo 1 o 2 cifre alla fine, ad esempio, <code>#00000033</code>. Non tutti i browser supportano la notazione accorciata, quindi utilizza tutte e 6 le cifre per esprimere le parti RGB.</p><h4 id="hsl-e-hsla"><strong>HSL e HSLa</strong></h4><p>Questa è un'aggiunta più recente al CSS.</p><p>HSL = Hue Saturation Lightness (ovvero tonalità, saturazione e luminosità).</p><p>In questa notazione, il nero è <code>hsl(0, 0%, 0%)</code> e il bianco è <code>hsl(0, 0%, 100%)</code>.</p><p>Se hai più familiarità con HSL rispetto a RGB per le tue conoscenza pregresse, puoi farne sicuramente uso.</p><p>Abbiamo anche <code>hsla()</code>, che aggiunge il canale alfa al mix. Ancora, un numero tra 0 e 1: <code>hsl(0, 0%, 0%, 0.5)</code></p><h3 id="unit-"><strong>UNITÀ</strong></h3><p>Una delle cose che utilizzerai quotidianamente nel CSS sono le unità. Sono usate per definire lunghezze, padding, margini, allineare elementi e via dicendo.</p><p>Cose come <code>px</code>, <code>em</code>, <code>rem</code> o percentuali.</p><p>Sono ovunque. Ne esistono anche di misteriose. Affronteremo ognuna di esse in questa sezione.</p><h4 id="pixel"><strong>Pixel</strong></h4><p>L'unità di misura maggiormente usata. Un pixel non corrisponde effettivamente a un pixel fisico sullo schermo, in quanto varia, e parecchio, a seconda del dispositivo (pensa ai dispositivi con alto numeri di DPI contro i dispositivi non-retina).</p><p>Esiste una convenzione che rende questa unità funzionante in modo uniforme sui vari dispositivi.</p><h4 id="percentuale"><strong>Percentuale</strong></h4><p>La percentuale, un'altra misura molto utile, ti permette di specificare i valori come percentuale della proprietà corrispondente dell'elemento genitore.</p><p>Esempio:</p><pre><code class="language-css">.genitore {
  width: 400px;
}

.figlio {
  width: 50%; /* = 200px */
}</code></pre><h4 id="unit-di-misura-del-mondo-reale"><strong>Unità di misura del mondo reale</strong></h4><p>E poi ci sono unità di misura traslate dal mondo esterno. Per lo più inutili su schermo, possono essere utili per la stampa. Sono:</p><ul><li><code>cm</code> un centimetro (corrisponde a 37.8 pixel)</li><li><code>mm</code> un millimetro (0.1cm)</li><li><code>q</code> un quarto di millimetro</li><li><code>in</code> un pollice o inch (corrisponde a 96 pixel)</li><li><code>pt</code> un punto tipografico o point (1 inch = 72 point)</li><li><code>pc</code> una pica (1 pica = 12 point)</li></ul><h4 id="unit-relative"><strong>Unità relative</strong></h4><ul><li><code>em</code> è il valore assegnato alla dimensione del carattere (<code>font-size</code>) di un elemento, perciò il suo esatto valore cambia tra gli elementi. Non cambia a seconda del font usato, ma solo in base alla dimensione. In tipografia è la misura della larghezza della lettera <code>m</code>.</li><li><code>rem</code> è simile a <code>em</code>, ma invece di variare con la dimensione del carattere dell'elemento attuale, utilizza la dimensione del font dell'elemento root (<code>html</code>). Imposti la dimensione del font una volta, e <code>rem</code> sarà una misura uniforme su tutta la pagina.</li><li><code>ex</code> è come <code>em</code>, ma invece di misurare la larghezza della <code>m</code>, misura l'altezza della lettera <code>x</code>. Può cambiare a seconda del font usato e della sua dimensione.</li><li><code>ch</code> è come <code>ex</code>, ma invece di misurare l'altezza della <code>x</code> si basa sulla larghezza dello <code>0</code> (zero).</li></ul><h4 id="unit-viewport"><strong>Unità viewport</strong></h4><ul><li><code>vw</code> l'unità <strong><strong>viewport width </strong></strong>rappresenta una percentuale della larghezza del viewport (area di visualizzazione). <code>50vw</code> significa 50% della larghezza del viewport.</li><li><code>vh</code> l'unità <strong><strong>viewport height </strong></strong>rappresenta una percentuale dell'altezza del viewport. <code>50vh</code> significa 50% dell'altezza del viewport.</li><li><code>vmin</code> l'unità <strong><strong>viewport minimum </strong></strong>rappresenta il minimo tra l'altezza o la larghezza in termini di percentuale. <code>30vmin</code> è il 30% della larghezza o altezza corrente, a seconda di quale sia più piccola</li><li><code>vmax</code> l'unità <strong><strong>viewport maximum </strong></strong>rappresenta il massimo tra altezza e larghezza in termini di percentuale. <code>30vmax</code> è il30% della larghezza o dell'altezza corrente, a seconda di quale sia più grande</li></ul><h4 id="unit-frazionarie"><strong>Unità frazionarie</strong></h4><p>Le <code>fr</code> sono unità frazionarie e vengono usate in CSS Grid per dividere lo spazio in frazioni.</p><p>Ne parleremo più avanti nel contesto di CSS Grid.</p><h3 id="url"><strong>URL</strong></h3><p>Quando parliamo di immagini di sfondo, <code>@import</code> e altro, usiamo la funzione <code>url()</code> per caricare una risorsa:</p><pre><code class="language-css">div {
  background-image: url(test.png);
}</code></pre><p>In questo caso, ho usato un URL relativo, che cerca il file nella cartella in cui è definito il file CSS.</p><p>Potrei salire di un livello</p><pre><code class="language-css">div {
  background-image: url(../test.png);
}</code></pre><p>o andare in una cartella</p><pre><code class="language-css">div {
  background-image: url(subfolder/test.png);
}</code></pre><p>oppure potrei caricare un file partendo dalla root del dominio in cui è ospitato il CSS:</p><pre><code class="language-css">div {
  background-image: url(/test.png);
}</code></pre><p>O potrei usare un URL assoluto per caricare una risorsa esterna:</p><pre><code class="language-css">div {
  background-image: url(https://mysite.com/test.png);
}</code></pre><h3 id="calc"><strong>CALC</strong></h3><p>La funzione <code>calc()</code> ti consente di svolgere operazioni matematiche di base su dei valori, ed è particolarmente utile quando hai bisogno di aggiungere o sottrarre un valore di lunghezza da una percentuale.</p><p>Ecco come funziona:</p><pre><code class="language-css">div {
    max-width: calc(80% - 100px)
}</code></pre><p>Restituisce un valore di lunghezza, così può essere usata ovunque ti attendi un valore in pixel.</p><p>Puoi svolgere</p><ul><li>addizioni usando <code>+</code></li><li>sottrazioni usando <code>-</code></li><li>moltiplicazioni usando <code>*</code></li><li>divisioni usando <code>/</code></li></ul><blockquote><em>Un avvertimento<em>: </em>con addizioni e sottrazioni, lo spazio intorno all'operatore è obbligatorio, altrimenti il funzionamento non è quello atteso<em>.</em></em></blockquote><p>Esempi:</p><pre><code class="language-css">div {
    max-width: calc(50% / 3)
}

div {
    max-width: calc(50% + 3px)
}</code></pre><h3 id="sfondi"><strong>SFONDI</strong></h3><p>Lo sfondo di un elemento può essere cambiato usando varie proprietà CSS:</p><ul><li><code>background-color</code></li><li><code>background-image</code></li><li><code>background-clip</code></li><li><code>background-position</code></li><li><code>background-origin</code></li><li><code>background-repeat</code></li><li><code>background-attachment</code></li><li><code>background-size</code></li></ul><p>e la proprietà scorciatoia <code>background</code>, che ci permette di accorciare le definizioni e raggrupparle in una singola riga.</p><p><code>background-color</code> accetta un valore di colore, che può essere una parola chiave colore o un valore <code>rgb</code> o <code>hsl</code>:</p><pre><code class="language-css">p {
  background-color: yellow;
}

div {
  background-color: #333;
}</code></pre><p>Invece di usare un colore, puoi usare un'immagine come sfondo di un elemento, specificando la posizione dell'immagine con il suo URL:</p><pre><code class="language-css">div {
  background-image: url(image.png);
}</code></pre><p><code>background-clip</code> ti permette di determinare l'area usata dall'immagine o dal colore di sfondo. Il valore predefinito è <code>border-box</code>, che si estende fino al confine esterno del bordo.</p><p>Altri valori sono:</p><ul><li><code>padding-box</code> per estendere lo sfondo fino al confine del padding, senza il bordo</li><li><code>content-box</code> per estendere lo sfondo fino al confine del contenuto, senza padding</li><li><code>inherit</code> per applicare il valore del genitore</li></ul><p>Quando usi un'immagine come sfondo puoi impostare la posizione in cui collocarla usando la proprietà <code>background-position</code>: <code>left</code>, <code>right</code>, <code>center</code> sono tutti valori validi per l'asse X, e <code>top</code>, <code>bottom</code> per l'asse Y:</p><pre><code class="language-css">div {
  background-position: top right;
}</code></pre><p>Se l'immagine è più piccola del background, devi agire sulla proprietà <code>background-repeat</code>. Dovrebbe ripetersi sull'asse X (<code>repeat-x</code>), Y (<code>repeat-y</code>) o su tutti gli assi (<code>repeat</code>)? Quest'ultimo è il valore predefinito. Un altro valore è <code>no-repeat</code>.</p><p><code>background-origin</code> ti permette di scegliere dove dovrebbe essere applicato lo sfondo: all'intero elemento includendo il padding (default) usando <code>padding-box</code>, all'intero elemento includendo il bordo usando <code>border-box</code>, all'elemento senza il padding usando <code>content-box</code>.</p><p>Con <code>background-attachment</code> possiamo fissare uno sfondo al viewport, in modo che non sia influenzato dallo scorrimento:</p><pre><code class="language-css">div {
  background-attachment: fixed;
}</code></pre><p>Di default, il valore è <code>scroll</code>. Esiste un altro valore, <code>local</code>. Il modo migliore per visualizzarne il comportamento è <a href="https://codepen.io/BernLeech/pen/mMNKJV" rel="noopener">questo Codepen</a>.</p><p>L'ultima proprietà dello sfondo è <code>background-size</code>. Possiamo usare 3 parole chiave: <code>auto</code>, <code>cover</code> e <code>contain</code>. <code>auto</code> è il valore predefinito.</p><p><code>cover</code> espande l'immagine fino a che l'intero elemento sia coperto dallo sfondo.</p><p><code>contain</code> smette di espandere l'immagine di sfondo quando una delle dimensioni (x o y) copre interamente il lato più piccolo dell'immagine, in modo che sia completamente contenuta nell'elemento.</p><p>Puoi anche specificare un valore di lunghezza e, se lo fai, questo imposta la larghezza dell'immagine di sfondo (l'altezza viene definita automaticamente):</p><pre><code class="language-css">div {
  background-size: 100%;
}</code></pre><p>Se specifichi 2 valori, uno è per la larghezza e il secondo per l'altezza:</p><pre><code class="language-css">div {
  background-size: 800px 600px;
}</code></pre><p>La proprietà scorciatoia <code>background</code> permette di accorciare le definizioni e di raggrupparle in una sola riga.</p><p>Ecco un esempio:</p><pre><code class="language-css">div {
  background: url(bg.png) top left no-repeat;
}</code></pre><p>Se usi un'immagine, puoi impostare un colore di ripiego nel caso l'immagine non venisse caricata:</p><pre><code class="language-css">div {
  background: url(image.png) yellow;
}</code></pre><p>Puoi anche impostare un gradiente come sfondo:</p><pre><code class="language-css">div {
  background: linear-gradient(#fff, #333);
}</code></pre><h3 id="commenti"><strong>COMMENTI</strong></h3><p>Il CSS ti dà la possibilità di scrivere dei commenti in un file CSS o nel tag <code>style</code> nell'intestazione della pagina.</p><p>Il formato è <code>/* questo è un commento */</code> nello stile dei commenti in C (o JavaScript, se preferisci).</p><p>Questo è un commento multi-riga. Finché non aggiungi il segno di chiusura <code>*/</code>, tutte le righe trovate dopo quello di apertura sono considerate commenti.</p><p>Esempio:</p><pre><code class="language-css">#name { display: block; } /* Che bella regola! */

/* #name { display: block; } */

#name {
    display: block; /*
    color: red;
    */
}</code></pre><p>Il CSS non ha commenti in linea, come <code>//</code> in C o JavaScript.</p><p>Fai attenzione – se aggiungi <code>//</code> prima di una regola, questa non sarà applicata, come se il commento avesse funzionato. In realtà, il CSS rileva un errore di sintassi e, per il modo in cui funziona, ignora la riga con l'errore e va dritto alla riga successiva.</p><p>Conoscere questo comportamento ti permette di scrivere di proposito commenti in linea, anche se devi fare attenzione perché non puoi aggiungere qualsiasi testo come in un blocco di commento.</p><p>Ad esempio:</p><pre><code class="language-css">// Che bella regola!
#name { display: block; }</code></pre><p>In questo caso, per come funziona il CSS, la regola <code>#name</code> viene trasformata in un commento. Puoi trovare maggiori dettagli <a href="https://www.xanthir.com/b4U10" rel="noopener">qui</a> (risorsa in lingua originale inglese), se sei interessato. Per evitare di spararti su un piede, evita semplicemente di usare i commenti in linea e usa solo i blocchi di commento.</p><h3 id="propriet-personalizzate"><strong>PROPRIETÀ PERSONALIZZATE</strong></h3><p>Negli ultimi anni, i preprocessori CSS hanno avuto molto successo. Per i progetti greenfield, era molto comune iniziare con Less o Sass. Ed è tutt'ora una tecnologia molto popolare.</p><p>Secondo me, i principali vantaggi di queste tecnologie sono i seguenti:</p><ul><li>consentono di annidare i selettori</li><li>forniscono una semplice funzionalità di importazione</li><li>ti danno le variabili</li></ul><p>Il moderno CSS ha nuove e potenti funzionalità chiamate <strong>proprietà CSS personalizzate</strong>, comunemente conosciute come <strong>variabili CSS</strong>. </p><p>Il CSS non è un linguaggio di programmazione come <a href="https://flaviocopes.com/javascript/" rel="noopener">JavaScript</a>, Python, PHP, Ruby o Go in cui le variabili sono essenziali per fare qualcosa di utile. Il CSS è davvero limitato in ciò che puoi fare, ed è costituito principalmente da una sintassi dichiarativa per dire al browser come mostrare una pagina HTML.</p><p>Ma una variabile è una variabile: un nome che fa riferimento a un valore, e le variabili in CSS aiutano a ridurre le ripetizioni e le incongruenze, mettendo in primo piano la definizione dei valori.</p><p>Inoltre, introduce una caratteristica unica che i preprocessori CSS non avranno mai: <strong>puoi accedere a una variabile CSS e cambiarne programmaticamente il valore usando JavaScript</strong>.</p><h4 id="le-basi-dell-utilizzo-delle-variabili"><strong>Le basi dell'utilizzo delle variabili</strong></h4><p>Una variabile CSS è definita con una sintassi speciale, anteponendo due trattini al nome (<code>--nome-variabile</code>) e poi due punti e il valore. In questo modo:</p><pre><code class="language-css">:root {
  --primary-color: yellow;
}</code></pre><p>(parleremo di <code>:root</code> in seguito).</p><p>Puoi accedere al valore della variabile usando <code>var()</code>:</p><pre><code class="language-css">p {
  color: var(--primary-color)
}</code></pre><p>Il valore della variabile può essere qualsiasi valore CSS valido, ad esempio:</p><pre><code class="language-css">:root {
  --default-padding: 30px 30px 20px 20px;
  --default-color: red;
  --default-background: #fff;
}</code></pre><h4 id="creare-variabili-all-interno-di-un-elemento"><strong>Creare variabili all'interno di un elemento</strong></h4><p>Le variabili CSS possono essere definite all'interno di qualsiasi elemento. Alcuni esempi:</p><pre><code class="language-css">:root {
  --default-color: red;
}

body {
  --default-color: red;
}

main {
  --default-color: red;
}

p {
  --default-color: red;
}

span {
  --default-color: red;
}

a:hover {
  --default-color: red;
}</code></pre><p>Ciò che cambia in questi diversi esempi è la <strong>visibilità </strong>(scope).</p><h4 id="visibilit-delle-variabili"><strong>Visibilità delle variabili</strong></h4><p>Aggiungere variabili a un selettore le rende disponibili a tutti i suoi figli.</p><p>Nell'esempio precedente, hai visto l'utilizzo di <code>:root</code> per definire una variabile CSS:</p><pre><code class="language-css">:root {
  --primary-color: yellow;
}</code></pre><p><code>:root</code> è una pseudo-classe che identifica l'elemento "radice" di un albero.</p><p>Nel contesto di un documento HTML, usando il selettore <code>:root</code> si fa riferimento all'elemento <code>html</code>, eccetto che <code>:root</code> ha una specificità più elevata (ha la priorità).</p><p>Nel contesto di un'immagine SVG, <code>:root</code> punta al tag <code>svg</code>.</p><p>Aggiungere una proprietà CSS personalizzata a <code>:root</code>, la rende disponibile in tutti gli elementi della pagina.</p><p>Se vuoi aggiungere una variabile all'interno del selettore <code>.container</code>, sarà disponibile solo ai figli di <code>.container</code>:</p><pre><code class="language-css">.container {
  --secondary-color: yellow;
}</code></pre><p>e non funzionerà usandola fuori da questo elemento.</p><p>Le variabili possono essere <strong><strong>r</strong>iassegnate</strong>:</p><pre><code class="language-css">:root {
  --primary-color: yellow;
}

.container {
  --primary-color: blue;
}</code></pre><p>Fuori da <code>.container</code>, <code>--primary-color</code> sarà <em><em>yellow</em></em>, ma al suo interno sarà <em><em>blue</em></em>.</p><p>Puoi anche assegnare o sovrascrivere una variabile all'interno dell'HTML usando gli stili inline:</p><pre><code class="language-html">&lt;main style="--primary-color: orange;"&gt;
  &lt;!-- ... --&gt;
&lt;/main&gt;</code></pre><blockquote><em>Le variabili <em>CSS </em>seguono le normali regole<em> CSS </em>a cascata<em>, </em>con la precedenza definita secondo la specificità<em>.</em></em></blockquote><h4 id="interagire-con-il-valore-di-una-variabile-css-usando-javascript"><strong>Interagire con il valore di una variabile CSS usando JavaScript</strong></h4><p>La cosa più bella delle variabili CSS è la possibilità di accedervi e modificarle usando JavaScript.</p><p>Ecco come puoi impostare il valore di una variabile usando del semplice JavaScript:</p><pre><code class="language-js">const element = document.getElementById('nome-id')
element.style.setProperty('--nome-variabile', 'un-valore')</code></pre><p>Il codice qui sotto invece, può essere usato per accedere al valore di una variabile, nel caso la variabile sia definita in <code>:root</code>:</p><pre><code class="language-js">const styles = getComputedStyle(document.documentElement)
const value = String(styles.getPropertyValue('--nome-variabile')).trim()</code></pre><p>Oppure, per applicare lo stile a uno specifico elemento, nel caso di una variabile impostata con una visibilità diversa:</p><pre><code class="language-js">const element = document.getElementById('nome-id')
const styles = getComputedStyle(element)
const value = String(styles.getPropertyValue('--nome-variabile')).trim()</code></pre><h4 id="gestione-dei-valori-non-validi"><strong>Gestione dei valori non validi</strong></h4><p>Se a una variabile è assegnata a una proprietà che non accetta il valore della variabile, è considerata non valida.</p><p>Ad esempio, potresti passare un valore in pixel a una proprietà <code>position</code>, o un valore in rem a una proprietà di colore.</p><p>In questo caso, la riga è considerata non valida e viene ignorata.</p><h4 id="supporto-browser"><strong>Supporto browser</strong></h4><p>Il supporto browser per le variabili CSS è molto buono, <a href="https://www.caniuse.com/#feat=css-variables" rel="noopener">secondo Can I Use</a>.</p><p>Le variabili CSS sono destinate a durare e oggi puoi usarle se non hai bisogno di supportare Internet Explorer e le vecchie versioni di altri browser.</p><p>Se hai bisogno di supportare vecchi browser, puoi usare librerie come <a href="https://flaviocopes.com/postcss/" rel="noopener">PostCSS</a> o <a href="http://www.myth.io/" rel="noopener">Myth</a>, ma perderai la possibilità di interagire con le variabili attraverso JavaScript o gli strumenti per sviluppatori del browser, visto che vengono trasformate nel caro e vecchio CSS senza variabili (perdendo dunque la maggior parte del potere delle variabili CSS).</p><h4 id="le-variabili-css-sono-case-sensitive"><strong>Le variabili CSS sono case sensitive</strong></h4><p>Questa variabile:</p><pre><code class="language-css">--width: 100px;</code></pre><p>è diversa da questa:</p><pre><code class="language-css">--Width: 100px;</code></pre><h4 id="matematica-nelle-variabili-css"><strong>Matematica nelle variabili CSS</strong></h4><p>Per svolgere operazioni matematiche con le variabili CSS, hai bisogno di usare <code>calc()</code>, ad esempio:</p><pre><code class="language-css">:root {
  --default-left-padding: calc(10px * 2);
}</code></pre><h4 id="media-query-con-variabili-css"><strong>Media query con variabili CSS</strong></h4><p>Nulla di speciale qui. Le variabili CSS vengono applicate normalmente alle media query:</p><pre><code class="language-css">body {
  --width: 500px;
}

@media screen and (max-width: 1000px) and (min-width: 700px) {
  --width: 800px;
}

.container {
  width: var(--width);
}</code></pre><h4 id="impostare-un-valore-di-ripiego-per-var-"><strong>Impostare un valore di ripiego per var()</strong></h4><p><code>var()</code> accetta un secondo parametro, che è il valore di ripiego (fallback) predefinito quando il valore della variabile non è impostato:</p><pre><code class="language-css">.container {
  margin: var(--default-margin, 30px);
}</code></pre><h3 id="font"><strong>FONT</strong></h3><p>Agli albori del web c'era soltanto una manciata di caratteri tra cui scegliere.</p><p>Fortunatamente oggi puoi caricare ogni tipo di font sulle tue pagine.</p><p>Durante gli anni, il CSS ha guadagnato molte simpatiche funzionalità riguardo ai font.</p><p>La proprietà <code>font</code> è la scorciatoia per una serie di proprietà:</p><ul><li><code>font-family</code></li><li><code>font-weight</code></li><li><code>font-stretch</code></li><li><code>font-style</code></li><li><code>font-size</code></li></ul><p>Vediamo ognuna di esse, per poi parlare di <code>font</code>.</p><p>In seguito, parleremo di come caricare dei font personalizzati, usando <code>@import</code> o <code>@font-face</code> oppure caricando un foglio di stile di un font.</p><h4 id="font-family"><strong><code>font-family</code></strong></h4><p>Imposta la <em>famiglia </em>di font di cui l'elemento farà uso.</p><p>Perché "famiglia"? Perché, come sappiamo, un font è in realtà composto di svariati sotto-font che forniscono tutti gli stili (grassetto, corsivo, light...) che ci servono.</p><p>Ecco un esempio dalla app Font Book del mio Mac – la famiglia di font Fira Code contiene al suo interno svariati appositi font:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/3eSWEQuM-orkdVa7xATJ5p9sH2Te-clkilVI" class="kg-image" alt="3eSWEQuM-orkdVa7xATJ5p9sH2Te-clkilVI" width="800" height="460" loading="lazy"></figure><p>Questa proprietà ti consente di selezionare uno specifico font, ad esempio:</p><pre><code class="language-css">body {
  font-family: Helvetica;
}</code></pre><p>Puoi impostare più valori, in modo che la seconda opzione venga usata se la prima non può essere utilizzata per qualche ragione (se non viene trovata dalla macchina, o la connessione per scaricarla fallisce, ad esempio):</p><pre><code class="language-css">body {
  font-family: Helvetica, Arial;
}</code></pre><p>Finora ho usato dei font specifici, quelli che chiamiamo <strong>font web-safe</strong>, dato che sono preinstallati su diversi sistemi operativi.</p><p>Si dividono in font Serif, Sans-Serif a Monospace. Ecco una lista di alcuni di alcuni dei più popolari:</p><p><strong><strong>Serif</strong></strong></p><ul><li>Georgia</li><li>Palatino</li><li>Times New Roman</li><li>Times</li></ul><p><strong><strong>Sans-Serif</strong></strong></p><ul><li>Arial</li><li>Helvetica</li><li>Verdana</li><li>Geneva</li><li>Tahoma</li><li>Lucida Grande</li><li>Impact</li><li>Trebuchet MS</li><li>Arial Black</li></ul><p><strong><strong>Monospace</strong></strong></p><ul><li>Courier New</li><li>Courier</li><li>Lucida Console</li><li>Monaco</li></ul><p>Puoi anche usarli tutti come proprietà <code>font-family</code>, ma non è garantito che siano presenti in ogni sistema. Ne esistono anche altri, con diversi livelli di supporto.</p><p>Puoi anche usare dei nomi generici:</p><ul><li><code>sans-serif</code> un font senza legature</li><li><code>serif</code> un font con legature</li><li><code>monospace</code> un font particolarmente adatto per il codice</li><li><code>cursive</code> usato per simulare pezzi scritti a mano</li><li><code>fantasy</code> il nome dice tutto</li></ul><p>Questi vengono usati tipicamente alla fine di una definizione <code>font-family</code>, per dare un valore di ripiego nel caso nessun altro valore venga applicato:</p><pre><code class="language-css">body {
  font-family: Helvetica, Arial, sans-serif;
}</code></pre><h4 id="font-weight"><strong><code>font-weight</code></strong></h4><p>Questa proprietà regola lo spessore di un font. Puoi usare questi valori predefiniti:</p><ul><li>normal</li><li>bold</li><li>bolder (relativo all'elemento genitore)</li><li>lighter (relativo all'elemento genitore)</li></ul><p>O usare le parole chiave numeriche:</p><ul><li>100</li><li>200</li><li>300</li><li>400, corrisponde a <code>normal</code></li><li>500</li><li>600</li><li>700, corrisponde a <code>bold</code></li><li>800</li><li>900</li></ul><p>dove 100 è il font più leggero e 900 quello più marcato.</p><p>Alcuni di questi valori numerici potrebbero non applicarsi a un font, perché devono essere forniti dalla famiglia di font. Quando manca un valore, il CSS fa sì che quel numero corrisponda a un font marcato almeno quanto il precedente, quindi ci sono dei numeri che puntano allo stesso font.</p><h4 id="font-stretch"><strong><code>font-stretch</code></strong></h4><p>Consente di scegliere una "faccia" del font più stretta o più larga, se disponibile.</p><p>Questo è importante: il font deve essere equipaggiato con diverse facce.</p><p>I valori permessi sono, dal più stretto al più ampio:</p><ul><li><code>ultra-condensed</code></li><li><code>extra-condensed</code></li><li><code>condensed</code></li><li><code>semi-condensed</code></li><li><code>normal</code></li><li><code>semi-expanded</code></li><li><code>expanded</code></li><li><code>extra-expanded</code></li><li><code>ultra-expanded</code></li></ul><h4 id="font-style"><strong><code>font-style</code></strong></h4><p>Consente di applicare lo stile corsivo (italic) a un font:</p><pre><code class="language-css">p {
  font-style: italic;
}</code></pre><p>Questa proprietà accetta anche i valori <code>oblique</code> e <code>normal</code>. C'è davvero poca differenza, se c'è, tra <code>italic</code> e <code>oblique</code>. Il primo è più semplice per me, dato che l'HTML offre già un elemento <code>i</code> che sta per italic.</p><h4 id="font-size"><strong><code>font-size</code></strong></h4><p>Questa proprietà viene usata per determinare la dimensione di un font.</p><p>Puoi passarle due tipi di valori:</p><ol><li>un valore di lunghezza in <code>px</code>, <code>em</code>, <code>rem</code> ecc, o una percentuale</li><li>una parola chiave predefinita</li></ol><p>Nel secondo caso, i valori che puoi usare sono:</p><ul><li>xx-small</li><li>x-small</li><li>small</li><li>medium</li><li>large</li><li>x-large</li><li>xx-large</li><li>smaller (relativamente all'elemento genitore)</li><li>larger (relativamente all'elemento genitore)</li></ul><p>Utilizzo:</p><pre><code class="language-css">p {
  font-size: 20px;
}

li {
  font-size: medium;
}</code></pre><h4 id="font-variant"><strong><code>font-variant</code></strong></h4><p>Questa proprietà era originariamente usata per cambiare il testo in maiuscoletto e ha solo 3 valori validi:</p><ul><li><code>normal</code></li><li><code>inherit</code></li><li><code>small-caps</code></li></ul><p>Maiuscoletto vuol dire che il testo viene presentato in lettere maiuscole ma di altezza inferiore a quella usuale.</p><h4 id="font-1"><strong><code>font</code></strong></h4><p>La proprietà <code>font</code> ti permette di applicare differenti proprietà font insieme, riducendo lo spazio.</p><p>Occorre impostare almeno 2 proprietà, <code>font-size</code> e <code>font-family</code>, mentre le altre sono opzionali:</p><pre><code class="language-css">body {
  font: 20px Helvetica;
}</code></pre><p>Se aggiungiamo le altre proprietà, devono essere inserite nell'ordine corretto.</p><p>Questo è l'ordine:</p><pre><code class="language-css">font: &lt;font-stretch&gt; &lt;font-style&gt; &lt;font-variant&gt; &lt;font-weight&gt; &lt;font-size&gt; &lt;line-height&gt; &lt;font-family&gt;;</code></pre><p>Esempio:</p><pre><code class="language-css">body {
  font: italic bold 20px Helvetica;
}

section {
  font: small-caps bold 20px Helvetica;
}</code></pre><h4 id="caricare-font-personalizzati-usando-font-face"><strong>Caricare font personalizzati usando <code>@font-face</code></strong></h4><p><code>@font-face</code> ti permette di aggiungere un nuovo nome di famiglia di font e di farlo corrispondere a un file che contiene il font.</p><p>Questo font sarà scaricato dal browser e usato nella pagina. Si tratta di una svolta fondamentale nella tipografia del web – ora possiamo usare qualsiasi font vogliamo.</p><p>Possiamo aggiungere delle dichiarazioni <code>@font-face</code> direttamente nel nostro CSS oppure linkare a un apposito CSS per importare il font.</p><p>Nel nostro file CSS possiamo anche usare <code>@import</code> per caricare quel file CSS.</p><p>Una dichiarazione <code>@font-face</code> contiene diverse proprietà che usiamo per definire il font, tra cui <code>src</code>, l'URI (uno o più URI) del font. Segue la regola della stessa origine (same-origin policy), che vuol dire che i font possono essere scaricati solo dall'origine attuale (dominio + porta + protocollo).</p><p>I font sono generalmente nei formati</p><ul><li><code>woff</code> (Web Open Font Format)</li><li><code>woff2</code> (Web Open Font Format 2.0)</li><li><code>eot</code> (Embedded Open Type)</li><li><code>otf</code> (OpenType Font)</li><li><code>ttf</code> (TrueType Font)</li></ul><p>Le seguenti proprietà ci permettono di definire le proprietà del font che stiamo per caricare, come visto in precedenza:</p><ul><li><code>font-family</code></li><li><code>font-weight</code></li><li><code>font-style</code></li><li><code>font-stretch</code></li></ul><h4 id="una-nota-sulle-prestazioni"><strong>Una nota sulle prestazioni</strong></h4><p>Naturalmente, caricare un font ha delle implicazioni riguardo alle prestazioni che dovresti considerare quando progetti una pagina.</p><h3 id="tipografia"><strong>TIPOGRAFIA</strong></h3><p>Abbiamo già parlato dei font, ma c'è anche altro per definire lo stile del testo.</p><p>In questa sezione, parleremo delle seguenti proprietà:</p><ul><li><code>text-transform</code></li><li><code>text-decoration</code></li><li><code>text-align</code></li><li><code>vertical-align</code></li><li><code>line-height</code></li><li><code>text-indent</code></li><li><code>text-align-last</code></li><li><code>word-spacing</code></li><li><code>letter-spacing</code></li><li><code>text-shadow</code></li><li><code>white-space</code></li><li><code>tab-size</code></li><li><code>writing-mode</code></li><li><code>hyphens</code></li><li><code>text-orientation</code></li><li><code>direction</code></li><li><code>line-break</code></li><li><code>word-break</code></li><li><code>overflow-wrap</code></li></ul><h4 id="text-transform"><strong><code>text-transform</code></strong></h4><p>Questa proprietà può cambiare le maiuscole/minuscole di un elemento.</p><p>Esistono 4 valori validi:</p><ul><li><code>capitalize</code> per rendere maiuscola la prima lettera di ogni parola</li><li><code>uppercase</code> per rendere tutto il testo maiuscolo</li><li><code>lowercase</code> per rendere tutto il testo minuscolo</li><li><code>none</code> per disabilitare la trasformazione del testo, usato per &nbsp;evitare di ereditare la proprietà</li></ul><p>Esempio:</p><pre><code class="language-css">p {
  text-transform: uppercase;
}</code></pre><h4 id="text-decoration"><strong><code>text-decoration</code></strong></h4><p>Questa proprietà viene impostata per aggiungere delle decorazioni al testo, tra cui</p><ul><li><code>underline</code></li><li><code>overline</code></li><li><code>line-through</code></li><li><code>blink</code></li><li><code>none</code></li></ul><p>Esempio:</p><pre><code class="language-css">p {
  text-decoration: underline;
}</code></pre><p>Puoi anche impostare lo stile della decorazione e il colore.</p><p>Esempio:</p><pre><code class="language-css">p {
  text-decoration: underline dashed yellow;
}</code></pre><p>Valori di stile validi sono <code>solid</code>, <code>double</code>, <code>dotted</code>, <code>dashed</code>, <code>wavy</code>.</p><p>Puoi fare tutto in una riga oppure usare le proprietà specifiche:</p><ul><li><code>text-decoration-line</code></li><li><code>text-decoration-color</code></li><li><code>text-decoration-style</code></li></ul><p>Esempio:</p><pre><code class="language-css">p {
  text-decoration-line: underline;
  text-decoration-color: yellow;
  text-decoration-style: dashed;
}</code></pre><h4 id="text-align"><strong><code>text-align</code></strong></h4><p>Come impostazione predefinita, l'allineamento del testo ha il valore <code>start</code>, che vuol dire che il testo parte dall'inizio (start), origine 0, 0 del riquadro che lo contiene, ovvero in alto a sinistra, per le lingue scritte da sinistra a destra, e in alto a destra per quelle scritte da destra a sinistra.</p><p>I valori possibili sono <code>start</code>, <code>end</code>, <code>left</code>, <code>right</code>, <code>center</code>, <code>justify</code> (ottimo per avere uno spazio uniforme alla fine delle righe):</p><pre><code class="language-css">p {
  text-align: right;
}</code></pre><h4 id="vertical-align"><strong><code>vertical-align</code></strong></h4><p>Determina come sono allineati verticalmente gli elementi in linea.</p><p>Esistono diversi valori per questa proprietà. Prima possiamo assegnare un valore di lunghezza o percentuale. Vengono usati per allineare il testo in una posizione più alta o più bassa (usando un valore negativo) della linea di base dell'elemento genitore.</p><p>Poi abbiamo le parole chiave:</p><ul><li><code>baseline</code> (predefinito), allinea la linea di base a quella dell'elemento genitore</li><li><code>sub</code> trasforma un elemento in pedice, simulando il risultato dell'elemento HTML <code>sub</code></li><li><code>super</code> trasforma un elemento in apice, simulando il risultato dell'elemento HTML <code>sup</code></li><li><code>top</code> allinea la parte superiore dell'elemento con la parte superiore della riga</li><li><code>text-top</code> allinea la parte superiore dell'elemento con la parte superiore del font dell'elemento genitore</li><li><code>middle</code> allinea il centro dell'elemento con il centro della riga del genitore</li><li><code>bottom</code> allinea la parte inferiore dell'elemento con la parte inferiore della riga</li><li><code>text-bottom</code> allinea la parte inferiore dell'elemento con la parte inferiore del font dell'elemento genitore</li></ul><h4 id="line-height"><strong><code>line-height</code></strong></h4><p>Consente di cambiare l'altezza di una riga. Ogni riga di testo ha una certa altezza del font, ma poi c'è uno spazio aggiuntivo tra &nbsp;le righe. Quella è l'altezza della riga:</p><pre><code class="language-css">p {
  line-height: 0.9rem;
}</code></pre><h4 id="text-indent"><strong><code>text-indent</code></strong></h4><p>Indenta la prima riga di un paragrafo impostando una lunghezza o una percentuale della larghezza del paragrafo:</p><pre><code class="language-css">p {
  text-indent: -10px;
}</code></pre><h4 id="text-align-last"><strong><code>text-align-last</code></strong></h4><p>Di default, l'ultima riga del paragrafo è allineata seguendo il valore di <code>text-align</code>. Usa questa proprietà per cambiare questo comportamento:</p><pre><code class="language-css">p {
  text-align-last: right;
}</code></pre><h4 id="word-spacing"><strong><code>word-spacing</code></strong></h4><p>Modifica la spaziatura tra ogni parola.</p><p>Puoi usare la parola chiave <code>normal</code> per resettare i valori ereditati o usare un valore di lunghezza:</p><pre><code class="language-css">p {
  word-spacing: 2px;
}

span {
  word-spacing: -0.2em;
}</code></pre><h4 id="letter-spacing"><strong><code>letter-spacing</code></strong></h4><p>Modifica la spaziatura tra le lettere.</p><p>Puoi usare la parola chiave <code>normal</code> per resettare i valori ereditati oppure usare un valore di lunghezza:</p><pre><code class="language-css">p {
  letter-spacing: 0.2px;
}

span {
  letter-spacing: -0.2em;
}</code></pre><h4 id="text-shadow"><strong><code>text-shadow</code></strong></h4><p>Applica un'ombra al testo. Di default il testo non ha un'ombra.</p><p>Questa proprietà accetta un colore opzionale e una serie di valori che regolano:</p><ul><li>lo scostamento dell'ombra sull'asse X rispetto al testo</li><li>lo scostamento dell'ombra sull'asse Y rispetto al testo</li><li>il raggio di sfocatura</li></ul><p>Se il colore non è specificato, l'ombra sarà del colore del testo.</p><p>Esempio:</p><pre><code class="language-css">p {
  text-shadow: 0.2px 2px;
}

span {
  text-shadow: yellow 0.2px 2px 3px;
}</code></pre><h4 id="white-space"><strong><code>white-space</code></strong></h4><p>Definisce il modo in cui il CSS gestisce lo spazio vuoto, le nuove righe e le schede all'interno di un elemento.</p><p>Valori validi che comprimono lo spazio vuoto sono:</p><ul><li><code>normal</code> comprime lo spazio vuoto. Aggiunge nuove righe quando necessario se il testo raggiunge la fine del contenitore</li><li><code>nowrap</code> comprime lo spazio vuoto. Non aggiunge una nuova riga quando il testo raggiunge la fine del contenitore ed elimina ogni interruzione di riga aggiunta al testo</li><li><code>pre-line</code> comprime lo spazio vuoto. Aggiunge nuove righe quando necessario se il testo raggiunge la fine del contenitore.</li></ul><p>Valori validi che mantengono lo spazio vuoto sono:</p><ul><li><code>pre</code> mantiene lo spazio vuoto. Non aggiunge una nuova riga quando il testo raggiunge la fine del contenitore, ma mantiene le interruzioni di riga aggiunte al testo</li><li><code>pre-wrap</code> mantiene lo spazio vuoto. Aggiunge nuove righe quando necessario se il testo raggiunge la fine del contenitore</li></ul><h4 id="tab-size"><strong><code>tab-size</code></strong></h4><p>Imposta la larghezza del carattere tab. Di default è 8 e puoi impostarlo su un valore intero, che determina quanto spazio occupa in caratteri, oppure su un valore di lunghezza:</p><pre><code class="language-css">p {
  tab-size: 2;
}

span {
  tab-size: 4px;
}</code></pre><h4 id="writing-mode"><strong><code>writing-mode</code></strong></h4><p>Definisce se le righe del testo sono disposte orizzontalmente o verticalmente e la direzione in cui procedono i blocchi.</p><p>I valori che puoi usare sono</p><ul><li><code>horizontal-tb</code> (predefinito)</li><li><code>vertical-rl</code> il contenuto è disposto verticalmente. Le nuove righe sono messe a sinistra della precedente</li><li><code>vertical-lr</code> il contenuto è disposto verticalmente. Le nuove righe sono messe a destra della precedente</li></ul><h4 id="hyphens"><strong><code>hyphens</code></strong></h4><p>Determina se i trattini devono essere aggiunti automaticamente quando si va su una nuova riga.</p><p>I valori validi sono</p><ul><li><code>none</code> (predefinito)</li><li><code>manual</code> aggiunge un trattino quando c'è già un trattino o un trattino nascosto (un carattere speciale)</li><li><code>auto</code> aggiunge trattini quando determina che il testo può avere un trattino.</li></ul><h4 id="text-orientation"><strong><code>text-orientation</code></strong></h4><p>Quando <code>writing-mode</code> è nella modalità verticale, determina l'orientazione del testo.</p><p>Valori validi sono:</p><ul><li><code>mixed</code> è quello predefinito e se una lingua è verticale (come il giapponese), mantiene l'orientazione ruotando il testo scritto in linguaggi occidentali</li><li><code>upright</code> orienta verticalmente tutto il testo</li><li><code>sideways</code> orienta orizzontalmente tutto il testo</li></ul><h4 id="direction"><strong><code>direction</code></strong></h4><p>Imposta la direzione del testo. Valori validi sono <code>ltr</code> e <code>rtl</code>:</p><pre><code class="language-css">p {
  direction: rtl;
}</code></pre><h4 id="word-break"><strong><code>word-break</code></strong></h4><p>Questa proprietà specifica come si interrompono le righe tra le parole.</p><ul><li><code>normal</code> (predefinito) significa che il testo viene interrotto solo tra le parole e non al loro interno</li><li><code>break-all</code> il browser può spezzare una parola (ma non vengono aggiunti trattini)</li><li><code>keep-all</code> sopprime il <em>soft wrapping</em>. Principalmente usato per i testi CJK (Cinese/Giapponese/Coreano).</li></ul><p>Parlando di testi CJK, la proprietà <code>line-break</code> viene usata per determinare dove si interrompono le righe di testo. Non sono un esperto di queste lingue quindi eviterò di parlarne.</p><h4 id="overflow-wrap"><strong><code>overflow-wrap</code></strong></h4><p>Se una parola è troppo lunga per entrare in una riga, può sforare dal contenitore.</p><blockquote><em>Questa proprietà è anche conosciuta come<em> <code>word-wrap</code>, </em>sebbene non sia <em>standard (</em>ma funzione comunque come un<em> alias)</em></em></blockquote><p>Questo è il comportamento predefinito (<code>overflow-wrap: normal;</code>).</p><p>Possiamo usare:</p><pre><code class="language-css">p {
  overflow-wrap: break-word;
}</code></pre><p>per interromperla all'esatta lunghezza della riga, oppure</p><pre><code class="language-css">p {
  overflow-wrap: anywhere;
}</code></pre><p>se il browser vede che c'è la possibilità di spezzare la riga (soft wrap) prima. Non vengono aggiunti trattini, in ogni caso.</p><p>Questa proprietà è molto simile a <code>word-break</code>. Potremmo sceglierla per i linguaggi occidentali, mentre <code>word-break</code> offre un trattamento speciale per i linguaggi non occidentali.</p><h3 id="modello-a-scatola"><strong>MODELLO A SCATOLA</strong></h3><p>Ogni elemento CSS è essenzialmente una scatola. Ogni elemento è una generica scatola.</p><p>Il box model, o modello a scatola, spiega le dimensioni di un elemento in base a poche proprietà CSS.</p><p>Dall'interno verso l'esterno abbiamo:</p><ul><li>area del contenuto</li><li>padding</li><li>bordo (border)</li><li>margine (margin)</li></ul><p>Il modo migliore per visualizzare il modello a scatola è aprire gli strumenti per sviluppatori del browser e controllare come viene visualizzato:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/xj9Q5XeqWTDKdl2roL0mkiHGXxRfGnAs4MhI" class="kg-image" alt="xj9Q5XeqWTDKdl2roL0mkiHGXxRfGnAs4MhI" width="800" height="463" loading="lazy"></figure><p>Qui puoi vedere come Firefox mi dice le proprietà di un elemento <code>span</code> che ho selezionato. Ho fatto click su di esso con il tasto destro, ho premuto "Ispeziona" e sono andato sul pannello "Layout" dei DevTools.</p><p>Lo spazio azzurro è l'area del contenuto, circondata dal padding, poi dal bordo e infine dal margine.</p><p>Di default, se imposti una larghezza (o altezza) per un elemento, sarà applicata all'<strong>area del contenuto</strong>. Tutti i calcoli per il padding, il bordo e il margine avvengono al di fuori di quel valore, quindi devi tenere a mente questo aspetto quando fai i tuoi conti.</p><p>In seguito vedrai come puoi cambiare questo comportamento usando box-sizing.</p><h3 id="bordi"><strong>BORDI</strong></h3><p>Il bordo è uno strato sottile tra il padding e il margine. Modificando il bordo, puoi far apparire il perimetro degli elementi sullo schermo.</p><p>Puoi agire sui bordi usando queste proprietà:</p><ul><li><code>border-style</code></li><li><code>border-color</code></li><li><code>border-width</code></li></ul><p>La proprietà <code>border</code> può essere usata come scorciatoia per tutte queste proprietà.</p><p><code>border-radius</code> viene usata per creare angoli arrotondati.</p><p>Hai anche la possibilità di usare immagini come bordi, grazie alla proprietà <code>border-image</code> e dalla sue separate proprietà specifiche:</p><ul><li><code>border-image-source</code></li><li><code>border-image-slice</code></li><li><code>border-image-width</code></li><li><code>border-image-outset</code></li><li><code>border-image-repeat</code></li></ul><p>Partiamo da <code>border-style</code>.</p><h4 id="lo-stile-dei-bordi"><strong>Lo stile dei bordi</strong></h4><p>La proprietà <code>border-style</code> ti consente di scegliere lo stile dei bordi. Le opzioni che puoi usare sono:</p><ul><li><code>dotted</code></li><li><code>dashed</code></li><li><code>solid</code></li><li><code>double</code></li><li><code>groove</code></li><li><code>ridge</code></li><li><code>inset</code></li><li><code>outset</code></li><li><code>none</code></li><li><code>hidden</code></li></ul><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/lCWsi0wfQU30QoiDD6GsvfRrWx-4DurGOMeX" class="kg-image" alt="lCWsi0wfQU30QoiDD6GsvfRrWx-4DurGOMeX" width="426" height="459" loading="lazy"></figure><p>Dai un'occhiata a <a href="https://codepen.io/flaviocopes/pen/yraaxq" rel="noopener">questo Codepen</a> per un esempio.</p><p>Il valore predefinito è <code>none</code>, quindi per far apparire il bordo devi cambiarlo in qualcos'altro. <code>solid</code> è una buona scelta il più delle volte.</p><p>Puoi impostare uno stile diverso per ogni lato usando le proprietà</p><ul><li><code>border-top-style</code></li><li><code>border-right-style</code></li><li><code>border-bottom-style</code></li><li><code>border-left-style</code></li></ul><p>oppure puoi usare <code>border-style</code> con più valori per definirli, usando il solito ordine Su-Destra-Giù-Sinistra:</p><pre><code>p {
  border-style: solid dotted solid dotted;
}</code></pre><h4 id="lo-spessore-del-bordo"><strong>Lo spessore del bordo</strong></h4><p><code>border-width</code> viene usata per impostare la larghezza del bordo.</p><p>Puoi usare uno di questi valori:</p><ul><li><code>thin</code></li><li><code>medium</code> (il valore predefinito)</li><li><code>thick</code></li></ul><p>o esprimere il valore in pixel, em o rem o qualsiasi altra unità di lunghezza valida.</p><p>Esempio:</p><pre><code class="language-css">p {
  border-width: 2px;
}</code></pre><p>Puoi impostare la larghezza di ogni lato (Su-Destra-Giù-Sinistra) separatamente usando 4 valori:</p><pre><code class="language-css">p {
  border-width: 2px 1px 2px 1px;
}</code></pre><p>oppure puoi usare le proprietà specifiche per ogni lato <code>border-top-width</code>, <code>border-right-width</code>, <code>border-bottom-width</code>, <code>border-left-width</code>.</p><h4 id="il-colore-del-bordo"><strong>Il colore del bordo</strong></h4><p><code>border-color</code> viene usata per impostare il colore del bordo.</p><p>Se non imposti un colore, il bordo viene colorato in modo predefinito con il colore del testo dell'elemento.</p><p>Puoi passare a <code>border-color</code> qualsiasi valore di colore valido.</p><p>Esempio:</p><pre><code class="language-css">p {
  border-color: yellow;
}</code></pre><p>Puoi impostare il colore di ogni lato (Su-Destra-Giù-Sinistra) separatamente usando 4 valori:</p><pre><code class="language-css">p {
  border-color: black red yellow blue;
}</code></pre><p>oppure puoi usare le proprietà specifiche per ogni lato <code>border-top-color</code>, <code>border-right-color</code>, <code>border-bottom-color</code>, <code>border-left-color</code>.</p><h4 id="la-propriet-scorciatoia-border"><strong>La proprietà scorciatoia border </strong></h4><p>Queste 3 proprietà menzionate, <code>border-width</code>, <code>border-style</code> e <code>border-color</code> possono essere regolate usando le proprietà scorciatoia <code>border</code>.</p><p>Esempio:</p><pre><code class="language-css">p {
  border: 2px black solid;
}</code></pre><p>Puoi usare anche le proprietà specifiche per ogni lato <code>border-top</code>, <code>border-right</code>, <code>border-bottom</code>, <code>border-left</code>.</p><p>Esempio:</p><pre><code class="language-css">p {
  border-left: 2px black solid;
  border-right: 3px red dashed;
}</code></pre><h4 id="border-radius"><strong>Border radius</strong></h4><p><code>border-radius</code> viene usata per arrotondare gli angoli dei bordi. Devi passare un valore che sarà usato come il raggio del cerchio utilizzato per smussare il bordo.</p><p>Utilizzo:</p><pre><code class="language-css">p {
  border-radius: 3px;
}</code></pre><p>Puoi anche usare le proprietà specifiche per i lati <code>border-top-left-radius</code>, <code>border-top-right-radius</code>, <code>border-bottom-left-radius</code>, <code>border-bottom-right-radius</code>.</p><h4 id="usare-immagini-come-bordo"><strong>Usare immagini come bordo</strong></h4><p>Una cosa molto simpatica con i bordi è la possibilità di usare immagini per definirne lo stile, consentendoti di essere molto creativo.</p><p>Esistono 5 proprietà:</p><ul><li><code>border-image-source</code></li><li><code>border-image-slice</code></li><li><code>border-image-width</code></li><li><code>border-image-outset</code></li><li><code>border-image-repeat</code></li></ul><p>e la scorciatoia <code>border-image</code>. Qui non mi soffermerò oltre, dato che le immagini come bordo necessiterebbero di una trattazione più approfondita di quella che posso fare in questo piccolo capitolo. Consiglio <a href="https://css-tricks.com/almanac/properties/b/border-image/">questa lettura</a> (risorsa in lingua originale inglese) per maggiori informazioni. </p><h3 id="padding"><strong>PADDING</strong></h3><p>La proprietà CSS <code>padding</code> è comunemente usata in CSS per aggiungere spazio alla parte interna di un elemento.</p><p>Ricorda:</p><ul><li><code>margin</code> aggiunge spazio all'esterno del bordo dell'elemento</li><li><code>padding</code> aggiunge spazio all'interno del bordo dell'elemento</li></ul><h4 id="propriet-padding-specifiche">Proprietà padding specifiche</h4><p><code>padding</code> ha 4 proprietà correlate che alterano il padding di un singolo lato alla volta:</p><ul><li><code>padding-top</code> - su</li><li><code>padding-right</code> - destra</li><li><code>padding-bottom</code> - giù</li><li><code>padding-left</code> - sinistra</li></ul><p>L'uso di queste proprietà è molto semplice e non può essere confuso, ad esempio:</p><pre><code class="language-css">padding-left: 30px;
padding-right: 3em;</code></pre><h4 id="usare-la-scorciatoia-padding"><strong>Usare la scorciatoia <code>padding</code></strong></h4><p><code>padding</code> è una scorciatoia per specificare più valori di padding allo stesso tempo, e si comporta in modo diverso a seconda di quanti valori vengono inseriti.</p><h4 id="1-valore"><strong>1 valore</strong></h4><p>L'uso di un singolo valore applica il padding a <strong>tutti </strong>i lati: top, right, bottom, left.</p><pre><code class="language-css">padding: 20px;</code></pre><h4 id="2-valori"><strong>2 valori</strong></h4><p>Usando 2 valori il primo viene applicato a <strong><strong>bottom &amp; top</strong></strong>, e il secondo a <strong><strong>left &amp; right</strong></strong>.</p><pre><code class="language-css">padding: 20px 10px;</code></pre><h4 id="3-valori"><strong>3 valori</strong></h4><p>Usando 3 valori il primo viene applicato a <strong>top</strong>, il secondo a <strong><strong>left &amp; right</strong></strong>, e il terzo a <strong><strong>bottom</strong></strong>.</p><pre><code class="language-css">padding: 20px 10px 30px;</code></pre><h4 id="4-valori"><strong>4 valori</strong></h4><p>Usando 4 valori il primo viene applicato a <strong><strong>top</strong></strong>, il secondo a <strong><strong>right</strong></strong>, il terzo a <strong><strong>bottom</strong></strong>, il quarto a <strong><strong>left</strong></strong>.</p><pre><code class="language-css">padding: 20px 10px 5px 0px;</code></pre><p>Quindi l'ordine è <em><em>top-right-bottom-left</em></em>.</p><h4 id="valori-accettati"><strong>Valori accettati</strong></h4><p><code>padding</code> accetta valori espressi in ogni tipo di unità di lunghezza, di cui i più comuni sono px, em, rem, ma <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length">ne esistono molti altri</a>.</p><h3 id="margini"><strong>MARGINI</strong></h3><p>La proprietà CSS <code>margin</code> è comunemente usata in CSS per aggiungere spazio attorno a un elemento.</p><p>Ricorda:</p><ul><li><code>margin</code> aggiunge spazio all'esterno del bordo di un elemento</li><li><code>padding</code> aggiunge spazio all'interno del bordo di un elemento</li></ul><h4 id="propriet-margin-specifiche"><strong>Proprietà margin specifiche</strong></h4><p><code>margin</code> ha 4 proprietà correlate che alterano il margine di un singolo lato alla volta:</p><ul><li><code>margin-top</code></li><li><code>margin-right</code></li><li><code>margin-bottom</code></li><li><code>margin-left</code></li></ul><p>L'uso di queste proprietà è molto semplice e non può essere confuso, ad esempio:</p><pre><code class="language-css">margin-left: 30px;
margin-right: 3em;</code></pre><h4 id="usare-la-scorciatoia-margin"><strong>Usare la scorciatoia <code>margin</code></strong></h4><p><code>margin</code> è una scorciatoia per specificare più margini allo stesso tempo, e a seconda del numero di valori inseriti si comporta in modo diverso.</p><h4 id="1-valore-1"><strong>1 valore</strong></h4><p>Usando un singolo valore, questo viene applicato a <strong>tutti </strong>i margini: top, right, bottom, left.</p><pre><code class="language-css">margin: 20px;</code></pre><h4 id="2-valori-1"><strong>2 valori</strong></h4><p>Usando 2 valori, il primo viene applicato a <strong><strong>bottom &amp; top</strong></strong>, e il secondo a <strong><strong>left &amp; right</strong></strong>.</p><pre><code class="language-css">margin: 20px 10px;</code></pre><h4 id="3-valori-1"><strong>3 valori</strong></h4><p>Usando 3 valori, il primo viene applicato a <strong><strong>top</strong></strong>, il secondo a <strong><strong>left &amp; right</strong></strong>, il terzo a <strong><strong>bottom</strong></strong>.</p><pre><code class="language-css">margin: 20px 10px 30px;</code></pre><h4 id="4-valori-1"><strong>4 valori</strong></h4><p>Usando 4 valori, il primo viene applicato a <strong><strong>top</strong></strong>, il secondo a <strong><strong>right</strong></strong>, il terzo a <strong><strong>bottom</strong></strong>, il quarto a <strong><strong>left</strong></strong>.</p><pre><code class="language-css">margin: 20px 10px 5px 0px;</code></pre><p>Quindi l'ordine è <em><em>top-right-bottom-left</em></em>.</p><h4 id="valori-accettati-1"><strong>Valori accettati</strong></h4><p><code>margin</code> accetta valori espressi in qualsiasi unità di lunghezza, di cui i più comuni sono px, em, rem, ma <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length">ne esistono molti altri</a>.</p><p>Accetta anche valori percentuali e il valore speciale <code>auto</code>.</p><h4 id="usare-auto-per-centrare-elementi"><strong>Usare <code>auto</code> per centrare elementi</strong></h4><p><code>auto</code> può essere usato per selezionare automaticamente un margine ed è usato soprattutto per centrare un elemento, in questo modo:</p><pre><code class="language-css">margin: 0 auto;</code></pre><p>Come detto sopra, usando 2 valori, il primo viene applicato a <strong><strong>bottom &amp; top</strong></strong>, e il secondo a <strong><strong>left &amp; right</strong></strong>.</p><p>Il modo moderno per centrare elementi è usare <a href="https://flaviocopes.com/flexbox/" rel="noopener">Flexbox</a>, e la sua direttiva <code>justify-content: center;</code>.</p><p>I vecchi browser naturalmente non implementano Flexbox e se hai bisogno di supportarli, <code>margin: 0 auto;</code> è una buona scelta.</p><h4 id="usare-un-margine-negativo"><strong>Usare un margine negativo</strong></h4><p><code>margin</code> è l'unica proprietà relativa alle dimensioni che può avere un valore negativo. Ed è anche estremamente utile. Impostare un margine superiore negativo fa sì che l'elemento si sposti sopra l'elemento che lo precede, e con un valore abbastanza negativo si sposterà fuori dalla pagina.</p><p>Un margine inferiore negativo sposta l'elemento dopo di esso.</p><p>Un margine destro negativo fa espandere il contenuto dell'elemento oltre la dimensione ammessa.</p><p>Un margine sinistro negativo sposta l'elemento sopra l'elemento che lo precede, e con un valore abbastanza negativo si sposterà fuori dalla pagina.</p><h3 id="box-sizing"><strong>BOX SIZING</strong></h3><p>Il comportamento predefinito dei browser nel calcolo della larghezza di un elemento è di applicare la larghezza e l'altezza calcolate all'<strong>area del contenuto</strong>, senza prendere in considerazione padding e margini.</p><p>Questo approccio si è dimostrato essere alquanto complicato per lavorare.</p><p>Puoi cambiare questo comportamento impostando la proprietà <code>box-sizing</code>.</p><p>La proprietà <code>box-sizing</code> è di grande aiuto. Ha due valori:</p><ul><li><code>border-box</code></li><li><code>content-box</code></li></ul><p><code>content-box</code> è il valore predefinito, quello che abbiamo avuto per anni prima che <code>box-sizing</code> prendesse forma.</p><p><code>border-box</code> è il valore nuovo e meraviglioso che stavamo cercando. Se lo imposti per un elemento:</p><pre><code class="language-css">.my-div {
  box-sizing: border-box;
}</code></pre><p>il calcolo di larghezza e altezza include padding e bordo. Solo il margine viene lasciato fuori, il che è ragionevole dato che nella nostra mente lo vediamo tipicamente come una cosa separata: il margine è al di fuori della scatola.</p><p>Questa proprietà è un piccolo cambiamento ma ha un grande impatto. CSS Tricks ha persino indetto l'<a href="https://css-tricks.com/international-box-sizing-awareness-day/" rel="noopener">international box-sizing awareness day</a>, tanto per dire, ed è consigliato applicarla a tutti gli elementi sulla pagina, pronta all'uso, così:</p><pre><code class="language-css">*, *:before, *:after {
  box-sizing: border-box;
}</code></pre><h3 id="display"><strong>DISPLAY</strong></h3><p>La proprietà <code>display</code> di un oggetto determina come viene presentato nel browser.</p><p>È una proprietà molto importante e probabilmente quella con il maggior numero di valori che puoi usare.</p><p>Questi valori comprendono:</p><ul><li><code>block</code></li><li><code>inline</code></li><li><code>none</code></li><li><code>contents</code></li><li><code>flow</code></li><li><code>flow-root</code></li><li><code>table</code> (e tutti quelli <code>table-*</code>)</li><li><code>flex</code></li><li><code>grid</code></li><li><code>list-item</code></li><li><code>inline-block</code></li><li><code>inline-table</code></li><li><code>inline-flex</code></li><li><code>inline-grid</code></li><li><code>inline-list-item</code></li></ul><p>più altri che userai difficilmente, come <code>ruby</code>.</p><p>Scegliere uno di questi altererà in modo considerevole il comportamento del browser con l'elemento e i suoi figli.</p><p>In questa sezione analizzeremo i valori più importanti e non trattati altrove:</p><ul><li><code>block</code></li><li><code>inline</code></li><li><code>inline-block</code></li><li><code>none</code></li></ul><p>Nei capitoli successivi vedremo alcuni degli altri, tra cui <code>table</code>, <code>flex</code> e <code>grid</code>.</p><h4 id="inline"><strong><code>inline</code></strong></h4><p>Inline è il valore predefinito di display per tutti gli elementi in CSS.</p><p>Tutti i tag HTML vengono visualizzati come inline, eccetto alcuni elementi come <code>div</code>, <code>p</code> e <code>section</code>, che vengono impostati come <code>block</code> dallo user agent (il browser).</p><p>Gli elementi inline non hanno alcun margine o padding applicati.</p><p>Lo stesso vale per altezza e larghezza.</p><p>Puoi aggiungerli, ma l'aspetto nella pagina non cambierà — sono calcolati e applicati automaticamente dal browser.</p><h4 id="inline-block"><strong><code>inline-block</code></strong></h4><p>Simile a <code>inline</code>, ma con <code>inline-block</code> <code>width</code> e <code>height</code> vengono applicate come specifichi.</p><h4 id="block"><strong><code>block</code></strong></h4><p>Come menzionato, normalmente gli elementi sono visualizzati come inline, con l'eccezione di alcuni elementi, tra cui:</p><ul><li><code>div</code></li><li><code>p</code></li><li><code>section</code></li><li><code>ul</code></li></ul><p>che sono impostati come <code>block</code> dal browser.</p><p>Con <code>display: block</code>, gli elementi sono impilati gli uni sugli altri verticalmente e ogni elemento occupa il 100% della pagina.</p><p>I valori assegnati alle proprietà <code>width</code> e <code>height</code> sono rispettati, se li imposti, insieme a <code>margin</code> e <code>padding</code>.</p><h4 id="none"><strong><code>none</code></strong></h4><p>Usare <code>display: none</code> fa scomparire un elemento. È ancora lì nell'HTML, ma non è visibile nel browser.</p><h3 id="posizionamento"><strong>POSIZIONAMENTO</strong></h3><p>Il posizionamento è ciò che determina dove gli elementi appaiono sullo schermo e come appaiono.</p><p>Puoi spostare gli elementi in giro e posizionarli esattamente dove vuoi.</p><p>In questa sezione, vedremo anche come cambiano le cose su una pagina in base a come gli elementi in diverse posizioni interagiscono tra di loro.</p><p>Abbiamo una proprietà CSS principale: <code>position</code>.</p><p>Può assumere questi 5 valori:</p><ul><li><code>static</code></li><li><code>relative</code></li><li><code>absolute</code></li><li><code>fixed</code></li><li><code>sticky</code></li></ul><h4 id="posizionamento-statico"><strong>Posizionamento statico</strong></h4><p>È il valore predefinito per un elemento. Gli elementi con posizionamento statico sono mostrati nel normale flusso della pagina.</p><h4 id="posizionamento-relativo"><strong>Posizionamento relativo</strong></h4><p>Se imposti <code>position: relative</code> su un elemento, sei in grado di posizionarlo secondo uno spostamento impostando le proprietà:</p><ul><li>top</li><li>right</li><li>bottom</li><li>left</li></ul><p>che vengono chiamate <strong>proprietà <strong>offset</strong></strong>. Accettano un valore di lunghezza o una percentuale.</p><p>Prendi <a href="https://codepen.io/flaviocopes/pen/WWGgrR">questo esempio che ho creato su </a><a href="https://codepen.io/flaviocopes/pen/WWGgrR" rel="noopener">Codepen</a>. Ho creato un contenitore genitore (parent), un contenitore figlio (child) e una scatola interna (box) con del testo:</p><pre><code class="language-html">&lt;div class="parent"&gt;
  &lt;div class="child"&gt;
    &lt;div class="box"&gt;
      &lt;p&gt;Test&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre><p>con un po' di CSS per dare colori e padding, ma senza influenzare il posizionamento:</p><pre><code class="language-css">.parent {
  background-color: #af47ff;
  padding: 30px;
  width: 300px;
}

.child {
  background-color: #ff4797;
  padding: 30px;
}

.box {
  background-color: #f3ff47;
  padding: 30px;
  border: 2px solid #333;
  border-style: dotted;
  font-family: courier;
  text-align: center;
  font-size: 2rem;
}</code></pre><p>Ecco il risultato:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/gtXUfjyrczqxDqdfrjJyec58o9ru6CqGGCFD" class="kg-image" alt="gtXUfjyrczqxDqdfrjJyec58o9ru6CqGGCFD" width="379" height="297" loading="lazy"></figure><p>Puoi provare ad aggiungere a <code>.box</code> qualsiasi altra proprietà che ho menzionato precedentemente (<code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code>) e non accadrà nulla. La posizione è <code>static</code>.</p><p>Se impostiamo <code>position: relative</code> per il box, sulle prime sembra non cambiare nulla. Ma adesso l'elemento è in grado di muoversi usando le proprietà <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code>, e ora puoi variare la sua posizione relativamente all'elemento che lo contiene.</p><p>Ad esempio:</p><pre><code class="language-css">.box {
  /* ... */
  position: relative;
  top: -60px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/aYTcDVhCB9-CazlQrWrPyfxMpr3TThT0V-ho" class="kg-image" alt="aYTcDVhCB9-CazlQrWrPyfxMpr3TThT0V-ho" width="386" height="303" loading="lazy"></figure><p>Un valore negativo di <code>top</code> farà spostare il box in alto relativamente al suo contenitore.</p><p>Oppure</p><pre><code class="language-css">.box {
  /* ... */
  position: relative;
  top: -60px;
  left: 180px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/5ePc6ALKZV0fubpagz0OzfPBCzctqPAJY81p" class="kg-image" alt="5ePc6ALKZV0fubpagz0OzfPBCzctqPAJY81p" width="508" height="299" loading="lazy"></figure><p>Nota come lo spazio che è occupato dal box resta invariato nel contenitore, come se fosse ancora al suo posto.</p><p>Un'altra proprietà che adesso funzionerà è <code>z-index</code>, per alterare il posizionamento sull'asse z. Ne parleremo più avanti.</p><h4 id="posizionamento-assoluto"><strong>Posizionamento assoluto</strong></h4><p>Impostare <code>position: absolute</code> su un elemento lo rimuoverà dal flusso del documento.</p><p>Ricordi che con il posizionamento relativo abbiamo notato che lo spazio originalmente occupato dall'elemento era rimasto invariato anche dopo lo spostamento?</p><p>Con il posizionamento assoluto, non appena impostiamo <code>position: absolute</code> su <code>.box</code>, il suo spazio originario collassa e soltanto l'origine (coordinate x, y) resta la stessa.</p><pre><code class="language-css">.box {
  /* ... */
  position: absolute;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/B4aFUpYab0eSO-LUQKAu2Vmbi-wnFA8qFOHm" class="kg-image" alt="B4aFUpYab0eSO-LUQKAu2Vmbi-wnFA8qFOHm" width="381" height="251" loading="lazy"></figure><p>Adesso possiamo spostare il box in giro a nostro piacimento usando le proprietà <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code>:</p><pre><code class="language-css">.box {
  /* ... */
  position: absolute;
  top: 0px;
  left: 0px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/NHw-ZkR2lzBsPyb9gSYTyuYGreSvedNPsJ7J" class="kg-image" alt="NHw-ZkR2lzBsPyb9gSYTyuYGreSvedNPsJ7J" width="419" height="204" loading="lazy"></figure><p>oppure</p><pre><code class="language-css">.box {
  /* ... */
  position: absolute;
  top: 140px;
  left: 50px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/QOYrWkDjiNv7ODZ9WtYCBVEnJf5oZwGfombH" class="kg-image" alt="QOYrWkDjiNv7ODZ9WtYCBVEnJf5oZwGfombH" width="388" height="320" loading="lazy"></figure><p>Le coordinate sono relative al contenitore più vicino che non è <code>static</code>.</p><p>Ciò vuol dire che se aggiungiamo <code>position: relative</code> all'elemento <code>.child</code> e impostiamo <code>top</code> e <code>left</code> su 0, il box non sarà posizionato nel margine superiore sinistro della finestra, ma sarà posizionato nelle coordinate 0, 0 di <code>.child</code>:</p><pre><code class="language-css">.child {
  /* ... */
  position: relative;
}

.box {
  /* ... */
  position: absolute;
  top: 0px;
  left: 0px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1FB8qKtiZgmxtp7xjd6UU7CW573XRxTrZlNc" class="kg-image" alt="1FB8qKtiZgmxtp7xjd6UU7CW573XRxTrZlNc" width="419" height="211" loading="lazy"></figure><p>Ed ecco, come abbiamo già visto, <code>.child</code> in posizionamento statico (predefinito):</p><pre><code class="language-css">.child {
  /* ... */
  position: static;
}

.box {
  /* ... */
  position: absolute;
  top: 0px;
  left: 0px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/eF4yC5dRIkcyezTcVUCbG36sfxOVurQX2L38" class="kg-image" alt="eF4yC5dRIkcyezTcVUCbG36sfxOVurQX2L38" width="419" height="204" loading="lazy"></figure><p>Come per il posizionamento relativo, puoi usare <code>z-index</code> per cambiare il posizionamento sull'asse z.</p><h4 id="posizionamento-fisso"><strong>Posizionamento fisso</strong></h4><p>Come per il posizionamento assoluto, quando a un elemento è assegnato <code>position: fixed</code>, viene rimosso dal flusso della pagina.</p><p>La differenza con il posizionamento assoluto è che gli elementi sono sempre posizionati in base alla finestra, invece che rispetto al primo contenitore non statico.</p><pre><code class="language-css">.box {
  /* ... */
  position: fixed;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/Ium4uJdPRXPpp-gAVsMMWveviu6HY-g0nUYA" class="kg-image" alt="Ium4uJdPRXPpp-gAVsMMWveviu6HY-g0nUYA" width="381" height="240" loading="lazy"></figure><pre><code class="language-css">.box {
  /* ... */
  position: fixed;
  top: 0;
  left: 0;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/k3-LecCC6WXUjssKdQ9u9w70EZSh3hzK3iFY" class="kg-image" alt="k3-LecCC6WXUjssKdQ9u9w70EZSh3hzK3iFY" width="395" height="179" loading="lazy"></figure><p>Un'altra grande differenza è che gli elementi non sono influenzati dallo scorrimento. Una volta che posizioni da qualche parte un elemento fisso, lo scorrimento non lo rimuove dalla parte visibile della pagina.</p><h4 id="posizionamento-sticky"><strong>Posizionamento sticky</strong></h4><p>Mentre i valori qui sopra sono in circolazione da molto tempo, questo è stato aggiunto recentemente ed è ancora relativamente non supportato (vedi <a href="https://caniuse.com/#feat=css-sticky" rel="noopener">caniuse.com</a>).</p><p>Il componente UITableView iOS è ciò che mi viene in mente pensando a <code>position: sticky</code>. Hai presente quando scorri la lista dei contatti e la prima lettera resta bloccata in cima, per farti sapere che stai vedendo i contatti con quella specifica lettera?</p><p>Usavamo JavaScript per mimare questo effetto, ma questo è l'approccio adottato dal CSS per consentirlo in modo nativo.</p><h3 id="float-e-clear"><strong>FLOAT E CLEAR</strong></h3><p>Float è stato un argomento molto importante in passato.</p><p>Veniva usato per un sacco di trucchetti e utilizzi creativi, visto che era uno dei pochi modi, insieme alla tabelle, per realizzare alcuni layout. Nel passato era comune usare float, ad esempio, per mostrare la barra laterale sul lato sinistro dello schermo e aggiungere del margine al contenuto principale.</p><p>Fortunatamente i tempi sono cambiati e oggi abbiamo Flexbox e Grid per darci una mano con i layout, così float è tornata al suo scopo originale: posizionare il contenuto su un lato dell'elemento contenitore e rendere visibili i suoi fratelli intorno ad esso.</p><p>La proprietà <code>float</code> supporta 3 valori:</p><ul><li><code>left</code></li><li><code>right</code></li><li><code>none</code> (predefinito)</li></ul><p>Diciamo di avere un box che contiene un paragrafo con del testo, e il paragrafo contiene un'immagine.</p><p>Ecco il codice:</p><pre><code class="language-css">&lt;div class="parent"&gt;
  &lt;div class="child"&gt;
    &lt;div class="box"&gt;
      &lt;p&gt;This is some random paragraph and an image. &lt;img src="https://via.placeholder.com/100x100" /&gt; The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

.parent {
  background-color: #af47ff;
  padding: 30px;
  width: 500px;
}

.child {
  background-color: #ff4797;
  padding: 30px;
}

.box {
  background-color: #f3ff47;
  padding: 30px;
  border: 2px solid #333;
  border-style: dotted;
  font-family: courier;
  text-align: justify;
  font-size: 1rem;
}</code></pre><p>e come appare visivamente:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/fx5ZaCoCalyWSNeIkNi6044e5uEPPlQVupJD" class="kg-image" alt="fx5ZaCoCalyWSNeIkNi6044e5uEPPlQVupJD" width="578" height="507" loading="lazy"></figure><p>Come puoi vedere, il normale flusso predefinito considera l'immagine inline e le fa spazio sulla riga stessa.</p><p>Se aggiungiamo all'imagine <code>float: left</code> e del padding:</p><pre><code class="language-css">img {
  float: left;
  padding: 20px 20px 0px 0px;
}</code></pre><p>Ecco il risultato:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/Yftt6zI7UBrNYY30BapoEr3BAtiVCx80M4Eq" class="kg-image" alt="Yftt6zI7UBrNYY30BapoEr3BAtiVCx80M4Eq" width="584" height="465" loading="lazy"></figure><p>e questo è ciò che otteniamo applicando <code>float: right</code>, regolando il padding di conseguenza:</p><pre><code class="language-css">img {
  float: right;
  padding: 20px 0px 20px 20px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/WORQNScMck67c42LH0cfbiZJmzNnGzWde1Au" class="kg-image" alt="WORQNScMck67c42LH0cfbiZJmzNnGzWde1Au" width="583" height="478" loading="lazy"></figure><p>Un elemento con float viene rimosso dal normale flusso della pagina e gli altri contenuti fluiscono intorno a esso.</p><p><a href="https://codepen.io/flaviocopes/pen/WWGqPr?editors=1100" rel="noopener">Guarda questo esempio su Codepen</a></p><p>Non sei costretto a usarlo solo sulle immagini. In questo caso abbiamo sostituito l'immagine con un elemento <code>span</code>:</p><pre><code class="language-css">&lt;div class="parent"&gt;
  &lt;div class="child"&gt;
    &lt;div class="box"&gt;
      &lt;p&gt;This is some random paragraph and an image. &lt;span&gt;Some text to float&lt;/span&gt; The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text. The image is in the middle of the text.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

span {
  float: right;
  margin: 20px 0px 20px 20px;
  padding: 10px;
  border: 1px solid black
}</code></pre><p>e questo è il risultato:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/Pe0oVfgmeHF7Rheb4hPwXTaq5AZ1939rMeBy" class="kg-image" alt="Pe0oVfgmeHF7Rheb4hPwXTaq5AZ1939rMeBy" width="579" height="476" loading="lazy"></figure><h4 id="clear"><strong>Clear</strong></h4><p>Cosa accade se usi float su più elementi?</p><p>Se trovano altre immagini con float, di default si affiancano tra di loro orizzontalmente, finché non c'è più spazio e iniziano ad andare su una nuova riga.</p><p>Diciamo di avere 3 immagini inline in un tag <code>p</code>:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/15-LCn0BOSVAVMraLSiNzWpP-oWBiEKIGULW" class="kg-image" alt="15-LCn0BOSVAVMraLSiNzWpP-oWBiEKIGULW" width="580" height="594" loading="lazy"></figure><p>Se aggiungiamo <code>float: left</code> alle immagini:</p><pre><code class="language-css">img {
  float: left;
  padding: 20px 20px 0px 0px;
}</code></pre><p>ecco cosa otterremo:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/JGZ7LTxKux1nKWIISdzIPgb2jzxcqpifbxIx" class="kg-image" alt="JGZ7LTxKux1nKWIISdzIPgb2jzxcqpifbxIx" width="577" height="610" loading="lazy"></figure><p>Se aggiungiamo <code>clear: left</code> alle immagini, saranno impilate verticalmente invece che disposte orizzontalmente:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/9J-ggQAlJFZ4C1hUbnpD74FcjuKpS960LABv" class="kg-image" alt="9J-ggQAlJFZ4C1hUbnpD74FcjuKpS960LABv" width="578" height="594" loading="lazy"></figure><p>Ho usato il valore <code>left</code> per <code>clear</code>. Accetta:</p><ul><li><code>left</code> per sinistra</li><li><code>right</code> per destra</li><li><code>both</code> per entrambe</li><li><code>none</code> (predefinito) disabilita clear</li></ul><h3 id="z-index"><strong>Z-INDEX</strong></h3><p>Quando abbiamo parlato del posizionamento, ho menzionato l'utilizzo della proprietà <code>z-index</code> per controllare il posizionamento degli elementi sull'asse Z.</p><p>È molto utile quando hai più elementi che si sovrappongono gli uni sugli altri e devi decidere quale deve essere visibile, in quanto più vicino all'utente, e quali devono essere nascosti dietro di esso.</p><p>Questa proprietà prende un numero (senza decimali) e lo utilizza per calcolare quale elemento deve apparire più vicino all'utente, sull'asse Z.</p><p>Più alto è il valore di z-index, più vicino all'utente si trova un elemento.</p><p>Per decidere quale elemento dovrebbe essere visibile e quale dovrebbe essere posizionato dietro di esso, il browser effettua il calcolo sulla base del valore di z-index.</p><p>Il valore predefinito è <code>auto</code>, una parola chiave speciale. Usando <code>auto</code>, l'asse Z è determinato dalla posizione dell'elemento HTML nella pagina – l'ultimo fratello appare per primo, in quanto definito per ultimo.</p><p>Di default gli elementi hanno il valore <code>static</code> per la proprietà <code>position</code>. In questo caso, la proprietà <code>z-index</code> non fa alcuna differenza – <code>position</code> deve essere impostata su <code>absolute</code>, <code>relative</code> o <code>fixed</code> affinché funzioni.</p><p>Esempio:</p><pre><code class="language-css">.my-first-div {
    position: absolute;
    top: 0;
    left: 0;
    width: 600px;
    height: 600px;
    z-index: 10;
}

.my-second-div {
    position: absolute;
    top: 0;
    left: 0;
    width: 500px;
    height: 500px;
    z-index: 20;
}</code></pre><p>L'elemento con la classe <code>.my-second-div</code> sarà visualizzato e dietro di lui <code>.my-first-div</code>.</p><p>Qui abbiamo usato 10 e 20, ma puoi usare qualsiasi numero. Anche numeri negativi. È comune scegliere numeri non consecutivi, in modo da poter posizionare degli elementi nel mezzo. Se invece utilizzi numeri consecutivi, avrai bisogno di ricalcolare lo z-index coinvolto nel posizionamento di ogni elemento.</p><h3 id="css-grid"><strong>CSS GRID</strong></h3><p>CSS Grid è il nuovo arrivato nella città del CSS, e nonostante non sia ancora completamente supportato da tutti i browser, sarà il sistema alla base dei layout del futuro.</p><p>Fondamentalmente, CSS Grid è un nuovo approccio per creare dei layout usando il CSS.</p><p>Dai un'occhiata alla pagina CSS Grid Layout su caniuse.com (<a href="https://caniuse.com/#feat=css-grid" rel="noopener">https://caniuse.com/#feat=css-grid</a>) per trovare quali browser lo supportano attualmente. Nell'aprile 2019, al momento della scrittura di questo manuale, tutti i maggiori browser (eccetto IE, che non lo ha mai supportato) stanno già supportando questa tecnologia, raggiungendo il 92% di tutti gli utenti.</p><p>CSS Grid non è un concorrente di Flexbox. Interagiscono e collaborano in layout complessi, perché CSS Grid lavora in 2 dimensioni (righe E colonne), mentre Flexbox lavora in una sola dimensione (righe O colonne).</p><p>Costruire layout per il web è tradizionalmente un argomento complicato.</p><p>Non mi addentrerò nei dettagli di questa complessità, in quanto si tratta di un argomento a sé stante, ma puoi ritenerti una persona davvero fortunata dato che al giorno d'oggi hai a disposizione 2 strumenti molto potenti e ben supportati:</p><ul><li><strong><strong>CSS Flexbox</strong></strong></li><li><strong><strong>CSS Grid</strong></strong></li></ul><p>Questi sono i 2 strumenti con cui costruire i layout del web del futuro.</p><p>A meno che tu non debba supportare vecchi browser come IE8 e IE9, non c'è ragione per crearsi problemi con cose come:</p><ul><li>layout di tabelle</li><li>float</li><li>trucchetti clearfix</li><li>trucchetti <code>display: table</code></li></ul><p>In questa guida, c'è tutto ciò che ti serve sapere per passare dal non avere alcuna conoscenza di CSS Grid a essere un utente competente.</p><h4 id="le-basi"><strong>Le basi</strong></h4><p>Il layout CSS Grid viene attivato su un elemento contenitore (che può essere un <code>div</code> o qualsiasi altro tag) impostando <code>display: grid</code>.</p><p>Come per flexbox, puoi definire alcune proprietà sul contenitore e alcune proprietà su singoli elementi della griglia.</p><p>Queste proprietà combinate, determineranno l'aspetto finale della griglia.</p><p>Le proprietà più semplici per il contenitore sono <code>grid-template-columns</code> e <code>grid-template-rows</code>.</p><h4 id="grid-template-columns-e-grid-template-rows"><strong>grid-template-columns e grid-template-rows</strong></h4><p>Queste proprietà definiscono il numero di colonne e righe della griglia, e regolano anche la larghezza di ogni colonna/riga.</p><p>Il seguente snippet definisce una griglia di 4 colonne, ognuna larga 200 px, e 2 righe, ognuna alta 300 px.</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 200px 200px 200px 200px;
  grid-template-rows: 300px 300px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/LgbgchKoiffQNAqLtBYVbPsLJMKiWB3XWvCP" class="kg-image" alt="LgbgchKoiffQNAqLtBYVbPsLJMKiWB3XWvCP" width="728" height="633" loading="lazy"></figure><p>Ecco un altro esempio di una griglia con due colonne e due righe:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 200px 200px;
  grid-template-rows: 100px 100px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/sdVnLwfTJmY1alewU41wNxRMZ827XK07quWq" class="kg-image" alt="sdVnLwfTJmY1alewU41wNxRMZ827XK07quWq" width="696" height="391" loading="lazy"></figure><h4 id="dimensioni-automatiche"><strong>Dimensioni automatiche</strong></h4><p>Spesso potresti avere una dimensione fissa per l'intestazione, il piè di pagina e il contenuto principale, che è variabile in altezza, a seconda della sua lunghezza. In questo caso puoi usare la parola chiave <code>auto</code>:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-rows: 100px auto 100px;
}</code></pre><h4 id="dimensioni-diverse-di-righe-e-colonne"><strong>Dimensioni diverse di righe e colonne</strong></h4><p>Negli esempi precedenti, abbiamo creato griglie regolari usando lo stesso valore per le righe e lo stesso valore per le colonne.</p><p>Puoi specificare qualsiasi valore per ogni riga/colonna, per creare tanti design diversi:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 100px 200px;
  grid-template-rows: 100px 50px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/h5vifpz6IUZQbWCzX4YvJjOhLojgzgP2F-AN" class="kg-image" alt="h5vifpz6IUZQbWCzX4YvJjOhLojgzgP2F-AN" width="597" height="358" loading="lazy"></figure><p>Un altro esempio:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 10px 100px;
  grid-template-rows: 100px 10px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/GGCFboj9Z6YQz8jvB69KmslqKz00sLuca843" class="kg-image" alt="GGCFboj9Z6YQz8jvB69KmslqKz00sLuca843" width="581" height="609" loading="lazy"></figure><h4 id="aggiungere-spazio-tra-le-celle"><strong>Aggiungere spazio tra le celle</strong></h4><p>Se non specificato, non c'è spazio tra le celle.</p><p>Puoi aggiungere dello spazio usando queste proprietà:</p><ul><li><code>grid-column-gap</code></li><li><code>grid-row-gap</code></li></ul><p>o con la sintassi scorciatoia <code>grid-gap</code>.</p><p>Esempio:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 100px 200px;
  grid-template-rows: 100px 50px;
  grid-column-gap: 25px;
  grid-row-gap: 25px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/ivVtIubdZG3BpFfoASpFy4EMJG1kXeiCx3zP" class="kg-image" alt="ivVtIubdZG3BpFfoASpFy4EMJG1kXeiCx3zP" width="642" height="412" loading="lazy"></figure><p>Lo stesso layout con la scorciatoia:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 100px 200px;
  grid-template-rows: 100px 50px;
  grid-gap: 25px;
}</code></pre><h4 id="disporre-elementi-su-righe-e-o-colonne-multiple"><strong>Disporre elementi su righe e/o colonne multiple</strong></h4><p>Ogni elemento ha la possibilità di occupare più di una cella nella riga ed espandersi orizzontalmente o verticalmente per prendere più spazio, rispettando le proporzioni della griglia impostata sul contenitore.</p><p>Queste sono le proprietà che possiamo usare a questo scopo:</p><ul><li><code>grid-column-start</code></li><li><code>grid-column-end</code></li><li><code>grid-row-start</code></li><li><code>grid-row-end</code></li></ul><p>Esempio:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 200px 200px 200px 200px;
  grid-template-rows: 300px 300px;
}

.item1 {
  grid-column-start: 2;
  grid-column-end: 4;
}

.item6 {
  grid-column-start: 3;
  grid-column-end: 5;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/JrzZm5o6SkpvGiKZo6v8XmRDAfpajBt6mym4" class="kg-image" alt="JrzZm5o6SkpvGiKZo6v8XmRDAfpajBt6mym4" width="730" height="636" loading="lazy"></figure><p>I numeri corrispondono alle linee verticali che separano ogni colonna, partendo da 1:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/JdCCwzrGzvd1O68dBAqIHSWh4hMbM6ttuJ8Z" class="kg-image" alt="JdCCwzrGzvd1O68dBAqIHSWh4hMbM6ttuJ8Z" width="745" height="691" loading="lazy"></figure><p>Lo stesso principio si applica a <code>grid-row-start</code> e <code>grid-row-end</code>, eccetto che questa volta, invece di occupare più colonne, una cella occupa più righe.</p><h4 id="sintassi-scorciatoia"><strong>Sintassi scorciatoia</strong></h4><p>Queste proprietà possiedono una sintassi scorciatoia fornita da:</p><ul><li><code>grid-column</code></li><li><code>grid-row</code></li></ul><p>L'utilizzo è semplice, ecco come replicare il layout precedente:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 200px 200px 200px 200px;
  grid-template-rows: 300px 300px;
}

.item1 {
  grid-column: 2 / 4;
}

.item6 {
  grid-column: 3 / 5;
}</code></pre><p>Un altro approccio è impostare le colonne o righe iniziali e poi impostare quante ne dovrebbero essere occupate usando <code>span</code>:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 200px 200px 200px 200px;
  grid-template-rows: 300px 300px;
}

.item1 {
  grid-column: 2 / span 2;
}

.item6 {
  grid-column: 3 / span 2;
}</code></pre><h3 id="altre-configurazioni"><strong>Altre configurazioni</strong></h3><h4 id="usare-le-frazioni"><strong>Usare le frazioni</strong></h4><p>Specificare l'esatta larghezza di ogni colonna o riga non è sempre ideale.</p><p>Una frazione è un'unità di spazio.</p><p>Il seguente esempio divide una griglia in 3 colonne con la stessa larghezza, ognuna 1/3 dello spazio disponibile.</p><pre><code class="language-css">.container {
  grid-template-columns: 1fr 1fr 1fr;
}</code></pre><h4 id="usare-percentuali-e-rem"><strong>Usare percentuali e rem</strong></h4><p>Puoi anche usare percentuali, e mischiare frazioni, pixel, rem e percentuali:</p><pre><code class="language-css">.container {
  grid-template-columns: 3rem 15% 1fr 2fr
}</code></pre><h4 id="usare-repeat-"><strong>Usare <code>repeat()</code></strong></h4><p><code>repeat()</code> è una funzione speciale che prende un numero che indica le volte in cui una riga/colonna deve essere ripetuta, e la sua lunghezza.</p><p>Se ogni colonna ha la stessa larghezza, puoi specificare il layout usando la sintassi:</p><pre><code class="language-css">.container {
  grid-template-columns: repeat(4, 100px);
}</code></pre><p>Questo crea 4 colonne con la stessa larghezza.</p><p>Oppure usando le frazioni:</p><pre><code class="language-css">.container {
  grid-template-columns: repeat(4, 1fr);
}</code></pre><h4 id="specificare-la-larghezza-minima-di-una-riga"><strong>Specificare la larghezza minima di una riga</strong></h4><p>Caso di utilizzo comune: una barra laterale che non si comprime mai più di un certo valore di pixel quando ridimensioni la finestra.</p><p>Ecco un altro esempio in cui la barra laterale occupa 1/4 della schermo e mai meno di 200 px:</p><pre><code class="language-css">.container {
  grid-template-columns: minmax(200px, 3fr) 9fr;
}</code></pre><p>Puoi anche impostare solo un valore massimo usando la parola chiave <code>auto</code>:</p><pre><code class="language-css">.container {
  grid-template-columns: minmax(auto, 50%) 9fr;
}</code></pre><p>o solo un valore minimo:</p><pre><code class="language-css">.container {
  grid-template-columns: minmax(100px, auto) 9fr;
}</code></pre><h4 id="posizionare-elementi-usando-grid-template-areas"><strong>Posizionare elementi usando <code>grid-template-areas</code></strong></h4><p>Di default gli elementi sono posizionati nella griglia in base all'ordine nella struttura HTML.</p><p>Usando <code>grid-template-areas</code> puoi definire delle aree per spostarli nella griglia e disporre un elemento su più righe/colonne invece di usare <code>grid-column</code>.</p><p>Ecco un esempio:</p><pre><code class="language-css">&lt;div class="container"&gt;
  &lt;main&gt;
    ...
  &lt;/main&gt;
  &lt;aside&gt;
    ...
  &lt;/aside&gt;
  &lt;header&gt;
    ...
  &lt;/header&gt;
  &lt;footer&gt;
    ...
  &lt;/footer&gt;
&lt;/div&gt;

.container {
  display: grid;
  grid-template-columns: 200px 200px 200px 200px;
  grid-template-rows: 300px 300px;
  grid-template-areas:
    "header header header header"
    "sidebar main main main"
    "footer footer footer footer";
}
main {
  grid-area: main;
}
aside {
  grid-area: sidebar;
}
header {
  grid-area: header;
}
footer {
  grid-area: footer;
}</code></pre><p>Malgrado il loro ordine originario, gli elementi sono posizionati dove definito da <code>grid-template-areas</code>, in base alla proprietà <code>grid-area</code> ad essi associata.</p><h4 id="aggiungere-celle-vuote-nelle-aree-di-template"><strong>Aggiungere celle vuote nelle aree di template</strong></h4><p>Puoi impostare una cella vuota usando un punto <code>.</code> invece di un nome di area in <code>grid-template-areas</code>:</p><pre><code class="language-css">.container {
  display: grid;
  grid-template-columns: 200px 200px 200px 200px;
  grid-template-rows: 300px 300px;
  grid-template-areas:
    ". header header ."
    "sidebar . main main"
    ". footer footer .";
}</code></pre><h4 id="riempire-la-pagina-con-una-griglia"><strong>Riempire la pagina con una griglia</strong></h4><p>Puoi far estendere la griglia in modo da riempire la pagina con <code>fr</code>:</p><pre><code class="language-css">.container {
  display: grid;
  height: 100vh;
  grid-template-columns: 1fr 1fr 1fr 1fr;
  grid-template-rows: 1fr 1fr;
}</code></pre><h4 id="un-esempio-header-sidebar-content-e-footer"><strong>Un esempio: header, sidebar, content e footer</strong></h4><p>Ecco un semplice esempio dell'uso di CSS Grid per creare il layout di un sito che contiene un'intestazione in cima, una parte principale con una barra laterale sulla sinistra e il contenuto a destra, e infine un piè di pagina.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/M8qvpAE1DS6BoPXyfpb2VWAEbz2C8U4W587t" class="kg-image" alt="M8qvpAE1DS6BoPXyfpb2VWAEbz2C8U4W587t" width="768" height="318" loading="lazy"></figure><p>Ecco il markup:</p><pre><code class="language-html">&lt;div class="wrapper"&gt;
  &lt;header&gt;Header&lt;/header&gt;
  &lt;article&gt;
    &lt;h1&gt;Welcome&lt;/h1&gt;
    &lt;p&gt;Hi!&lt;/p&gt;
  &lt;/article&gt;
  &lt;aside&gt;&lt;ul&gt;&lt;li&gt;Sidebar&lt;/li&gt;&lt;/ul&gt;&lt;/aside&gt;
  &lt;footer&gt;Footer&lt;/footer&gt;
&lt;/div&gt;</code></pre><p>e il CSS:</p><pre><code class="language-css">header {
  grid-area: header;
  background-color: #fed330;
  padding: 20px;
}
article {
  grid-area: content;
  background-color: #20bf6b;
  padding: 20px;
}
aside {
  grid-area: sidebar;
  background-color: #45aaf2;
}
footer {
  padding: 20px;
  grid-area: footer;
  background-color: #fd9644;
}
.wrapper {
  display: grid;
  grid-gap: 20px;
  grid-template-columns: 1fr 3fr;
  grid-template-areas:
    "header  header"
    "sidebar content"
    "footer  footer";
}</code></pre><p>Ho aggiunto alcuni colori per renderlo più gradevole, ma in sostanza assegna ad ogni tag un nome <code>grid-area</code>, che viene usato nella proprietà <code>grid-template-areas</code> in <code>.wrapper</code>.</p><p>Quando il layout è più ristretto possiamo mettere la barra laterale al di sotto del contenuto usando una media query:</p><pre><code class="language-css">@media (max-width: 500px) {
  .wrapper {
    grid-template-columns: 4fr;
    grid-template-areas:
      "header"
      "content"
      "sidebar"
      "footer";
  }
}</code></pre><p><a href="https://codepen.io/flaviocopes/pen/JZWOEK" rel="noopener">Vedi su CodePen</a></p><p>Queste erano le basi di CSS Grid. Ci sono molte cose che non ho incluso in questa introduzione, ma volevo rendere le cose semplici, in modo da consentirti di iniziare a usare questo nuovo sistema di layout senza sentirti sopraffatto.</p><h3 id="flexbox"><strong>FLEXBOX</strong></h3><p>Flexbox, anche detto Flexible Box Module, è uno dei due sistemi di layout moderni, insieme a CSS Grid.</p><p>In confronto a CSS Grid (che è bidimensionale), flexbox è un <strong>modello di layout</strong> <strong>mono<strong>dimensiona</strong>le</strong>. Controlla il layout in base a una riga o una colonna, ma non a entrambe allo stesso tempo.</p><p>L'obiettivo principale di flexbox è consentire agli elementi di riempire l'intero spazio offerto dal loro contenitore, a seconda delle regole impostate.</p><p>A meno che tu abbia bisogno di supportare vecchi browser come IE8 e IE9, Flexbox è lo strumento che ti permette di dimenticarti di</p><ul><li>layout di tabelle</li><li>float</li><li>trucchetti clearfix</li><li>trucchetti <code>display: table</code></li></ul><p>E adesso tuffiamoci su flexbox e diventiamo dei maestri in poco tempo.</p><h3 id="supporto-browser-1"><strong>Supporto browser</strong></h3><p>Al momento della scrittura (Feb 2018), è supportato dal 97.66% degli utenti. Tutti i browser più importanti lo hanno implementato per anni, e persino vecchi browser (tra cui IE10+) sono coperti:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/pAsJcNUmJljKeifKY7DSA8-LQasyo2vsgOoW" class="kg-image" alt="pAsJcNUmJljKeifKY7DSA8-LQasyo2vsgOoW" width="683" height="549" loading="lazy"></figure><p>Mentre dobbiamo aspettare ancora qualche anno per metterci in pari con CSS Grid, Flexbox è una tecnologia più vecchia e può essere usata proprio adesso.</p><h3 id="attivare-flexbox"><strong>Attivare Flexbox</strong></h3><p>Il layout flexbox viene applicato a un contenitore impostando</p><pre><code class="language-css">display: flex;</code></pre><p>oppure</p><pre><code class="language-css">display: inline-flex;</code></pre><p>Il contenuto all'<strong>interno del contenitore</strong> sarà allineato usando flexbox.</p><h4 id="propriet-del-contenitore"><strong>Proprietà del contenitore</strong></h4><p>Alcune proprietà flexbox si applicano al contenitore, che determina le regole generali per i suoi elementi. Si tratta di</p><ul><li><code>flex-direction</code></li><li><code>justify-content</code></li><li><code>align-items</code></li><li><code>flex-wrap</code></li><li><code>flex-flow</code></li></ul><h4 id="allineare-righe-o-colonne"><strong>Allineare righe o colonne</strong></h4><p>La prima proprietà che vedremo, <code><strong><strong>flex-direction</strong></strong></code>, determina se il contenitore &nbsp;dovrebbe allineare i suoi elementi in righe o colonne:</p><ul><li><code>flex-direction: row</code> posiziona gli elementi su una <strong>riga</strong>, nella direzione del testo (da sinistra a destra per i Paesi occidentali)</li><li><code>flex-direction: row-reverse</code> posiziona gli elementi come <code>row</code>, ma nel verso opposto</li><li><code>flex-direction: column</code> posiziona gli elementi su una<strong> colonna</strong>, dall'alto in basso</li><li><code>flex-direction: column-reverse</code> posiziona gli elementi su una colonna, proprio come <code>column</code> ma nel verso opposto</li></ul><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/o26IgBk91Cjdfe8h-uAl-NAULk6k5fUjTI8o" class="kg-image" alt="o26IgBk91Cjdfe8h-uAl-NAULk6k5fUjTI8o" width="616" height="355" loading="lazy"></figure><h4 id="allineamento-verticale-e-orizzontale">Allineamento verticale e orizzontale</h4><p>Di default gli elementi partono dalla sinistra se <code>flex-direction</code> è <code>row</code>, e dall'alto se <code>flex-direction</code> è <code>column</code>.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/lgTI1ZtxbWha-5GyAWbTNrmOhe03ikkpo-Gx" class="kg-image" alt="lgTI1ZtxbWha-5GyAWbTNrmOhe03ikkpo-Gx" width="625" height="794" loading="lazy"></figure><p>Puoi cambiare questo comportamento usando <code>justify-content</code> per variare l'allineamento orizzontale e <code>align-items</code> per variare l'allineamento verticale.</p><h4 id="cambiare-l-allineamento-orizzontale"><strong>Cambiare l'allineamento orizzontale</strong></h4><p><code><strong><strong>justify-content</strong></strong></code> ha 5 possibili valori:</p><ul><li><code>flex-start</code>: allinea al lato sinistro del contenitore.</li><li><code>flex-end</code>: allinea al lato destro del contenitore.</li><li><code>center</code>: allinea al centro del contenitore.</li><li><code>space-between</code>: determina una spaziatura uguale tra gli elementi.</li><li><code>space-around</code>: determina una spaziatura uguale attorno agli elementi.</li></ul><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/3eA5Rgtjp0xnyWoQ5v5e1aWIbgmS8YgWzgdm" class="kg-image" alt="3eA5Rgtjp0xnyWoQ5v5e1aWIbgmS8YgWzgdm" width="800" height="932" loading="lazy"></figure><h4 id="cambiare-l-allineamento-verticale"><strong>Cambiare l'allineamento verticale</strong></h4><p><code><strong><strong>align-items</strong></strong></code> ha 5 possibili valori:</p><ul><li><code>flex-start</code>: allinea in cima al contenitore.</li><li><code>flex-end</code>: allinea in fondo al contenitore.</li><li><code>center</code>: allinea al centro del contenitore verticalmente.</li><li><code>baseline</code>: allinea alla linea di base del contenitore.</li><li><code>stretch</code>: gli elementi sono estesi fino a riempire il contenitore.</li></ul><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1pQRvAAzAtBRjO8UI8-zpoa8rL51uKkKklZR" class="kg-image" alt="1pQRvAAzAtBRjO8UI8-zpoa8rL51uKkKklZR" width="606" height="1317" loading="lazy"></figure><p>Una nota su <code>baseline</code>:</p><p><code>baseline</code> sembra simile a <code>flex-start</code> in questo esempio, perché le scatole sono troppo semplici. Per avere un esempio più utile, dai un'occhiata a <a href="https://codepen.io/flaviocopes/pen/oExoJR" rel="noopener">questo Codepen</a>, ottenuto dal fork di un Pen originalmente creato da <a href="https://twitter.com/machal" rel="noopener">Martin Michálek</a>. Come puoi vedere, le dimensioni degli elementi sono allineate.</p><h4 id="wrap"><strong>Wrap</strong></h4><p>Di default, gli elementi in un contenitore flexbox restano su una singola linea, rimpicciolendosi per adattarsi al contenitore.</p><p>Per forzare gli elementi a disporsi su più linee, usa <code>flex-wrap: wrap</code>. In questo modo, gli elementi saranno distribuiti secondo l'ordine impostato da <code>flex-direction</code>. Usa <code>flex-wrap: wrap-reverse</code> per invertire quest'ordine.</p><p>La proprietà scorciatoia chiamata <code>flex-flow</code> ti permette di specificare <code>flex-direction</code> e <code>flex-wrap</code> in una sola riga, aggiungendo prima il valore di <code>flex-direction</code>, seguito dal valore di <code>flex-wrap</code>, ad esempio: <code>flex-flow: row wrap</code>.</p><h4 id="propriet-che-vengono-applicate-a-elementi-singoli"><strong>Proprietà che vengono applicate a elementi singoli</strong></h4><p>Fino a questo punto, abbiamo visto proprietà che puoi applicare al contenitore.</p><p>I singoli elementi possono avere una certa indipendenza e flessibilità, e ne puoi alterare l'aspetto usando queste proprietà:</p><ul><li><code>order</code></li><li><code>align-self</code></li><li><code>flex-grow</code></li><li><code>flex-shrink</code></li><li><code>flex-basis</code></li><li><code>flex</code></li></ul><p>Vediamole in dettaglio.</p><h4 id="spostare-un-elemento-prima-o-dopo-di-un-altro-usando-order"><strong>Spostare un elemento prima o dopo di un altro usando order</strong></h4><p>Gli elementi sono ordinati in base all'ordine assegnato. Di default ogni elemento ha order <code>0</code> e la comparsa nell'HTML determina l'ordine finale.</p><p>Puoi sovrascrivere questa proprietà usando <code>order</code> su ogni singolo elemento. Si tratta di una proprietà che imposti sull'elemento, non sul contenitore. Puoi far apparire un elemento prima degli altri impostando un valore negativo.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/B1sZQ2N0Faporf-B6QSoT9qlksFM0ul6Ova2" class="kg-image" alt="B1sZQ2N0Faporf-B6QSoT9qlksFM0ul6Ova2" width="607" height="273" loading="lazy"></figure><h4 id="allineamento-verticale-usando-align-self"><strong>Allineamento verticale usando align-self</strong></h4><p>Per un elemento è possibile sovrascrivere l'impostazione<strong> </strong><code>align-items</code> del contenitore, usando <code><strong><strong>align-self</strong></strong></code>, che ha gli stessi 5 possibili valori di <code>align-items</code>:</p><ul><li><code>flex-start</code>: allinea in cima al contenitore.</li><li><code>flex-end</code>: allinea in fondo al contenitore.</li><li><code>center</code>: allinea al centro del contenitore verticalmente.</li><li><code>baseline</code>: allinea alla linea di base del contenitore.</li><li><code>stretch</code>: gli elementi sono estesi fino a riempire il contenitore.</li></ul><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/Vgk2OOS4KMX-ABecwTGMZGxu5HNOUsSCguNv" class="kg-image" alt="Vgk2OOS4KMX-ABecwTGMZGxu5HNOUsSCguNv" width="612" height="372" loading="lazy"></figure><h4 id="espandere-o-rimpicciolire-un-elemento-se-necessario"><strong>Espandere o rimpicciolire un elemento se necessario</strong></h4><p><strong><strong>flex-grow</strong></strong></p><p>Il valore predefinito per ogni elemento è 0.</p><p>Se tutti gli elementi sono definiti come 1 e un elemento è definito come 2, l'elemento più grande occuperà la spazio di due elementi "1".</p><p><strong><strong>flex-shrink</strong></strong></p><p>Il valore predefinito per ogni elemento è 1.</p><p>Se tutti gli elementi sono definiti come 1 e uno è definito come 3, l'elemento più grande rimpicciolirà di tre volte rispetto agli altri. Quando è disponibile meno spazio, occuperà 3 volte meno spazio.</p><p><strong><strong>flex-basis</strong></strong></p><p>Se impostato su <code>auto</code>, ridimensiona un elemento secondo la sua larghezza o altezza, e aggiunge spazio extra in base alla proprietà <code>flex-grow</code>.</p><p>Se impostata a 0, non aggiunge alcuno spazio extra per gli elementi nel calcolo del layout.</p><p>Se specifichi un valore numerico in pixel, verrà usato come valore di lunghezza (larghezza o altezza a seconda che si tratti di un elemento riga o colonna).</p><p><strong><strong>flex</strong></strong></p><p>Questa proprietà combina le 3 proprietà precedenti:</p><ul><li><code>flex-grow</code></li><li><code>flex-shrink</code></li><li><code>flex-basis</code></li></ul><p>e offre una sintassi accorciata: <code>flex: 0 1 auto</code></p><h3 id="tabelle"><strong>TABELLE</strong></h3><p>Nel passato, si è abusato dell'utilizzo delle tabelle in CSS, dato che erano l'unico modo per creare dei layout fantasiosi.</p><p>Oggi con Grid e Flexbox possiamo restituire alle tabelle la loro funzione originaria.</p><p>Iniziamo dall'HTML. Questa è una tabella base:</p><pre><code class="language-html">&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope="col"&gt;Name&lt;/th&gt;
      &lt;th scope="col"&gt;Age&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th scope="row"&gt;Flavio&lt;/th&gt;
      &lt;td&gt;36&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th scope="row"&gt;Roger&lt;/th&gt;
      &lt;td&gt;7&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</code></pre><p>Di default non è molto accattivante. Il browser fornisce degli stili standard ed ecco tutto:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/cSv50H4eDfA17z4XhwXhlwgDCzfrtAkth840" class="kg-image" alt="cSv50H4eDfA17z4XhwXhlwgDCzfrtAkth840" width="346" height="252" loading="lazy"></figure><p>Naturalmente, possiamo usare il CSS per definire lo stile di tutti gli elementi nella tabella.</p><p>Partiamo dal bordo. Un buon bordo può fare molto.</p><p>Possiamo applicarlo all'elemento <code>table</code> e anche agli elementi interni, come <code>th</code> e <code>td</code>:</p><pre><code class="language-css">table, th, td {
  border: 1px solid #333;
}</code></pre><p>Se lo abbiniamo a del margine, otteniamo un buon risultato:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/77EZWjHTyPL1-2BHjB6PtNKGxoefvaH8Ou0N" class="kg-image" alt="77EZWjHTyPL1-2BHjB6PtNKGxoefvaH8Ou0N" width="402" height="519" loading="lazy"></figure><p>Una cosa comune con le tabelle è la possibilità di aggiungere un colore a una riga e un colore diverso alla successiva. Questo è possibile usando il selettore <code>:nth-child(odd)</code> o <code>:nth-child(even)</code>:</p><pre><code class="language-css">tbody tr:nth-child(odd) {
  background-color: #af47ff;
}</code></pre><p>Il risultato è:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/bgYEzQ0jzePRY8Z1QsjS8Wr33gzw8Hm2R0-o" class="kg-image" alt="bgYEzQ0jzePRY8Z1QsjS8Wr33gzw8Hm2R0-o" width="387" height="509" loading="lazy"></figure><p>Se aggiungi <code>border-collapse: collapse;</code> all'elemento table, tutti i bordi collassano in un bordo unico:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/YBEKBLgWtAy6VbpdnQCbpIzfWJYKvGPesyGA" class="kg-image" alt="YBEKBLgWtAy6VbpdnQCbpIzfWJYKvGPesyGA" width="564" height="636" loading="lazy"></figure><h3 id="centratura"><strong>CENTRATURA</strong></h3><p>Centrare le cose in CSS è un'attività a seconda che si tratti di farlo orizzontalmente o verticalmente.</p><p>Qui spiegherò gli scenari più comuni e come risolverli. Se <a href="https://flaviocopes.com/flexbox/">Flexbox</a> fornisce una nuova soluzione, ignoro la vecchia tecnica perché abbiamo bisogno di andare avanti e Flexbox viene supportato dai browser da anni, incluso IE10.</p><h3 id="centrare-orizzontalmente"><strong>Centrare orizzontalmente</strong></h3><h4 id="testo"><strong>Testo</strong></h4><p>Il testo è molto semplice da centrare orizzontalmente usando la proprietà <code>text-align</code> impostata su <code>center</code>:</p><pre><code class="language-css">p {
  text-align: center;
}</code></pre><h4 id="blocchi"><strong>Blocchi</strong></h4><p>Il modo moderno per centrare qualsiasi cosa che non sia testo è usare Flexbox:</p><pre><code class="language-css">#mysection {
  display: flex;
  justify-content: center;
}</code></pre><p>ogni elemento all'interno di <code>#mysection</code> sarà centrato orizzontalmente.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/poUby5NpYUt0D8ADmTgP6wWXhjj2PMjWuK4p" class="kg-image" alt="poUby5NpYUt0D8ADmTgP6wWXhjj2PMjWuK4p" width="618" height="218" loading="lazy"></figure><p>Ecco l'approccio alternativo se non vuoi usare Flexbox.</p><p>Qualsiasi cosa che non è testo può essere centrata applicando un margine automatico a sinistra e a destra, e impostando la larghezza dell'elemento:</p><pre><code class="language-css">section {
  margin: 0 auto;
  width: 50%;
}</code></pre><p><code>margin: 0 auto;</code> è una scorciatoia per:</p><pre><code class="language-css">section {
  margin-top: 0;
  margin-bottom: 0;
  margin-left: auto;
  margin-right: auto;
}</code></pre><p>Ricorda di impostare l'elemento su <code>display: block</code> se si tratta di un elemento inline.</p><h3 id="centrare-verticalmente"><strong>Centrare verticalmente</strong></h3><p>Tradizionalmente, questa è stata sempre un'attività difficile. Flexbox adesso ci offre un ottimo modo per farlo con estrema semplicità:</p><pre><code class="language-css">#mysection {
  display: flex;
  align-items: center;
}</code></pre><p>ogni elemento all'interno di <code>#mysection</code> sarà centrato verticalmente.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/XOIWKiWU2zPe3VNje1LpiaHur6lJu4db8Cyp" class="kg-image" alt="XOIWKiWU2zPe3VNje1LpiaHur6lJu4db8Cyp" width="613" height="299" loading="lazy"></figure><h3 id="centrare-sia-orizzontalmente-che-verticalmente"><strong>Centrare sia orizzontalmente che verticalmente</strong></h3><p>Le tecniche Flexbox per centrare verticalmente e orizzontalmente possono essere combinate per centrare completamente un elemento nella pagina.</p><pre><code class="language-css">#mysection {
  display: flex;
  align-items: center;
  justify-content: center;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/OtQEQ-F5AsSU0b49Oo5cGwoyLafxN05qmoLQ" class="kg-image" alt="OtQEQ-F5AsSU0b49Oo5cGwoyLafxN05qmoLQ" width="615" height="298" loading="lazy"></figure><p>Si può fare la stessa cosa usando <a href="https://flaviocopes.com/css-grid/" rel="noopener">CSS Grid</a>:</p><pre><code class="language-css">body {
  display: grid;
  place-items: center;
  height: 100vh;
}</code></pre><h3 id="liste"><strong>LISTE</strong></h3><p>Le liste sono delle parti molto importanti di molte pagine web.</p><p>Il CSS può definirne lo stile usando svariate proprietà.</p><p><code>list-style-type</code> viene usata per impostare un indicatore predefinito da usare nella lista:</p><pre><code class="language-css">li {
  list-style-type: square;
}</code></pre><p>Abbiamo tanti valori possibili, che puoi vedere qui <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type" rel="noopener">https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type</a> con esempi del loro aspetto. Alcuni dei più comuni sono <code>disc</code>, <code>circle</code>, <code>square</code> e <code>none</code>.</p><p><code>list-style-image</code> viene usato per definire un indicatore personalizzato quando uno predefinito non è appropriato:</p><pre><code class="language-css">li {
  list-style-image: url(list-image.png);
}</code></pre><p><code>list-style-position</code> ti consente di aggiungere l'indicatore fuori (<code>outside</code>, valore predefinito) o all'interno (<code>inside</code>) del contenuto della lista, nel flusso della pagina anziché fuori da esso</p><pre><code class="language-css">li {
  list-style-position: inside;
}</code></pre><p>La proprietà scorciatoia <code>list-style</code> ci permette di specificare tutte queste proprietà sulla stessa riga:</p><pre><code class="language-css">li {
  list-style: url(list-image.png) inside;
}</code></pre><h3 id="media-query-e-design-responsivo"><strong>MEDIA QUERY E DESIGN RESPONSIVO</strong></h3><p>In questa sezione, inizieremo introducendo le tipologie (media type) e i descrittori di media feature, e poi passeremo alle media query.</p><h4 id="tipologie"><strong>Tipologie</strong></h4><p>Usate nelle media query e nelle dichiarazioni @import, le tipologie ci consentono di determinare su quale dispositivo viene caricato un file CSS o una porzione di CSS.</p><p>Abbiamo le seguenti <strong>tipologie</strong></p><ul><li><code>all</code> vuol dire su tutti i dispositivi</li><li><code>print</code> è usato nella stampa</li><li><code>screen</code> è usato quando la pagina viene presentata su uno schermo</li><li><code>speech</code> è usato per i lettori di schermo</li></ul><p><code>screen</code> è quella predefinita.</p><p>Nel passato ne avevamo altre, ma sono per lo più obsolete dato che si sono dimostrate inefficaci per determinare le esigenze di un dispositivo.</p><p>Possiamo usarle nelle dichiarazioni @import in questo modo:</p><pre><code class="language-css">@import url(myfile.css) screen;
@import url(myfile-print.css) print;</code></pre><p>Possiamo caricare un file CSS su più tipologie di dispositivo separandole con una virgola:</p><pre><code class="language-css">@import url(myfile.css) screen, print;</code></pre><p>Funzionano anche nei tag <code>link</code> in HTML:</p><pre><code class="language-html">&lt;link rel="stylesheet" type="text/css" href="myfile.css" media="screen" /&gt;
&lt;link rel="stylesheet" type="text/css" href="another.css" media="screen, print" /&gt;</code></pre><p>Non siamo limitati all'uso di queste tipologie per l'attributo <code>media</code> in una dichiarazione <code>@import</code>. C'è altro.</p><h4 id="descrittori-di-media-feature"><strong>Descrittori di media feature</strong></h4><p>Prima di tutto, introduciamo i <strong>descrittori di media feature</strong>. Si tratta di parole chiave aggiuntive che si possono aggiungere all'attributo <code>media</code> di un <code>link</code> o di una dichiarazione <code>@import</code>, per esprimere più condizioni sul caricamento del CSS.</p><p>Ecco la loro lista:</p><ul><li><code>width</code></li><li><code>height</code></li><li><code>device-width</code></li><li><code>device-height</code></li><li><code>aspect-ratio</code></li><li><code>device-aspect-ratio</code></li><li><code>color</code></li><li><code>color-index</code></li><li><code>monochrome</code></li><li><code>resolution</code></li><li><code>orientation</code></li><li><code>scan</code></li><li><code>grid</code></li></ul><p>Ognuno ha il corrispondente min-<em><em> </em>e <em>max-</em></em>, ad esempio:</p><ul><li><code>min-width</code>, <code>max-width</code></li><li><code>min-device-width</code>, <code>max-device-width</code></li></ul><p>e così via.</p><p>Alcuni accettano un valore di lunghezza che può essere espresso in <code>px</code> o <code>rem</code> o qualsiasi unità di lunghezza. È il caso <code>width</code>, <code>height</code>, <code>device-width</code>, <code>device-height</code>.</p><p>Ad esempio:</p><pre><code class="language-css">@import url(myfile.css) screen and (max-width: 800px);</code></pre><p>Nota che ogni blocco che fa uso di una media feature viene racchiuso tra parentesi.</p><p>Alcuni accettano un valore fisso. <code>orientation</code>, usato per rilevare l'orientazione del dispositivo, accetta <code>portrait</code> o <code>landscape</code>.</p><p>Esempio:</p><pre><code class="language-html">&lt;link rel="stylesheet" type="text/css" href="myfile.css" media="screen and (orientation: portrait)" /&gt;</code></pre><p><code>scan</code>, usato per determinare il tipo di schermo, accetta <code>progressive</code> (per i display moderni) o <code>interlace</code> (per i più vecchi dispositivi CRT).</p><p>Altri vogliono un intero.</p><p>Come <code>color</code>, che controlla in numero di bit per componente di colore usati nel dispositivo. Si tratta di un livello molto basso, ma devi soltanto sapere che è lì per essere utilizzato (come <code>grid</code>, <code>color-index</code>, <code>monochrome</code>).</p><p><code>aspect-ratio</code> e <code>device-aspect-ratio</code> accettano un valore che rappresenta il rapporto tra larghezza e altezza del viewport, espresso come frazione.</p><p>Esempio:</p><pre><code>@import url(myfile.css) screen and (aspect-ratio: 4/3);</code></pre><p><code>resolution</code> rappresenta la densità di pixel, espressa in un unità di misura di risoluzione (<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/resolution" rel="noopener">resolution data type</a>) come <code>dpi</code>.</p><p>Esempio:</p><pre><code class="language-css">@import url(myfile.css) screen and (min-resolution: 100dpi);</code></pre><h4 id="operatori-logici"><strong>Operatori logici</strong></h4><p>Possiamo combinare delle regole usando <code>and</code>:</p><pre><code class="language-html">&lt;link rel="stylesheet" type="text/css" href="myfile.css" media="screen and (max-width: 800px)" /&gt;</code></pre><p>Possiamo eseguire un operazione logica di tipo "or" usando le virgole, che combinano più media query:</p><pre><code class="language-css">@import url(myfile.css) screen, print;</code></pre><p>Possiamo usare <code>not</code> per negare una media query:</p><pre><code class="language-css">@import url(myfile.css) not screen;</code></pre><blockquote><em><em>Important</em>e<em>: <code>not</code> </em>può essere usato solo per negare un'intera media query, quindi va posizionato al suo inizio (o dopo una virgola)<em>.</em></em></blockquote><h4 id="media-query"><strong>Media query</strong></h4><p>Tutti le regole qui sopra che abbiamo visto applicate a un @import o nel tag HTML <code>link</code> possono essere applicate anche all'interno del CSS.</p><p>Devi racchiuderle in una struttura del tipo <code>@media () {}</code>.</p><p>Esempio:</p><pre><code class="language-css">@media screen and (max-width: 800px) {
  /* inserisci del CSS */
}</code></pre><p>Questa è la base del <strong>design responsivo</strong>.</p><p>Le media query possono essere piuttosto complesse. Questo esempio applica il CSS solo a uno schermo, se la larghezza è compresa tra 600 e 800 pixel e se l'orientazione è landscape:</p><pre><code class="language-css">@media screen and (max-width: 800px) and (min-width: 600px) and (orientation: landscape) {
  /* enter some CSS */
}</code></pre><h3 id="feature-query"><strong>FEATURE QUERY</strong></h3><p>Le feature query costituiscono una recente e relativamente sconosciuta abilità del CSS, anche se <a href="https://caniuse.com/#feat=css-featurequeries">ben supportata</a>.</p><p>Possiamo usarle per controllare se una feature è supportata dal browser con la parola chiave <code>@supports</code>.</p><p>Ritengo che sia particolarmente utile, almeno al momento della scrittura di questo manuale, per controllare il supporto di CSS Grid, che può essere verificato usando:</p><pre><code class="language-css">@supports (display: grid) {
  /* applica questo CSS */
}</code></pre><p>Possiamo controllare se il browser supporta il valore <code>grid</code> per la proprietà <code>display</code>.</p><p>Possiamo usare <code>@supports</code> per qualsiasi proprietà CSS, per verificare ogni valore.</p><p>Possiamo anche usare gli operatori logici <code>and</code>, <code>or</code> e <code>not</code> per costruire feature query complesse:</p><pre><code class="language-css">@supports (display: grid) and (display: flex) {
  /* applica questo CSS */
}</code></pre><h3 id="filtri"><strong>FILTRI</strong></h3><p>I filtri ci permettono di eseguire delle operazioni sugli elementi.</p><p>Cose che normalmente faresti con Photoshop o altri software per l'editing di immagini, come cambiare l'opacità, la luminosità e altro.</p><p>Puoi usare la proprietà <code>filter</code>. Qui c'è un esempio in cui è applicata a un'immagine, ma questa proprietà può essere applicata a <em>qualsiasi </em>elemento:</p><pre><code class="language-css">img {
  filter: &lt;qualcosa&gt;;
}</code></pre><p>Puoi usare diversi valori qui:</p><ul><li><code>blur()</code></li><li><code>brightness()</code></li><li><code>contrast()</code></li><li><code>drop-shadow()</code></li><li><code>grayscale()</code></li><li><code>hue-rotate()</code></li><li><code>invert()</code></li><li><code>opacity()</code></li><li><code>sepia()</code></li><li><code>saturate()</code></li><li><code>url()</code></li></ul><p>Nota le parentesi dopo ogni opzione, in quanto richiedono tutte un parametro.</p><p>Ad esempio:</p><pre><code class="language-css">img {
  filter: opacity(0.5);
}</code></pre><p>vuol dire che l'immagine sarà trasparente al 50%, perché <code>opacity()</code> accetta un valore tra 0 e 1 o una percentuale.</p><p>Puoi anche applicare più filtri insieme:</p><pre><code class="language-css">img {
  filter: opacity(0.5) blur(2px);
}</code></pre><p>Vediamo ogni filtro in dettaglio.</p><h4 id="blur-"><strong><code>blur()</code></strong></h4><p>Sfoca il contenuto di un elemento. Occorre passare un valore espresso in <code>px</code>, <code>em</code> o <code>rem</code> che viene usato per determinare il raggio di sfocatura.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: blur(4px);
}</code></pre><h4 id="opacity-"><strong><code>opacity()</code></strong></h4><p><code>opacity()</code> accetta un valore tra 0 e 1, o una percentuale, e su questa base determina la trasparenza dell'immagine.</p><p><code>0</code> o <code>0%</code> vuol dire totalmente trasparente. <code>1</code>, <code>100%</code> o maggiore vuol dire totalmente visibile.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: opacity(0.5);
}</code></pre><p>Il CSS ha anche una proprietà <code>opacity</code>. <code>filter</code> però può essere accelerato dall'hardware, a seconda dell'implementazione, quindi dovrebbe essere il metodo preferito.</p><h4 id="drop-shadow-"><strong><code>drop-shadow()</code></strong></h4><p><code>drop-shadow()</code> mostra un'ombra dietro all'elemento, che segue il canale alfa. Ciò vuol dire che se hai un'immagine trasparente, ottieni un'ombra applicata alla forma dell'immagine, e non al riquadro dell'immagine. Se l'immagine non ha un canale alfa, l'ombra viene applicata all'intero riquadro.</p><p>Accetta un minimo di 2 parametri, fino a 5:</p><ul><li><em><em>offset-x</em></em> imposta lo sfasamento orizzontale. Può essere negativo.</li><li><em><em>offset-y</em></em> imposta lo sfasamento verticale. Può essere negativo.</li><li><em><em>blur-radius</em></em>, opzionale, imposta il livello di sfocatura per l'ombra. Di default è 0 (nessuna sfocatura).</li><li><em><em>spread-radius</em></em>, opzionale, imposta il livello di diffusione. Espresso in <code>px</code>, <code>rem</code> o <code>em</code></li><li><em><em>color</em></em>, opzionale, imposta il colore dell'ombra.</li></ul><p>Puoi impostare il colore senza definire il livello di diffusione o di sfocatura. Il CSS comprende che il valore è un colore e non una lunghezza.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: drop-shadow(10px 10px 5px orange);
}

img {
  filter: drop-shadow(10px 10px orange);
}

img {
  filter: drop-shadow(10px 10px 5px 5px #333);
}</code></pre><h4 id="grayscale-"><strong><code>grayscale()</code></strong></h4><p>Rende l'elemento in scala di grigi.</p><p>Puoi passare un valore da 0 a 1, o dallo 0% al 100%, dove 1 e 100% significano completamente grigio, e 0 o 0% significano che l'immagine non è alterata e resta del colore originario.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: grayscale(50%);
}</code></pre><h4 id="sepia-"><strong><code>sepia()</code></strong></h4><p>Rende l'elemento di color seppia.</p><p>Puoi passare un valore da 0 a 1, o dallo 0% al 100%, dove 1 e 100% significano completamente seppia, e 0 o 0% significano che l'immagine non è alterata e resta del colore originario.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: sepia(50%);
}</code></pre><h4 id="invert-"><strong><code>invert()</code></strong></h4><p>Inverte i colori di un elemento. Invertire un colore significa usare il colore opposto nella ruota dei colori HSL. Se non hai idea di ciò che vuol dire, prova a cercare "ruota dei colori" su Google. Ad esempio, l'opposto del giallo è il blu, l'opposto del rosso è il ciano. Ogni colore ha un opposto.</p><p>Puoi passare un numero da 0 a 1 oppure dallo 0% al 100%, che determina la quantità dell'inversione. 1 o 100% vuol dire inversione completa, 0 o 0% vuol dire nessuna inversione.</p><p>0.5 o 50% presenteranno un colore grigio al 50%, perché si va a finire nel mezzo della ruota.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: invert(50%);
}</code></pre><h4 id="hue-rotate-"><strong><code>hue-rotate()</code></strong></h4><p>La ruota dei colori HSL è rappresentata in gradi. Usando <code>hue-rotate()</code> puoi ruotare il colore usando una rotazione positiva o negativa.</p><p>La funzione accetta un valore in gradi (<code>deg</code>).</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: hue-rotate(90deg);
}</code></pre><h4 id="brightness-"><strong><code>brightness()</code></strong></h4><p>Altera la luminosità di un elemento.</p><p>0 o 0% restituisce un elemento totalmente nero. 1 o 100% dà un'immagine invariata.</p><p>Valori più alti di 1 o 100% rendono l'immagine più luminosa fino a ottenere un elemento totalmente bianco.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: brightness(50%);
}</code></pre><h3 id="contrast-"><strong><code>contrast()</code></strong></h3><p>Altera il contrasto di un elemento.</p><p>0 o 0% restituiscono un elemento totalmente grigio. 1 o 100% danno un'immagine invariata.</p><p>Valori più alti di 1 o 100% danno più contrasto.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: contrast(150%);
}</code></pre><h4 id="saturate-"><strong><code>saturate()</code></strong></h4><p>Altera la saturazione di un elemento.</p><p>0 o 0% danno un elemento completamente in scala di grigi (con meno saturazione). 1 o 100% danno un'immagine inalterata.</p><p>Valori più alti di 1 o 100% danno più saturazione.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: saturate();
}</code></pre><h4 id="url-"><strong><code>url()</code></strong></h4><p>Questo filtro permette di applicare un filtro definito in un file SVG. Occorre fare riferimento alla posizione del file SVG.</p><p>Esempio:</p><pre><code class="language-css">img {
  filter: url(filter.svg);
}</code></pre><p>I filtri SVG vanno al di fuori dello scopo di questo manuale, ma puoi trovare più informazioni a riguardo in questo post su Smashing Magazine: <a href="https://www.smashingmagazine.com/2015/05/why-the-svg-filter-is-awesome/" rel="noopener">https://www.smashingmagazine.com/2015/05/why-the-svg-filter-is-awesome/</a> (risorsa in lingua originale inglese).</p><h3 id="trasformazioni"><strong>TRASFORMAZIONI</strong></h3><p>Le trasformazioni ti consentono di traslare, ruotare, scalare e inclinare elementi nello spazio 2D e 3D. Sono una funzionalità fantastica del CSS, specialmente quando combinati con le animazioni.</p><h4 id="trasformazioni-2d"><strong>Trasformazioni 2D</strong></h4><p>La proprietà <code>transform</code> accetta queste funzioni:</p><ul><li><code>translate()</code> per spostare elementi</li><li><code>rotate()</code> per ruotare elementi</li><li><code>scale()</code> per scalare elementi in dimensione</li><li><code>skew()</code> per distorcere o inclinare un elemento</li><li><code>matrix()</code> un modo per eseguire ognuna di queste operazioni usando una matrice di 6 elementi, una sintassi meno user-friendly ma meno <em>verbose</em></li></ul><p>Esistono anche le funzioni specifiche per gli assi:</p><ul><li><code>translateX()</code> per spostare gli elementi attorno all'asse X</li><li><code>translateY()</code> per spostare gli elementi attorno all'asse Y</li><li><code>scaleX()</code> per scalare le dimensioni di un elemento sull'asse X</li><li><code>scaleY()</code> per scalare le dimensioni di un elemento sull'asse Y</li><li><code>skewX()</code> per distorcere o inclinare un elemento sull'asse X</li><li><code>skewY()</code> per distorcere o inclinare un elemento sull'asse Y</li></ul><p>Ecco un esempio di una trasformazione in cui raddoppia la larghezza dell'elemento <code>.box</code> mentre la sua altezza si dimezza:</p><pre><code class="language-css">.box {
    transform: scale(2, 0.5);
}</code></pre><p><code><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin" rel="noopener">transform-origin</a></code> ci permette di impostare l'origine (le coordinate <code>(0, 0)</code>) per la trasformazione, cambiando il centro di rotazione.</p><h4 id="combinare-pi-trasformazioni"><strong>Combinare più trasformazioni</strong></h4><p>Puoi combinare più trasformazioni separando ogni funzione con uno spazio.</p><p>Ad esempio:</p><pre><code class="language-css">transform: rotateY(20deg) scaleX(3) translateY(100px);</code></pre><h4 id="trasformazioni-3d"><strong>Trasformazioni 3D</strong></h4><p>Possiamo fare un altro passo e spostare i nostri elementi in uno spazio 3D invece che 2D. Con il 3D, stiamo aggiungendo un altro asse, Z, che aggiunge profondità alla visuale.</p><p>Usando la proprietà <code>perspective</code> puoi specificare quanto lontano dall'utente si trova l'oggetto 3D.</p><p>Esempio:</p><pre><code class="language-css">.3Delement {
  perspective: 100px;
}</code></pre><p><code>perspective-origin</code> determina l'aspetto della posizione dell'osservatore, il modo in cui guardiamo agli assi X e Y.</p><p>Ora possiamo usare alcune funzioni aggiuntive per controllare l'asse Z e che si aggiungono alle trasformazioni sugli assi X e Y:</p><ul><li><code>translateZ()</code></li><li><code>rotateZ()</code></li><li><code>scaleZ()</code></li></ul><p>e le corrispondenti scorciatoie <code>translate3d()</code>, <code>rotate3d()</code> e <code>scale3d()</code> per usare le funzioni <code>translateX()</code>, <code>translateY()</code> e <code>translateZ()</code> e via dicendo.</p><p>Le trasformazioni 3D sono un po' avanzate per questo manuale, ma sono un fantastico argomento che puoi esplorare per conto tuo.</p><h3 id="transizioni"><strong>TRANSIZIONI</strong></h3><p>Le transizioni CSS sono il modo più semplice per creare un'animazione in CSS.</p><p>In una transizione, si cambia il valore di una proprietà, dicendo al CSS di cambiarla lentamente in accordo con alcuni parametri, fino a uno stato finale.</p><p>Le transizioni CSS sono definite da queste proprietà:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Proprietà</th>
<th>Descrizione</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>transition-property</code></td>
<td>La proprietà CSS che dovrebbe variare.</td>
</tr>
<tr>
<td><code>transition-duration</code></td>
<td>La durata della transizione.</td>
</tr>
<tr>
<td><code>transition-timing-function</code></td>
<td>La funzione temporale usata dall'animazione (valori comuni: <code>linear</code>, <code>ease</code>). Valore predefinito: <code>ease</code>.</td>
</tr>
<tr>
<td><code>transition-delay</code></td>
<td>Numero opzionale di secondi da attendere prima che inizi l'animazione.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>La proprietà <code>transition</code> è una comoda scorciatoia:</p><pre><code class="language-css">.container {
  transition: property
              duration
              timing-function
              delay;
}</code></pre><h4 id="esempi-di-transizioni-css"><strong>Esempi di transizioni CSS</strong></h4><p>Questo codice implementa una transizione CSS:</p><pre><code class="language-css">.one,
.three {
  background: rgba(142, 92, 205, .75);
  transition: background 1s ease-in;
}

.two,
.four {
  background: rgba(236, 252, 100, .75);
}

.circle:hover {
  background: rgba(142, 92, 205, .25); /* lighter */
}</code></pre><p>Vedi l'esempio su Glitch <a href="https://flavio-css-transitions-example.glitch.me/" rel="noopener">https://flavio-css-transitions-example.glitch.me</a></p><p>Quando passi con il cursore sugli elementi <code>.one</code> e <code>.three</code>, i cerchi viola, c'è una transizione che attenua il cambio di sfondo, mentre i cerchi gialli non lo fanno, in quanto non posseggono una proprietà <code>transition</code> definita.</p><h4 id="valori-di-transition-timing-function"><strong>Valori di transition-timing-function</strong></h4><p><code>transition-timing-function</code> ti permette di specificare la curva di accelerazione della transizione.</p><p>Ecco alcuni semplici valori che puoi usare:</p><ul><li><code>linear</code></li><li><code>ease</code></li><li><code>ease-in</code></li><li><code>ease-out</code></li><li><code>ease-in-out</code></li></ul><p><a href="https://flavio-css-transitions-easings.glitch.me/" rel="noopener">Questo Glitch</a> ne mostra il funzionamento pratico.</p><p>Puoi creare una funzione completamente personalizzata usando le <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/single-transition-timing-function">curve di Bezier cubiche</a>. Si tratta di un concetto piuttosto avanzato, ma in pratica, ognuna delle funzioni viste sopra è costruita usando delle curve di Bezier. </p><h4 id="transizioni-css-negli-strumenti-per-sviluppatori-del-browser"><strong>Transizioni CSS negli strumenti per sviluppatori del browser</strong></h4><p>Gli strumenti per sviluppatori del browser offrono un fantastico modo di visualizzare le transizioni.</p><p>Questo è Chrome:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/l6svCI9t6bLTsuniRuxjgwOnD9i1YSseno-f" class="kg-image" alt="l6svCI9t6bLTsuniRuxjgwOnD9i1YSseno-f" width="560" height="623" loading="lazy"></figure><p>Questo è Firefox:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/JYAWK9J6xuzeP2WVytUt8k64RUUCHl3UJmXC" class="kg-image" alt="JYAWK9J6xuzeP2WVytUt8k64RUUCHl3UJmXC" width="713" height="537" loading="lazy"></figure><p>Da questi pannelli puoi modificare la transizione in tempo reale e sperimentare sulla pagina direttamente senza ricaricare il tuo codice.</p><h4 id="quali-propriet-puoi-animare-con-le-transizioni-css"><strong>Quali proprietà puoi animare con le transizioni CSS</strong></h4><p>Un sacco! Sono le stesse che puoi animare usando le animazioni CSS.</p><p>Ecco la lista completa:</p><ul><li><code>background</code></li><li><code>background-color</code></li><li><code>background-position</code></li><li><code>background-size</code></li><li><code>border</code></li><li><code>border-color</code></li><li><code>border-width</code></li><li><code>border-bottom</code></li><li><code>border-bottom-color</code></li><li><code>border-bottom-left-radius</code></li><li><code>border-bottom-right-radius</code></li><li><code>border-bottom-width</code></li><li><code>border-left</code></li><li><code>border-left-color</code></li><li><code>border-left-width</code></li><li><code>border-radius</code></li><li><code>border-right</code></li><li><code>border-right-color</code></li><li><code>border-right-width</code></li><li><code>border-spacing</code></li><li><code>border-top</code></li><li><code>border-top-color</code></li><li><code>border-top-left-radius</code></li><li><code>border-top-right-radius</code></li><li><code>border-top-width</code></li><li><code>bottom</code></li><li><code>box-shadow</code></li><li><code>caret-color</code></li><li><code>clip</code></li><li><code>color</code></li><li><code>column-count</code></li><li><code>column-gap</code></li><li><code>column-rule</code></li><li><code>column-rule-color</code></li><li><code>column-rule-width</code></li><li><code>column-width</code></li><li><code>columns</code></li><li><code>content</code></li><li><code>filter</code></li><li><code>flex</code></li><li><code>flex-basis</code></li><li><code>flex-grow</code></li><li><code>flex-shrink</code></li><li><code>font</code></li><li><code>font-size</code></li><li><code>font-size-adjust</code></li><li><code>font-stretch</code></li><li><code>font-weight</code></li><li><code>grid-area</code></li><li><code>grid-auto-columns</code></li><li><code>grid-auto-flow</code></li><li><code>grid-auto-rows</code></li><li><code>grid-column-end</code></li><li><code>grid-column-gap</code></li><li><code>grid-column-start</code></li><li><code>grid-column</code></li><li><code>grid-gap</code></li><li><code>grid-row-end</code></li><li><code>grid-row-gap</code></li><li><code>grid-row-start</code></li><li><code>grid-row</code></li><li><code>grid-template-areas</code></li><li><code>grid-template-columns</code></li><li><code>grid-template-rows</code></li><li><code>grid-template</code></li><li><code>grid</code></li><li><code>height</code></li><li><code>left</code></li><li><code>letter-spacing</code></li><li><code>line-height</code></li><li><code>margin</code></li><li><code>margin-bottom</code></li><li><code>margin-left</code></li><li><code>margin-right</code></li><li><code>margin-top</code></li><li><code>max-height</code></li><li><code>max-width</code></li><li><code>min-height</code></li><li><code>min-width</code></li><li><code>opacity</code></li><li><code>order</code></li><li><code>outline</code></li><li><code>outline-color</code></li><li><code>outline-offset</code></li><li><code>outline-width</code></li><li><code>padding</code></li><li><code>padding-bottom</code></li><li><code>padding-left</code></li><li><code>padding-right</code></li><li><code>padding-top</code></li><li><code>perspective</code></li><li><code>perspective-origin</code></li><li><code>quotes</code></li><li><code>right</code></li><li><code>tab-size</code></li><li><code>text-decoration</code></li><li><code>text-decoration-color</code></li><li><code>text-indent</code></li><li><code>text-shadow</code></li><li><code>top</code></li><li><code>transform.</code></li><li><code>vertical-align</code></li><li><code>visibility</code></li><li><code>width</code></li><li><code>word-spacing</code></li><li><code>z-index</code></li></ul><h3 id="animazioni"><strong>ANIMAZIONI</strong></h3><p>Le animazioni CSS sono un fantastico modo per creare animazioni visuali, non limitate a singoli movimenti come le transizioni CSS, ma ben più articolate.</p><p>Un'animazione viene applicata a un elemento usando la proprietà <code>animation</code>.</p><pre><code class="language-css">.container {
  animation: spin 10s linear infinite;
}</code></pre><p><code>spin</code> è il nome dell'animazione, che dobbiamo definire separatamente. Abbiamo anche detto al CSS di far durare l'animazione 10 secondi, di eseguirla in modo lineare (nessuna accelerazione o variazione di velocità) e di ripeterla all'infinito.</p><p>Occorre <strong>definire come funziona l'animazione</strong> usando <strong>keyframes</strong>. Ecco un esempio di un'animazione che ruota un elemento:</p><pre><code class="language-css">@keyframes spin {
  0% {
    transform: rotateZ(0);
  }
  100% {
    transform: rotateZ(360deg);
  }
}</code></pre><p>All'interno della definizione <code>@keyframes</code> puoi avere tutti i punti intermedi che desideri.</p><p>In questo caso, ordiniamo al CSS di far ruotare l'asse Z alla proprietà transform da 0 a 360 gradi, completando un giro.</p><p>Puoi usare qualsiasi trasformazione CSS qui.</p><p>Nota che questo non implica nulla riguardo all'intervallo temporale che dovrebbe occupare l'animazione, che è definito quando la usiamo, attraverso <code>animation</code>.</p><h4 id="esempio-di-animazione-css"><strong>Esempio di animazione CSS</strong></h4><p>Voglio disegnare quattro cerchi, tutti che cominciano da un punto in comune e distanti 90 gradi l'uno dall'altro.</p><pre><code class="language-css">&lt;div class="container"&gt;
  &lt;div class="circle one"&gt;&lt;/div&gt;
  &lt;div class="circle two"&gt;&lt;/div&gt;
  &lt;div class="circle three"&gt;&lt;/div&gt;
  &lt;div class="circle four"&gt;&lt;/div&gt;
&lt;/div&gt;

body {
  display: grid;
  place-items: center;
  height: 100vh;
}

.circle {
  border-radius: 50%;
  left: calc(50% - 6.25em);
  top: calc(50% - 12.5em);
  transform-origin: 50% 12.5em;
  width: 12.5em;
  height: 12.5em;
  position: absolute;
  box-shadow: 0 1em 2em rgba(0, 0, 0, .5);
}

.one,
.three {
  background: rgba(142, 92, 205, .75);
}

.two,
.four {
  background: rgba(236, 252, 100, .75);
}

.one {
  transform: rotateZ(0);
}

.two {
  transform: rotateZ(90deg);
}

.three {
  transform: rotateZ(180deg);
}

.four {
  transform: rotateZ(-90deg);
}</code></pre><p>Vedi questo Glitch: <a href="https://flavio-css-circles.glitch.me/" rel="noopener">https://flavio-css-circles.glitch.me</a></p><p>Ruotiamo questa struttura (tutti i cerchi insieme). Per farlo applichiamo un'animazione sul contenitore e la definiamo come una rotazione di 360 gradi:</p><pre><code class="language-css">@keyframes spin {
  0% {
    transform: rotateZ(0);
  }
  100% {
    transform: rotateZ(360deg);
  }
}

.container {
  animation: spin 10s linear infinite;
}</code></pre><p>Guardala su <a href="https://flavio-css-animations-tutorial.glitch.me/" rel="noopener">https://flavio-css-animations-tutorial.glitch.me</a></p><p>Puoi aggiungere altri keyframes per ottenere animazioni più divertenti:</p><pre><code class="language-css">@keyframes spin {
  0% {
    transform: rotateZ(0);
  }
  25% {
    transform: rotateZ(30deg);
  }
  50% {
    transform: rotateZ(270deg);
  }
  75% {
    transform: rotateZ(180deg);
  }
  100% {
    transform: rotateZ(360deg);
  }
}</code></pre><p>Guarda l'esempio su <a href="https://flavio-css-animations-four-steps.glitch.me/" rel="noopener">https://flavio-css-animations-four-steps.glitch.me</a></p><h4 id="le-propriet-delle-animazioni-css"><strong>Le proprietà delle animazioni CSS</strong></h4><p>Le animazioni CSS offrono molti parametri diversi che puoi modificare:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Proprietà</th>
<th>Descrizione</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>animation-name</code></td>
<td>Il nome dell'animazione, fa riferimento a un'animazione creata con <code>@keyframes</code>.</td>
</tr>
<tr>
<td><code>animation-duration</code></td>
<td>Quanto dovrebbe durare l'animazione in secondi.</td>
</tr>
<tr>
<td><code>animation-timing-function</code></td>
<td>La funzione temporale usata dall'animazione (valori comuni: <code>linear</code>, <code>ease</code>). Valore predefinito: <code>ease</code>.</td>
</tr>
<tr>
<td><code>animation-delay</code></td>
<td>Numero opzionale di secondi da aspettare prima che parta l'animazione.</td>
</tr>
<tr>
<td><code>animation-iteration-count</code></td>
<td>Quante volte dovrebbe essere eseguita l'animazione. Accetta un numero o <code>infinite</code>. Valore predefinito: <code>1</code>.</td>
</tr>
<tr>
<td><code>animation-direction</code></td>
<td>La direzione dell'animazione. Può essere <code>normal</code>, <code>reverse</code>, <code>alternate</code> o <code>alternate-reverse</code>. Con gli ultimi 2, si alterna andando avanti e indietro.</td>
</tr>
<tr>
<td><code>animation-fill-mode</code></td>
<td>Definisce lo stile di un elemento quando l'animazione finisce, al termine del conto delle iterazioni. <code>none</code> o <code>backwards</code> tornano allo stile del primo keyframe. <code>forwards</code> e <code>both</code> usano lo stile impostato nell'ultimo keyframe.</td>
</tr>
<tr>
<td><code>animation-play-state</code></td>
<td>Se impostato su <code>paused</code> mette in pausa l'animazione. Il valore predefinito è <code>running</code>.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>La proprietà <code>animation</code> è la scorciatoia per tutte queste proprietà, in quest'ordine:</p><pre><code class="language-css">.container {
  animation: name
             duration
             timing-function
             delay
             iteration-count
             direction
             fill-mode
             play-state;
}</code></pre><p>Questo è l'esempio che abbiamo usato sopra:</p><pre><code class="language-css">.container {
  animation: spin 10s linear infinite;
}</code></pre><h4 id="eventi-javascript-per-le-animazioni-css"><strong>Eventi JavaScript per le animazioni CSS</strong></h4><p>Usando JavaScript puoi avvertire i seguenti eventi:</p><ul><li><code>animationstart</code></li><li><code>animationend</code></li><li><code>animationiteration</code></li></ul><p>Stai attento con <code>animationstart</code>, perché se l'animazione inizia al caricamento della pagina, il codice JavaScript viene eseguito sempre dopo che il CSS viene processato, quindi l'animazione è già iniziata e non puoi intercettare l'evento.</p><pre><code class="language-js">const container = document.querySelector('.container')

container.addEventListener('animationstart', (e) =&gt; {
  //do something
}, false)

container.addEventListener('animationend', (e) =&gt; {
  //do something
}, false)

container.addEventListener('animationiteration', (e) =&gt; {
  //do something
}, false)</code></pre><h4 id="quali-propriet-puoi-animare-usando-le-animazioni-css"><strong>Quali proprietà puoi animare usando le animazioni CSS</strong></h4><p>Un sacco! Sono le stesse che puoi animare usando le transizioni CSS.</p><p>Ecco la lista completa:</p><ul><li><code>background</code></li><li><code>background-color</code></li><li><code>background-position</code></li><li><code>background-size</code></li><li><code>border</code></li><li><code>border-color</code></li><li><code>border-width</code></li><li><code>border-bottom</code></li><li><code>border-bottom-color</code></li><li><code>border-bottom-left-radius</code></li><li><code>border-bottom-right-radius</code></li><li><code>border-bottom-width</code></li><li><code>border-left</code></li><li><code>border-left-color</code></li><li><code>border-left-width</code></li><li><code>border-radius</code></li><li><code>border-right</code></li><li><code>border-right-color</code></li><li><code>border-right-width</code></li><li><code>border-spacing</code></li><li><code>border-top</code></li><li><code>border-top-color</code></li><li><code>border-top-left-radius</code></li><li><code>border-top-right-radius</code></li><li><code>border-top-width</code></li><li><code>bottom</code></li><li><code>box-shadow</code></li><li><code>caret-color</code></li><li><code>clip</code></li><li><code>color</code></li><li><code>column-count</code></li><li><code>column-gap</code></li><li><code>column-rule</code></li><li><code>column-rule-color</code></li><li><code>column-rule-width</code></li><li><code>column-width</code></li><li><code>columns</code></li><li><code>content</code></li><li><code>filter</code></li><li><code>flex</code></li><li><code>flex-basis</code></li><li><code>flex-grow</code></li><li><code>flex-shrink</code></li><li><code>font</code></li><li><code>font-size</code></li><li><code>font-size-adjust</code></li><li><code>font-stretch</code></li><li><code>font-weight</code></li><li><code>grid-area</code></li><li><code>grid-auto-columns</code></li><li><code>grid-auto-flow</code></li><li><code>grid-auto-rows</code></li><li><code>grid-column-end</code></li><li><code>grid-column-gap</code></li><li><code>grid-column-start</code></li><li><code>grid-column</code></li><li><code>grid-gap</code></li><li><code>grid-row-end</code></li><li><code>grid-row-gap</code></li><li><code>grid-row-start</code></li><li><code>grid-row</code></li><li><code>grid-template-areas</code></li><li><code>grid-template-columns</code></li><li><code>grid-template-rows</code></li><li><code>grid-template</code></li><li><code>grid</code></li><li><code>height</code></li><li><code>left</code></li><li><code>letter-spacing</code></li><li><code>line-height</code></li><li><code>margin</code></li><li><code>margin-bottom</code></li><li><code>margin-left</code></li><li><code>margin-right</code></li><li><code>margin-top</code></li><li><code>max-height</code></li><li><code>max-width</code></li><li><code>min-height</code></li><li><code>min-width</code></li><li><code>opacity</code></li><li><code>order</code></li><li><code>outline</code></li><li><code>outline-color</code></li><li><code>outline-offset</code></li><li><code>outline-width</code></li><li><code>padding</code></li><li><code>padding-bottom</code></li><li><code>padding-left</code></li><li><code>padding-right</code></li><li><code>padding-top</code></li><li><code>perspective</code></li><li><code>perspective-origin</code></li><li><code>quotes</code></li><li><code>right</code></li><li><code>tab-size</code></li><li><code>text-decoration</code></li><li><code>text-decoration-color</code></li><li><code>text-indent</code></li><li><code>text-shadow</code></li><li><code>top</code></li><li><code>transform.</code></li><li><code>vertical-align</code></li><li><code>visibility</code></li><li><code>width</code></li><li><code>word-spacing</code></li><li><code>z-index</code></li></ul><h3 id="normalizzare-il-css"><strong>NORMALIZZARE IL CSS</strong></h3><p>Il foglio di stile predefinito del browser è un insieme di regole che i browser applicano per dare un minimo di stile agli elementi.</p><p>Il più delle volte questi stili sono molto utili.</p><p>Dato che ogni browser ha il proprio set di regole, è comune trovare un punto d'incontro.</p><p>Piuttosto che rimuovere tutti gli stili predefiniti, come con l'approccio <strong>reset CSS</strong>, il processo di normalizzazione rimuove le incongruenze del browser, mantenendo un insieme di regole di base su cui puoi fare affidamento.</p><p>Normalize.css <a href="http://necolas.github.io/normalize.css" rel="noopener">http://necolas.github.io/normalize.css</a> è la soluzione più usata per questo problema.</p><p>Devi caricare il file di normalizzazione del CSS prima di qualsiasi altro CSS.</p><h3 id="gestione-degli-errori"><strong>GESTIONE DEGLI ERRORI</strong></h3><p>Il CSS è resiliente. Quando trova un errore, non agisce come JavaScript, che fa i bagagli e scompare del tutto, terminando l'esecuzione degli script dopo aver trovato l'errore.</p><p>Il CSS prova a fare quello che vuole.</p><p>Se una riga contiene un errore, la salta e passa alla riga successiva priva di errori.</p><p>Se dimentichi il punto e virgola in una riga:</p><pre><code class="language-css">p {
  font-size: 20px
  color: black;
  border: 1px solid black;
}</code></pre><p>la riga con l'errore E la successiva <strong>non </strong>saranno applicate, ma la terza regola sarà applicata con successo alla pagina. In sostanza, analizza tutto finché non trova un punto e virgola, ma quando lo raggiunge, la regola è <code>font-size: 20px color: black;</code>, che non è valida, quindi la salta.</p><p>A volte è complicato capire che c'è un errore da qualche parte, e dove si trova, dato che il browser non lo comunica.</p><p>Ecco perché esistono strumenti come <a href="http://csslint.net/" rel="noopener">CSS Lint</a>.</p><h3 id="prefissi-vendor"><strong>PREFISSI VENDOR</strong></h3><p>I prefissi vendor sono un modo con cui i browser danno accesso alle nuove feature considerate non ancora stabili agli sviluppatori CSS.</p><p>Prima di proseguire, tieni a mente che questo approccio sta perdendo popolarità. Le persone adesso preferiscono usare i <strong>flag sperimentali</strong>, che devono essere abilitati esplicitamente nel browser dell'utente.</p><p>Perché? Perché gli sviluppatori, invece di considerare i prefissi vendor un modo di avere un'anteprima delle feature, a volte li mandano in produzione – il che è considerato dannoso dal gruppo di lavoro CSS.</p><p>Principalmente perché una volta che hai aggiunto un flag e gli sviluppatori iniziano a usarlo in produzione, i browser sono in una brutta posizione se si rendono conto che qualcosa deve essere cambiato. Con i flag, non puoi mandare una feature in produzione a meno che non spingi tutti i tuoi utenti ad abilitare il flag nel proprio browser (sto scherzando, non provarci).</p><p>Detto ciò, vediamo cosa sono i prefissi vendor.</p><p>Li ricordo, in particolare, per aver lavorato con le transizioni CSS in passato. Invece di usare semplicemente la proprietà <code>transition</code>, bisognava scrivere questo:</p><pre><code class="language-css">.myClass {
    -webkit-transition: all 1s linear;
    -moz-transition: all 1s linear;
    -ms-transition: all 1s linear;
    -o-transition: all 1s linear;
    transition: all 1s linear;
}</code></pre><p>Adesso si usa solo:</p><pre><code class="language-css">.myClass {
    transition: all 1s linear;
}</code></pre><p>dato che la proprietà è ben supportata da tutti i browser moderni.</p><p>I prefissi usati sono:</p><ul><li><code>-webkit-</code> (Chrome, Safari, iOS Safari / iOS WebView, Android)</li><li><code>-moz-</code> (Safari)</li><li><code>-ms-</code> (Edge, Internet Explorer)</li><li><code>-o-</code> (Opera, Opera Mini)</li></ul><p>Dato che Opera è basato su Chromium e Edge lo sarà presto, <code>-o-</code> e <code>-ms-</code> saranno presto fuori moda. Ma come abbiamo detto, i prefissi vendor stessi stanno andando fuori moda.</p><p>Scrivere i prefissi è difficile, soprattutto per l'incertezza. Ti serve davvero un prefisso per una certa proprietà? Diverse risorse online non sono aggiornate, rendendo ancora più difficile agire nel modo corretto. Progetti come <a href="https://github.com/postcss/autoprefixer" rel="noopener">Autoprefixer</a> possono automatizzare il processo nella sua interezza senza aver bisogno di cercare se il prefisso è ancora necessario, o se la feature è stabile e il prefisso dovrebbe essere eliminato. Utilizza i dati da caniuse.com, un ottimo sito di riferimento per tutte le cose relative al supporto browser.</p><p>Se utilizzi React o Vue, progetti come <code>create-react-app</code> e Vue CLI, due modi comuni per iniziare a costruire un'applicazione, hanno <code>autoprefixer</code> pronto all'uso, in modo che non devi neanche preoccupartene.</p><h3 id="css-per-la-stampa"><strong>CSS PER LA STAMPA</strong></h3><p>Anche stiamo sempre di più sui nostri schermi, la stampa è ancora comune.</p><p>Persino con i post dei blog. Ricordo che nel 2009 incontrai una persona che mi disse di aver fatto stampare al suo assistente personale ogni post del mio blog che ho pubblicato (sì, l'ho fissato perplesso per un po'). Decisamente inaspettato.</p><p>L'utilizzo principale che faccio della stampa si limita a stampare un PDF. Potrei creare qualcosa sul browser e renderlo disponibile in PDF.</p><p>I browser lo rendono molto semplice, con il "Salva" predefinito di Chrome quando provi a stampare un documento e non c'è una stampante disponibile, e l'apposito pulsante di Safari nella barra dei menu:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/bgA5gq1sJ4vzRx7inVg4skJLVgDggyhDjhmF" class="kg-image" alt="bgA5gq1sJ4vzRx7inVg4skJLVgDggyhDjhmF" width="602" height="374" loading="lazy"></figure><h4 id="stampare-il-css"><strong>Stampare il CSS</strong></h4><p>Alcune cose comuni che potresti desiderare di fare per la stampa sono nascondere delle parti del documento, come il piè di pagina, qualcosa nell'intestazione o nella barra laterale.</p><p>Magari vuoi usare un carattere diverso per la stampa, che è assolutamente legittimo.</p><p>Se hai un CSS grande per la stampa, faresti meglio a usare un file separato. I browser lo scaricheranno solo durante la stampa:</p><pre><code class="language-html">&lt;link rel="stylesheet"
      src="print.css"
      type="text/css"
      media="print" /&gt;</code></pre><h4 id="-media-print-css"><strong>@media print CSS </strong></h4><p>Un'alternativa all'approccio precedente è una media query. Qualsiasi cosa aggiungi all'interno di questo blocco:</p><pre><code class="language-css">@media print {
  /* ... */
}</code></pre><p>sarà applicata soltanto ai documenti stampati.</p><h4 id="link"><strong>Link</strong></h4><p>L'HTML è fantastico grazie ai link. Si chiama HyperText per una buona ragione. Con la stampa potresti perdere un sacco di informazioni, a seconda del contenuto.</p><p>Il CSS offre un ottimo modo di risolvere questo problema modificando il contenuto, cioè aggiungendo il link dopo il testo del tag <code>&lt;a&gt;</code>, usando:</p><pre><code class="language-css">@media print {
    a[href*='//']:after {
        content:" (" attr(href) ") ";
        color: $primary;
    }
}</code></pre><p>Seleziono <code>a[href*='//']</code> per farlo soltanto per i link esterni. Potrebbero esserci link a scopo di navigazione e indicizzazione interna, che sarebbero inutili nella maggior parte dei casi. Se vuoi che siano stampati anche i link interni, puoi usare:</p><pre><code class="language-css">@media print {
    a:after {
        content:" (" attr(href) ") ";
        color: $primary;
    }
}</code></pre><h4 id="margini-1"><strong>Margini</strong></h4><p>Puoi aggiungere i margini a ogni singola pagina. <code>cm</code> o <code>in</code> sono buone unità di misura per la carta stampata.</p><pre><code class="language-css">@page {
    margin-top: 2cm;
    margin-bottom: 2cm;
    margin-left: 2cm;
    margin-right: 2cm;
}</code></pre><p><code>@page</code> può essere usato anche per selezionare la prima pagina, usando <code>@page :first</code>, o soltanto le pagine a sinistra o a destra con <code>@page :left</code> e <code>@page: right</code>.</p><h4 id="interruzioni-di-pagina"><strong>Interruzioni di pagina</strong></h4><p>Potresti voler aggiungere un'interruzione di pagine dopo o prima di certi elementi. Usa <code>page-break-after</code> e <code>page-break-before</code>:</p><pre><code class="language-css">.book-date {
    page-break-after: always;
}

.post-content {
    page-break-before: always;
}</code></pre><p>Queste proprietà accettano <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-after">un'ampia gamma di valori</a>.</p><h4 id="evitare-di-spezzare-le-immagini-a-met-"><strong>Evitare di spezzare le immagini a metà</strong></h4><p>Ne ho avuto esperienza con Firefox: le immagini sono tagliate nel mezzo di default, continuando nella pagina successiva. Potrebbe accadere anche al testo.</p><p>Utilizza:</p><pre><code class="language-css">p {
  page-break-inside: avoid;
}</code></pre><p>e racchiudi le immagini in un tag <code>p</code>. Selezionando direttamente <code>img</code> non ha funzionato nei test che ho fatto.</p><p>Tutto ciò si applica anche ad altri contenuti, non solo a immagini. Se noti che qualcosa viene tagliato quando non vuoi, usa questa proprietà.</p><h4 id="debug-dell-anteprima-di-stampa"><strong>Debug dell'anteprima di stampa</strong></h4><p>Gli strumenti per sviluppatori di Chrome offrono dei modi per emulare il layout di stampa:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/-uiIs0O58DxJGuPKuMjjzg356Nq2On7GH7QI" class="kg-image" alt="-uiIs0O58DxJGuPKuMjjzg356Nq2On7GH7QI" width="631" height="461" loading="lazy"></figure><p>Una volta aperto il pannello rendering, cambia l'emulazione in <code>print</code>:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/XO5KBdEIBUtWLlIXwISJMN3GaehM9Gfd22K7" class="kg-image" alt="XO5KBdEIBUtWLlIXwISJMN3GaehM9Gfd22K7" width="544" height="356" loading="lazy"></figure><h3 id="conclusione"><strong>CONCLUSIONE</strong></h3><p>Spero che questo manuale ti abbia aiutato a metterti in pari con il CSS e ad avere una panoramica delle funzionalità principali che puoi usare per definire lo stile delle tue pagine e app. L'ho scritto per aiutarti a essere a tuo agio con il CSS e aiutarti a essere subito operativo per l'utilizzo di questo strumento stupendo che ti permette di creare dei design fantastici sul web. Spero di aver raggiunto questo obiettivo.</p><p><a href="https://thevalleyofcode.com/download/css/"><strong>Clicca qui per scaricare questo manuale in versione PDF / ePub / Mobi (versione originale inglese)</strong></a></p><p>Flavio</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Rendere le Immagini Responsive con il CSS: un Tutorial sulle Immagini Responsive in CSS ]]>
                </title>
                <description>
                    <![CDATA[ La maggioranza dei siti web odierni è responsiva e se hai bisogno di centrare e allineare un'immagine [/italian/news/come-centrare-unimmagine-in-verticale-e-in-orizzontale-con-il-css/]  su questi siti, devi imparare come rendere le immagini adattabili o responsive con il CSS. In questo articolo, ti spiegherò nel dettaglio come ottenere immagini responsive. Imparerai anche alcuni problemi che ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-rendere-le-immagini-responsive-con-il-css-un-tutorial-sulle-immagini-responsive-in-css/</link>
                <guid isPermaLink="false">63469b56bd463a0650bc5e50</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Design Responsivo ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Tue, 18 Oct 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/10/wdcss.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/css-responsive-image-tutorial/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Responsive Image Tutorial: How to Make Images Responsive with&nbsp;CSS</a>
      </p><p>La maggioranza dei siti web odierni è responsiva e se hai bisogno di <a href="https://www.freecodecamp.org/italian/news/come-centrare-unimmagine-in-verticale-e-in-orizzontale-con-il-css/">centrare e allineare un'immagine</a> su questi siti, devi imparare come rendere le immagini adattabili o responsive con il CSS.</p><p>In questo articolo, ti spiegherò nel dettaglio come ottenere immagini responsive. Imparerai anche alcuni problemi che si verificano generalmente quando provi a rendere delle immagini responsive – e proverò a spiegarti come risolverli.</p><h2 id="come-rendere-le-immagini-responsive-con-il-css"><strong>Come rendere le immagini responsive con il CSS</strong></h2><h3 id="dovrei-usare-unit-relative-o-assolute"><strong>Dovrei usare unità relative o assolute?</strong></h3><p>Rendere un'immagine adattabile, o responsiva, in realtà è piuttosto semplice. Quando carichi un'immagine su un sito web, questa possiede una larghezza e un'altezza predefinite. Puoi cambiarle entrambe con il CSS.</p><p>Per far sì che un'immagine sia responsiva, devi dare un nuovo valore alla sua proprietà <code>width</code>. L'altezza dell'immagine si regolerà di conseguenza automaticamente.</p><p>La cosa importante da sapere è che dovresti sempre usare unità relative per la proprietà <code>width</code>, come la percentuale, piuttosto che unità assolute come il pixel.</p><pre><code class="language-css">img {
  width: 500px;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized_large.gif" class="kg-image" alt="Animated-GIF-downsized_large" width="600" height="400" loading="lazy"></figure><p>Ad esempio, se definisci una larghezza fissa di 500px, la tua immagine non sarà responsiva – perché l'unità è assoluta.</p><pre><code class="language-css">img {
  width: 50%;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-1-.gif" class="kg-image" alt="Animated-GIF-downsized-1-" width="600" height="400" loading="lazy"></figure><p>Ecco perché invece dovresti assegnare un'unità relativa, come in 50%. Questo approccio renderà le tue immagini adattabili e saranno in grado di ridimensionarsi a prescindere dalla dimensione dello schermo.</p><h3 id="dovrei-usare-delle-media-query"><strong>Dovrei usare delle Media Query?</strong></h3><p>Una delle domande che mi fanno più spesso è se si dovrebbero usare delle media query oppure no.</p><p>Una media query è un'altra importante funzionalità del CSS, che aiuta a rendere responsivo un sito web. Non mi ci soffermerò oltre, ma puoi leggere <a href="https://www.freecodecamp.org/italian/news/tutorial-sulle-media-query-css/">questo mio articolo</a> per imparare a usare le media query più in dettaglio.</p><p>La risposta a questa domanda è: "dipende". Se vuoi che la tua immagine abbia dimensioni diverse passando da un dispositivo all'altro, allora dovrai usare delle media query, altrimenti no.</p><p>Per questo esempio, l'immagine ha una larghezza del 50% per ogni tipo di schermo. Ma quando vuoi far sì che sia a schermo intero su dispositivi mobili, ti serve l'aiuto delle media query:</p><pre><code class="language-css">@media only screen and (max-width: 480px) {
  img {
    width: 100%;
  }
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-2-.gif" class="kg-image" alt="Animated-GIF-downsized-2-" width="600" height="400" loading="lazy"></figure><p>Quindi, in base a questa regola media, su ogni dispositivo più piccolo di 480px, l'immagine occuperà l'intero schermo.</p><h3 id="perch-la-propriet-max-width-non-ideale"><strong>Perché la proprietà max-width non è ideale?</strong></h3><p>Un altro modo in cui gli sviluppatori possono ottenere immagini responsive è l'uso della proprietà <code>max-width</code>. Tuttavia, questo non è sempre il miglior metodo da usare, perché potrebbe non funzionare su ogni tipo di schermo o dispositivo.</p><p>La prima cosa da capire prima di continuare con un esempio è ciò che fa esattamente la proprietà <code>max-width</code>.</p><p>La proprietà <code>max-width</code> imposta una larghezza massima per un elemento e non permette alla larghezza di tale elemento di superare il valore indicato (ma può essere più piccolo).</p><p>Ad esempio, se l'immagine ha una larghezze predefinita di 500px e la dimensione dello schermo è solo 360px, allora non sarai in grado di vedere l'immagine completa perché non c'è abbastanza spazio.</p><pre><code class="language-css">img {
  max-width: 100%;
  width: 500px;  // assumiamo che sia la dimensione predefinita
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-3-.gif" class="kg-image" alt="Animated-GIF-downsized-3-" width="600" height="400" loading="lazy"></figure><p>Perciò puoi definire una proprietà <code>max-width</code> per l'immagine e impostarla al 100%, in modo che rimpicciolisca l'immagine di 500px nello spazio di 360px. In questo modo, potrai vedere l'immagine completa su schermi di dimensione minore.</p><p>La cosa positiva è che, dato che stai usando unità relative, l'immagine si adatterà a tutti gli schermi più piccoli di 500px.</p><p>Sfortunatamente, la dimensione dello schermo a volte sarà maggiore di 500px, ma l'immagine no perché ha una larghezza predefinita di 500px. Questo approccio interromperà la responsività dell'immagine.</p><p>Per sistemare questo problema, dovrai usare ancora la proprietà <code>width</code>, rendendo inutile la proprietà <code>max-width</code>.</p><h3 id="e-l-altezza"><strong>E l'altezza?</strong></h3><p>Un altro problema comune in cui puoi imbatterti ha a che fare con la proprietà <code>height</code>, l'altezza. Normalmente, l'altezza di un'immagine si adatta automaticamente, quindi non hai bisogno di assegnare un'altezza alle immagini (perché in qualche modo impedisce all'immagine di essere presentata nel modo corretto).</p><p>Ma in alcuni casi, potresti aver a che fare con immagini che devono avere un'altezza fissa. Quindi, quando assegni un'altezza fissa a un'immagine, sarà ancora responsiva ma non avrà un bell'aspetto.</p><pre><code class="language-css">img {
  width: 100%;
  height: 300px;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-4-.gif" class="kg-image" alt="Animated-GIF-downsized-4-" width="600" height="400" loading="lazy"></figure><p>Fortunatamente, il CSS ci offre un'altra proprietà per rimediare a questo problema...</p><h3 id="soluzione-la-propriet-object-fit"><strong>Soluzione: la proprietà object-fit</strong></h3><p>Per avere più controllo sulle immagini, il CSS ha a disposizione un'altra proprietà chiamata <code>object-fit</code>. Usiamola e assegniamole un valore in modo che abbia un aspetto migliore:</p><pre><code class="language-css">img {
  width: 100%;
  height: 300px;
  object-fit: cover;
  object-position: bottom;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-5-.gif" class="kg-image" alt="Animated-GIF-downsized-5-" width="600" height="400" loading="lazy"></figure><p>Se necessario, puoi anche usare la proprietà <code>object-position</code> (in aggiunta a <code>object-fit</code>) per concentrarti su uno specifico particolare dell'immagine. Molte persone non conoscono la proprietà <code>object-fit</code>, ma può essere davvero utile per risolvere questi problemi.</p><p>Spero che tutto ciò ti abbia aiutato a comprendere e risolvere i tuoi problemi le immagini responsive.</p><p>Grazie per aver letto questo articolo!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come funziona Flexbox — spiegato con grandi gif colorate e animate ]]>
                </title>
                <description>
                    <![CDATA[ Flexbox promette di salvarci dai mali del semplice CSS (come l'allineamento verticale). Bene, Flexbox ci permette di raggiungere questo obiettivo. Ma padroneggiare il suo nuovo modello mentale può essere difficile. Diamo quindi uno sguardo animato a come funziona Flexbox, in modo da poterlo usare per creare dei layout migliori. Il ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-funziona-flexbox-spiegato-con-grandi-gif-colorate-e-animate-2/</link>
                <guid isPermaLink="false">6321ee3d9a423c074eb49b1a</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Flexbox ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Mon, 03 Oct 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/09/1_zyzR64aw4rDPsoG-ZwZ9rQ.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/an-animated-guide-to-flexbox-d280cf6afc35/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How Flexbox works — explained with big, colorful, animated gifs</a>
      </p><p>Flexbox promette di salvarci dai mali del semplice CSS (come l'allineamento verticale).</p><p>Bene, Flexbox ci permette di raggiungere questo obiettivo. Ma padroneggiare il suo nuovo modello mentale può essere difficile.</p><p>Diamo quindi uno sguardo animato a come funziona Flexbox, in modo da poterlo usare per creare dei layout migliori.</p><p>Il principio alla base di Flexbox è rendere i layout flessibili e intuitivi.</p><p>Per ottenere questo risultato, fa sì che i contenitori possano decidere da soli come distribuire uniformemente i propri elementi figli <strong>— </strong>inclusi la loro dimensione e lo spazio tra di essi.</p><p>Tutto ciò suona bene in linea di principio. Ma vediamo come si presenta in pratica.</p><p>In questo articolo, analizzeremo le 5 proprietà Flexbox più comuni. Esploreremo cosa fanno, come si possono usare e qual è il risultato effettivo.</p><h3 id="propriet-1-display-flex"><strong>Proprietà #1: <code>display: flex</code></strong></h3><p>Ecco una pagina web di esempio:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/ChnkgUaWEN6dmtS4EQCG60uqIjZVphsErq91" class="kg-image" alt="ChnkgUaWEN6dmtS4EQCG60uqIjZVphsErq91" width="800" height="355" loading="lazy"></figure><p>Ci sono quattro <code>div</code> colorati di dimensioni diverse, all'interno di un <code>div</code> contenitore grigio. Per ora ogni <code>div</code> ha la proprietà predefinita <code>display: block</code>. Quindi, ogni quadrato occupa l'intera larghezza della sua riga.</p><p>Per utilizzare Flexbox, dobbiamo rendere l'elemento <strong>contenitore</strong> un <strong>contenitore flex</strong>, in questo modo:</p><pre><code>#contenitore {
    display: flex;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/6WwoIEc45lUHUcFQCmD8GmziiISm2lO64Y1-" class="kg-image" alt="6WwoIEc45lUHUcFQCmD8GmziiISm2lO64Y1-" width="800" height="345" loading="lazy"></figure><p>Non è cambiato molto <strong>— </strong>ora i <code>div</code> sono visualizzati in linea, ma questo è tutto. Tuttavia, dietro le quinte abbiamo fatto una cosa molto importante. <strong>Abbiamo fornito ai quadrati qualcosa chiamato <em>contesto flex</em><strong>.</strong></strong></p><p>Ora possiamo iniziare a posizionarli all'interno di questo contesto, con molta meno difficoltà rispetto al CSS tradizionale.</p><h3 id="propriet-2-flex-direction"><strong>Proprietà #2: <code>flex-direction</code></strong></h3><p>Un contenitore Flexbox ha due assi: <strong>un asse principale (main)</strong> e <strong>un asse trasversale (cross).</strong> Nella modalità predefinita hanno questa orientazione:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/HHwxqz2N4bNksz9YwcMBAtD0z9TTCxeNXNBS" class="kg-image" alt="HHwxqz2N4bNksz9YwcMBAtD0z9TTCxeNXNBS" width="800" height="450" loading="lazy"></figure><p><strong>Di default, gli elementi sono disposti lungo l'asse principale, da sinistra a destra. </strong>Ecco perché i quadrati si sono disposti in una riga orizzontale non abbiamo applicato <code>display: flex</code>.</p><p>Tuttavia, la proprietà <code>flex-direction</code>, consente di ruotare l'asse principale.</p><pre><code>#contenitore {
    display: flex;
    flex-direction: column;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/wEg7wdKEfv9-bqaiB-t9hzOapBPiqZVYNFIh" class="kg-image" alt="wEg7wdKEfv9-bqaiB-t9hzOapBPiqZVYNFIh" width="800" height="345" loading="lazy"></figure><p>Qui c'è un'importante distinzione da fare: <code>flex-direction: column</code> non allinea i quadrati sull'asse trasversale invece di quello principale. <strong>Cambia l'asse principale stesso da orizzontale a verticale</strong>.</p><p>Esistono anche un paio di altre opzioni per <code>flex-direction</code>: <code>row-reverse</code><em><em> </em></em>e <code>column-reverse</code><em><em>.</em></em></p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/zYdQGSmhtMyqcAbEUDoEehohC8E-gtgvQx6b" class="kg-image" alt="zYdQGSmhtMyqcAbEUDoEehohC8E-gtgvQx6b" width="800" height="345" loading="lazy"></figure><h3 id="propriet-3-justify-content"><strong>Proprietà #3: <code>justify-content</code></strong></h3><p><code>justify-content</code> controlla l'allineamento degli elementi sull'<strong>asse principale.</strong></p><p>Qui ci addentriamo maggiormente nella distinzione tra asse principale e trasversale. Innanzitutto, ritorniamo a <code>flex-direction: row</code>.</p><pre><code>#contenitore {
    display: flex;
    flex-direction: row;
    justify-content: flex-start;
}</code></pre><p>Abbiamo cinque valori a disposizione per <code>justify-content</code>:</p><ol><li><code>flex-start</code></li><li><code>flex-end</code></li><li><code>center</code></li><li><code>space-between</code></li><li><code>space-around</code></li></ol><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/OBGVr-DdHiQ2y9VOWuhXqXeGnFnyDSBTx7hv" class="kg-image" alt="OBGVr-DdHiQ2y9VOWuhXqXeGnFnyDSBTx7hv" width="800" height="179" loading="lazy"></figure><p><code>space-around</code> e <code>space-between</code> sono i meno intuitivi. <strong><code>s<strong>pace-between</strong></code><strong> </strong>dà uguale spazio tra ciascun quadrato, ma non tra i quadrati e il contenitore<strong>.</strong></strong></p><p><code>space-around</code> inserisce un cuscino di spazio uguale su entrambi i lati del quadrato — il che vuole dire che <strong>lo spazio tra i quadrati più esterni e il contenitore è la metà dello spazio tra due quadrati</strong> (ogni quadrato contribuisce con un uguale ammontare di margine non sovrapposto, quindi raddoppiando lo spazio).</p><p>Una nota finale: ricorda che<strong><strong> <code>justify-content</code> </strong>lavora lungo l'asse principale</strong>, e <strong><strong><code>flex-direction</code> </strong>inverte l'asse principale</strong>. Questo sarà importante mentre ci spostiamo verso…</p><h3 id="propriet-4-align-items"><strong>Proprietà #4: <code>align-items</code></strong></h3><p>Se hai 'afferrato' <code>justify-content</code>, <code>align-items</code> sarà un gioco da ragazzi.</p><p>Se <code>justify-content</code> lavora lungo l'asse principale, <strong><strong><code>align-items</code></strong> si applica all'asse trasversale<strong>.</strong></strong></p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/RfGcYLbTwhd9dmqLV9-F3ocjBE8Dp4ejvYXv" class="kg-image" alt="RfGcYLbTwhd9dmqLV9-F3ocjBE8Dp4ejvYXv" width="800" height="450" loading="lazy"></figure><p>Reimpostiamo la direzione su <code>flex-direction: row</code>,<em> </em>in modo che gli assi siano uguali a quelli dell'immagine qui sopra.</p><p>Ora approfondiamo i comandi di <code>align-items</code>.</p><ol><li><code>flex-start</code></li><li><code>flex-end</code></li><li><code>center</code></li><li><code>stretch</code></li><li><code>baseline</code></li></ol><p>I primi tre sono esattamente gli stessi di <code>justify-content</code>, quindi niente di particolare qui.</p><p>Tuttavia gli altri due sono un po' diversi.</p><p>Abbiamo <code>stretch</code>, in cui gli elementi occupano l'intero asse trasversale e <code>baseline</code>, in cui la parte inferiore dei tag di paragrafo è allineata.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/UgsULw0Kk49l-l1wSzeurYNJKCmcA-01oE8a" class="kg-image" alt="UgsULw0Kk49l-l1wSzeurYNJKCmcA-01oE8a" width="800" height="280" loading="lazy"></figure><blockquote>Nota che per <code>align-items: stretch</code>, ho dovuto impostare l'altezza dei quadrati su <code>auto</code>, altrimenti la proprietà <code>height</code> avrebbe la precedenza su <code>stretch</code>.</blockquote><p>Per <code>baseline</code>, sii consapevole che se togli i tag di paragrafo, l'allineamento avviene rispetto alla base dei quadrati, in questo modo:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/dIxrfoUa2r7vM62TGAlKN2KGOnIMmeNM-Gwr" class="kg-image" alt="dIxrfoUa2r7vM62TGAlKN2KGOnIMmeNM-Gwr" width="800" height="255" loading="lazy"></figure><p>Per una migliore dimostrazione degli assi principale e trasversale, combiniamo le proprietà <code>justify-content</code> e <code>align-items</code> per vedere come funziona la centratura in modo diverso per i due valori di <code>flex-direction</code>:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/u9tCV-zRt3qpgSyNQt53e-eRz0-HIrsqqOk-" class="kg-image" alt="u9tCV-zRt3qpgSyNQt53e-eRz0-HIrsqqOk-" width="800" height="417" loading="lazy"></figure><p><strong>Con<strong> <code>row</code>, </strong>i quadrati sono disposti lungo un asse principale orizzontale<strong>.</strong> Con <strong><code>column</code>, </strong>si dispongono lungo un asse principale verticale<strong>.</strong></strong></p><p>Anche se i quadrati sono centrati sia verticalmente che orizzontalmente in entrambi i casi, i due non sono intercambiabili!</p><h3 id="propriet-5-align-self"><strong>Proprietà #5: <code>align-self</code></strong></h3><p><code>align-self</code> ci consente di manipolare manualmente l'allineamento di un particolare elemento.</p><p>In pratica, sovrascrive <code>align-items</code> per un quadrato. Tutte le proprietà sono le stesse, sebbene l'impostazione predefinita sia <code>auto</code>, in cui segue la proprietà <code>align-items</code> del contenitore.</p><pre><code>#contenitore {
     align-items: flex-start;
 }</code></pre><pre><code>.quadrato#uno {
    align-self: center;
}
// Solo questo quadrato verrà centrato.</code></pre><p>Vediamo qual è il risultato applicando <code>align-self</code> a due quadrati e <code>align-items: center</code> e <code>flex-direction: row</code> agli altri.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/HbnMZT330ylw5idocqrjOfp9DrlZt9JrJm9o" class="kg-image" alt="HbnMZT330ylw5idocqrjOfp9DrlZt9JrJm9o" width="800" height="251" loading="lazy"></figure><h3 id="conclusione"><strong>Conclusione</strong></h3><p>Anche se è abbiamo affrontato Flexbox scavando soltanto in superficie, questi comandi dovrebbero essere sufficienti per gestire la maggior parte degli allineamenti di base — e per allineare verticalmente quello che desideri.</p><p>Grazie per aver letto questo articolo! </p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ I pulsanti in CSS – Come impostare lo stile dell'elemento button ]]>
                </title>
                <description>
                    <![CDATA[ In questo articolo, imparerai come impostare lo stile di un pulsante usando il CSS. Il mio obiettivo è mostrare come applicare e utilizzare diverse regole CSS e stili. Non vedremo molte idee da cui trarre ispirazione per il design e lo stile. Sarà piuttosto una panoramica su come funzionano gli ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/i-pulsanti-in-css-come-impostare-lo-stile-dellelemento-button/</link>
                <guid isPermaLink="false">6301d39e03346c07472ea2cc</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Fri, 09 Sep 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/08/moises-de-paula-HPZZHJ-LuDI-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/css-button-style-hover-color-and-background/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Button Style – Hover, Color, and Background</a>
      </p><p>In questo articolo, imparerai come impostare lo stile di un pulsante usando il CSS.</p><p>Il mio obiettivo è mostrare come applicare e utilizzare diverse regole CSS e stili. Non vedremo molte idee da cui trarre ispirazione per il design e lo stile.</p><p>Sarà piuttosto una panoramica su come funzionano gli stili, quali sono le proprietà usate comunemente e come possono essere combinate.</p><p>Prima di tutto, vedrai come creare un pulsante in HTML. Poi, imparerai a sovrascrivere lo stile predefinito dei pulsanti e, infine, avrai un assaggio del modo in cui impostare lo stile per i tre diversi stati di un pulsante.</p><h1 id="sommario"><strong>Sommario</strong></h1><!--kg-card-begin: markdown--><ol>
<li><a href="#come-creare-un-pulsante-in-html">Come creare un pulsante in HTML</a></li>
<li><a href="#come-cambiare-lo-stile-predefinito-di-un-pulsante">Come cambiare lo stile predefinito di un pulsante</a>
<ol>
<li><a href="#come-cambiare-il-colore-di-sfondo-di-un-pulsante">Cambiare il colore di sfondo</a></li>
<li><a href="#come-cambiare-il-colore-del-testo-di-un-pulsante">cambiare il colore del testo</a></li>
<li><a href="#come-cambiare-lo-stile-dei-bordi-di-un-pulsante">Cambiare lo stile dei bordi</a></li>
<li><a href="#come-cambiare-la-dimensione-di-un-pulsante">Cambiare la dimensione</a></li>
</ol>
</li>
<li><a href="#come-personalizzare-gli-stati-di-un-pulsante">Come personalizzare gli stati di un pulsante</a>
<ol>
<li><a href="#come-impostare-lo-stile-dello-stato-hover">Stato hover</a></li>
<li><a href="#come-impostare-lo-stile-dello-stato-focus">Stato focus</a></li>
<li><a href="#come-impostare-lo-stile-dello-stato-active">Stato active</a></li>
</ol>
</li>
<li><a href="#conclusione">Conclusione</a></li>
</ol>
<!--kg-card-end: markdown--><p>Iniziamo!</p><h2 id="come-creare-un-pulsante-in-html"><strong>Come creare un pulsante in HTML</strong></h2><p>Per creare un pulsante, usa l'elemento <code>&lt;button&gt;</code>.</p><p>Questa è un'opzione semantica e più accessibile rispetto all'utilizzo di un generico contenitore creato con un elemento <code>&lt;div&gt;</code>.</p><p>Nel file <code>index.html</code> qui sotto, ho creato la struttura di base per una pagina web a cui ho aggiunto un singolo pulsante:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;link rel="stylesheet" href="style.css"&gt;
    &lt;title&gt;CSS Button Style&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;button type="button" class="button"&gt;Click me!&lt;/button&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Analizziamo la riga <code>&lt;button type="button" class="button"&gt;Click me!&lt;/button&gt;</code>:</p><ul><li>Aggiungiamo prima l'elemento <code>button</code>, costituiro da un tag di apertura <code>&lt;button&gt;</code> e un tag di chiusura <code>&lt;/button&gt;</code>.</li><li>L'attributo <code>type="button"</code> nel tag di apertura <code>&lt;button&gt;</code> crea esplicitamente un pulsante cliccabile. Dato che questo pulsante non è usato per inviare un modulo, è utile aggiungere l'attributo per ragioni semantiche, in modo che il codice sia più chiaro e non inneschi azioni indesiderate.</li><li>L'attributo <code>class="button"</code> sarà utilizzato per impostare lo stile del pulsante in un file CSS separato. Per il valore <code>button</code> potresti scegliere qualsiasi altro nome. Ad esempio, potresti usare <code>class="pulsante"</code>.</li><li>Il testo <code>Click me!</code> è il testo visibile all'interno del pulsante.</li></ul><p>Ogni stile che verrà applicato al pulsante andrà in un file separato <code>style.css</code>.</p><p>Puoi applicare degli stili al contenuto dell'HTML collegando i due file insieme. Questo avviene tramite l'uso del tag <code>&lt;link rel="stylesheet" href="style.css"&gt;</code> nel file <code>index.html</code>.</p><p>Nel file <code>style.css</code>, ho aggiunto dello stile soltanto per centrare il pulsante nel mezzo della finestra del browser.</p><p>Nota che <code>class="button"</code> viene utilizzato nel selettore <code>.button</code> selector. Questo è un modo per applicare direttamente degli stili al pulsante.</p><pre><code class="language-css">* {
    box-sizing: border-box;
} 

body {
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 50px auto;
}

.button {
    position: absolute;
    top: 50%
}
</code></pre><p>Il codice qui sopra ha il seguente risultato:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-06-at-10.29.02-PM.png" class="kg-image" alt="Screenshot-2022-02-06-at-10.29.02-PM" width="600" height="400" loading="lazy"></figure><p>Lo stile predefinito dei pulsanti cambierà a seconda del browser che stai utilizzando.</p><p>Questo è un esempio di come appaiono gli elementi <code>button</code> con il loro stile originario in Google Chrome.</p><h2 id="come-cambiare-lo-stile-predefinito-di-un-pulsante"><strong>Come cambiare lo stile predefinito di un pulsante</strong></h2><h3 id="come-cambiare-il-colore-di-sfondo-di-un-pulsante"><strong>Come cambiare il colore di sfondo di un pulsante</strong></h3><p>Per cambiare il colore di sfondo di un pulsante, usa la proprietà CSS <code>background-color</code> assegnandole come valore il colore che preferisci.</p><p>Nel selettore <code>.button</code>, usa <code>background-color:#0a0a23;</code> per cambiare il colore di sfondo del pulsante.</p><pre><code class="language-css">.button {
    position: absolute;
    top: 50%;
    background-color: #0a0a23;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-06-at-10.28.30-PM.png" class="kg-image" alt="Screenshot-2022-02-06-at-10.28.30-PM" width="600" height="400" loading="lazy"></figure><h3 id="come-cambiare-il-colore-del-testo-di-un-pulsante"><strong>Come cambiare il colore del testo di un pulsante</strong></h3><p>Il colore predefinito del testo è nero. Quindi, se aggiungi un colore di sfondo scuro, vedrai scomparire il testo del pulsante.</p><p>Un'altra cosa a cui fare attenzione è che ci sia un contrasto sufficiente tra lo sfondo e il testo del pulsante, affinché il testo sia più leggibile e gradevole alla vista.</p><p>Usa la proprietà <code>color</code> per cambiare il colore del testo:</p><pre><code class="language-css">.button {
    position: absolute;
    top: 50%;
    background-color: #0a0a23;
    color: #fff;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-06-at-10.28.03-PM.png" class="kg-image" alt="Screenshot-2022-02-06-at-10.28.03-PM" width="600" height="400" loading="lazy"></figure><h3 id="come-cambiare-lo-stile-dei-bordi-di-un-pulsante"><strong>Come cambiare lo stile dei bordi di un pulsante</strong></h3><p>Hai notato il grigio attorno ai bordi del pulsante? Questo è il loro colore predefinito.</p><p>Un modo per sistemare il colore dei bordi è usare la proprietà <code>border-color</code>. Impostando lo stesso valore della proprietà <code>background-color</code>, ti assicuri che i bordi del pulsante abbiano lo stesso colore dello sfondo.</p><p>Un altro modo è rimuovere completamente i bordi usando <code>border: none;</code>.</p><pre><code class="language-css">.button {
  position: absolute;
  top: 50%;
  background-color: #0a0a23;
  color: #fff;
  border: none;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-06-at-10.27.33-PM.png" class="kg-image" alt="Screenshot-2022-02-06-at-10.27.33-PM" width="600" height="400" loading="lazy"></figure><p>Poi, puoi anche arrotondare i bordi del pulsante usando la proprietà <code>border-radius</code>, in questo modo:</p><pre><code class="language-css">.button {
    position: absolute;
    top: 50%;
    background-color: #0a0a23;
    color: #fff;
    border: none;
    border-radius: 10px;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-06-at-10.26.57-PM.png" class="kg-image" alt="Screenshot-2022-02-06-at-10.26.57-PM" width="600" height="400" loading="lazy"></figure><p>Puoi anche aggiungere un leggero effetto ombra attorno al pulsante usando la proprietà <code>box-shadow</code>:</p><pre><code class="language-css">.button {	
    position: absolute;
    top: 50%;
    background-color: #0a0a23;
    color: #fff;
    border: none;
    border-radius: 10px;
    box-shadow: 0px 0px 2px 2px rgb(0,0,0);
  }</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-06-at-10.25.55-PM.png" class="kg-image" alt="Screenshot-2022-02-06-at-10.25.55-PM" width="600" height="400" loading="lazy"></figure><h3 id="come-cambiare-la-dimensione-di-un-pulsante"><strong>Come cambiare la dimensione di un pulsante</strong></h3><p>Per creare più spazio all'interno dei bordi di un pulsante occorre aumentare il suo <code>padding</code>.</p><p>Di seguito, ho aggiunto un valore di 15px per il padding superiore, inferiore, destro e sinistro del pulsante.</p><p>Ho anche impostato un'altezza e una larghezza minime con le proprietà <code>min-height</code> e <code>min-width</code> rispettivamente. I pulsanti devono essere abbastanza grandi su tutti i tipi di dispositivo.</p><pre><code class="language-css">.button {
    position: absolute;
    top: 50%;
    background-color: #0a0a23;
    color: #fff;
    border: none; 
    border-radius: 10px; 
    padding: 15px;
    min-height: 30px; 
    min-width: 120px;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-06-at-10.42.58-PM.png" class="kg-image" alt="Screenshot-2022-02-06-at-10.42.58-PM" width="600" height="400" loading="lazy"></figure><h2 id="come-personalizzare-gli-stati-di-un-pulsante"><strong>Come personalizzare gli stati di un pulsante</strong></h2><p>I pulsanti hanno tre diversi stati:</p><ul><li><code>:hover</code></li><li><code>:focus</code></li><li><code>:active</code></li></ul><p>È bene che i tre stati di un pulsante non condividano lo stesso stile.</p><p>Nelle prossime sezioni, ti fornirò una breve spiegazione del significato di ogni stato e di cosa lo attiva. Vedrai anche alcuni modi per agire sullo stile dei tre stati separatamente.</p><h3 id="come-impostare-lo-stile-dello-stato-hover"><strong>Come impostare lo stile dello stato <code>:hover</code></strong></h3><p>Lo stato <code>:hover</code> corrisponde a un utente che passa con il cursore del mouse/trackpad sul pulsante, senza selezionarlo o cliccarlo.</p><p>Per cambiare lo stile di un pulsante quando ci passa sopra il cursore, utilizza il selettore della pseudo-classe CSS <code>:hover</code>.</p><p>Un cambiamento comune da fare con <code>:hover</code> è la variazione del colore di sfondo del pulsante.</p><p>Per rendere il cambiamento meno improvviso, abbina <code>:hover</code> alla proprietà <code>transition</code>.</p><p>La proprietà <code>transition</code> farà sì che la transizione da nessuno stato allo stato <code>:hover</code> sia più fluida.</p><p>Il cambio del colore di sfondo avverrà un po' più lentamente che senza la proprietà <code>transition</code>, rendendo il risultato finale meno stridente per l'utente.</p><pre><code class="language-css">.button:hover {
      background-color: #002ead;
      transition: 0.7s;
  }
</code></pre><p>Nell'esempio qui sopra, ho usato un codice colore esadecimale come valore per rendere il colore di sfondo di una sfumatura più chiara nello stato <code>:hover</code>.</p><p>Con l'aiuto della proprietà <code>transition</code> ho impostato un ritardo di <code>0.7s</code> quando si verifica la transizione allo stato <code>:hover</code>. In questo modo, la transizione dal colore di sfondo originario <code>#0a0a23</code> al colore <code>#002ead</code> risulta più dolce.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/hover-2.gif" class="kg-image" alt="hover" width="600" height="400" loading="lazy"></figure><p>Tieni a mente che la pseudo-classe <code>:hover</code> non funziona per dispositivi mobili e app mobile. Scegli di utilizzare gli effetti hover solo per applicazioni web per desktop e non per touch screen.</p><h3 id="come-impostare-lo-stile-dello-stato-focus"><strong>Come impostare lo stile dello stato <code>:focus</code></strong></h3><p>Lo stato <code>:focus</code> si attiva per gli utenti che usano la tastiera – in modo specifico, quando selezioni un pulsante premendo il tasto <code>Tab</code> (<code>⇥</code>).</p><p>Se stai seguendo il tutorial, quando selezioni il pulsante premendo il tasto <code>Tab</code>, otterrai questo risultato:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/focus-5.gif" class="kg-image" alt="focus-5" width="600" height="400" loading="lazy"></figure><p>Vedi il contorno azzurro attorno al pulsante quando viene selezionato?</p><p>I browser hanno delle impostazioni predefinite per lo stile della pseudo-classe <code>:focus</code>, per favorire l'accessibilità della navigazione con la tastiera. Non è una buona idea rimuovere del tutto i contorni.</p><p>Ma se vuoi, puoi creare degli stili personalizzati e fare in modo che sia facilmente individuabile.</p><p>Un modo per farlo è impostare <code>outline-color</code> su <code>transparent</code>.</p><p>In seguito, puoi mantenere il valore di <code>outline-style</code> su <code>solid</code>. Infine, usando la proprietà <code>box-shadow</code>, puoi aggiungere un colore di tuo gradimento per quando l'elemento è selezionato:</p><pre><code class="language-css">.button:focus {
    outline-color: transparent;
    outline-style: solid;
    box-shadow: 0 0 0 4px #5a01a7;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/focusend.gif" class="kg-image" alt="focusend" width="600" height="400" loading="lazy"></figure><p>Come prima, puoi accoppiare questi stili alla proprietà <code>transition</code>, in base all'effetto che vuoi raggiungere:</p><pre><code class="language-css">.button:focus {
    outline-color: transparent;
    outline-style: solid;
    box-shadow: 0 0 0 4px #5a01a7;
    transition: 0.7s;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/focusend1.gif" class="kg-image" alt="focusend1" width="600" height="400" loading="lazy"></figure><h3 id="come-impostare-lo-stile-dello-stato-active"><strong>Come impostare lo stile dello stato <code>:active</code></strong></h3><p>Lo stato <code>:active</code> si attiva quando clicchi sul pulsante, sia con il mouse o che con il trackpad.</p><p>Detto ciò, guarda cosa accade cliccando sul pulsante a cui ho applicato e mantenuto gli stili per gli stati <code>:hover</code> e <code>:focus</code>:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/active-1.gif" class="kg-image" alt="active-1" width="600" height="400" loading="lazy"></figure><p>Gli stili dello stato <code>:hover</code> sono applicati prima di cliccare, quando il cursore passa sul pulsante.</p><p>Anche gli stili dello stato <code>:focus</code> vengono applicati, perché quando un pulsante viene cliccato ottiene lo stato <code>:focus</code> insieme allo stato <code>:active</code>.</p><p>Però, tieni a mente che <em>non </em>sono la stessa cosa.</p><p>Lo stato <code>:focus</code> si riferisce a quando un elemento viene selezionato e <code>:active</code> a quando un utente <strong>clicca </strong>su un elemento.</p><p>Per cambiare lo stile relativo a quando un utente clicca su un pulsante, applica degli stili nello pseudo-selettore CSS <code>:active</code>.</p><p>In questo caso, ho cambiato il colore di sfondo del pulsante quando un utente ci clicca sopra:</p><pre><code class="language-css">.button:active {
    background-color: #ffbf00;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/activefinal.gif" class="kg-image" alt="activefinal" width="600" height="400" loading="lazy"></figure><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Adesso conosci i concetti essenziali per impostare lo stile di un pulsante con il CSS.</p><p>Abbiamo parlato di come cambiare il colore di sfondo e del testo dei pulsanti, così come del modo per impostare lo stile dei diversi stati.</p><p>Per imparare di più sul web design, prova la certificazione <a href="https://www.freecodecamp.org/italian/learn/2022/responsive-web-design/">Web Design Responsivo</a> (disponibile in italiano) di freeCodeCamp. Durante le lezioni interattive, imparerai HTML e CSS realizzando 15 progetti di pratica e 5 progetti di certificazione.</p><p>Grazie per aver letto questo articolo e buona programmazione!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ HTML vs Body: come impostare altezza e larghezza per una  pagina full size ]]>
                </title>
                <description>
                    <![CDATA[ Il CSS è difficile, ma è anche permissivo, e ciò ci consente di sparare degli stili a casaccio nel nostro foglio di stile. La pagina viene comunque caricata, non c'è un "crash". Parlando della larghezza e dell'altezza della pagina, sai come impostarle per l'elemento html? E per il body? Schiaffi ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/html-vs-body-how-to-set-width-and-height-for-full-page-size/</link>
                <guid isPermaLink="false">62f1371c5cda1d06d40dd18b</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Wed, 17 Aug 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/08/william-warby-WahfNoqbYnM-unsplash--1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/html-page-width-height/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML vs Body: How to Set Width and Height for Full Page Size</a>
      </p><p>Il CSS è difficile, ma è anche permissivo, e ciò ci consente di sparare degli stili a casaccio nel nostro foglio di stile.</p><p>La pagina viene comunque caricata, non c'è un "crash".</p><p>Parlando della larghezza e dell'altezza della pagina, sai come impostarle per l'elemento <code>html</code>? E per il <code>body</code>?</p><p>Schiaffi degli stili in entrambi gli elementi e speri per il meglio?</p><p>Se lo fai, non sei il solo.</p><p>Le risposte a queste domande non sono intuitive.</p><p>Sono colpevole al 100% di aver applicato in passato degli stili a entrambi gli elementi senza considerare quale proprietà dovrebbe essere applicata a quale elemento. 🤦‍♂️</p><p>Non è raro vedere delle proprietà CSS applicate a entrambi gli elementi <code>html</code> e <code>body</code> in questo modo:</p><pre><code>html, body {
     min-height: 100%;
}
</code></pre><h2 id="-importante"><strong>È importante?</strong></h2><p>Si, lo è.</p><p>La definizione dello stile qui sopra crea un problema:</p><p>Impostare <code>min-height</code> al <code>100%</code> su entrambi gli elementi non permette all'elemento <code>body</code> di riempire la pagina come potresti aspettarti. Se controlli i valori di stile calcolati negli strumenti per sviluppatori, l'elemento <code>body</code> ha un'altezza di zero.</p><p>Intanto, l'elemento <code>html</code> ha un'altezza uguale alla parte visibile della pagina nel browser.</p><p>Osserva i seguenti screenshot dai Dev Tool di Chrome:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/02/empty_body.png" class="kg-image" alt="empty_body" width="600" height="400" loading="lazy"><figcaption>L'elemento body ha un margine di 8px di default, indicato dalla barra in alto. Il valore dell'altezza è 0.</figcaption></figure><h2 id="perch-accade"><strong>Perché accade?</strong></h2><p>Usare una percentuale come valore per la dimensione richiede che l'elemento faccia riferimento all'elemento genitore per basare la percentuale.</p><p>L'elemento <code>html</code> fa riferimento al viewport, che ha un valore di altezza pari all'altezza visibile dello schermo. Tuttavia, abbiamo impostato soltanto un valore per <code>min-height</code> dell'elemento <code>html</code>... NON un valore adeguato per la proprietà <code>height</code>.</p><p>Dunque, l'elemento <code>body</code> non ha un valore di altezza dell'elemento genitore a cui fare riferimento per decidere a cosa corrisponde il valore <code>100%</code>.</p><h2 id="il-problema-potrebbe-essere-ben-nascosto"><strong>Il problema potrebbe essere ben nascosto</strong></h2><p>Se hai iniziato con abbastanza contenuto da riempire il corpo della pagina, potresti non aver notato questo problema.</p><p>E per far sì che sia più difficile da notare, se imposti un colore di sfondo per entrambi gli elementi o anche su uno solo di loro, il viewport viene riempito totalmente dal colore, dandoti l'impressione che l'elemento <code>body</code> sia alto quanto il viewport.</p><p>Non lo è. È ancora a zero.</p><p>L'immagine di sopra è stata presa da una pagina con questo CSS:</p><pre><code>html, body {
    min-height: 100%;
}
body { 
    background-color: dodgerblue; 
}
</code></pre><h3 id="ereditariet-inversa"><strong>Ereditarietà inversa?</strong></h3><p>Per uno strano fenomeno, l'elemento <code>html</code> assume il colore di sfondo dell'elemento <code>body</code> se non imposti un colore una proprietà <code>background-color</code> per l'elemento <code>html</code>.</p><h2 id="quindi-qual-l-altezza-ideale-per-avere-una-pagina-intera-responsiva"><strong>Quindi qual è l'altezza ideale per avere una pagina intera responsiva?</strong></h2><p>Per anni, la risposta è stata questa:</p><pre><code>html {
    height: 100%;
}
body {
    min-height: 100%;
}
</code></pre><p>Questo permette all'elemento <code>html</code> di fare riferimento al genitore viewport e avere un valore di <code>height</code> corrispondente al <code>100%</code> del valore del viewport.</p><p>Dato che l'elemento <code>html</code> riceve un valore di altezza, il valore di <code>min-height</code> assegnato al <code>body</code> restituisce un valore di altezza iniziale che corrisponde a quello dell'elemento <code>html</code>.</p><p>Questo permette al <code>body</code> di crescere se il contenuto diventa troppo grande per la pagina.</p><p>L'unico svantaggio è che l'elemento <code>html</code> non cresce oltre l'altezza visibile del viewport. Tuttavia, permettere al <code>body</code> di diventare troppo grande per &nbsp;l'elemento <code>html</code> è stato considerato accettabile. </p><h2 id="la-soluzione-moderna-semplice"><strong><strong>La soluzione moderna è semplice</strong></strong></h2><pre><code>body { min-height: 100vh; }
</code></pre><p>Questo esempio fa uso dell'unità <code>vh</code> (viewport height) per permettere al <code>body</code> di avere un valore minimo di altezza in base all'altezza totale del viewport.</p><p>Come discusso precedentemente per il colore di sfondo, se non impostiamo un valore di altezza per l'elemento <code>html</code>, questo assumerà lo stesso valore dato all'elemento <code>body</code>.</p><p>Perciò questa soluzione evita che l'elemento <code>html</code> debordi come nella soluzione precedente ed entrambi gli elementi possono crescere con il contenuto!</p><p>L'utilizzo delle unità <code>vh</code>, in effetti, hanno causato alcuni problemi ad alcuni browser mobile in passato, ma sembra che adesso <a href="https://developers.google.com/web/updates/2016/12/url-bar-resizing">Chrome e Safari siano compatibili con l'uso delle unità viewport</a>.</p><h2 id="l-altezza-della-pagina-pu-portare-a-una-barra-di-scorrimento-orizzontale"><strong>L'altezza della pagina può portare a una barra di scorrimento orizzontale</strong></h2><p>Aspetta, cosa?</p><p>Non dovrebbe essere la "larghezza" della pagina?</p><p>E invece no.</p><p>In un'altra misteriosa serie di eventi, l'altezza della pagina può attivare la barra di scorrimento orizzontale del browser.</p><p>Quando il tuo contenuto diventa più alto dell'altezza del viewport, viene attivata la barra di scorrimento verticale sulla destra, e questo può far sì che nella pagina compaia istantaneamente anche una barra di scorrimento orizzontale.</p><h2 id="come-rimediare"><strong>Come rimediare?</strong></h2><p>Potresti dormire meglio sapendo che tutto inizia impostando la larghezza della pagina.</p><p>Il problema sorge quando un elemento – non soltanto gli elementi <code>html</code> o <code>body</code> – viene impostato su <code>100vw</code> (viewport width).</p><p>Le unità viewport non tengono conto dell'approssimazione di 10pixel che occupa la barra di scorrimento verticale.</p><p>Perciò, quando questa si attiva, ottieni anche una barra di scorrimento orizzontale.</p><h2 id="come-impostare-la-pagina-a-larghezza-piena"><strong>Come impostare la pagina a larghezza piena</strong></h2><p>Magari potresti semplicemente non farlo.</p><p>Non impostare una larghezza per gli elementi <code>html</code> e <code>body</code> farà sì che occupino di default tutta la larghezza dello schermo. Se imposti un valore di <code>width</code> diverso da <code>auto</code>, considera di utilizzare prima un reset CSS.</p><p>Ricorda, di default l'elemento <code>body</code> ha <code>8px</code> di margine su tutti i lati.</p><p>Un reset CSS rimuove questo margine. Altrimenti, impostare la larghezza al 100% prima di rimuovere i margini porterà il <code>body</code> a debordare. Ecco il reset CSS che utilizzo:</p><pre><code>* { 
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
</code></pre><h2 id="come-impostare-la-larghezza-a-tuo-piacimento"><strong>Come impostare la larghezza a tuo piacimento</strong></h2><p>Anche se non è sempre necessario impostare una larghezza, di solito lo faccio.</p><p>Potrebbe essere semplicemente un'abitudine.</p><p>Se hai impostato la larghezza del <code>body</code> al <code>100%</code> la pagina occuperà tutta la larghezza. Questo equivale essenzialmente a non impostare un valore di larghezza e lasciare quello di default.</p><p>Se vuoi usare l'elemento <code>body</code> come contenitore più piccolo e lasciare che l'elemento <code>html</code> riempia la pagina, puoi impostare un valore per la proprietà <code>max-width</code> sul <code>body</code>.</p><p>Ecco un esempio:</p><pre><code>html { background-color: #000; } 
body {
    min-height: 100vh;
    max-width: 400px;
    background-color: papayawhip; 
    margin: 0 auto;
}</code></pre><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Senza dare un valore di altezza all'elemento <code>html</code> , impostare <code>height</code> e/o <code>min-height</code> del <code>body</code> al <code>100%</code> porta a non avere un'altezza (prima di aggiungere del contenuto).</p><p>Tuttavia, senza un valore di larghezza dell'elemento <code>html</code>, impostare la proprietà <code>width</code> del <code>body</code> al <code>100%</code> genera una pagina di larghezza pari alla larghezza dello schermo.</p><p>Tutto ciò può essere controintuitivo e disorientante.</p><p>Per una pagina responsiva di altezza uguale all'altezza dello schermo, imposta la proprietà <code>min-height</code> del <code>body</code> su <code>100vh</code>.</p><p>Se imposti una larghezza della pagina, scegli <code>100%</code> invece di <code>100vw</code> per evitare barre di scorrimento orizzontali a sorpresa.</p><p>Preferisci un metodo diverso per impostare l'altezza e la larghezza in CSS?</p><p>Fammelo sapere!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ La proprietà background-image in CSS – Come aggiungere l'URL di un'immagine al tuo div ]]>
                </title>
                <description>
                    <![CDATA[ Diciamo che vuoi inserire un'immagine o due in una pagina web. Un modo per farlo è utilizzare la proprietà CSS background-image. Questa proprietà applica una o più immagini di sfondo a un elemento (ad esempio, un <div>), come spiegato nella documentazione [https://developer.mozilla.org/en-US/docs/Web/CSS/background-image]. Puoi utilizzarla per ragioni estetiche, come per aggiungere ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/la-proprieta-background-image-in-css-come-aggiungere-lurl-di-unimmagine-al-tuo-div/</link>
                <guid isPermaLink="false">62bc59827e58e706f822c4fe</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Tue, 05 Jul 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/w-qjCHPZbeXCQ-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-add-an-image-url-to-your-div/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Background Image – How to Add an Image URL to Your Div</a>
      </p><p>Diciamo che vuoi inserire un'immagine o due in una pagina web. Un modo per farlo è utilizzare la proprietà CSS <strong><strong><code>background-image</code></strong></strong>.</p><p>Questa proprietà applica una o più immagini di sfondo a un elemento (ad esempio, un <strong><strong><code>&lt;div&gt;</code></strong></strong>),<strong><strong> </strong></strong>come spiegato nella <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/background-image">documentazione</a>. Puoi utilizzarla per ragioni estetiche, come per aggiungere alla tua pagina web uno sfondo con una trama.</p><h1 id="aggiungere-un-immagine"><strong>Aggiungere un'immagine</strong></h1><p>Aggiungere un'immagine usando la proprietà <code>background-image</code> è molto semplice. Devi soltanto fornire il percorso dell'immagine all'interno del valore <code>url()</code>.</p><p>Il percorso dell'immagine può essere un URL, come mostrato nell'esempio qui sotto:</p><pre><code class="language-css">div {
   /* Background pattern da Toptal Subtle Patterns */
   background-image: url("https://amymhaddad.s3.amazonaws.com/morocco-blue.png");
   height: 400px;
   width: 100%;
}
</code></pre><p>Oppure può essere un percorso locale. Ad esempio:</p><pre><code class="language-css">body {
   /* Background pattern da Toptal Subtle Patterns */
   height: 400px;
   width: 100%;
   background-image: url("./images/oriental-tiles.png");
}
</code></pre><h1 id="aggiungere-immagini-multiple"><strong>Aggiungere immagini multiple</strong></h1><p>Puoi anche applicare più di un'immagine alla proprietà <code>background-image</code>.</p><pre><code class="language-css">div {
/* Background pattern da Toptal Subtle Patterns */
   height: 400px;
   width: 100%;
   background-image: 
       url("https://amymhaddad.s3.amazonaws.com/morocco-blue.png"),
       url("https://amymhaddad.s3.amazonaws.com/oriental-tiles.png");
   background-repeat: no-repeat, no-repeat;
   background-position: right, left; 
}
</code></pre><p>È un bel blocco di codice, dividiamolo e analizziamolo.</p><p>Separa ogni <code>url()</code> di un'immagine con una virgola.</p><pre><code class="language-css">background-image: 
    url("https://amymhaddad.s3.amazonaws.com/morocco-blue.png"),
    url("https://amymhaddad.s3.amazonaws.com/oriental-tiles.png");
</code></pre><p>Poi, posiziona e ottimizza le tue immagini applicando proprietà aggiuntive.</p><pre><code class="language-css">background-repeat: no-repeat, no-repeat;
background-position: right, left; 
</code></pre><p>Esistono svariate <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Backgrounds_and_Borders/Using_multiple_backgrounds">sotto-proprietà</a> che puoi aggiungere alle tue immagini di sfondo, come <strong><strong><code>background-repeat</code></strong></strong> e <strong><strong><code>background-position</code></strong></strong>, che abbiamo usato nell'esempio precedente. Inoltre, puoi anche aggiungere dei <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/gradient">gradienti</a>.</p><p>Vediamo il risultato una volta messo insieme il tutto.</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_VwLqWbm" src="https://codepen.io/amymhaddad/embed/preview/VwLqWbm?height=300&amp;slug-hash=VwLqWbm&amp;default-tabs=css,result&amp;host=https://codepen.io" title="Embedded content" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; width: 760px; overflow: hidden;"></iframe></figure><h1 id="l-ordine-importante"><strong>L'ordine è importante</strong></h1><p>L'ordine in cui elenchi le immagini è importante per via dell'ordine di sovrapposizione (stacking). Ciò vuol dire che la prima immagine in elenco è quella più vicina all'utente (come spiegato nella <a href="https://www.w3.org/TR/css-backgrounds-3/#layering">documentazione</a>), e le altre si susseguono secondo l'ordine in cui sono state scritte.</p><p>Ecco un esempio:</p><pre><code class="language-css">div {
/* Background pattern da Toptal Subtle Patterns */
   height: 400px;
   width: 100%;
   background-image: 
       url("https://amymhaddad.s3.amazonaws.com/morocco-blue.png"),
       url("https://amymhaddad.s3.amazonaws.com/oriental-tiles.png");
   background-repeat: no-repeat, no-repeat;
}
</code></pre><p>La prima delle due immagini elencate in questo blocco di codice (morocco-blue.png), si troverà davanti alla seconda (oriental-tiles.png). Entrambe le immagini hanno la stessa dimensione e non hanno opacità, quindi possiamo vedere soltanto la prima immagine.</p><p>Se spostiamo la seconda immagine (oriental-tiles.png) sulla destra di 200 pixel, saremo in grado di vederne una parte (mentre la parte restante rimane nascosta).</p><p>Ecco il risultato una volta messo insieme il tutto.</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_oNXrXMo" src="https://codepen.io/amymhaddad/embed/preview/oNXrXMo?height=300&amp;slug-hash=oNXrXMo&amp;default-tabs=css,result&amp;host=https://codepen.io" title="Embedded content" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; width: 760px; overflow: hidden;"></iframe></figure><h2 id="quando-dovremmo-usare-background-image"><strong>Quando dovremmo usare background-image?</strong></h2><p>La proprietà <code>background-image</code> ha molte qualità apprezzabili, ma ci sono anche degli inconvenienti nel suo utilizzo.</p><p>Come puntualizzato nella <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/background-image">documentazione</a>, l'immagine potrebbe non essere accessibile a tutti gli utenti, ad esempio, quelli che fanno uso di lettori di schermo.</p><p>Ciò accade perché non è possibile aggiungere del contenuto testuale alla proprietà <code>background-image</code>, con il risultato che l'immagine sfugge ai lettori di schermo.</p><p>Utilizza la proprietà <code>background-image</code> solo quando hai bisogno di aggiungere delle decorazioni alla tua pagina. Altrimenti, se l'immagine ha un significato o uno scopo, usa l'elemento HTML <strong><strong><code>&lt;img&gt;</code></strong></strong>, come suggerito nella <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/background-image">documentazione</a>.</p><p>In questo modo, puoi aggiungere del testo all'elemento <code>&lt;img&gt;</code> tramite l'attributo <strong><strong><code>alt</code></strong></strong>, che <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img">descrive l'immagine</a>. Il testo fornito verrà rilevato dai lettori di schermo. </p><pre><code class="language-html">&lt;img class="house" 
       src="./images/farnsworth_house.jpeg"
       alt="A glass house designed by Ludwig Mies van der Rohe located in Plano, Illinois."&gt;
</code></pre><p>Pensa in questo modo: <code>background-image</code> è una proprietà CSS, e il CSS si focalizza sulla presentazione e lo stile di una pagina, mentre l'HTML si concentra sulla semantica e la struttura.</p><p>Quando si tratta di immagini, hai due opzioni: se l'immagine è una decorazione, allora la proprietà <code>background-image</code> potrebbe essere una buona scelta.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
