<?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 unidade fr - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/unidade-fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/unidade-fr/</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 unidade fr - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/unidade-fr/</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-86864" 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-86864', 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-86864', 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-41210" 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-41210', 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-41210', 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-44304" 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-44304', 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-44304', 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-51537" 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-51537', 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-51537', 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-93208" 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-93208', 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-93208', 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-75125" 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-75125', 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-75125', 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-87073" 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-87073', 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-87073', 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>
	</channel>
</rss>
