<?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 design responsivo - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/design-responsivo/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/design-responsivo/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Thu, 22 Oct 2026 03:07:26 +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 design responsivo - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/design-responsivo/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Media Queries e Breakpoints Modernos no CSS &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/media-queries-breakpoints-css/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/media-queries-breakpoints-css/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 03:07:26 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[breakpoints css]]></category>
		<category><![CDATA[curso css3 completo]]></category>
		<category><![CDATA[design responsivo]]></category>
		<category><![CDATA[media queries]]></category>
		<category><![CDATA[prefers-color-scheme]]></category>
		<category><![CDATA[prefers-reduced-motion]]></category>
		<category><![CDATA[sintaxe de faixa]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29453</guid>

					<description><![CDATA[<p>Na lição anterior, estabelecemos a filosofia Mobile-First como o alicerce da web moderna. Agora, é hora de dominar o motor que torna essa adaptação tecnicamente viável: as Media Queries (Consultas de Mídia). Com a regra @media, seu código CSS ganha a capacidade de interrogar ativamente o dispositivo do usuário: &#8220;A tela possui mais de 768px [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/media-queries-breakpoints-css/">Media Queries e Breakpoints Modernos no CSS | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
  Na lição anterior, estabelecemos a filosofia Mobile-First como o alicerce da web moderna. Agora, é hora de dominar o motor que torna essa adaptação tecnicamente viável: as <strong>Media Queries (Consultas de Mídia)</strong>. Com a regra <code>@media</code>, seu código CSS ganha a capacidade de interrogar ativamente o dispositivo do usuário: <em>&#8220;A tela possui mais de 768px de largura? O usuário está usando mouse ou tela de toque? O sistema operacional está configurado em Modo Escuro? O usuário solicitou redução de animações por labirintite?&#8221;</em>. Nesta lição, você aprenderá a revolucionária <strong>Sintaxe de Faixa (Range Syntax)</strong>, a definição estratégica de breakpoints e os recursos de acessibilidade do CSS moderno.
</p>
<h2>1. Anatomia Fundamental de uma Media Query</h2>
<p>
  Uma consulta de mídia é composta por um <strong>Tipo de Mídia (Media Type)</strong> opcional e uma ou mais <strong>Expressões de Recursos (Media Features)</strong> combinadas por operadores lógicos:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-89099" 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">4 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-89099', 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-89099', 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">/* Sintaxe Geral: @media [tipo] and (recurso: valor) */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> screen and (min-width: <span class="wzw-tk-num">768px</span>) {</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Regras aplicadas apenas em telas com largura mínima de 768px */</span></span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Sintaxe Geral: @media [tipo] and (recurso: valor) */
@media screen and (min-width: 768px) {
  /* Regras aplicadas apenas em telas com largura mínima de 768px */
}</textarea>
        </div>
    </div>
    
</div>
<h3>Tipos de Mídia (Media Types)</h3>
<ul>
<li><strong><code>all</code>:</strong> Valor padrão. Aplica a regra a todas as categorias de dispositivos.</li>
<li><strong><code>screen</code>:</strong> Destinado exclusivamente a telas digitais (computadores, tablets, smartphones).</li>
<li><strong><code>print</code>:</strong> Ativado quando a página é enviada para a impressora ou visualizada na janela de impressão do navegador (Ctrl+P / Cmd+P).</li>
<li><strong><code>speech</code>:</strong> Voltado para sintetizadores de voz e leitores de tela especializados.</li>
</ul>
<h3>Operadores Lógicos</h3>
<ul>
<li><strong><code>and</code>:</strong> Exige que todas as condições encadeadas sejam verdadeiras.</li>
<li><strong><code>not</code>:</strong> Inverte o resultado da consulta inteira.</li>
<li><strong>Vírgula (<code>,</code>):</strong> Funciona como o operador lógico <strong>OU (OR)</strong>. Se qualquer uma das condições separadas por vírgula for atendida, as regras são executadas.</li>
</ul>
<h2>2. A Revolução: Sintaxe de Faixa (Range Syntax do Media Queries Level 4)</h2>
<p>
  Por mais de uma década, expressar intervalos de tela no CSS exigia fórmulas verbosas e pouco intuitivas com pares de <code>min-width</code> e <code>max-width</code>.
</p>
<p>
  A especificação <strong>Media Queries Level 4</strong> simplificou radicalmente esse processo introduzindo operadores matemáticos universais (<code>&gt;=</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&lt;</code>):
</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Objetivo de Design</th>
<th>Sintaxe Legada (Prolixa)</th>
<th>Sintaxe Moderna de Faixa (Recomendada)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Telas a partir de 768px</td>
<td><code>@media (min-width: 768px)</code></td>
<td><code>@media (width &gt;= 768px)</code></td>
</tr>
<tr>
<td>Telas abaixo de 640px</td>
<td><code>@media (max-width: 639px)</code></td>
<td><code>@media (width &lt; 640px)</code></td>
</tr>
<tr>
<td>Intervalo exclusivo entre 768px e 1024px</td>
<td><code>@media (min-width: 768px) and (max-width: 1024px)</code></td>
<td><code>@media (768px &lt;= width &lt;= 1024px)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="wzw-callout wzw-callout-info">
<p><strong>Suporte Universal:</strong> A sintaxe de faixa matemática é suportada por 100% dos navegadores modernos desde 2023. Ela torna seu arquivo de estilos infinitamente mais legível e autoexplicativo!</p>
</div>
<h2>3. Arquitetura de Breakpoints Corporativos</h2>
<p>
  Seguindo o paradigma Mobile-First estabelecido na Lição 36, estruturamos os pontos de quebra em ordem crescente de largura utilizando <code>em</code> (ou <code>px</code>):
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-61971" 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">34 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-61971', 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-61971', 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>
<span class="wzw-code-line">   1. BASE MOBILE: Estilos universais sem media queries</span>
<span class="wzw-code-line">   =================================================== */</span>
<span class="wzw-code-line">.cartao-plano {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: 100%;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ===================================================</span>
<span class="wzw-code-line">   2. TABLET PEQUENO / PAISAGEM (sm: &gt;= <span class="wzw-tk-num">640px</span> / <span class="wzw-tk-num">40em</span>)</span>
<span class="wzw-code-line">   =================================================== */</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (width &gt;= <span class="wzw-tk-num">40em</span>) {</span>
<span class="wzw-code-line">  .cartao-plano {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">width</span>: 50%;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ===================================================</span>
<span class="wzw-code-line">   3. TABLET VERTICAL / DESKTOP MÉDIO (md: &gt;= <span class="wzw-tk-num">768px</span> / <span class="wzw-tk-num">48em</span>)</span>
<span class="wzw-code-line">   =================================================== */</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (width &gt;= <span class="wzw-tk-num">48em</span>) {</span>
<span class="wzw-code-line">  .grade-principal {</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>;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ===================================================</span>
<span class="wzw-code-line">   4. NOTEBOOKS E TELAS LARGAS (lg: &gt;= <span class="wzw-tk-num">1024px</span> / <span class="wzw-tk-num">64em</span>)</span>
<span class="wzw-code-line">   =================================================== */</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (width &gt;= <span class="wzw-tk-num">64em</span>) {</span>
<span class="wzw-code-line">  .cartao-plano {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">width</span>: 33.333%;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* ===================================================
   1. BASE MOBILE: Estilos universais sem media queries
   =================================================== */
.cartao-plano {
  width: 100%;
}

/* ===================================================
   2. TABLET PEQUENO / PAISAGEM (sm: &gt;= 640px / 40em)
   =================================================== */
@media (width &gt;= 40em) {
  .cartao-plano {
    width: 50%;
  }
}

/* ===================================================
   3. TABLET VERTICAL / DESKTOP MÉDIO (md: &gt;= 768px / 48em)
   =================================================== */
@media (width &gt;= 48em) {
  .grade-principal {
    display: grid;
    grid-template-columns: 260px 1fr;
  }
}

/* ===================================================
   4. NOTEBOOKS E TELAS LARGAS (lg: &gt;= 1024px / 64em)
   =================================================== */
@media (width &gt;= 64em) {
  .cartao-plano {
    width: 33.333%;
  }
}</textarea>
        </div>
    </div>
    
</div>
<div class="wzw-callout wzw-callout-warning">
<p><strong>Por que Usar <code>em</code> em Breakpoints em Vez de <code>px</code>?</strong> Se um usuário com deficiência visual aumentar o tamanho de fonte padrão do navegador de 16px para 24px (zoom tipográfico de acessibilidade), as media queries escritas em <code>px</code> podem manter o site preso no modo desktop, esmagando os textos ampliados. Consultas escritas em <code>em</code> reagem proporcionalmente à escala da fonte do usuário, garantindo uma experiência inclusiva impecável!</p>
</div>
<h2>4. Media Queries de Preferência do Usuário (Acessibilidade e Ergonomia)</h2>
<p>
  As Media Queries modernas vão muito além do tamanho da tela. Elas permitem que o seu site respeite as preferências do sistema operacional do visitante:
</p>
<h3>1. Modo Escuro Nativo: <code>prefers-color-scheme</code></h3>
<p>
  Detecta se o sistema operacional do usuário está configurado para o tema escuro (Dark Mode):
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-76613" 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">13 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-76613', 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-76613', 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">/* Tema Claro padrão */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">:root</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--bg-pagina: #ffffff;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--cor-texto: #0f172a;</span></span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Ativação automática de Tema Escuro */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (prefers-color-scheme: dark) {</span>
<span class="wzw-code-line">  <span class="wzw-tk-kw">:root</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">--bg-pagina: #0b0f19;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">--cor-texto: #f8fafc;</span></span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Tema Claro padrão */
:root {
  --bg-pagina: #ffffff;
  --cor-texto: #0f172a;
}

/* Ativação automática de Tema Escuro */
@media (prefers-color-scheme: dark) {
  :root {
    --bg-pagina: #0b0f19;
    --cor-texto: #f8fafc;
  }
}</textarea>
        </div>
    </div>
    
</div>
<h3>2. Proteção contra Distúrbios Vestibulares: <code>prefers-reduced-motion</code></h3>
<p>
  Pessoas com labirintite, epilepsia ou distúrbios de equilíbrio desativam animações bruscas no sistema operacional. É um requisito essencial da <strong>WCAG 2.2</strong> respeitar essa escolha:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-30274" 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">8 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-30274', 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-30274', 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-kw">@media</span> (prefers-reduced-motion: reduce) {</span>
<span class="wzw-code-line">  * {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">animation-duration</span>: <span class="wzw-tk-num">0.01ms</span> <span class="wzw-tk-kw">!important</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">animation-iteration-count</span>: 1 <span class="wzw-tk-kw">!important</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">transition-duration</span>: <span class="wzw-tk-num">0.01ms</span> <span class="wzw-tk-kw">!important</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">scroll-behavior</span>: auto <span class="wzw-tk-kw">!important</span>;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}</textarea>
        </div>
    </div>
    
</div>
<h3>3. Detecção de Mouse vs. Touchscreen: <code>hover</code> e <code>pointer</code></h3>
<p>
  Em smartphones, passar o dedo sobre um botão dispara o estado <code>:hover</code> e faz com que ele fique &#8220;preso&#8221; visualmente mesmo depois que o usuário tira o dedo da tela. Podemos restringir efeitos de hover apenas para mouses reais:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-53770" 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">7 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-53770', 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-53770', 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">/* Aplica efeito de hover apenas se o dispositivo tiver um mouse real */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (hover: hover) and (pointer: fine) {</span>
<span class="wzw-code-line">  .btn-interativo<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">transform</span>: translateY(-<span class="wzw-tk-num">2px</span>);</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">box-shadow</span>: 0 <span class="wzw-tk-num">8px</span> <span class="wzw-tk-num">20px</span> rgba(0,0,0,0.4);</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Aplica efeito de hover apenas se o dispositivo tiver um mouse real */
@media (hover: hover) and (pointer: fine) {
  .btn-interativo:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 20px rgba(0,0,0,0.4);
  }
}</textarea>
        </div>
    </div>
    
</div>
<h2>5. Estilizando para Impressão: <code>@media print</code></h2>
<p>
  Quando o usuário precisa imprimir um artigo ou recibo do site, o papel exige uma diagramação completamente diferente da tela:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-80658" 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">12 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-80658', 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-80658', 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-kw">@media</span> print {</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Oculta barras de navegação, botões e vídeos no papel */</span></span>
<span class="wzw-code-line">  nav, footer, .sidebar, .btn-acao {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">display</span>: none <span class="wzw-tk-kw">!important</span>;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  body {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#fff</span> <span class="wzw-tk-kw">!important</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#000</span> <span class="wzw-tk-kw">!important</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">font-size</span>: 12pt;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>@media print {
  /* Oculta barras de navegação, botões e vídeos no papel */
  nav, footer, .sidebar, .btn-acao {
    display: none !important;
  }

  body {
    background: #fff !important;
    color: #000 !important;
    font-size: 12pt;
  }
}</textarea>
        </div>
    </div>
    
</div>
<h2>6. Laboratório Prático: Media Queries Modernas em Ação</h2>
<p>
  No código interativo abaixo, combinamos a <strong>sintaxe de faixa matemática</strong> (<code>width &gt;= 680px</code>), suporte automático ao <strong>Dark Mode</strong> e o respeito ao <strong>prefers-reduced-motion</strong>:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-28194" 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">95 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-28194', 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-28194', 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;meta</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;viewport&quot;</span> <span class="wzw-tk-attr">content</span>=<span class="wzw-tk-str">&quot;width=device-width, initial-scale=1.0&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 Media Queries Modernas<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">    :root {</span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">--bg: #f8fafc;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">--card-bg: #ffffff;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">--text: #0f172a;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">--border: #e2e8f0;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">--accent: #2563eb;</span></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. DETECÇÃO DE MODO ESCURO AUTOMÁTICO */</span></span>
<span class="wzw-code-line">    @media (prefers-color-scheme: dark) {</span>
<span class="wzw-code-line">      :root {</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">--bg: #0b0f19;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">--card-bg: #1e293b;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">--text: #f8fafc;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">--border: #334155;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">--accent: #38bdf8;</span></span>
<span class="wzw-code-line">      }</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    body {</span>
<span class="wzw-code-line">      background-color: var(--bg);</span>
<span class="wzw-code-line">      color: var(--text);</span>
<span class="wzw-code-line">      font-family: &#039;Inter&#039;, system-ui, sans-serif;</span>
<span class="wzw-code-line">      padding: 30px;</span>
<span class="wzw-code-line">      margin: 0;</span>
<span class="wzw-code-line">      transition: background-color 0.3s ease, color 0.3s ease;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 2. BASE MOBILE (COLUNA ÚNICA) */</span></span>
<span class="wzw-code-line">    .container-planos {</span>
<span class="wzw-code-line">      display: grid;</span>
<span class="wzw-code-line">      grid-template-columns: 1fr;</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">    .card {</span>
<span class="wzw-code-line">      background: var(--card-bg);</span>
<span class="wzw-code-line">      border: 1px solid var(--border);</span>
<span class="wzw-code-line">      border-radius: 12px;</span>
<span class="wzw-code-line">      padding: 24px;</span>
<span class="wzw-code-line">      transition: transform 0.2s ease;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .card h3 { margin: 0 0 8px 0; color: var(--accent); }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 3. SINTAXE DE FAIXA MATEMÁTICA: width &gt;= 680px */</span></span>
<span class="wzw-code-line">    @media (width &gt;= 680px) {</span>
<span class="wzw-code-line">      .container-planos {</span>
<span class="wzw-code-line">        grid-template-columns: 1fr 1fr; /* 2 colunas */</span>
<span class="wzw-code-line">        gap: 24px;</span>
<span class="wzw-code-line">      }</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 4. HOVER APENAS EM MOUSES REAIS */</span></span>
<span class="wzw-code-line">    @media (hover: hover) and (pointer: fine) {</span>
<span class="wzw-code-line">      .card:hover {</span>
<span class="wzw-code-line">        transform: translateY(-4px);</span>
<span class="wzw-code-line">      }</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 5. ACESSIBILIDADE VESTIBULAR */</span></span>
<span class="wzw-code-line">    @media (prefers-reduced-motion: reduce) {</span>
<span class="wzw-code-line">      body, .card {</span>
<span class="wzw-code-line">        transition: none !important;</span>
<span class="wzw-code-line">        transform: none !important;</span>
<span class="wzw-code-line">      }</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;margin-top:0;&quot;</span><span class="wzw-tk-tag">&gt;</span>Media Queries Inteligentes Level 4<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:#64748b; font-size:0.9rem; margin-bottom:24px;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    Este laboratório adapta-se à largura da tela com a sintaxe <span class="wzw-tk-tag">&lt;code&gt;</span>width &gt;= 680px<span class="wzw-tk-tag">&lt;/code&gt;</span> e altera suas cores automaticamente com base no Modo Escuro do seu sistema!</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;container-planos&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;card&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h3&gt;</span>Web Academy Pro<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;p&gt;</span>Acesso a todos os cursos com laboratórios interativos em tempo real.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/div&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;card&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h3&gt;</span>Dev Studio Enterprise<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;p&gt;</span>Suporte prioritário e ferramentas de engenharia de alta performance.<span class="wzw-tk-tag">&lt;/p&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&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;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;Laboratório de Media Queries Modernas&lt;/title&gt;
  &lt;style&gt;
    :root {
      --bg: #f8fafc;
      --card-bg: #ffffff;
      --text: #0f172a;
      --border: #e2e8f0;
      --accent: #2563eb;
    }

    /* 1. DETECÇÃO DE MODO ESCURO AUTOMÁTICO */
    @media (prefers-color-scheme: dark) {
      :root {
        --bg: #0b0f19;
        --card-bg: #1e293b;
        --text: #f8fafc;
        --border: #334155;
        --accent: #38bdf8;
      }
    }

    body {
      background-color: var(--bg);
      color: var(--text);
      font-family: &#039;Inter&#039;, system-ui, sans-serif;
      padding: 30px;
      margin: 0;
      transition: background-color 0.3s ease, color 0.3s ease;
    }

    /* 2. BASE MOBILE (COLUNA ÚNICA) */
    .container-planos {
      display: grid;
      grid-template-columns: 1fr;
      gap: 16px;
    }

    .card {
      background: var(--card-bg);
      border: 1px solid var(--border);
      border-radius: 12px;
      padding: 24px;
      transition: transform 0.2s ease;
    }

    .card h3 { margin: 0 0 8px 0; color: var(--accent); }

    /* 3. SINTAXE DE FAIXA MATEMÁTICA: width &gt;= 680px */
    @media (width &gt;= 680px) {
      .container-planos {
        grid-template-columns: 1fr 1fr; /* 2 colunas */
        gap: 24px;
      }
    }

    /* 4. HOVER APENAS EM MOUSES REAIS */
    @media (hover: hover) and (pointer: fine) {
      .card:hover {
        transform: translateY(-4px);
      }
    }

    /* 5. ACESSIBILIDADE VESTIBULAR */
    @media (prefers-reduced-motion: reduce) {
      body, .card {
        transition: none !important;
        transform: none !important;
      }
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h2 style=&quot;margin-top:0;&quot;&gt;Media Queries Inteligentes Level 4&lt;/h2&gt;
  &lt;p style=&quot;color:#64748b; font-size:0.9rem; margin-bottom:24px;&quot;&gt;
    Este laboratório adapta-se à largura da tela com a sintaxe &lt;code&gt;width &gt;= 680px&lt;/code&gt; e altera suas cores automaticamente com base no Modo Escuro do seu sistema!
  &lt;/p&gt;

  &lt;div class=&quot;container-planos&quot;&gt;
    &lt;div class=&quot;card&quot;&gt;
      &lt;h3&gt;Web Academy Pro&lt;/h3&gt;
      &lt;p&gt;Acesso a todos os cursos com laboratórios interativos em tempo real.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;card&quot;&gt;
      &lt;h3&gt;Dev Studio Enterprise&lt;/h3&gt;
      &lt;p&gt;Suporte prioritário e ferramentas de engenharia de alta performance.&lt;/p&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 teste redimensionar o painel para comprovar a sintaxe de faixa em ação:
</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>Media Queries adaptam o CSS com base no tipo de dispositivo e recursos de tela.</li>
<li>A <strong>Sintaxe de Faixa (Range Syntax)</strong> substitui <code>min-width</code> por operadores matemáticos elegantes como <code>width &gt;= 768px</code> ou <code>768px &lt;= width &lt;= 1024px</code>.</li>
<li>Breakpoints devem ser ordenados de forma crescente (Mobile-First) e usar preferencialmente unidades <code>em</code> para respeitar o zoom de acessibilidade do usuário.</li>
<li><code>prefers-color-scheme: dark</code> detecta o Modo Escuro do sistema operacional sem necessidade de JavaScript.</li>
<li><code>prefers-reduced-motion: reduce</code> é mandatório para proteger usuários com distúrbios vestibulares contra animações bruscas.</li>
<li><code>@media (hover: hover)</code> restringe efeitos de ponteiro exclusivamente a mouses reais, eliminando bugs visuais no toque móvel.</li>
</ul>
<div class="wzw-callout wzw-callout-success">
<p><strong>Próximo Passo:</strong> Um dos maiores desafios da responsividade é lidar com fotos e gráficos de proporções diferentes. Como garantir que uma imagem preencha um cartão sem achatar, distorcer ou transbordar? Na <strong>Lição 38</strong>, desvendaremos <strong>Imagens Responsivas, object-fit &#038; aspect-ratio</strong>!</p>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/media-queries-breakpoints-css/">Media Queries e Breakpoints Modernos no CSS | 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/media-queries-breakpoints-css/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Design Responsivo e Mobile-First no CSS &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/design-responsivo-mobile-first/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/design-responsivo-mobile-first/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 03:02:37 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[curso css3 completo]]></category>
		<category><![CDATA[design responsivo]]></category>
		<category><![CDATA[desktop-first]]></category>
		<category><![CDATA[meta viewport]]></category>
		<category><![CDATA[min-width]]></category>
		<category><![CDATA[mobile-first]]></category>
		<category><![CDATA[progressive enhancement]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29451</guid>

					<description><![CDATA[<p>Em 2010, o designer Ethan Marcotte publicou um artigo seminal intitulado &#8220;Responsive Web Design&#8221;, mudando para sempre os rumos da internet. Até aquele momento, as empresas mantinham sites separados para computadores e celulares (o velho subdomínio m.site.com). Hoje, em um mundo onde mais de 60% de todo o tráfego global vem de smartphones com milhares [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/design-responsivo-mobile-first/">Design Responsivo e Mobile-First no CSS | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
  Em 2010, o designer Ethan Marcotte publicou um artigo seminal intitulado <em>&#8220;Responsive Web Design&#8221;</em>, mudando para sempre os rumos da internet. Até aquele momento, as empresas mantinham sites separados para computadores e celulares (o velho subdomínio <code>m.site.com</code>). Hoje, em um mundo onde mais de 60% de todo o tráfego global vem de smartphones com milhares de tamanhos de tela diferentes, criar páginas responsivas não é um diferencial: é a própria definição de desenvolvimento web profissional. Nesta lição, você compreenderá a tríade do design responsivo, a indispensável meta viewport e a superioridade arquitetural da filosofia <strong>Mobile-First</strong>.
</p>
<h2>1. Os 3 Pilares do Design Responsivo (RWD)</h2>
<p>
  O conceito formal de Design Responsivo repousa sobre três componentes fundamentais que devem operar em conjunto:
</p>
<ol>
<li><strong>Grades Fluidas (Fluid Grids):</strong> A estrutura visual da página nunca utiliza larguras rígidas em pixels absolutos. Os contêineres e faixas são construídos com unidades relativas (<code>fr</code>, <code>%</code>, <code>rem</code>, <code>vw</code>) que se expandem e se contraem conforme a largura da janela de visualização.</li>
<li><strong>Mídias Flexíveis (Flexible Media):</strong> Imagens, ilustrações SVG e vídeos incorporados devem ser elásticos, garantindo que nunca transbordem sua caixa pai:
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-70995" 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-70995', 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-70995', 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">/* Regra essencial de reset para mídias responsivas */</span></span>
<span class="wzw-code-line">img, video, iframe {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">max-width</span>: 100%;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">height</span>: auto;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: block;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Regra essencial de reset para mídias responsivas */
img, video, iframe {
  max-width: 100%;
  height: auto;
  display: block;
}</textarea>
        </div>
    </div>
    </div>
</li>
<li><strong>Consultas de Mídia (Media Queries):</strong> Regras condicionais do CSS que detectam a largura, altura, resolução ou capacidades do dispositivo do usuário, adaptando o layout para oferecer a melhor experiência possível.</li>
</ol>
<h2>2. A Porta de Entrada: A Meta Tag Viewport</h2>
<p>
  Antes de escrever qualquer linha de CSS responsivo, existe uma tag HTML obrigatória que <strong>deve estar presente</strong> dentro do <code>&lt;head&gt;</code> de toda página web:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-29773" 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">1 linha</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-29773', 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-29773', 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;meta</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;viewport&quot;</span> <span class="wzw-tk-attr">content</span>=<span class="wzw-tk-str">&quot;width=device-width, initial-scale=1.0&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;</textarea>
        </div>
    </div>
    
</div>
<div class="wzw-callout wzw-callout-warning">
<p><strong>O que Acontece se Você Esquecer Essa Tag?</strong> Quando os smartphones modernos foram lançados, para conseguir exibir sites antigos projetados para telas de computadores de 1024px, os navegadores móveis (Safari Mobile, Chrome Android) criaram uma tela virtual de 980px e reduziram a página inteira para caber no visor. Se você não incluir a meta viewport, o smartphone ignorará suas media queries e exibirá o site em miniatura minúscula, forçando o usuário a fazer o gesto de pinça para ler o texto!</p>
</div>
<ul>
<li><code>width=device-width</code>: Ordena ao navegador que use a largura física real em pixels CSS do aparelho (ex.: 390px no iPhone, 412px no Galaxy).</li>
<li><code>initial-scale=1.0</code>: Define o zoom inicial como 100% natural, sem distorções ópticas.</li>
</ul>
<h2>3. Desktop-First vs. Mobile-First: O Duelo de Paradigmas</h2>
<h3>O Paradigma Legado: Desktop-First (Regressivo)</h3>
<p>
  No modelo Desktop-First, o desenvolvedor escreve todo o CSS padrão pensando em um monitor de 1440px. Depois, adiciona blocos com <code>@media (max-width: ...)</code> para <strong>&#8220;desmanchar&#8221;</strong> o layout à medida que a tela diminui:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-45939" 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">12 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-45939', 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-45939', 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">/* ABORDAGEM LEGADA DESKTOP-FIRST (EVITE!) */</span></span>
<span class="wzw-code-line">.menu {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: <span class="wzw-tk-num">1000px</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (max-width: <span class="wzw-tk-num">768px</span>) {</span>
<span class="wzw-code-line">  .menu {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">display</span>: block;   /* Desfaz o flex */</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">width</span>: 100%;      /* Desfaz os <span class="wzw-tk-num">1000px</span> */</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* ABORDAGEM LEGADA DESKTOP-FIRST (EVITE!) */
.menu {
  display: flex;
  width: 1000px;
}

@media (max-width: 768px) {
  .menu {
    display: block;   /* Desfaz o flex */
    width: 100%;      /* Desfaz os 1000px */
  }
}</textarea>
        </div>
    </div>
    
</div>
<p>
  Essa abordagem é ineficiente porque os smartphones (que possuem conexões móveis mais lentas e processadores mais modestos) são penalizados com um arquivo CSS que declara estilos complexos apenas para sobrescrevê-los e anulá-los logo em seguida!
</p>
<h3>O Paradigma Moderno: Mobile-First (Progressivo)</h3>
<p>
  No modelo <strong>Mobile-First</strong>, invertemos completamente o fluxo mental. Nós desenhamos o CSS padrão da página para a tela mais simples e restrita: <strong>a tela do smartphone</strong>:
</p>
<ul>
<li>O CSS base (sem media queries) define uma única coluna limpa, fontes confortáveis para leitura e toques fáceis.</li>
<li>Conforme a tela ganha espaço físico, usamos <strong><code>@media (min-width: ...)</code></strong> para <strong>enriquecer progressivamente</strong> o layout, adicionando colunas extras e efeitos mais elaborados.</li>
</ul>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-60600" 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">22 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-60600', 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-60600', 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">/* ABORDAGEM MODERNA MOBILE-FIRST (PADRÃO DA INDÚSTRIA) */</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* 1. Base para Smartphones (Sem nenhuma media query!) */</span></span>
<span class="wzw-code-line">.grade-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>; /* Coluna única no celular */</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>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* 2. Enriquecimento para Tablets e telas médias */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (min-width: <span class="wzw-tk-num">640px</span>) {</span>
<span class="wzw-code-line">  .grade-produtos {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">grid-template-columns</span>: repeat(2, <span class="wzw-tk-num">1fr</span>); /* 2 colunas */</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* 3. Enriquecimento para Desktops e telas amplas */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (min-width: <span class="wzw-tk-num">1024px</span>) {</span>
<span class="wzw-code-line">  .grade-produtos {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">grid-template-columns</span>: repeat(4, <span class="wzw-tk-num">1fr</span>); /* 4 colunas */</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* ABORDAGEM MODERNA MOBILE-FIRST (PADRÃO DA INDÚSTRIA) */

/* 1. Base para Smartphones (Sem nenhuma media query!) */
.grade-produtos {
  display: grid;
  grid-template-columns: 1fr; /* Coluna única no celular */
  gap: 16px;
}

/* 2. Enriquecimento para Tablets e telas médias */
@media (min-width: 640px) {
  .grade-produtos {
    grid-template-columns: repeat(2, 1fr); /* 2 colunas */
  }
}

/* 3. Enriquecimento para Desktops e telas amplas */
@media (min-width: 1024px) {
  .grade-produtos {
    grid-template-columns: repeat(4, 1fr); /* 4 colunas */
  }
}</textarea>
        </div>
    </div>
    
</div>
<h2>4. Matriz Comparativa de Paradigmas</h2>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Aspecto</th>
<th>Desktop-First (Legado)</th>
<th>Mobile-First (Moderno)</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Consulta de Mídia</strong></td>
<td>Usa <code>max-width</code> (regressivo).</td>
<td>Usa <strong><code>min-width</code></strong> (progressivo).</td>
</tr>
<tr>
<td><strong>Fluxo de Código</strong></td>
<td>Desfaz e anula propriedades anteriores.</td>
<td>Adiciona e amplia capacidades progressivamente.</td>
</tr>
<tr>
<td><strong>Performance Mobile</strong></td>
<td>Pior: carrega regras pesadas desnecessárias.</td>
<td><strong>Excelente:</strong> carrega o CSS mais leve primeiro.</td>
</tr>
<tr>
<td><strong>Manutenção</strong></td>
<td>Guerra constante de especificidade de seletores.</td>
<td>Código limpo, previsível e sem redundâncias.</td>
</tr>
</tbody>
</table>
</div>
<h2>5. Breakpoints Orientados ao Conteúdo (Content-Driven)</h2>
<div class="wzw-callout wzw-callout-info">
<p><strong>A Regra de Ouro dos Breakpoints:</strong> Nunca crie pontos de quebra pensando em aparelhos específicos (como <em>&#8220;iPhone 15&#8221;</em> ou <em>&#8220;Galaxy Tab&#8221;</em>). O mercado lança centenas de modelos por ano. Defina breakpoints <strong>quando o seu conteúdo começar a parecer desconfortável ou quebrado na tela</strong>!</p>
</div>
<p>Na prática corporativa, os intervalos mais consolidados do ecossistema moderno (inspirados no Tailwind e Bootstrap 5) são:</p>
<ul>
<li><strong>Mobile (Base):</strong> &lt; 640px (fluxo natural sem media queries).</li>
<li><strong>sm:</strong> <code>min-width: 640px</code> (smartphones em modo paisagem e pequenos tablets).</li>
<li><strong>md:</strong> <code>min-width: 768px</code> (tablets na vertical e iPads).</li>
<li><strong>lg:</strong> <code>min-width: 1024px</code> (notebooks e tablets na horizontal).</li>
<li><strong>xl:</strong> <code>min-width: 1280px</code> (monitores desktop padrão).</li>
</ul>
<h2>6. Ergonomia Tátil e Usabilidade Mobile (WCAG 2.2)</h2>
<p>
  Telas de smartphones são operadas com os dedos polegares, não com o ponteiro microscópico de um mouse:
</p>
<ul>
<li><strong>Tamanho Mínimo de Toque:</strong> Todo botão, link de navegação ou elemento interativo deve ter uma área clicável de no mínimo <strong>44&times;44px</strong> ou <strong>48&times;48px</strong> (Critério 2.5.8 da WCAG 2.2).</li>
<li><strong>Fontes de Formulário &ge; 16px:</strong> Em campos de texto (<code>&lt;input&gt;</code>), mantenha o <code>font-size</code> com pelo menos <code>16px</code>. Se a fonte for menor que 16px, navegadores como o Safari no iOS disparam um zoom automático incômodo que desorienta o usuário.</li>
</ul>
<h2>7. Laboratório Prático: Arquitetura Mobile-First em Ação</h2>
<p>
  No código interativo abaixo, criamos um componente de notícias estruturado 100% sob a filosofia Mobile-First: observe como o CSS base é enxuto e como as media queries apenas adicionam complexidade conforme a tela cresce:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-15509" 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">102 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-15509', 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-15509', 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;meta</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;viewport&quot;</span> <span class="wzw-tk-attr">content</span>=<span class="wzw-tk-str">&quot;width=device-width, initial-scale=1.0&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 Mobile-First CSS<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">    <span class="wzw-tk-comment">/* 1. RESET E ESTILOS BASE (MOBILE POR PADRÃO) */</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: 20px;</span>
<span class="wzw-code-line">      margin: 0;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .noticias-feed {</span>
<span class="wzw-code-line">      display: grid;</span>
<span class="wzw-code-line">      grid-template-columns: 1fr; /* Coluna única para celulares */</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">    .card-noticia {</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: 12px;</span>
<span class="wzw-code-line">      padding: 20px;</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">    .card-noticia h4 {</span>
<span class="wzw-code-line">      margin: 0 0 8px 0;</span>
<span class="wzw-code-line">      color: #38bdf8;</span>
<span class="wzw-code-line">      font-size: 1.1rem;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .card-noticia p {</span>
<span class="wzw-code-line">      margin: 0 0 16px 0;</span>
<span class="wzw-code-line">      color: #94a3b8;</span>
<span class="wzw-code-line">      font-size: 0.9rem;</span>
<span class="wzw-code-line">      line-height: 1.5;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* Botão com área de toque ergonômica mínima de 44px */</span></span>
<span class="wzw-code-line">    .btn-ler {</span>
<span class="wzw-code-line">      display: inline-flex;</span>
<span class="wzw-code-line">      align-items: center;</span>
<span class="wzw-code-line">      justify-content: center;</span>
<span class="wzw-code-line">      min-height: 44px;</span>
<span class="wzw-code-line">      padding: 0 20px;</span>
<span class="wzw-code-line">      background: #2563eb;</span>
<span class="wzw-code-line">      color: #fff;</span>
<span class="wzw-code-line">      border: none;</span>
<span class="wzw-code-line">      border-radius: 8px;</span>
<span class="wzw-code-line">      font-weight: 600;</span>
<span class="wzw-code-line">      text-decoration: none;</span>
<span class="wzw-code-line">      cursor: pointer;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 2. PROGRESSIVE ENHANCEMENT: TABLET (min-width: 640px) */</span></span>
<span class="wzw-code-line">    @media (min-width: 640px) {</span>
<span class="wzw-code-line">      .noticias-feed {</span>
<span class="wzw-code-line">        grid-template-columns: repeat(2, 1fr); /* Expande para 2 colunas */</span>
<span class="wzw-code-line">        gap: 20px;</span>
<span class="wzw-code-line">      }</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 3. PROGRESSIVE ENHANCEMENT: DESKTOP (min-width: 1024px) */</span></span>
<span class="wzw-code-line">    @media (min-width: 1024px) {</span>
<span class="wzw-code-line">      .noticias-feed {</span>
<span class="wzw-code-line">        grid-template-columns: repeat(3, 1fr); /* Expande para 3 colunas */</span>
<span class="wzw-code-line">      }</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:#f1f5f9; margin-top:0;&quot;</span><span class="wzw-tk-tag">&gt;</span>Feed de Artigos Mobile-First<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; margin-bottom:24px;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    Redimensione a largura da janela para ver o layout se expandir progressivamente de 1 para 2 e 3 colunas via <span class="wzw-tk-tag">&lt;code&gt;</span>min-width<span class="wzw-tk-tag">&lt;/code&gt;</span>:</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;noticias-feed&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;card-noticia&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h4&gt;</span>A Evolução do CSS Grid<span class="wzw-tk-tag">&lt;/h4&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;p&gt;</span>Como as grades bidimensionais nativas transformaram o desenvolvimento de portais corporativos modernos.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-ler&quot;</span><span class="wzw-tk-tag">&gt;</span>Ler Artigo →<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/div&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;card-noticia&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h4&gt;</span>O Fim dos Hacks de Float<span class="wzw-tk-tag">&lt;/h4&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;p&gt;</span>Entenda como display flow-root e Flexbox aposentaram definitivamente o clássico micro-clearfix.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-ler&quot;</span><span class="wzw-tk-tag">&gt;</span>Ler Artigo →<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/div&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;card-noticia&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h4&gt;</span>Performance em Smartphones<span class="wzw-tk-tag">&lt;/h4&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;p&gt;</span>Por que a abordagem Mobile-First acelera o tempo de renderização e melhora suas métricas de SEO.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-ler&quot;</span><span class="wzw-tk-tag">&gt;</span>Ler Artigo →<span class="wzw-tk-tag">&lt;/a&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&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;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;Laboratório Mobile-First CSS&lt;/title&gt;
  &lt;style&gt;
    /* 1. RESET E ESTILOS BASE (MOBILE POR PADRÃO) */
    body {
      font-family: &#039;Inter&#039;, system-ui, sans-serif;
      background: #0b0f19;
      color: #f8fafc;
      padding: 20px;
      margin: 0;
    }

    .noticias-feed {
      display: grid;
      grid-template-columns: 1fr; /* Coluna única para celulares */
      gap: 16px;
    }

    .card-noticia {
      background: #1e293b;
      border: 1px solid #334155;
      border-radius: 12px;
      padding: 20px;
      box-shadow: 0 4px 12px rgba(0,0,0,0.25);
    }

    .card-noticia h4 {
      margin: 0 0 8px 0;
      color: #38bdf8;
      font-size: 1.1rem;
    }

    .card-noticia p {
      margin: 0 0 16px 0;
      color: #94a3b8;
      font-size: 0.9rem;
      line-height: 1.5;
    }

    /* Botão com área de toque ergonômica mínima de 44px */
    .btn-ler {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-height: 44px;
      padding: 0 20px;
      background: #2563eb;
      color: #fff;
      border: none;
      border-radius: 8px;
      font-weight: 600;
      text-decoration: none;
      cursor: pointer;
    }

    /* 2. PROGRESSIVE ENHANCEMENT: TABLET (min-width: 640px) */
    @media (min-width: 640px) {
      .noticias-feed {
        grid-template-columns: repeat(2, 1fr); /* Expande para 2 colunas */
        gap: 20px;
      }
    }

    /* 3. PROGRESSIVE ENHANCEMENT: DESKTOP (min-width: 1024px) */
    @media (min-width: 1024px) {
      .noticias-feed {
        grid-template-columns: repeat(3, 1fr); /* Expande para 3 colunas */
      }
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h2 style=&quot;color:#f1f5f9; margin-top:0;&quot;&gt;Feed de Artigos Mobile-First&lt;/h2&gt;
  &lt;p style=&quot;color:#94a3b8; font-size:0.9rem; margin-bottom:24px;&quot;&gt;
    Redimensione a largura da janela para ver o layout se expandir progressivamente de 1 para 2 e 3 colunas via &lt;code&gt;min-width&lt;/code&gt;:
  &lt;/p&gt;

  &lt;div class=&quot;noticias-feed&quot;&gt;
    &lt;div class=&quot;card-noticia&quot;&gt;
      &lt;h4&gt;A Evolução do CSS Grid&lt;/h4&gt;
      &lt;p&gt;Como as grades bidimensionais nativas transformaram o desenvolvimento de portais corporativos modernos.&lt;/p&gt;
      &lt;a href=&quot;#&quot; class=&quot;btn-ler&quot;&gt;Ler Artigo →&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;card-noticia&quot;&gt;
      &lt;h4&gt;O Fim dos Hacks de Float&lt;/h4&gt;
      &lt;p&gt;Entenda como display flow-root e Flexbox aposentaram definitivamente o clássico micro-clearfix.&lt;/p&gt;
      &lt;a href=&quot;#&quot; class=&quot;btn-ler&quot;&gt;Ler Artigo →&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;card-noticia&quot;&gt;
      &lt;h4&gt;Performance em Smartphones&lt;/h4&gt;
      &lt;p&gt;Por que a abordagem Mobile-First acelera o tempo de renderização e melhora suas métricas de SEO.&lt;/p&gt;
      &lt;a href=&quot;#&quot; class=&quot;btn-ler&quot;&gt;Ler Artigo →&lt;/a&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 teste redimensionar a tela para observar a ampliação progressiva das colunas sem nenhum sobrescrita regressiva de propriedades:
</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>8. Resumo e Próximos Passos</h2>
<ul>
<li>O Design Responsivo combina grades fluidas, mídias flexíveis e media queries.</li>
<li>A meta tag <code>&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;</code> é inegociável para desativar a tela virtual de 980px em smartphones.</li>
<li>O paradigma <strong>Desktop-First</strong> usa <code>max-width</code> e &#8220;desmancha&#8221; o código de forma ineficiente no celular.</li>
<li>O paradigma <strong>Mobile-First</strong> usa <strong><code>min-width</code></strong>, começando com o CSS base mais leve e enriquecendo progressivamente telas maiores.</li>
<li>Breakpoints devem ser definidos com base nas necessidades do conteúdo, e nunca atrelados a marcas de celulares.</li>
<li>Elementos táteis exigem no mínimo 44&times;44px de área de toque para conformidade com a acessibilidade (WCAG).</li>
</ul>
<div class="wzw-callout wzw-callout-success">
<p><strong>Próximo Passo:</strong> Agora que você compreende a filosofia Mobile-First, como escrever consultas de mídia com a sintaxe moderna de operadores matemáticos (como <code>width &gt;= 768px</code>) e detectar recursos como modo escuro e orientação da tela? Na <strong>Lição 37</strong>, mergulharemos em <strong>Media Queries (@media &#038; Breakpoints)</strong>!</p>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/design-responsivo-mobile-first/">Design Responsivo e Mobile-First no CSS | 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/design-responsivo-mobile-first/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
