{"id":723,"date":"2017-04-11T19:37:19","date_gmt":"2017-04-11T17:37:19","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/css-grid-in-pratica-aggiungere-grid-a-un-design-esistente\/"},"modified":"2017-04-11T19:37:19","modified_gmt":"2017-04-11T17:37:19","slug":"css-grid-in-pratica-aggiungere-grid-a-un-design-esistente","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/css-grid-in-pratica-aggiungere-grid-a-un-design-esistente\/","title":{"rendered":"CSS Grid in pratica: aggiungere Grid a un design esistente"},"content":{"rendered":"<p>Comprendere e usare CSS Grid \u00e8 pi\u00f9 semplice di quel che pensate. Il giorno in cui il supporto per Grid \u00e8 apparso in Firefox 52, ho deciso cos\u00ec su due piedi di convertire il layout di base <a href=\"http:\/\/meyerweb.com\/\">del mio sito personale<\/a> utilizzando Grid ed \u00e8 stato un processo piuttosto semplice: cinque minuti per scrivere gli stili della griglia seguiti da 15-20 minuti per la risoluzione dei problemi.<\/p>\n<p>Grid ci permette di definire letteralmente le linee delle colonne e delle righe della griglia e poi di attaccare degli elementi a quelle linee nell&#8217;ordine che decidiamo. Suona come tabelle, ma Grid \u00e8 <em>molto<\/em> molto pi\u00f9 di quello che potessimo sognare con le tabelle. Significa pi\u00f9 layout responsive, documenti molto pi\u00f9 accessibili e un markup molto pi\u00f9 pulito di quello che ci siamo mai potuti permettere con i float e il posizionamento.<\/p>\n<p>Sono passati decenni da quando CSS \u00e8 apparso per la prima volta, ma non ha mai avuto un sistema come questo. E Grid \u00e8 gi\u00f9 supportato sia in Chrome sia in Firefox, con il supporto di Safari imminente (al momento in cui scrivo le sue release Technology Preview supportano Grid). Sta sorgendo <em>proprio in questo momento<\/em> una nuova era nel digital design.<\/p>\n<div class=\"paragrafo\">\n<h2 id=\"section1\">Come funzionavano le cose<\/h2>\n<p>Prima di arrivare a Grid, permettetemi un momento per spiegare la struttura del markup delle pagine principali di meyerweb e l&#8217;approccio \u201cpositioning-and-margin\u201d che ho usato per circa 12 anni. Ecco come \u00e8 strutturato il markup:<\/p>\n<pre id=\"snippet1\" class=\" language-markup\"><code class=\" language-markup\">\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>body<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>sitemast<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u2026<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>search<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u2026<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>main<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u2026<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>extra<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u2026<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>navigate<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u2026<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>footer<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u2026<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>body<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n<\/code>\n<\/pre>\n<p>Alcuni di questi ID sono superstiti idiosincratici della mia visione delle convenzioni di layout e naming dei primi anni 2000. Per esempio, <code>#extra<\/code> \u00e8 quello che la maggior parte di noi chiamerebbe <code>#sidebar<\/code>. <code>#sitemast<\/code> sta per <code>#masthead<\/code>. E <code>#footer<\/code> proviene da un&#8217;epoca antecedente all&#8217;arrivo dell&#8217;effettivo elemento <code>&lt;footer&gt;<\/code>.<\/p>\n<p>I <code>div<\/code> (che probabilmente oggi sarebbero <code>section<\/code>, ma adesso non importa) sono sistemati in modo che se il CSS non dovesse caricarsi, o se si utilizzasse un browser vocale per navigare il sito, allora la testata (masthead) del sito sarebbe la prima, la possibilit\u00e0 di cercare nel sito sarebbe la seconda e il contenuto principale della pagina sarebbe terzo. Dopo di che, seguono i materiali extra, la navigazione del sito e il footer.<\/p>\n<p>Tutti questi sono stati tenuti insieme in un layout con il posizionamento assoluto dei <code>div<\/code> di navigazione e ricerca. Il sitemast \u00e8 stato impostato ad un&#8217;altezza di <code>192px<\/code> e a entrambe i <code>div<\/code> di navigazione e ricerca \u00e8 stato dato <code>top: 192px;<\/code> per mostrarli proprio sotto a questo. Per lasciare margine a questi, sono stati applicati dei top margin ai <code>div<\/code> main ed extra. (<strong>Fig. 1<\/strong>)<\/p>\n<div id=\"figure1\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-homepage.jpg\" border=\"0\" alt=\"Screenshot di una pagina web\" width=\"100%\" \/><\/p>\n<p>Fig. 1: Homepage di meyerweb (tagliata)<\/p>\n<\/div>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section2\">Costruire la griglia<\/h2>\n<p>Quindi, questo \u00e8 il modo in cui le cose sono state disposte fin dalla met\u00e0 del 2005, pi\u00f9 o meno. A un certo punto ho giochicchiato con flexbox come esperimento, ma non l&#8217;ho mai pubblicato perch\u00e9 sembrava goffo usare un tool di layout unidimensionale per gestire un layout bidimensionale. Probabilmente, avrei dovuto convertire la barra di navigazione a flexbox, ma sono stato distratto da altro e non ci sono pi\u00f9 tornato su.<\/p>\n<p>Dopotutto, Grid stava arrivando. Nel periodo precedente al rilascio al pubblico di Grid, mi sono concentrato sull&#8217;apprendere e insegnare Grid, creando dei test case e usandolo per creare delle div per la pubblicazione. Poi, il 7 marzo 2017, \u00e8 arrivato al pubblico in Firefox 52. Ho twittato e postato <a href=\"http:\/\/meyerweb.com\/eric\/thoughts\/2017\/03\/07\/welcome-to-the-grid\/\">un articolo<\/a> e una <a href=\"http:\/\/meyerweb.com\/eric\/css\/examples\/grid\/masks.html\">demo<\/a> che avevo messo insieme la sera prima e mi sono seduto meravigliandomi che quel giorno fosse finalmente arrivato. Dopo pi\u00f9 di venti anni di CSS, finalmente, un sistema di layout reale, un insieme di propriet\u00e0 e valori progettati fin dal principio per quello scopo.<\/p>\n<p>E poi ho deciso, pi\u00f9 o meno in quell&#8217;istante, di convertire il mio sito personale perch\u00e9 utilizzasse Grid per il suo layout di livello principale. Mi ci sono voluti meno di cinque minuti per uscirmene con quello che segue:<\/p>\n<pre id=\"snippet2\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">body <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> grid<span class=\"token punctuation\">;<\/span>\n   <span class=\"token property\">grid-template-rows<\/span><span class=\"token punctuation\">:<\/span> 192px min-content min-content 1fr<span class=\"token punctuation\">;<\/span>\n   <span class=\"token property\">grid-template-columns<\/span><span class=\"token punctuation\">:<\/span> 1fr 20em<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#sitemast <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1 \/ span 2<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#search <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#main <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 3<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#extra  <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 3<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#navigate <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#footer <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 4<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Questo non \u00e8 tutto quello che dovevo fare, ma \u00e8 la parte centrale. Lasciate che ve la spieghi.<\/p>\n<pre id=\"snippet3\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">body <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> grid<span class=\"token punctuation\">;<\/span>\n   <span class=\"token property\">grid-template-rows<\/span><span class=\"token punctuation\">:<\/span> 192px min-content min-content 1fr<span class=\"token punctuation\">;<\/span>\n   <span class=\"token property\">grid-template-columns<\/span><span class=\"token punctuation\">:<\/span> 1fr 20em<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Questa parte del CSS imposta l&#8217;elemento <code>body<\/code> perch\u00e9 sia un <em>grid container<\/em> e imposta le linee della griglia. Quando rendete un elemento il grid container, tutti i suoi figli diventano <em>grid item<\/em>. (Se avete lavorato con flexbox, allora questo pattern vi sar\u00e0 familiare). Quindi, con quel <code>display: grid<\/code>, ho fatto diventare tutti i <code>div<\/code> figlio dei grid item.<\/p>\n<p>Poi vengono le righe nella griglia. I valori in <code>grid-template-rows<\/code> definiscono effettivamente le distanze di separazione tra le linee della griglia (lo stesso vale per <code>grid-template-columns<\/code>, che vedremo tra un attimo). Quindi, il valore <code>192px min-content min-content 1fr;<\/code> significa: \u201cScendi di 192 pixel dal top del grid container e metti una grid line. Poi mettine altre due cos\u00ec che forniscano sufficiente spazio verticale per i contenuti delle righe che definiscono. Infine, lascia una <code>fraction<\/code> (frazione) della distanza tra la terza grid line e il bottom del grid container.\u201d (<strong>Fig. 2<\/strong>)<\/p>\n<div id=\"figure2\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-diagram-rows.jpg\" border=\"0\" alt=\"Screenshot della web page\" width=\"100%\" \/><\/p>\n<p>Fig. 2: Definizione delle righe<\/p>\n<\/div>\n<p>Il valore <code>min-content<\/code> \u00e8 piuttosto figo. Significa proprio quel che dice: \u201cPrendi la minor quantit\u00e0 di spazio necessario per farci stare i contenuti\u201d. Quindi, per la seconda riga, quella che conterr\u00e0 la barra di navigazione e il campo di ricerca, sar\u00e0 tanto alta quanto la pi\u00f9 alta delle due e non pi\u00f9 alta.<\/p>\n<p>Lo stesso vale per la terza riga, quella contenente i <code>div<\/code> main ed extra. Sulla homepage, il <code>div<\/code> main sar\u00e0 il pi\u00f9 alto. Nelle sotto-pagine, potrebbe non essere sempre cos\u00ec. In ogni circostanza, la riga contenente quei due <code>div<\/code> sar\u00e0 sempre sufficientemente alta da contenerli entrambe.<\/p>\n<p>Adesso che abbiamo stabilito le righe, occupiamoci delle colonne. Ho deciso di mantenere le cose semplici e di impostarne solo due. Se guardate la homepage di meyerweb, sembra che abbia tre colonne, ma questo vale solo per i blog post, una parte sostanzialmente minoritaria del sito, e la \u201ccolonna\u201d a sinistra \u00e8 pi\u00f9 una sidebar all&#8217;interno della colonna principale.<\/p>\n<p>Nel design originale, la sidebar (<code>#extra<\/code>) \u00e8 larga 18em, con dello spazio extra per tenerla separata dalla colonna principale, ma la colonna deve anche accomodare la search box, che \u00e8 un po&#8217; pi\u00f9 larga. Dopo un po&#8217; di esperimenti, ho impostato una larghezza di <code>20em<\/code>. Il resto \u00e8 stato lasciato a flettersi come <code>1fr<\/code>. (<strong>Fig. 3<\/strong>)<\/p>\n<div id=\"figure3\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-diagram-columns.jpg\" border=\"0\" alt=\"Screenshot della pagina web\" width=\"100%\" \/><\/p>\n<p>Fig. 3: Definire le colonne<\/p>\n<\/div>\n<p>Adesso che ho usato due volte l&#8217;unit\u00e0 <code>fr<\/code>, sono necessarie due parole di spiegazione. <code>fr<\/code> sta per \u201cfraction\u201d e significa \u201cuna frazione dello spazio libero disponibile\u201d. In questa griglia, ci sono due colonne. Una di queste ha una larghezza esplicita di <code>20em<\/code>, che pertanto \u00e8 <em>vincolata<\/em>: non c&#8217;\u00e8 spazio per la flessibilit\u00e0. Il resto dello spazio della colonna \u00e8 <em>libero<\/em>: man mano che la larghezza del grid container cambia (per esempio, a causa dei cambiamenti della finestra del browser) lo spazio libero cambier\u00e0 per diventare la larghezza del container meno i <code>20em<\/code> dello spazio vincolato.<\/p>\n<p>Immaginate per un momento che io abbia deciso di suddividere la griglia in quattro colonne, con quella pi\u00f9 a destra di larghezza pari a <code>20em<\/code> e il resto con larghezze uguali e flessibili. Avrebbe avuto questo aspetto:<\/p>\n<p><code>grid-template-columns: 1fr 1fr 1fr 20em;<\/code><\/p>\n<p>In alternativa, avrei potuto scriverlo come:<\/p>\n<p><code>grid-template-columns: repeat(3, 1fr) 20em;<\/code><\/p>\n<p>In ogni caso, avrebbe causato la divisione dello spazio libero in maniera equa tra le prime tre colonne. Se il grid container fosse largo <code>65em<\/code>, l&#8217;ultima colonna sarebbe stata larga <code>20em<\/code> e le altre tre <code>15em<\/code> ciascuna. (3 x 15 = 45; 45 + 20 = 65.) Rimpicciolendo il grid container alla larghezza di <code>50em<\/code>, si otterrebbe che le prime tre colonne sarebbero larghe ognuna <code>10em<\/code>.<\/p>\n<p>Nel mio caso, volevo che la prima colonna occupasse tutto lo spazio lasciato libero dall&#8217;ultima colonna vincolata, quindi ho assegnato <code>1fr<\/code>. Il risultato finale \u00e8 mostrato nella <strong>Fig. 4<\/strong>.<\/p>\n<div id=\"figure4\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-diagram-gridlines.jpg\" border=\"0\" alt=\"Screenshot della pagina web\" width=\"100%\" \/><\/p>\n<p>Fig. 4: La griglia completa<\/p>\n<\/div>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section3\">Piazzare gli item<\/h2>\n<p>Avendo impostato le linee della griglia, adesso si tratta solo di attaccare i grid item alle linee della griglia. Questo pu\u00f2 essere fatto automaticamente, usando l&#8217;algoritmo grid-flow, ma questo \u00e8 un caso in cui io voglio sistemare ogni item in un posto specifico. Il che mi conduce a quanto segue:<\/p>\n<pre id=\"snippet4\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">#sitemast <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1 \/ span 2<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#search <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#main <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 3<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#extra <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 3<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#navigate <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#footer <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 4<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Per ognuno dei sei <code>div<\/code>, ho semplicemente detto: \u201cFissa il tuo angolo superiore a questa row line e il tuo lato sinistro a questa column line\u201d. Ho usato i numeri di linea perch\u00e9 questo \u00e8 tutto quello che mi sono dato: \u00e8 possibile assegnare dei nomi alle grid line, ma io non l&#8217;ho fatto. (Ma rimanete sintonizzati per un esempio su questo pi\u00f9 in l\u00e0 nell&#8217;articolo!).<\/p>\n<p>Quindi, per scegliere un esempio, ho impostato la porzione <code>#main<\/code> perch\u00e9 iniziasse sulla terza row line e sulla prima column line. Questo significa che, di default, riempir\u00e0 lo spazio dalla prima column line alla seconda e dalla terza row line alla quarta.<\/p>\n<p>Quasi tutti i <code>div<\/code> sono stati impostati in questo modo. L&#8217;eccezione in questo caso \u00e8 <code>#sitemast<\/code>. Comincia alle prime column line e row line, ma dal momento che volevo che attraversasse tutta la griglia, ho impostato il suo valore della colonna a <code>1 \/ span 2<\/code>, che significa: \u201cComincia alla column line 1 e occupa due colonne\u201d. Avrei potuto ottenere lo stesso risultato con il valore <code>1 \/ 3<\/code>, che significa: \u201cVai dalla column line 1 alla column line 3\u201d. (<strong>Fig. 5<\/strong>)<\/p>\n<div id=\"figure5\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-diagram-items.jpg\" border=\"0\" alt=\"Screenshot della pagina web\" width=\"100%\" \/><\/p>\n<p>Fig. 5: Il posizionamento dei grid item<\/p>\n<\/div>\n<p>Ma dovete capire che quello \u00e8 solo un diagramma, non la reale situazione di layout. Non ancora, perlomeno. Quello che voglio che sia chiaro qui \u00e8 che mentre <em>potete<\/em> esplicitamente assegnare tutti i vostri grid item a specifiche righe e colonne, non <em>dovete<\/em> farlo. Grid ha un flow model che permette ai grid item di essere automaticamente assegnati alla successiva cella aperta della griglia, a seconda della direzione del flusso. Nel mio caso, avrei potuto cavarmela letteralmente solo con queste regole:<\/p>\n<pre id=\"snippet5\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">#sitemast <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1 \/ span 2<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#navigate <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Questo avrebbe assicurato che la testata fosse larga due colonne e che il <code>div<\/code> della navigazione fosse posizionato nell&#8217;esatta cella della griglia che volevo. Questo avrebbe lasciato la prima cella della seconda riga riempita dalla navigazione e il resto delle celle della griglia aperte.<\/p>\n<p>Detto ci\u00f2, gli item non assegnati sarebbero fluiti nella griglia nell&#8217;ordine del sorgente. La testata (<code>#sitemast<\/code>) sarebbe stata piazzata nella prima riga a due colonne che avrebbe trovato, che poi \u00e8 la prima riga. Il <code>div<\/code> di ricerca sarebbe ricaduto nella cella aperta seguente, che \u00e8 riga 2-colonna 2, perch\u00e9 riga 2-colonna 1 \u00e8 gi\u00e0 occupata dal <code>div<\/code> di navigazione. Dopo di che, il <code>div<\/code> principale sarebbe finito nella prima cella aperta: riga 3-colonna 1. Extra sarebbe andato nella cella seguente: riga 3-colonna 2. E poi il footer si sarebbe messo nella riga 4-colonna 1.<\/p>\n<p>Il risultato finale sarebbe esattamente quello mostrato nella <strong>Fig. 5<\/strong>. La differenza sarebbe che se avessi una pagina speciale in cui fosse aggiunto un altro <code>div<\/code>, avrebbe devastato l&#8217;intero layout, a seconda della sua posizione nel HTML. Assegnando esplicitamente i miei pezzi di layout nei posti in cui li voglio, impedisco che un elemento vagante distrugga tutto.<\/p>\n<p>Dati gli stili che ho scritto, se un elemento figlio del <code>body<\/code> <em>venisse<\/em> aggiunto alla pagina, diventer\u00e0 un grid item. Se non gli d\u00f2 una posizione esplicita nella griglia, finir\u00e0 nella prima cella disponibile della griglia. Dal momento che la cella pi\u00f9 in basso a destra (riga 4-colonna 2) non \u00e8 occupata, l\u00ec \u00e8 dove verrebbe posizionato l&#8217;elemento\u2026 Assumendo che non sia impostato per occupare due colonne. In quel caso, finirebbe nel fondo della griglia, in una quinta riga creata automaticamente.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section4\">Accomodare il passato<\/h2>\n<p>\u00c8 abbastanza facile impostare una griglia, ma quando gli si mettono dentro dei grid item, questi si tirano dietro tutti i loro stili gi\u00e0 in essere. In alcuni casi, questo potrebbe non essere un gran problema, ma nel mio, ha significato che tutti i margin e i padding che avevo usato per tenere separati i vari pezzi del layout gli uni dagli altri adesso si confondevano con il posizionamento dei grid item. Potete vedere questa cosa nella <strong>Fig. 6<\/strong>, creata usando una copia locale del sito.<\/p>\n<div id=\"figure6\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-legacy.jpg\" border=\"0\" alt=\"Screenshot della pagina web\" width=\"100%\" \/><\/p>\n<p>Fig. 6: Grid + legacy = no<\/p>\n<\/div>\n<p>Ahia. Era giunto il momento di sovrascrivere i pezzi degli stili di layout legacy di cui non avevo bisogno in Grid, ma che dovevo tenere per i browser che non supportano ancora Grid.<\/p>\n<p>Quindi ho incapsulato tutto in un blocco <code>@supports<\/code>. Dal momento che volevo vincolare il grid layout ai display pi\u00f9 grandi, ho messo il blocco <code>@media<\/code> proprio all&#8217;interno di <code>@supports<\/code> per poi procedere ad azzerare o altrimenti a cambiare i vari margin e padding di cui non avevo bisogno nel contesto Grid. Ecco in che modo \u00e8 uscito:<\/p>\n<pre id=\"snippet6\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token atrule\">@supports (display: grid) <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token atrule\">@media (min-width: 60.001em) <\/span><span class=\"token punctuation\">{<\/span>\n      <span class=\"token selector\">body <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> grid<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">grid-template-rows<\/span><span class=\"token punctuation\">:<\/span> 192px min-content min-content 1fr<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">grid-template-columns<\/span><span class=\"token punctuation\">:<\/span> 1fr 20em<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n\n      <span class=\"token selector\">#sitemast <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1 \/ span 2<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n\n      <span class=\"token selector\">#search <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">position<\/span><span class=\"token punctuation\">:<\/span> static<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 0.25em 0 1em<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n\n      <span class=\"token selector\">#main <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 3<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">margin-right<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">margin-top<\/span><span class=\"token punctuation\">:<\/span> 1.25em<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">padding-top<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n   \n      <span class=\"token selector\">.hpg #main <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">margin-top<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">padding-top<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n\n      <span class=\"token selector\">#extra <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 3<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">position<\/span><span class=\"token punctuation\">:<\/span> static<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">top<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">margin-top<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">padding-top<\/span><span class=\"token punctuation\">:<\/span> 0.5em<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">margin-left<\/span><span class=\"token punctuation\">:<\/span> auto<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n\n      <span class=\"token selector\">#navigate <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">position<\/span><span class=\"token punctuation\">:<\/span> static<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">margin-top<\/span><span class=\"token punctuation\">:<\/span> 1px<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">padding-bottom<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n\n      <span class=\"token selector\">#footer <\/span><span class=\"token punctuation\">{<\/span>\n         <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> 4<span class=\"token punctuation\">;<\/span> \n         <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n         <span class=\"token property\">margin-right<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span>\n      <span class=\"token punctuation\">}<\/span>\n   <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span><\/code>\n<\/pre>\n<p>Potrei probabilmente fare il refactor di questo codice per renderlo pi\u00f9 efficiente, ma per ora lo lascer\u00f2 cos\u00ec com&#8217;\u00e8. Rende chiaro quello che si \u00e8 dovuto fare per ogni grid item, dove \u00e8 stato necessario sovrascrivere le <code>position<\/code> cos\u00ec che la loro posizione assoluta non interagisse in maniera strana con la griglia, quali margin e padding hanno dovuto essere cambiati e cos\u00ec via. Diamo un&#8217;occhiata al risultato finale (<strong>Fig. 7<\/strong>).<\/p>\n<div id=\"figure7\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-supports.jpg\" border=\"0\" alt=\"Screenshot della pagina web\" width=\"100%\" \/><\/p>\n<p>Fig. 7: Grid + @supports = evviva!<\/p>\n<\/div>\n<p>Vi perdoner\u00f2 se avete pensato che questo \u00e8 stato tanto rumore per quasi nulla. Perch\u00e9 fare tutta questa fatica solo per farlo apparire identico? La cosa davvero potente qui, in quello che \u00e8, lo ammetto, un semplice esempio, \u00e8 il modo in cui non devo pi\u00f9 preoccuparmi delle sovrapposizioni. Il footer sar\u00e0 sempre sotto ai <code>div<\/code> main ed extra, non importa quale \u00e8 pi\u00f9 alto. Quando usavo il posizionamento, questa cosa non era mai garantita.<\/p>\n<p>In maniera simile, la navigazione e la ricerca manterranno sempre un&#8217;altezza condivisa, assicurando che nessuna delle due si sovrapporr\u00e0 mai al contenuto sottostante e, grazie a <code>min-content<\/code> non devo pi\u00f9 indovinare quanto diventeranno alte. Semplicemente, Grid gestisce tutto questo al mio posto.<\/p>\n<p>E ricordate, il layout funziona ancora nei vecchi browser come ha sempre fatto, usando il posizionamento. Non ho \u201crotto\u201d il sito per i browser che non comprendono Grid. Il pi\u00f9 potente Grid layout \u00e8 qui, aspettiamo che Chrome e Firefox lo capiscano.<\/p>\n<p>Se volete vedere live tutto questo, andate su <a href=\"http:\/\/meyerweb.com\/\">meyerweb.com<\/a> e ispezionate gli elementi in Firefox 52 o superiori. L\u00ec vedrete una piccola icona a forma di waffle di fianco alla dichiarazione <code>display: grid<\/code> sull&#8217;elemento <code>body<\/code>. Cliccatela e Firefox disegner\u00e0 le grid line sulla pagina cos\u00ec che possiate analizzarle. (Potete anche abilitare un tool di layout pi\u00f9 potente nelle Nightly build di Firefox. Si veda il mio post \u201c<a href=\"http:\/\/meyerweb.com\/eric\/thoughts\/2017\/03\/08\/grid-inspection\/\">Grid Inspection<\/a>\u201d per ulteriori dettagli).<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section5\">Convenzioni di naming<\/h2>\n<p>Ho citato prima che \u00e8 possibile dare un nome alle grid line. Io non l&#8217;ho fatto per i miei stili perch\u00e9 la griglia che ho definito era davvero semplice, ma per griglie pi\u00f9 complicate pu\u00f2 essere utile dare un nome alle linee.<\/p>\n<p>Usando la versione stripped-down degli stili, quella senza tutte le sovrascritture legacy, si fa pressapoco cos\u00ec per dare un nome alle grid line:<\/p>\n<pre id=\"snippet7\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">body <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> grid<span class=\"token punctuation\">;<\/span>\n   <span class=\"token property\">grid-template-rows<\/span><span class=\"token punctuation\">:<\/span> [masthead] 192px [navsearch] min-content [mainextra] min-content [footer] 1fr<span class=\"token punctuation\">;<\/span>\n   <span class=\"token property\">grid-template-columns<\/span><span class=\"token punctuation\">:<\/span> [left] 1fr [middle] 20em [right]<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Ciascuna delle parole nelle parentesi quadre \u00e8 assegnata come nome alla corrispondente grid line. (<strong>Fig. 8<\/strong>)<\/p>\n<div id=\"figure8\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2017\/04\/mw-grid-linenames.jpg\" border=\"0\" alt=\"Screenshot della pagina web\" width=\"100%\" \/><\/p>\n<p>Fig. 8: Grid line con i nomi<\/p>\n<\/div>\n<p>Una volta definiti questi nomi, potete far riferimento a loro nelle vostre propriet\u00e0 <code>grid-row<\/code> e <code>grid-column<\/code>. Per esempio:<\/p>\n<pre id=\"snippet8\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">#sitemast <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> masthead<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> left \/ span right<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#search <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> navsearch<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> middle<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#main <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> mainextra<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> left<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#extra  <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> mainextra<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> middle<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#navigate <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> navsearch<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> left<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#footer <\/span><span class=\"token punctuation\">{<\/span>\n   <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> footer<span class=\"token punctuation\">;<\/span> \n   <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> left<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>In maniera simile ai nomi delle class, potete assegnare pi\u00f9 nomi a una grid line fornendo un elenco separato da spazi. Provate questo per esempio:<\/p>\n<p><code>grid-template-columns: [start left] 1fr [middle sidebar] 20em [right end];<\/code><\/p>\n<p>Potete poi far riferimento a uno qualsiasi di quei nomi nella vostra dichiarazione <code>grid-column<\/code>. Non c&#8217;\u00e8 un limite definito sul numero di nomi, ma ricordate che a grandi poteri corrispondono\u2026<\/p>\n<p>Nel caso ve lo steste chiedendo, potete mischiare nomi e numeri per i grid line, quindi qualcosa come <code>grid-row: navsearch; grid-column: 2;}<\/code> va totalmente bene. Potete usare un qualsiasi nome di cui il browser possa fare il parsing, il che significa che potete specificare pi\u00f9 o meno qualunque cosa Unicode e il character encoding del vostro file CSS permettono.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section6\">Grid e Flexbox<\/h2>\n<p>Una domanda che potreste farvi \u00e8 la seguente: <em>adesso che abbiamo Grid, butto via Flexbox<\/em>? Assolutamente no! I due possono lavorare insieme ed effettivamente lo fanno bene.<\/p>\n<p>Prendiamo in considerazione la barra di navigazione del mio design. Per anni, \u00e8 stata visualizzata usando una lista non ordinata e <code>float: left<\/code> per i list item. Semplificando un po&#8217;, il CSS e il markup sono cos\u00ec:<\/p>\n<pre id=\"snippet9\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">#navlinks <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">float<\/span><span class=\"token punctuation\">:<\/span> left<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 100%<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#navlinks li <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">float<\/span><span class=\"token punctuation\">:<\/span> left<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">list-style<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">margin-left<\/span><span class=\"token punctuation\">:<\/span> 1px<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<pre id=\"snippet10\" class=\" language-markup\"><code class=\" language-markup\">\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>navigate<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>ul<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>navlinks<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n     <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Archives<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n     <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>CSS<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n     <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Toolbox<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n     <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Writing<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n     <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>&gt;<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Speaking<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n     <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>&gt;&gt;<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Leftovers<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>ul<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n<\/code>\n<\/pre>\n<p>Perch\u00e9 non <code>display: inline-block<\/code> invece di <code>float: left<\/code>? Perch\u00e9, letteralmente, quella non era un&#8217;opzione quando ho scritto il CSS per i navlinks e non mi sono mai deciso ad aggiornarlo. (Probabilmente riuscite a vedere un tema ricorrente qui.)<\/p>\n<p>Adesso ho due opzioni molto migliori per sistemare quei link: Grid e Flexbox. Potrei definire una griglia qui, che potrebbe essere qualcosa cos\u00ec:<\/p>\n<pre id=\"snippet11\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">#navlinks <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> grid<span class=\"token punctuation\">;<\/span>\n  <span class=\"token property\">grid-template-columns<\/span><span class=\"token punctuation\">:<\/span> repeat(6,min-content)<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#navlinks li <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">list-style<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">margin-left<\/span><span class=\"token punctuation\">:<\/span> 1px<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Questo mi farebbe ottenere sostanzialmente lo stesso risultato ma in una griglia, il che \u00e8 molto pi\u00f9 robusto di qualunque float o inline block.<\/p>\n<p>D&#8217;altro canto, dovrei usare Grid, che \u00e8 un layout system bidimensionale, per un pezzo di layout unidimensionale. \u00c8 sicuramente possibile farlo ma sembra un po&#8217; forzato e non \u00e8 effettivamente quello per cui Grid \u00e8 stato pensato. Tuttavia, Flexbox \u00e8 progettato esattamente per questo tipo di situazioni.<\/p>\n<p>Quindi, al suo posto potrei scrivere quanto segue:<\/p>\n<pre id=\"snippet12\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">#navlinks <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">justify-content<\/span><span class=\"token punctuation\">:<\/span> flex-start<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">flex-wrap<\/span><span class=\"token punctuation\">:<\/span> wrap<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">#navlinks li <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">list-style<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">margin-left<\/span><span class=\"token punctuation\">:<\/span> 1px<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Di nuovo, otterrei praticamente lo stesso risultato ma in maniera molto pi\u00f9 robusta. Oltre a tenere i link tutti allineati, il valore <code>wrap<\/code> permette ai link di andare su una seconda riga se \u00e8 necessario. E dal momento che flexbox \u00e8 all&#8217;interno di un grid item che fa parte di una grid row la cui altezza \u00e8 <code>min-content<\/code>, qualunque aumento in altezza (dovuto a un line wrap o ad altro) causer\u00e0 l&#8217;aumento dell&#8217;altezza dell&#8217;intera riga. Questo significa che le righe dopo di essa si sposteranno in gi\u00f9 per accomodarla.<\/p>\n<p>E adesso che riguardo il markup, ho realizzato che potrei semplificarlo senza bisogno di toccare alcuno stile della griglia. Invece di incapsulare una lista con un <code>div<\/code>, posso eliminare il <code>div<\/code> e riassegnare i suoi ID alla lista. Quindi il markup diventa:<\/p>\n<pre id=\"snippet13\" class=\" language-markup\"><code class=\" language-markup\">\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>ul<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>navigate<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Archives<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>CSS<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Toolbox<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Writing<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Speaking<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>a<\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>\u2026<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>Leftovers<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>a<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>ul<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n<\/code>\n<\/pre>\n<p>Dopo aver sistemato i selettori nel mio CSS, passando da <code>#navlinks<\/code> a <code>#navigate<\/code>, il layout risultante sar\u00e0 esattamente com&#8217;era prima. L&#8217;<code>ul<\/code> diventer\u00e0 un grid item e un flex container. Questa \u00e8 una cosa che potete fare.<\/p>\n<p>Nel mio caso, lo svantaggio potrebbe essere la gestione delle interazioni tra quel cambiamento e il mio layout legacy, ma non \u00e8 una questione enorme da risolve, si tratta solo di farlo.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section7\">Delusioni<\/h2>\n<p>Allora, quali sono gli svantaggi? Non ce ne sono molti, ma esistono.<\/p>\n<p>Principalmente, non c&#8217;\u00e8 un modo per definire una griglia generale per la pagina a cui tutti gli elementi possano far riferimento. In altre parole, se dicessi:<\/p>\n<pre id=\"snippet14\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">body <\/span><span class=\"token punctuation\">{<\/span>\n <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> grid<span class=\"token punctuation\">;<\/span>\n <span class=\"token property\">grid-template-columns<\/span><span class=\"token punctuation\">:<\/span> repeat(16, 1fr)<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>\u2026questo imposterebbe una griglia flessibile di 16 colonne solo per l&#8217;elemento <code>body<\/code> e i suoi elementi figlio sarebbero i soli a poter diventare grid item. Non posso scendere nell&#8217;albero del documento e assegnare elementi da sistemare su quella griglia <code>body<\/code>. Questa \u00e8 la ragione principale per cui non ho messo i piccoli pezzi della sidebar nel mio blog post in una griglia condivisa: a questo punto non posso letteralmente, a meno che non crei un CSS o un HTML bruttissimi.<\/p>\n<p>La possibilit\u00e0 di fare queste cose \u00e8 nota come <em>subgrid<\/em> e non \u00e8 ancora stata implementata in nessun browser. Ci sono questioni da chiarire su come dovr\u00e0 o non dovr\u00e0 funzionare esattamente, quindi c&#8217;\u00e8 ancora moltissima speranza che tutto si sistemi alla fine. \u00c8 una delusione che non la si abbia ancora e questa mancanza restringe l&#8217;intero range dei poteri di grid, ma speriamo che sia solo per un breve periodo.<\/p>\n<p>Nel frattempo, sono sicuro che la gente se ne uscir\u00e0 con dei modi per aggirare questa limitazione. Un workaround basico in questo caso: potrei definire una griglia che si applica individualmente ad ogni blog post e che sistema i pezzi di ogni post su quelle griglie annidate. Il CSS apparirebbe pi\u00f9 o meno cos\u00ec:<\/p>\n<pre id=\"snippet15\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">div.post <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> grid<span class=\"token punctuation\">;<\/span>\n  <span class=\"token property\">grid-template-columns<\/span><span class=\"token punctuation\">:<\/span> [meta] 10em [main] 1fr<span class=\"token punctuation\">;<\/span>\n  <span class=\"token property\">grid-template-rows<\/span><span class=\"token punctuation\">:<\/span> [title] min-content [main] 1fr<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Con ci\u00f2, potrei sistemare i metadati, il titolo e il testo del corpo nelle celle definite della griglia, usando o i numeri di grid line o i grid name che ho impostato. Qualcosa del genere:<\/p>\n<pre id=\"snippet16\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">div.post h3 <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> 2<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> title<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">ul.meta <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> meta<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> main<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">div.post div.text <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">grid-column<\/span><span class=\"token punctuation\">:<\/span> main<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">grid-row<\/span><span class=\"token punctuation\">:<\/span> main<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Lo svantaggio \u00e8 che i metadati sono poi vincolati ad essere di una specifica larghezza invece di essere io in grado di impostare una colonna che sia condivisa da tutti i metadati e darle la dimensione del pezzo pi\u00f9 lungo di contenuto. Non \u00e8 peggio di adesso, in cui imposto i metadati con float ad una esplicita larghezza, cos\u00ec da non perdermi niente. \u00c8 semplicemente una piccola opportunit\u00e0 mancata (temporaneamente) per guadagnare qualcosa.<\/p>\n<p>Un&#8217;altra limitazione, una che non si sa se verr\u00e0 gestita, \u00e8 che non potete assegnare direttamente degli stili alle celle della griglia. Supponiamo che volessi mettere un box attorno alla sidebar <code>#extra<\/code>, che riempia completamente quella cella. Dovrei assegnare uno stile al <code>div<\/code>. Non posso fare qualcosa come:<\/p>\n<pre id=\"snippet17\" class=\" language-css\"><code class=\" language-css\">\n<span class=\"token selector\">@grid-cell(2, 3) <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> teal<span class=\"token punctuation\">;<\/span> \n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code>\n<\/pre>\n<p>Voglio dire, non sono nemmeno sicuro che la sintassi sarebbe simile a questa (probabilmente no) e solo adesso si sta cominciando a discutere questa possibilit\u00e0 all&#8217;interno del Working Group. Se avete degli use case per questo tipo di capacit\u00e0, condivideteli sicuramente con il mondo e con le persone di <a href=\"https:\/\/lists.w3.org\/Archives\/Public\/www-style\/\">www-style<\/a>. Pi\u00f9 abbiamo dei casi dal mondo reale pi\u00f9 avremo motivi per supportarlo.<\/p>\n<p>Inevitabilmente ci saranno dei bug da sistemare. Per esempio, mentre finivo questo articolo, ho scoperto che in alcune situazioni, Chrome 57 pu\u00f2 soffrire di un <a href=\"https:\/\/bugs.chromium.org\/p\/chromium\/issues\/detail?id=700383\">page-blanking bug<\/a> quando si usa Grid. Sembra sia causato dall&#8217;avere degli elementi con position absolute rimossi dalla pagina Grid e pu\u00f2 essere scatenato da estensioni come Window Resizer e LastPass. La buona notizia \u00e8 che una fix \u00e8 stata accettata per Chrome 58, quindi dovrebbe essere sistemata al pi\u00f9 tardi per la fine di Aprile 2017.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section8\">Grid power<\/h2>\n<p>Spero che questa esplorazione dell&#8217;applicazione di Grid a un sito live vi abbia fornito un assaggio di quello che si pu\u00f2 fare. Tuttavia, voglio avvertirvi che questo \u00e8 giusto un assaggio, anzi, un assaggino. Ho solo grattato la superficie di quello che la sintassi di Grid rende possible, quindi se questo vi ha solleticato l&#8217;immaginazione, vi raccomando caldamente di sperimentare e poi di buttarvi nella specifica di Grid, per vedere cosa altro \u00e8 possibile. (Grid gap! Grid molto dense! Griglie inline! Righe e colonne auto-filling!).<\/p>\n<p>Ma ancora di pi\u00f9, quello che ho esplorato qui \u00e8 una parte infinitesima di quello che Grid render\u00e0 possibile. Ovvio, pu\u00f2 rendere i nostri design esistenti pi\u00f9 flessibili, robusti e semplici da mantenere. E questo \u00e8 fantastico, ma rende anche possibili dei layout che non ci saremmo mai sognati, perch\u00e9 erano impossibili dati gli strumenti a nostra disposizione. Ci sono nuove tecniche, perfino nuovi movimenti artistici che aspettano di essere scoperti. Non abbiamo visto un cambiamento di fase cos\u00ec profondo dallo spostamento originale da tabelle a CSS. Spero che farete parte di quelli che esploreranno questo nuovo regno.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2 id=\"section9\">Risorse<\/h2>\n<p>Come ho detto, questa \u00e8, nella migliore delle ipotesi, un&#8217;introduzione. Volete saperne di pi\u00f9? Ecco alcune ottime risorse per cominciare:<\/p>\n<ul>\n<li><a href=\"https:\/\/youtu.be\/16enLRDbOyY\">Announcing CSS Grid &amp; the Firefox Grid Inspector Tool<\/a><\/li>\n<li><a href=\"http:\/\/labs.jensimmons.com\/\">The Experimental Layout Lab of Jen Simmons<\/a> \u2014 una collezione di esperimenti ed esempi, che spaziano dall&#8217;utile all&#8217;estremamente artistico<\/li>\n<li><a href=\"https:\/\/rachelandrew.co.uk\/archives\/2017\/03\/07\/css-grid-guides-on-mdn\/\">CSS Grid Guides on MDN<\/a> \u2014 un hub centrale per per 11 articoli di Rachel Andrew, scritti per Mozilla Developer Network<\/li>\n<li><a href=\"http:\/\/gridbyexample.com\/\">Grid by Example<\/a> \u2014 la raccolta di esempi, tutorial e video di Rachel Andrew<\/li>\n<li><a href=\"https:\/\/www.chenhuijing.com\/blog\/css-grid-flexbox-combo\/\">Grid + Flexbox: the best 1-2 punch in web layout<\/a> \u2014 un&#8217;ottima osservazione dell&#8217;unione di queste due tecniche di layout di Chen Hui Jing<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>CSS Grid \u00e8 qui ed \u00e8 pi\u00f9 facile di quello che potreste pensare. Eric Meyer ci mostra come usare Grid in un design esistente facendo in modo che funzioni anche in browser non grid. Che foto! E un paio di \u201ccapito!\u201d.<\/p>\n","protected":false},"author":818,"featured_media":0,"comment_status":"open","ping_status":"open","template":"","categories":[244,247,272,178],"tags":[],"coauthors":[304],"class_list":["post-723","article","type-article","status-publish","hentry","category-css","category-html","category-layout-and-grids","category-numero-200-6-aprile-2017"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=723"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=723"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}