<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos grid container - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/grid-container/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/grid-container/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Thu, 22 Oct 2026 02:37:51 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://webzoneware.com/wp-content/uploads/icon-webzoneware-150x150.png</url>
	<title>Arquivos grid container - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/grid-container/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Grid Container e a Unidade fr no CSS3 &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/grid-template-columns-rows-unidade-fr/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/grid-template-columns-rows-unidade-fr/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 02:37:51 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[curso css3 completo]]></category>
		<category><![CDATA[grade implicita]]></category>
		<category><![CDATA[grid container]]></category>
		<category><![CDATA[grid-auto-rows]]></category>
		<category><![CDATA[grid-template-columns]]></category>
		<category><![CDATA[grid-template-rows]]></category>
		<category><![CDATA[unidade fr]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29443</guid>

					<description><![CDATA[<p>Definir grades com valores estáticos em pixels (como 200px) funciona bem em tutoriais básicos, mas o mundo real é implacável: os usuários acessam suas interfaces através de telas minúsculas de smartphones, tablets verticais, notebooks e monitores ultrawide de 4K. Para criar grades verdadeiramente fluidas e elásticas sem os velhos pesadelos de cálculos manuais com porcentagem, [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/grid-template-columns-rows-unidade-fr/">Grid Container e a Unidade fr no CSS3 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
  Definir grades com valores estáticos em pixels (como <code>200px</code>) funciona bem em tutoriais básicos, mas o mundo real é implacável: os usuários acessam suas interfaces através de telas minúsculas de smartphones, tablets verticais, notebooks e monitores ultrawide de 4K. Para criar grades verdadeiramente fluidas e elásticas sem os velhos pesadelos de cálculos manuais com porcentagem, a W3C inventou uma unidade de medida revolucionária exclusiva do CSS Grid: a <strong>Fractional Unit (unidade <code>fr</code>)</strong>. Nesta lição, você dominará o dimensionamento de faixas, a mistura de medidas fixas com flexíveis e o poder da <strong>Grade Implícita</strong>.
</p>
<h2>1. Por que Porcentagens (<code>%</code>) Quebravam Layouts com <code>gap</code></h2>
<p>
  Antes da unidade <code>fr</code>, para criar três colunas iguais na tela, o instinto natural dos desenvolvedores era usar porcentagens:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-40427" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">6 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-40427', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-40427', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* A ARMADILHA CLÁSSICA */</span></span>
<span class="wzw-code-line">.grade-quebrada {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: 33.333% 33.333% 33.333%;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">20px</span>; /* PERIGO: Causa barra de rolagem horizontal indesejada! */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* A ARMADILHA CLÁSSICA */
.grade-quebrada {
  display: grid;
  grid-template-columns: 33.333% 33.333% 33.333%;
  gap: 20px; /* PERIGO: Causa barra de rolagem horizontal indesejada! */
}</textarea>
        </div>
    </div>
    
</div>
<p>
  Por que essa abordagem falha? Porque a matemática do navegador calcula <code>(33.333% &times; 3) + (20px &times; 2)</code>. O resultado dessa soma é inevitavelmente <strong>maior do que 100%</strong> da largura da janela, estourando o contêiner e gerando um transbordamento (<em>overflow</em>) horizontal desastroso!
</p>
<h2>2. O que é a Unidade <code>fr</code> (Fração de Espaço Livre)?</h2>
<p>
  A unidade <strong><code>fr</code></strong> não mede pixels brutos nem porcentagens cegas. Ela representa uma <strong>fração do espaço livre disponível</strong> (<em>free space</em>) após todos os elementos fixos e vãos de espaçamento serem subtraídos:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-56986" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">5 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-56986', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-56986', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">.grade-perfeita {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: <span class="wzw-tk-num">1fr</span> <span class="wzw-tk-num">1fr</span> <span class="wzw-tk-num">1fr</span>; /* 3 colunas rigorosamente iguais */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">20px</span>;                         /* O gap é descontado ANTES de fatiar o espaço! */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.grade-perfeita {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* 3 colunas rigorosamente iguais */
  gap: 20px;                         /* O gap é descontado ANTES de fatiar o espaço! */
}</textarea>
        </div>
    </div>
    
</div>
<h3>A Matemática Inteligente do Navegador</h3>
<p>Quando encontra unidades <code>fr</code>, o motor do navegador executa quatro etapas automáticas:</p>
<ol>
<li>Lê a largura total disponível do Grid Container.</li>
<li>Subtrai todas as larguras fixas declaradas (em <code>px</code>, <code>rem</code>, etc.).</li>
<li>Subtrai a soma exata de todas as canaletas de <strong><code>gap</code></strong>.</li>
<li>Pega o <strong>Espaço Livre Restante</strong>, soma todos os valores de <code>fr</code> e divide as fatias proporcionalmente!</li>
</ol>
<h2>3. Padrões de Dimensionamento com <code>grid-template-columns</code></h2>
<h3>1. Proporções Desiguais (Ex.: Layout 2 para 1)</h3>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-48917" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">5 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-48917', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-48917', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* A primeira coluna recebe 2/3 do espaço livre e a segunda recebe 1/3 */</span></span>
<span class="wzw-code-line">.layout-assimetrico {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: <span class="wzw-tk-num">2fr</span> <span class="wzw-tk-num">1fr</span>;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* A primeira coluna recebe 2/3 do espaço livre e a segunda recebe 1/3 */
.layout-assimetrico {
  display: grid;
  grid-template-columns: 2fr 1fr;
}</textarea>
        </div>
    </div>
    
</div>
<h3>2. O Padrão Ouro de Dashboards: Barra Fixa + Miolo Fluido</h3>
<p>
  Você precisa de uma barra lateral de navegação com exatamente <code>260px</code> rígidos e quer que a área de conteúdo principal ocupe 100% do que sobrar na tela? A combinação de pixels com <code>1fr</code> resolve isso com elegância poética:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-98780" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">5 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-98780', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-98780', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">.dashboard-scaffold {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: <span class="wzw-tk-num">260px</span> <span class="wzw-tk-num">1fr</span>; /* Sidebar estática + Conteúdo fluido */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">24px</span>;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.dashboard-scaffold {
  display: grid;
  grid-template-columns: 260px 1fr; /* Sidebar estática + Conteúdo fluido */
  gap: 24px;
}</textarea>
        </div>
    </div>
    
</div>
<h3>3. A Palavra-Chave <code>auto</code></h3>
<p>
  A palavra-chave <code>auto</code> ajusta a faixa da grade ao tamanho do seu próprio conteúdo interno (<em>content-based</em>). Ela se expande apenas o suficiente para abrigar o maior item daquela coluna ou linha:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-55127" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">5 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-55127', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-55127', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* Coluna 1 ajustada ao tamanho do ícone/logo, Coluna 2 fluida */</span></span>
<span class="wzw-code-line">.cabecalho-grid {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: auto <span class="wzw-tk-num">1fr</span> auto;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Coluna 1 ajustada ao tamanho do ícone/logo, Coluna 2 fluida */
.cabecalho-grid {
  display: grid;
  grid-template-columns: auto 1fr auto;
}</textarea>
        </div>
    </div>
    
</div>
<h2>4. Grade Explícita vs. Grade Implícita (Explicit vs. Implicit Grid)</h2>
<p>
  Uma das características mais fascinantes do CSS Grid é sua capacidade de lidar com dados dinâmicos:
</p>
<h3>A Grade Explícita</h3>
<p>
  São as faixas de linhas e colunas que você declarou formalmente no CSS através de <code>grid-template-columns</code> e <code>grid-template-rows</code>.
</p>
<h3>A Grade Implícita</h3>
<p>
  Imagine que você definiu uma grade explícita com 3 colunas e 2 linhas (total de 6 células). No entanto, o seu banco de dados ou API retornou <strong>10 produtos</strong>. O que o navegador faz com os 4 produtos que sobraram?
</p>
<p>
  Ele não quebra o layout nem descarta os nós! O navegador cria automaticamente <strong>linhas implícitas adicionais</strong> para abrigar os novos itens.
</p>
<div class="wzw-callout wzw-callout-info">
<p><strong>Controlando a Grade Implícita:</strong> Por padrão, as linhas criadas automaticamente pelo navegador têm altura baseada no conteúdo (<code>auto</code>). Para padronizar a altura de qualquer linha nova gerada pelo fluxo dinâmico, usamos <strong><code>grid-auto-rows</code></strong>:</p>
</div>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-67725" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">6 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-67725', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-67725', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">.galeria-produtos {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: <span class="wzw-tk-num">1fr</span> <span class="wzw-tk-num">1fr</span> <span class="wzw-tk-num">1fr</span>; /* Grade explícita: 3 colunas */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-auto-rows</span>: <span class="wzw-tk-num">180px</span>;              /* Grade implícita: TODA nova linha terá <span class="wzw-tk-num">180px</span>! */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">16px</span>;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.galeria-produtos {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* Grade explícita: 3 colunas */
  grid-auto-rows: 180px;              /* Grade implícita: TODA nova linha terá 180px! */
  gap: 16px;
}</textarea>
        </div>
    </div>
    
</div>
<p>
  Da mesma forma, a propriedade <strong><code>grid-auto-flow</code></strong> define em qual direção os novos itens implícitos devem fluir:
</p>
<ul>
<li><code>grid-auto-flow: row</code> (Padrão): Adiciona novas linhas para baixo.</li>
<li><code>grid-auto-flow: column</code>: Adiciona novas colunas para o lado direito.</li>
<li><code>grid-auto-flow: dense</code>: O algoritmo tenta preencher &#8220;buracos&#8221; deixados por itens maiores que ficaram para trás na grade.</li>
</ul>
<h2>5. Matriz de Medidas de Faixas (Tracks)</h2>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Unidade / Valor</th>
<th>Comportamento</th>
<th>Cálculo com Gap</th>
<th>Caso de Uso Recomendado</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>fr</code></strong></td>
<td>Fração flexível do espaço restante.</td>
<td>✅ Deduz o gap automaticamente.</td>
<td>Colunas responsivas e áreas fluidas principais.</td>
</tr>
<tr>
<td><strong><code>px</code></strong> / <strong><code>rem</code></strong></td>
<td>Tamanho fixo e estático inalterável.</td>
<td>Não se altera.</td>
<td>Barras laterais, avatares, larguras de menus.</td>
</tr>
<tr>
<td><strong><code>auto</code></strong></td>
<td>Ajusta-se ao tamanho do conteúdo interno.</td>
<td>Respeita limites.</td>
<td>Cabeçalhos, botões com rótulos de largura variável.</td>
</tr>
<tr>
<td><strong><code>%</code></strong></td>
<td>Porcentagem bruta da largura do contêiner.</td>
<td>❌ Ignora o gap (pode quebrar).</td>
<td>Raro; prefira sempre <code>fr</code> em CSS Grid.</td>
</tr>
</tbody>
</table>
</div>
<h2>6. Laboratório Prático: Dashboard Scaffold com <code>fr</code> e Grade Implícita</h2>
<p>
  No código interativo abaixo, construímos um esqueleto de Dashboard combinando uma barra lateral fixa de 240px com uma área de trabalho fluida de <code>1fr</code>, contendo cartões dinâmicos padronizados por <code>grid-auto-rows</code>:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-49494" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">83 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-49494', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-49494', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;!DOCTYPE</span><span class="wzw-tk-kw"> html</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;html</span> <span class="wzw-tk-attr">lang</span>=<span class="wzw-tk-str">&quot;pt-BR&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;head&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">charset</span>=<span class="wzw-tk-str">&quot;UTF-8&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;title&gt;</span>Laboratório de CSS Grid com Unidade fr<span class="wzw-tk-tag">&lt;/title&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;style&gt;</span></span>
<span class="wzw-code-line">    body {</span>
<span class="wzw-code-line">      font-family: &#039;Inter&#039;, system-ui, sans-serif;</span>
<span class="wzw-code-line">      background: #0b0f19;</span>
<span class="wzw-code-line">      color: #f8fafc;</span>
<span class="wzw-code-line">      margin: 0;</span>
<span class="wzw-code-line">      padding: 24px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 1. O Macro-Layout: Sidebar Fixa (240px) + Painel Fluido (1fr) */</span></span>
<span class="wzw-code-line">    .dashboard-app {</span>
<span class="wzw-code-line">      display: grid;</span>
<span class="wzw-code-line">      grid-template-columns: 240px 1fr;</span>
<span class="wzw-code-line">      gap: 20px;</span>
<span class="wzw-code-line">      min-height: 480px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .sidebar {</span>
<span class="wzw-code-line">      background: #111827;</span>
<span class="wzw-code-line">      border: 1px solid #1f2937;</span>
<span class="wzw-code-line">      border-radius: 12px;</span>
<span class="wzw-code-line">      padding: 20px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .sidebar h3 { margin-top: 0; color: #38bdf8; }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 2. O Micro-Grid Interno com fr e Grade Implícita */</span></span>
<span class="wzw-code-line">    .painel-metricas {</span>
<span class="wzw-code-line">      display: grid;</span>
<span class="wzw-code-line">      grid-template-columns: 1fr 1fr; /* 2 colunas proporcionais */</span>
<span class="wzw-code-line">      grid-auto-rows: 130px;          /* Linhas implícitas com exatos 130px */</span>
<span class="wzw-code-line">      gap: 16px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .metric-card {</span>
<span class="wzw-code-line">      background: #1e293b;</span>
<span class="wzw-code-line">      border: 1px solid #334155;</span>
<span class="wzw-code-line">      border-radius: 10px;</span>
<span class="wzw-code-line">      padding: 18px;</span>
<span class="wzw-code-line">      display: flex;</span>
<span class="wzw-code-line">      flex-direction: column;</span>
<span class="wzw-code-line">      justify-content: center;</span>
<span class="wzw-code-line">      box-shadow: 0 4px 12px rgba(0,0,0,0.25);</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .metric-card h4 { margin: 0; font-size: 0.85rem; color: #94a3b8; }</span>
<span class="wzw-code-line">    .metric-card .valor { font-size: 1.8rem; font-weight: 800; color: #10b981; margin-top: 6px; }</span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/style&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/head&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;dashboard-app&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;aside</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;sidebar&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h3&gt;</span>⚡ Economaster<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#64748b; font-size:0.85rem;&quot;</span><span class="wzw-tk-tag">&gt;</span>Sidebar com largura estática inegociável de 240px.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/aside&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;main</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;painel-metricas&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">&lt;!-- 4 Cards populando a grade (2 colunas x 2 linhas) --&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h4&gt;</span>Total de Alunos<span class="wzw-tk-tag">&lt;/h4&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;valor&quot;</span><span class="wzw-tk-tag">&gt;</span>14.820<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h4&gt;</span>Horas de Laboratório<span class="wzw-tk-tag">&lt;/h4&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;valor&quot;</span><span class="wzw-tk-tag">&gt;</span>92.400h<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h4&gt;</span>Lições Concluídas<span class="wzw-tk-tag">&lt;/h4&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;valor&quot;</span><span class="wzw-tk-tag">&gt;</span>58.210<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h4&gt;</span>Índice de Retenção<span class="wzw-tk-tag">&lt;/h4&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;valor&quot;</span><span class="wzw-tk-tag">&gt;</span>98.4%<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/main&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/html&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-BR&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;Laboratório de CSS Grid com Unidade fr&lt;/title&gt;
  &lt;style&gt;
    body {
      font-family: &#039;Inter&#039;, system-ui, sans-serif;
      background: #0b0f19;
      color: #f8fafc;
      margin: 0;
      padding: 24px;
    }

    /* 1. O Macro-Layout: Sidebar Fixa (240px) + Painel Fluido (1fr) */
    .dashboard-app {
      display: grid;
      grid-template-columns: 240px 1fr;
      gap: 20px;
      min-height: 480px;
    }

    .sidebar {
      background: #111827;
      border: 1px solid #1f2937;
      border-radius: 12px;
      padding: 20px;
    }

    .sidebar h3 { margin-top: 0; color: #38bdf8; }

    /* 2. O Micro-Grid Interno com fr e Grade Implícita */
    .painel-metricas {
      display: grid;
      grid-template-columns: 1fr 1fr; /* 2 colunas proporcionais */
      grid-auto-rows: 130px;          /* Linhas implícitas com exatos 130px */
      gap: 16px;
    }

    .metric-card {
      background: #1e293b;
      border: 1px solid #334155;
      border-radius: 10px;
      padding: 18px;
      display: flex;
      flex-direction: column;
      justify-content: center;
      box-shadow: 0 4px 12px rgba(0,0,0,0.25);
    }

    .metric-card h4 { margin: 0; font-size: 0.85rem; color: #94a3b8; }
    .metric-card .valor { font-size: 1.8rem; font-weight: 800; color: #10b981; margin-top: 6px; }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;dashboard-app&quot;&gt;
    &lt;aside class=&quot;sidebar&quot;&gt;
      &lt;h3&gt;⚡ Economaster&lt;/h3&gt;
      &lt;p style=&quot;color:#64748b; font-size:0.85rem;&quot;&gt;Sidebar com largura estática inegociável de 240px.&lt;/p&gt;
    &lt;/aside&gt;

    &lt;main class=&quot;painel-metricas&quot;&gt;
      &lt;!-- 4 Cards populando a grade (2 colunas x 2 linhas) --&gt;
      &lt;div class=&quot;metric-card&quot;&gt;
        &lt;h4&gt;Total de Alunos&lt;/h4&gt;
        &lt;div class=&quot;valor&quot;&gt;14.820&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;metric-card&quot;&gt;
        &lt;h4&gt;Horas de Laboratório&lt;/h4&gt;
        &lt;div class=&quot;valor&quot;&gt;92.400h&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;metric-card&quot;&gt;
        &lt;h4&gt;Lições Concluídas&lt;/h4&gt;
        &lt;div class=&quot;valor&quot;&gt;58.210&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;metric-card&quot;&gt;
        &lt;h4&gt;Índice de Retenção&lt;/h4&gt;
        &lt;div class=&quot;valor&quot;&gt;98.4%&lt;/div&gt;
      &lt;/div&gt;
    &lt;/main&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
</div>
<p>
  Abra este laboratório no Playground IDE e experimente redimensionar a janela do navegador para observar a barra lateral preservando rigidamente seus 240px enquanto a área de cartões em <code>1fr</code> se expande suavemente sem provocar overflow:
</p>
<p style="text-align: center; margin: 35px 0;">
  <a href="https://webzoneware.com/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Abrir no Playground IDE &rarr;</a>
</p>
<h2>7. Resumo e Próximos Passos</h2>
<ul>
<li>A unidade <code>fr</code> representa uma fração do espaço livre restante no contêiner após subtrair itens fixos e <code>gap</code>.</li>
<li>Usar <code>fr</code> elimina completamente os erros de cálculo e barras de rolagem provocadas pela soma de <code>%</code> com <code>gap</code>.</li>
<li>Misturar unidades fixas (ex.: <code>260px</code>) com unidades flexíveis (<code>1fr</code>) é o padrão da indústria para painéis com barras laterais.</li>
<li>A <strong>Grade Explícita</strong> é formada pelas faixas declaradas formalmente em <code>grid-template-columns</code> e <code>rows</code>.</li>
<li>A <strong>Grade Implícita</strong> abriga os nós excedentes e pode ser padronizada através de <code>grid-auto-rows</code> e <code>grid-auto-flow</code>.</li>
</ul>
<div class="wzw-callout wzw-callout-success">
<p><strong>Próximo Passo:</strong> E se você precisar de 12 colunas iguais sem digitar <code>1fr</code> doze vezes seguidas? E se você quiser uma grade que recalcula o número de colunas automaticamente no celular sem precisar de NENHUMA media query? Na <strong>Lição 33</strong>, desvendaremos o trio mágico: <strong>repeat(), minmax() e auto-fit / auto-fill</strong>!</p>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/grid-template-columns-rows-unidade-fr/">Grid Container e a Unidade fr no CSS3 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-css/grid-template-columns-rows-unidade-fr/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Introdução ao CSS Grid Layout no CSS3 &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/introducao-css-grid-layout/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/introducao-css-grid-layout/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 02:22:14 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[css grid introducao]]></category>
		<category><![CDATA[css grid layout]]></category>
		<category><![CDATA[curso css3 completo]]></category>
		<category><![CDATA[grid container]]></category>
		<category><![CDATA[grid lines]]></category>
		<category><![CDATA[grid tracks]]></category>
		<category><![CDATA[grid vs flexbox]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29441</guid>

					<description><![CDATA[<p>Seja bem-vindo à segunda dimensão da web! No módulo anterior, você dominou o Flexbox, uma ferramenta espetacular para organizar elementos ao longo de um único eixo por vez (1D). No entanto, quando precisamos construir a arquitetura completa de uma aplicação — onde cabeçalhos, barras laterais, áreas de cartões e rodapés precisam se alinhar simultaneamente na [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/introducao-css-grid-layout/">Introdução ao CSS Grid Layout no CSS3 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
  Seja bem-vindo à segunda dimensão da web! No módulo anterior, você dominou o Flexbox, uma ferramenta espetacular para organizar elementos ao longo de um único eixo por vez (1D). No entanto, quando precisamos construir a arquitetura completa de uma aplicação — onde cabeçalhos, barras laterais, áreas de cartões e rodapés precisam se alinhar simultaneamente na horizontal e na vertical —, o CSS exigia hacks e aninhamentos intermináveis de <code>&lt;div&gt;</code>. Essa limitação ruiu com a chegada do <strong>CSS Grid Layout</strong>: o primeiro e mais poderoso sistema nativo de layout bidimensional (2D) já criado para a web.
</p>
<h2>1. O que é o CSS Grid Layout?</h2>
<p>
  O CSS Grid é um módulo de especificação da W3C projetado com uma filosofia <strong>Layout-First (Estrutura Primeiro)</strong>. Em vez de deixar o tamanho dos elementos ser definido exclusivamente pelo conteúdo individual de cada filho (como faz o Flexbox), o Grid permite que você desenhe previamente uma grade invisível de linhas e colunas na caixa pai e, em seguida, posicione os itens filhos dentro dessa matriz geométrica com precisão cirúrgica.
</p>
<h2>2. CSS Grid vs. Flexbox: A Grande Parceria da Web Moderna</h2>
<p>
  Existe um mito persistente entre iniciantes de que <em>&#8220;o CSS Grid veio para substituir o Flexbox&#8221;</em>. Isso é um erro conceitual grave! Eles não são rivais; são complementares e foram desenhados para trabalhar em perfeita harmonia:
</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Critério</th>
<th>CSS Flexbox (1D)</th>
<th>CSS Grid Layout (2D)</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Dimensões</strong></td>
<td>Unidimensional (Linha <em>OU</em> Coluna)</td>
<td><strong>Bidimensional</strong> (Linhas <em>E</em> Colunas juntas)</td>
</tr>
<tr>
<td><strong>Abordagem</strong></td>
<td><em>Content-First:</em> O tamanho do conteúdo dita o fluxo.</td>
<td><em>Layout-First:</em> A grade predefinida acomoda o conteúdo.</td>
</tr>
<tr>
<td><strong>Alinhamento</strong></td>
<td>Excelente para distribuir elementos em linha reta.</td>
<td>Excelente para alinhar elementos em grade e sobreposições.</td>
</tr>
<tr>
<td><strong>Uso Ideal</strong></td>
<td>Micro-layouts: botões, navbars, listas de tags, avatares.</td>
<td>Macro-layouts: esqueleto da página, galerias, dashboards.</td>
</tr>
</tbody>
</table>
</div>
<div class="wzw-callout wzw-callout-info">
<p><strong>A Regra dos Arquitetos Sênior:</strong> Use <strong>CSS Grid</strong> para erguer o esqueleto macro da página (a estrutura mestra de colunas e seções) e use <strong>Flexbox</strong> dentro de cada célula individual para alinhar os componentes internos (como ícones ao lado de títulos ou botões no rodapé de um card).</p>
</div>
<h2>3. A Anatomia e Terminologia Sagrada do CSS Grid</h2>
<p>
  Para dominar o Grid, você precisa se familiarizar com seus 6 conceitos fundamentais:
</p>
<h3>1. Grid Container (O Pai da Grade)</h3>
<p>
  O elemento no qual declaramos <code>display: grid</code> (ou <code>display: inline-grid</code>). Ele estabelece um novo Contexto de Formatação de Grade para seus filhos diretos.
</p>
<h3>2. Grid Items (Os Filhos)</h3>
<p>
  Todos os filhos diretos de primeiro nível do Grid Container tornam-se automaticamente itens da grade e são encaixados nas células disponíveis.
</p>
<h3>3. Grid Lines (Linhas de Grade)</h3>
<p>
  São os divisores invisíveis que cortam a grade horizontal e verticalmente. É através do número dessas linhas que podemos ordenar onde um elemento começa e onde ele termina:
</p>
<ul>
<li>As linhas verticais separam colunas.</li>
<li>As linhas horizontais separam linhas.</li>
<li>São numeradas a partir de <code>1</code> (da esquerda para a direita e de cima para baixo) e também de trás para frente usando números negativos (<code>-1</code> representa a última linha da borda externa!).</li>
</ul>
<h3>4. Grid Tracks (Faixas de Grade)</h3>
<p>
  É o espaço físico delimitado entre <strong>duas linhas de grade vizinhas</strong>. Em termos práticos: uma coluna inteira é um <em>Grid Track</em> vertical, e uma linha inteira é um <em>Grid Track</em> horizontal.
</p>
<h3>5. Grid Cell (Célula de Grade)</h3>
<p>
  É a menor unidade indivisível do Grid. É a interseção exata de um track de linha com um track de coluna — o equivalente a uma célula de planilha do Excel.
</p>
<h3>6. Grid Area (Área de Grade)</h3>
<p>
  Qualquer espaço retangular contínuo composto por uma ou mais células adjacentes (por exemplo, uma área que ocupa 2 colunas e 3 linhas).
</p>
<h2>4. Seu Primeiro Código: Declarando um Grid</h2>
<p>
  Para criar uma grade com 3 colunas e 2 linhas, usamos a propriedade <code>display: grid</code> combinada com a definição de pistas estruturais:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-47325" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">9 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-47325', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-47325', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">.painel-grid {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Cria 3 colunas de 200px cada */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: <span class="wzw-tk-num">200px</span> <span class="wzw-tk-num">200px</span> <span class="wzw-tk-num">200px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Cria 2 linhas de 120px cada */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-rows</span>: <span class="wzw-tk-num">120px</span> <span class="wzw-tk-num">120px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Espaçamento de 16px entre células */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">16px</span>;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.painel-grid {
  display: grid;
  /* Cria 3 colunas de 200px cada */
  grid-template-columns: 200px 200px 200px;
  /* Cria 2 linhas de 120px cada */
  grid-template-rows: 120px 120px;
  /* Espaçamento de 16px entre células */
  gap: 16px;
}</textarea>
        </div>
    </div>
    
</div>
<p>
  O navegador executa automaticamente o <strong>Algoritmo de Auto-Posicionamento (Auto-placement Algorithm)</strong>: ele pega cada elemento filho presente no HTML e o coloca, em ordem natural, dentro de uma célula vazia da esquerda para a direita, quebrando linha automaticamente quando a terceira coluna é preenchida!
</p>
<h2>5. Dica Pro: Usando as DevTools para Enxergar o Grid</h2>
<p>
  Como as <em>Grid Lines</em> são invisíveis a olho nu, os navegadores modernos (Google Chrome, Firefox, Microsoft Edge e Safari) possuem uma ferramenta fantástica em suas Ferramentas de Desenvolvedor (F12):
</p>
<ol>
<li>Abra a aba <strong>Elements (Elementos)</strong> ou <strong>Inspetor</strong>.</li>
<li>Ao lado do elemento pai com <code>display: grid</code>, você verá uma pequena pílula roxa escrita <strong><code>grid</code></strong>.</li>
<li>Clique nessa pílula: o navegador projetará na tela um mapa pontilhado mostrando exatamente os números de cada linha, as larguras das faixas e as canaletas de <code>gap</code>!</li>
</ol>
<h2>6. Laboratório Prático: Anatomia de um Grid 2D na Prática</h2>
<p>
  No código interativo abaixo, construímos um contêiner com 3 colunas e 2 linhas, destacando visualmente as células numeradas e o comportamento automático do fluxo:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-85553" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">65 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-85553', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-85553', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;!DOCTYPE</span><span class="wzw-tk-kw"> html</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;html</span> <span class="wzw-tk-attr">lang</span>=<span class="wzw-tk-str">&quot;pt-BR&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;head&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">charset</span>=<span class="wzw-tk-str">&quot;UTF-8&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;title&gt;</span>Laboratório de Introdução ao CSS Grid<span class="wzw-tk-tag">&lt;/title&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;style&gt;</span></span>
<span class="wzw-code-line">    body {</span>
<span class="wzw-code-line">      font-family: &#039;Inter&#039;, system-ui, sans-serif;</span>
<span class="wzw-code-line">      background: #0b0f19;</span>
<span class="wzw-code-line">      color: #f8fafc;</span>
<span class="wzw-code-line">      padding: 30px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* O Grid Container */</span></span>
<span class="wzw-code-line">    .grid-container {</span>
<span class="wzw-code-line">      display: grid;</span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">/* 3 Colunas de 180px */</span></span>
<span class="wzw-code-line">      grid-template-columns: 180px 180px 180px;</span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">/* 2 Linhas de 110px */</span></span>
<span class="wzw-code-line">      grid-template-rows: 110px 110px;</span>
<span class="wzw-code-line">      gap: 16px;</span>
<span class="wzw-code-line">      background: #1e293b;</span>
<span class="wzw-code-line">      padding: 20px;</span>
<span class="wzw-code-line">      border-radius: 14px;</span>
<span class="wzw-code-line">      border: 2px dashed #475569;</span>
<span class="wzw-code-line">      max-width: 620px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* Os Grid Items */</span></span>
<span class="wzw-code-line">    .grid-item {</span>
<span class="wzw-code-line">      background: linear-gradient(135deg, #2563eb, #1d4ed8);</span>
<span class="wzw-code-line">      border-radius: 8px;</span>
<span class="wzw-code-line">      display: flex;</span>
<span class="wzw-code-line">      flex-direction: column;</span>
<span class="wzw-code-line">      align-items: center;</span>
<span class="wzw-code-line">      justify-content: center;</span>
<span class="wzw-code-line">      font-weight: 700;</span>
<span class="wzw-code-line">      color: #ffffff;</span>
<span class="wzw-code-line">      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .grid-item span {</span>
<span class="wzw-code-line">      font-size: 0.75rem;</span>
<span class="wzw-code-line">      color: #93c5fd;</span>
<span class="wzw-code-line">      font-weight: 400;</span>
<span class="wzw-code-line">      margin-top: 4px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/style&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/head&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;h2</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#38bdf8; margin-top:0;&quot;</span><span class="wzw-tk-tag">&gt;</span>Sua Primeira Matriz CSS Grid 2D<span class="wzw-tk-tag">&lt;/h2&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#94a3b8; font-size:0.9rem;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    Uma grade composta por 3 colunas e 2 linhas preenchida pelo algoritmo de auto-posicionamento:</span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;grid-container&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;grid-item&quot;</span><span class="wzw-tk-tag">&gt;</span>Célula 1<span class="wzw-tk-tag">&lt;span&gt;</span>Linha 1, Coluna 1<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;grid-item&quot;</span><span class="wzw-tk-tag">&gt;</span>Célula 2<span class="wzw-tk-tag">&lt;span&gt;</span>Linha 1, Coluna 2<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;grid-item&quot;</span><span class="wzw-tk-tag">&gt;</span>Célula 3<span class="wzw-tk-tag">&lt;span&gt;</span>Linha 1, Coluna 3<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;grid-item&quot;</span><span class="wzw-tk-tag">&gt;</span>Célula 4<span class="wzw-tk-tag">&lt;span&gt;</span>Linha 2, Coluna 1<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;grid-item&quot;</span><span class="wzw-tk-tag">&gt;</span>Célula 5<span class="wzw-tk-tag">&lt;span&gt;</span>Linha 2, Coluna 2<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;grid-item&quot;</span><span class="wzw-tk-tag">&gt;</span>Célula 6<span class="wzw-tk-tag">&lt;span&gt;</span>Linha 2, Coluna 3<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/html&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-BR&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;Laboratório de Introdução ao CSS Grid&lt;/title&gt;
  &lt;style&gt;
    body {
      font-family: &#039;Inter&#039;, system-ui, sans-serif;
      background: #0b0f19;
      color: #f8fafc;
      padding: 30px;
    }

    /* O Grid Container */
    .grid-container {
      display: grid;
      /* 3 Colunas de 180px */
      grid-template-columns: 180px 180px 180px;
      /* 2 Linhas de 110px */
      grid-template-rows: 110px 110px;
      gap: 16px;
      background: #1e293b;
      padding: 20px;
      border-radius: 14px;
      border: 2px dashed #475569;
      max-width: 620px;
    }

    /* Os Grid Items */
    .grid-item {
      background: linear-gradient(135deg, #2563eb, #1d4ed8);
      border-radius: 8px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      font-weight: 700;
      color: #ffffff;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
    }

    .grid-item span {
      font-size: 0.75rem;
      color: #93c5fd;
      font-weight: 400;
      margin-top: 4px;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h2 style=&quot;color:#38bdf8; margin-top:0;&quot;&gt;Sua Primeira Matriz CSS Grid 2D&lt;/h2&gt;
  &lt;p style=&quot;color:#94a3b8; font-size:0.9rem;&quot;&gt;
    Uma grade composta por 3 colunas e 2 linhas preenchida pelo algoritmo de auto-posicionamento:
  &lt;/p&gt;

  &lt;div class=&quot;grid-container&quot;&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Célula 1&lt;span&gt;Linha 1, Coluna 1&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Célula 2&lt;span&gt;Linha 1, Coluna 2&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Célula 3&lt;span&gt;Linha 1, Coluna 3&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Célula 4&lt;span&gt;Linha 2, Coluna 1&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Célula 5&lt;span&gt;Linha 2, Coluna 2&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;grid-item&quot;&gt;Célula 6&lt;span&gt;Linha 2, Coluna 3&lt;/span&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
</div>
<p>
  Abra este laboratório no Playground IDE e experimente adicionar um 7º item para ver como o CSS Grid cria automaticamente uma terceira linha implícita para acomodar o excesso:
</p>
<p style="text-align: center; margin: 35px 0;">
  <a href="https://webzoneware.com/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Abrir no Playground IDE &rarr;</a>
</p>
<h2>7. Resumo e Próximos Passos</h2>
<ul>
<li>O CSS Grid Layout é o primeiro sistema bidimensional (2D) nativo do CSS, controlando linhas e colunas simultaneamente.</li>
<li>Flexbox e Grid não são concorrentes: Grid organiza a macroestrutura da página (2D) e Flexbox organiza os microcomponentes (1D).</li>
<li><strong>Grid Lines</strong> são as divisórias numeradas (de 1 a N e de -1 a -N).</li>
<li><strong>Grid Tracks</strong> são as faixas inteiras (colunas ou linhas).</li>
<li><strong>Grid Cells</strong> são as menores unidades quadrangulares (interseção de um track de linha com um de coluna).</li>
<li><code>grid-template-columns</code> e <code>grid-template-rows</code> definem as dimensões de cada faixa na grade.</li>
</ul>
<div class="wzw-callout wzw-callout-success">
<p><strong>Próximo Passo:</strong> Fixar larguras em pixels como <code>200px</code> não é responsivo. Como fazer o Grid se esticar e se adaptar dinamicamente ao espaço livre? Na <strong>Lição 32</strong>, desvendaremos o <strong>Grid Container &#038; A Revolucionária Unidade fr (Fração Flexível)</strong>!</p>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/introducao-css-grid-layout/">Introdução ao CSS Grid Layout no CSS3 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-css/introducao-css-grid-layout/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
