<?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[ Design - 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[ Design - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 28 May 2026 20:36:55 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/tag/design/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Come creare una galleria d'immagini con CSS Grid ]]>
                </title>
                <description>
                    <![CDATA[ Le gallerie di immagini di siti come Unsplash [https://unsplash.com/] o  Pinterest [https://www.pinterest.com/], sono realizzate con tecniche che implicano il posizionamento e la traslazione delle immagini che possono rivelarsi piuttosto macchinose. Puoi ottenere lo stesso risultato usando CSS Grid. > Ad esempio: qui sopra puoi osservare una galleria di immagini ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-creare-una-galleria-dimmagini-con-css-grid/</link>
                <guid isPermaLink="false">62e783e25cda1d06d40daee0</guid>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Thu, 04 Aug 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/08/grid.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-create-an-image-gallery-with-css-grid-e0f0fd666a5c/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to create an image gallery with CSS Grid</a>
      </p><p>Le gallerie di immagini di siti come <a href="https://unsplash.com/" rel="noopener">Unsplash</a> o <a href="https://www.pinterest.com/" rel="noopener">Pinterest</a>, sono realizzate con tecniche che implicano il posizionamento e la traslazione delle immagini che possono rivelarsi piuttosto macchinose. Puoi ottenere lo stesso risultato usando <strong>CSS Grid</strong>.</p><blockquote><strong>Ad esempio</strong>: qui sopra puoi osservare una galleria di immagini di larghezza e altezza variabili: un caso ottimale per usare CSS Grid.</blockquote><h4 id="iniziamo-"><strong><strong>Iniziamo<strong>!</strong></strong></strong></h4><h3 id="la-griglia"><strong>La griglia </strong></h3><p>Partiamo creando una <strong>griglia <strong>8x8</strong></strong>. Possiamo creare una griglia di altre dimensioni, ma questo dipende dal tipo di galleria desiderata. Nel nostro caso una <strong>griglia <strong>8x8</strong></strong> è l'ideale.</p><ul><li>Un <strong>contenitore </strong>griglia (grid container) è definito impostando la proprietà <strong><code>display</code> </strong>di un elemento sul valore <strong><code>grid</code></strong>. Quindi, il <strong>div </strong>con la <strong>classe grid</strong> sarà il nostro <strong>contenitore</strong>.</li><li>Usiamo la proprietà <strong><strong><code>grid-template-columns</code></strong></strong> per impostare il tracciato delle colonne e <strong><code><strong>grid-template-</strong>rows</code> </strong>per impostare il tracciato delle righe. Dichiariamo queste proprietà per il contenitore. Nel nostro esempio, creeremo un contenitore griglia 8x8.</li><li>La proprietà <strong><strong><code>grid-gap</code></strong> </strong>definisce lo spazio tra le righe e tra le colonne nel layout a griglia. Il valore di questa proprietà può essere espresso in una unità di lunghezza CSS qualsiasi. Nel nostro esempio, ho usato il valore 15px per ottenere un aspetto ottimale.</li></ul><p><strong><strong>HTML:</strong></strong></p><pre><code class="language-html">&lt;div class="galleria"&gt;&lt;/div&gt;</code></pre><p><strong><strong>CSS:</strong></strong></p><pre><code class="language-css">.galleria {
    display: grid;
    grid-template-columns: repeat(8, 1fr);
    grid-template-rows: repeat(8, 5vw);
    grid-gap: 15px;
}</code></pre><blockquote><strong><strong><em><em>Not</em></em></strong><em>a</em><strong><em><em>:</em></em></strong></strong><em><em> </em>l'altezza delle righe è legata alla larghezza del viewport, così che le celle mantengano correttamente il proprio rapporto d'aspetto. Abbiamo <strong>8 righe</strong>, ognuna alta <strong>5 vw </strong>(viewport width). Ho fatto diversi tentativi con le altezze e sono arrivato alla conclusione che il<strong> 5% della larghezza del viewport </strong>(5 vw) è la dimensione perfetta per l'altezza delle righe. </em></blockquote><blockquote><strong><strong><em><em>Not</em></em></strong><em>a</em><strong><em><em>:</em></em></strong></strong><em><em> </em>tutti i <strong>discendenti diretti del contenitore griglia</strong> diventano automaticamente <strong>elementi griglia </strong>(grid items)<em>.</em></em></blockquote><h3 id="inserire-elementi-nella-griglia"><strong>Inserire elementi nella griglia</strong></h3><p>Adesso, inseriremo gli elementi all'interno del contenitore:</p><pre><code class="language-html">&lt;div class="galleria"&gt;
  &lt;figure class="galleria__elemento galleria__elemento--1"&gt;
    &lt;img
      src="immagini/immagine-1.jpg"
      alt="Immagine della galleria 1"
      class="galleria__immagine"
    /&gt;
  &lt;/figure&gt;
  &lt;figure class="galleria__elemento galleria__elemento--2"&gt;
    &lt;img
      src="immagini/immagine-2.jpg"
      alt="Immagine della galleria 2"
      class="galleria__immagine"
    /&gt;
  &lt;/figure&gt;
  &lt;figure class="galleria__elemento galleria__elemento--3"&gt;
    &lt;img
      src="immagini/immagine-3.jpg"
      alt="Immagine della galleria 3"
      class="galleria__immagine"
    /&gt;
  &lt;/figure&gt;
  &lt;figure class="galleria__elemento galleria__elemento--4"&gt;
    &lt;img
      src="immagini/immagine-4.jpg"
      alt="Immagine della galleria 4"
      class="galleria__immagine"
    /&gt;
  &lt;/figure&gt;
  &lt;figure class="galleria__elemento galleria__elemento--5"&gt;
    &lt;img
      src="immagini/immagine-5.jpg"
      alt="Immagine della galleria 5"
      class="galleria__immagine"
    /&gt;
  &lt;/figure&gt;
  &lt;figure class="galleria__elemento galleria__elemento--6"&gt;
    &lt;img
      src="immagini/immagine-6.jpg"
      alt="Immagine della galleria 6"
      class="galleria__immagine"
    /&gt;
  &lt;/figure&gt;
&lt;/div&gt;
</code></pre><h3 id="impostare-lo-stile-delle-immagini"><strong>Impostare lo stile delle immagini</strong></h3><pre><code class="language-css">.galleria__immagine {
    width: 100%;
    height: 100%;
    object-fit: cover;
}</code></pre><p>Impostare il valore della proprietà <strong><code>object-fit</code></strong> su <strong><code>cover</code> </strong>è come impostare il medesimo valore per <strong><code>background-size</code> </strong>per un'immagine di sfondo. Lo stiamo facendo per fare in modo che l'immagine possa riempire l'altezza e la larghezza della sua cella (l'elemento griglia), mantenendo il proprio rapporto d'aspetto.</p><blockquote><strong><strong><em><em>Not</em></em></strong><em>a</em><strong><em><em>:</em></em></strong></strong><em><em> </em>la proprietà <code>object-fit</code> funziona solo se abbiamo impostato le proprietà <code>width</code> e <code>height</code><em>.</em></em></blockquote><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*FBsVH1n06ufBr_WcB_xDDQ.png" class="kg-image" alt="1*FBsVH1n06ufBr_WcB_xDDQ" width="800" height="500" loading="lazy"></figure><blockquote><strong><strong><em><em>Not</em></em></strong><em>a</em><strong><em><em>:</em></em></strong></strong><em><em> </em>di<em> default </em>gli <strong>elementi </strong>sono disposti secondo le <strong>regole di posizionamento automatico della griglia</strong>. </em></blockquote><h3 id="posizionare-gli-elementi"><strong><strong><strong>Posi</strong></strong>zionare gli elementi</strong></h3><p>Prima di iniziare a posizionare gli elementi, dobbiamo occuparci di qualche concetto di base.</p><p>Il <strong>div</strong> con la classe <strong>grid</strong> è il <strong>contenitore </strong>e tutti i suoi <strong>discendenti diretti</strong> sono <strong>elementi della griglia</strong>. Quando abbiamo definito il tracciato della griglia con <code>grid-template-columns</code> e <code>grid-template-rows</code>, abbiamo ottenuto delle<strong> linee</strong> da utilizzare per posizionare i nostri elementi. Possiamo fare riferimento a ogni linea con un indice numerico.</p><p>Di default, <strong>le colonne iniziano da uno, da sinistra verso destra</strong>, mentre <strong>le righe iniziano da uno dall'alto verso il basso</strong>. Una singola colonna o riga è generata da due linee della griglia, una per lato. Così la nostra griglia di <strong>8 colonne</strong> e <strong>8 righe</strong> è formata da <strong>9 linee per le colonne</strong> e <strong>9 linee per le righe</strong>.</p><p>Le linee verticali <strong>1 </strong>e <strong>2 </strong>delimitano il punto d'<strong>inizio</strong> e di <strong>fine </strong>della <strong>prima colonna</strong>. Le linee <strong>2 </strong>e <strong>3 </strong>delimitano<strong> </strong>la <strong>seconda colonna</strong> e così via. Analogamente, le linee orizzontali <strong>1</strong> e <strong>2</strong> delimitano la <strong>prima riga</strong> e le linee <strong>2</strong> e <strong>3</strong> la <strong>seconda riga</strong> e via dicendo. Conoscere questi concetti ti aiuterà a capire come andremo a posizionare gli elementi (le immagini) nella griglia.</p><p>Adesso useremo i numeri delle linee della griglia per controllare il posizionamento degli elementi, applicando direttamente delle proprietà ad un elemento della griglia. Possiamo specificare la linee in corrispondenza delle quali l'elemento deve iniziare e terminare, e quanti tracciati deve occupare.</p><h4 id="1-elemento-della-griglia">1° elemento della griglia</h4><p>Creiamo una nuova regola che seleziona il primo elemento <code><strong>.galleria__elemento--1</strong></code>. Iniziamo usando la proprietà <strong><strong><code>grid-column-start</code></strong></strong> per indicare la linea di partenza del primo elemento, mentre con <strong><code><strong>grid-column-</strong>end</code> </strong>indichiamo la fine del primo elemento.</p><p>Quindi il valore di <code><strong>grid-column-start</strong></code> è un numero che indica la linea della griglia corrispondente al lato sinistro della colonna e il valore di <code><strong>grid-column-end</strong></code> indica la linea che demarca il lato destra della colonna. </p><p>Nell'esempio qui sotto, impostare <strong><strong><code>grid-column-start</code></strong></strong> su <strong><strong><code>1</code></strong></strong> e <strong><strong><code>grid-column-end</code></strong></strong> su <strong><strong><code>3</code></strong> </strong>significa che l'elemento della griglia si estenderà dal bordo sinistro della linea della griglia, dalla linea <strong>1</strong> alla <strong>3</strong>, occupando <strong>2 colonne</strong>. Usiamo anche le proprietà <strong><strong><code>grid-row-start</code></strong></strong> e <strong><strong><code>grid-row-end</code></strong></strong> per indicare l'inizio e la fine dello stesso elemento sulle linee delle righe della griglia, nello stesso modo in cui abbiamo fatto per le colonne.</p><pre><code class="language-css">.galleria__elemento--1 {
    grid-column-start: 1;
    grid-column-end: 3;
    grid-row-start: 1;
    grid-row-end: 3;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*ScnDXtFn-7wffVN62rqg5w.png" class="kg-image" alt="1*ScnDXtFn-7wffVN62rqg5w" width="800" height="500" loading="lazy"><figcaption>Posizionamento del primo elemento</figcaption></figure><blockquote><strong><strong><em><em>Not</em></em></strong><em>a</em><strong><em><em>: </em></em></strong></strong><em>ora posizioneremo gli altri elementi con gli stessi principi che abbiamo appena imparato.</em></blockquote><h4 id="2-elemento-della-griglia">2° elemento della griglia</h4><pre><code class="language-css">.galleria__elemento--2 {
    grid-column-start: 3;
    grid-column-end: 5;
    grid-row-start: 1;
    grid-row-end: 3;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*U-OLT0CdIjjxvaV-4YpjLg.png" class="kg-image" alt="1*U-OLT0CdIjjxvaV-4YpjLg" width="800" height="499" loading="lazy"><figcaption>Posizionamento del secondo elemento</figcaption></figure><h4 id="3-elemento-della-griglia">3° elemento della griglia</h4><pre><code class="language-css">.galleria__elemento--3 {
    grid-column-start: 5;
    grid-column-end: 9;
    grid-row-start: 1;
    grid-row-end: 6;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*wEZB6kvCDGquI_PH1yH4gQ.png" class="kg-image" alt="1*wEZB6kvCDGquI_PH1yH4gQ" width="800" height="500" loading="lazy"><figcaption>Posizionamento del terzo elemento</figcaption></figure><h4 id="4-elemento-della-griglia">4° elemento della griglia</h4><pre><code class="language-css">.galleria__elemento--4 {
    grid-column-start: 1;
    grid-column-end: 5;
    grid-row-start: 3;
    grid-row-end: 6;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*AkEoMuGUJM5oB7q-2SLnxA.png" class="kg-image" alt="1*AkEoMuGUJM5oB7q-2SLnxA" width="800" height="500" loading="lazy"><figcaption>Posizionamento del quarto elemento</figcaption></figure><h4 id="5-elemento-della-griglia">5° elemento della griglia</h4><pre><code class="language-css">.galleria__elemento--5 {
    grid-column-start: 1;
    grid-column-end: 5;
    grid-row-start: 6;
    grid-row-end: 9;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*0SA_xLddgWzrV7y0hK8kEQ.png" class="kg-image" alt="1*0SA_xLddgWzrV7y0hK8kEQ" width="800" height="500" loading="lazy"><figcaption>Posizionamento del quinto elemento</figcaption></figure><h4 id="6-elemento-della-griglia">6° elemento della griglia</h4><pre><code class="language-css">.galleria__elemento--6 {
    grid-column-start: 5;
    grid-column-end: 9;
    grid-row-start: 6;
    grid-row-end: 9;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*rmUZZ0lsviNcnofEoAnRPw.png" class="kg-image" alt="1*rmUZZ0lsviNcnofEoAnRPw" width="800" height="498" loading="lazy"><figcaption>Posizionamento del sesto elemento</figcaption></figure><p>Puoi trovare il codice completo qui sotto.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="it"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;

    &lt;link
      href="https://fonts.googleapis.com/css?family=Josefin+Sans:300,400,400i|Nunito:300,300i"
      rel="stylesheet"
    /&gt;
    &lt;link rel="stylesheet" href="css/style.css" /&gt;
    &lt;link rel="shortcut icon" type="image/png" href="immagini/favicon.png" /&gt;

    &lt;title&gt;Galleria con CSS Grid&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="contenitore"&gt;
      &lt;div class="galleria"&gt;
        &lt;figure class="galleria__elemento galleria__elemento--1"&gt;
          &lt;img
            src="immagini/immagine-1.jpg"
            alt="Immagine della galleria 1"
            class="galleria__immagine"
          /&gt;
        &lt;/figure&gt;
        &lt;figure class="galleria__elemento galleria__elemento--2"&gt;
          &lt;img
            src="immagini/immagine-2.jpg"
            alt="Immagine della galleria 2"
            class="galleria__immagine"
          /&gt;
        &lt;/figure&gt;
        &lt;figure class="galleria__elemento galleria__elemento--3"&gt;
          &lt;img
            src="immagini/immagine-3.jpg"
            alt="Immagine della galleria 3"
            class="galleria__immagine"
          /&gt;
        &lt;/figure&gt;
        &lt;figure class="galleria__elemento galleria__elemento--4"&gt;
          &lt;img
            src="immagini/immagine-4.jpg"
            alt="Immagine della galleria 4"
            class="galleria__immagine"
          /&gt;
        &lt;/figure&gt;
        &lt;figure class="galleria__elemento galleria__elemento--5"&gt;
          &lt;img
            src="immagini/immagine-5.jpg"
            alt="Immagine della galleria 5"
            class="galleria__immagine"
          /&gt;
        &lt;/figure&gt;
        &lt;figure class="galleria__elemento galleria__elemento--6"&gt;
          &lt;img
            src="immagini/immagine-6.jpg"
            alt="Immagine della galleria 6"
            class="galleria__immagine"
          /&gt;
        &lt;/figure&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>E il CSS:</p><pre><code class="language-css">*,
*::after,
*::before {
  margin: 0;
  padding: 0;
  box-sizing: inherit;
}

html {
  box-sizing: border-box;
  font-size: 62.5%;
}

body {
  font-family: 'Nunito', sans-serif;
  color: #333;
  font-weight: 300;
  line-height: 1.6;
}

.contenitore {
  width: 60%;
  margin: 2rem auto;
}

.galleria {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  grid-template-rows: repeat(8, 5vw);
  grid-gap: 1.5rem;
}

.galleria__immagine {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.galleria__elemento--1 {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 1;
  grid-row-end: 3;

  /** Sintassi alternativa **/
  /* grid-column: 1 / span 2;  */
  /* grid-row: 1 / span 2; */
}

.galleria__elemento--2 {
  grid-column-start: 3;
  grid-column-end: 5;
  grid-row-start: 1;
  grid-row-end: 3;

  /** Sintassi alternativa **/
  /* grid-column: 3 / span 2;  */
  /* grid-row: 1 / span 2; */
}

.galleria__elemento--3 {
  grid-column-start: 5;
  grid-column-end: 9;
  grid-row-start: 1;
  grid-row-end: 6;

  /** Sintassi alternativa **/
  /* grid-column: 5 / span 4;
  grid-row: 1 / span 5; */
}

.galleria__elemento--4 {
  grid-column-start: 1;
  grid-column-end: 5;
  grid-row-start: 3;
  grid-row-end: 6;

  /** Sintassi alternativa **/
  /* grid-column: 1 / span 4;  */
  /* grid-row: 3 / span 3; */
}

.galleria__elemento--5 {
  grid-column-start: 1;
  grid-column-end: 5;
  grid-row-start: 6;
  grid-row-end: 9;

  /** Sintassi alternativa **/
  /* grid-column: 1 / span 4; */
  /* grid-row: 6 / span 3; */
}

.galleria__elemento--6 {
  grid-column-start: 5;
  grid-column-end: 9;
  grid-row-start: 6;
  grid-row-end: 9;

  /** Sintassi alternativa **/
  /* grid-column: 5 / span 4; */
  /* grid-row: 6 / span 3; */
}
</code></pre><p>Puoi provare ad aggiungere il tuo CSS &nbsp;per dare a questa galleria l'aspetto che preferisci. Puoi anche creare una galleria di immagini più complessa con molta facilità.</p><p>Spero che tu abbia trovato questo articolo utile e interessante.</p><p><strong>Grazie per aver letto questo articolo!</strong></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
