<?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 stacking context - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/stacking-context/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/stacking-context/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Thu, 22 Oct 2026 01:37:54 +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 stacking context - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/stacking-context/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>z-index e Contexto de Empilhamento no CSS &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/empilhamento-z-index-camadas-css/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/empilhamento-z-index-camadas-css/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 01:37:54 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[camadas css]]></category>
		<category><![CDATA[contexto de empilhamento]]></category>
		<category><![CDATA[curso css3 completo]]></category>
		<category><![CDATA[isolation isolate]]></category>
		<category><![CDATA[posicionamento css]]></category>
		<category><![CDATA[stacking context]]></category>
		<category><![CDATA[z-index css]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29427</guid>

					<description><![CDATA[<p>Até agora, tratamos o navegador como uma superfície bidimensional composta pelo eixo horizontal X (largura) e pelo eixo vertical Y (altura). No entanto, no momento em que usamos coordenadas de posicionamento, caixas inevitavelmente colidem e se sobrepõem. É aqui que entra o Eixo Z: a terceira dimensão perpendicular à tela, apontando diretamente para os olhos [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/empilhamento-z-index-camadas-css/">z-index e Contexto de Empilhamento 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">
  Até agora, tratamos o navegador como uma superfície bidimensional composta pelo eixo horizontal <strong>X</strong> (largura) e pelo eixo vertical <strong>Y</strong> (altura). No entanto, no momento em que usamos coordenadas de posicionamento, caixas inevitavelmente colidem e se sobrepõem. É aqui que entra o <strong>Eixo Z</strong>: a terceira dimensão perpendicular à tela, apontando diretamente para os olhos do usuário. Controlar qual elemento fica na frente ou atrás não é uma questão de sorte nem de quem tem o maior número arbitrário no <code>z-index</code>, mas sim de entender a mecânica dos <strong>Contextos de Empilhamento (Stacking Contexts)</strong>.
</p>
<h2>1. A Ordem Natural de Pintura (Antes de Usar z-index)</h2>
<p>
  Antes de aplicarmos qualquer linha de <code>z-index</code>, o navegador já possui uma hierarquia rígida de 7 camadas para desenhar os pixels na tela. Quando dois elementos colidem sem <code>z-index</code> declarado, o motor gráfico segue esta sequência de trás para a frente (do mais profundo para o mais superficial):
</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Nível</th>
<th>Tipo de Elemento / Conteúdo</th>
<th>Comportamento no Eixo Z</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>1 (Fundo)</strong></td>
<td>Background e Bordas do Elemento Raiz</td>
<td>A tela em branco do navegador (<code>&lt;html&gt;</code>).</td>
</tr>
<tr>
<td><strong>2</strong></td>
<td>Elementos Não-Posicionados em Bloco</td>
<td><code>&lt;div&gt;</code>, <code>&lt;section&gt;</code>, <code>&lt;p&gt;</code> no fluxo normal (ordem do HTML).</td>
</tr>
<tr>
<td><strong>3</strong></td>
<td>Elementos Flutuantes (Floats)</td>
<td>Caixas com <code>float: left</code> ou <code>float: right</code>.</td>
</tr>
<tr>
<td><strong>4</strong></td>
<td>Elementos em Linha (Inline e Texto)</td>
<td>Textos, <code>&lt;span&gt;</code>, <code>&lt;strong&gt;</code>, imagens no fluxo normal.</td>
</tr>
<tr>
<td><strong>5 (Frente)</strong></td>
<td><strong>Elementos Posicionados</strong></td>
<td>Qualquer caixa com <code>position</code> diferente de <code>static</code> (ordem de aparição no HTML).</td>
</tr>
</tbody>
</table>
</div>
<div class="wzw-callout wzw-callout-info">
<p><strong>Revelação Surpreendente:</strong> Apenas declarar <code>position: relative</code> em uma caixa — mesmo sem alterar coordenadas nem definir <code>z-index</code> — já a joga automaticamente para a frente de todos os blocos, floats e textos normais da página!</p>
</div>
<h2>2. Como Funciona a Propriedade <code>z-index</code></h2>
<p>
  A propriedade <code>z-index</code> aceita números inteiros positivos, negativos ou zero. Quanto maior o valor, mais próximo da tela do usuário o elemento se posiciona:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-12641" 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">14 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-12641', 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-12641', 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">.camada-fundo {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: relative;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">z-index</span>: 1;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.camada-frente {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: relative;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">z-index</span>: 10; /* Fica visivelmente por cima da camada-fundo */</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.marca-dagua-recuada {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: absolute;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">z-index</span>: -1; /* Fica atrás do próprio texto do seu contêiner */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.camada-fundo {
  position: relative;
  z-index: 1;
}

.camada-frente {
  position: relative;
  z-index: 10; /* Fica visivelmente por cima da camada-fundo */
}

.marca-dagua-recuada {
  position: absolute;
  z-index: -1; /* Fica atrás do próprio texto do seu contêiner */
}</textarea>
        </div>
    </div>
    
</div>
<div class="wzw-callout wzw-callout-warning">
<p><strong>A Regra de Ouro do z-index:</strong> A propriedade <code>z-index</code> <strong>NÃO FUNCIONA</strong> em elementos com <code>position: static</code> comum. Para que o <code>z-index</code> tenha efeito, o elemento precisa:</p>
<ul>
<li>Possuir posicionamento explícito: <code>relative</code>, <code>absolute</code>, <code>fixed</code> ou <code>sticky</code>; <strong>OU</strong></li>
<li>Ser um item filho direto de um contêiner <strong>Flexbox</strong> (<code>display: flex</code>) ou <strong>CSS Grid</strong> (<code>display: grid</code>), onde o CSS moderno permite <code>z-index</code> mesmo sem declarar <code>position</code>!</li>
</ul>
</div>
<h2>3. O Mito do <code>z-index: 999999</code> e os Contextos de Empilhamento</h2>
<p>
  Todo desenvolvedor já viveu esse pesadelo: você precisa que um menu dropdown ou modal fique na frente de outro cartão. Você aplica <code>z-index: 10</code>. Não funciona. Você tenta <code>z-index: 999</code>. Nada. Em desespero, você escreve <code>z-index: 99999999 !important;</code> e o elemento continua teimosamente atrás do outro componente!
</p>
<p>
  Por que isso acontece? Porque o <code>z-index</code> <strong>não é um valor global absoluto</strong>. Ele é relativo ao seu <strong>Contexto de Empilhamento (Stacking Context)</strong> local.
</p>
<h3>A Metáfora dos Andares do Prédio</h3>
<p>
  Pense no Stacking Context como prédios de apartamentos:
</p>
<ul>
<li>O <strong>Prédio A</strong> tem uma altura no térreo (<code>z-index: 1</code>).</li>
<li>O <strong>Prédio B</strong> tem uma base elevada (<code>z-index: 2</code>).</li>
<li>Se você subir na cobertura do Prédio A (andar <code>z-index: 999999</code>), você <strong>nunca estará acima</strong> de alguém que está no saguão do Prédio B (<code>z-index: 2</code>), porque a base de B é superior à base de A!</li>
</ul>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-35732" 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">11 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-35732', 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-35732', 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">&lt;!-- Exemplo da Armadilha Clássica --&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-a&quot;</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;position: relative; z-index: 1;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">&lt;!-- Este tooltip NUNCA conseguirá ficar na frente do card-b! --&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;tooltip&quot;</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;position: absolute; z-index: 999999;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    Tooltip Preso no Teto do Pai</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">&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-b&quot;</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;position: relative; z-index: 2;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;p&gt;</span>Conteúdo do Card B (Vence tudo dentro do Card A)<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>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Exemplo da Armadilha Clássica --&gt;
&lt;div class=&quot;card-a&quot; style=&quot;position: relative; z-index: 1;&quot;&gt;
  &lt;!-- Este tooltip NUNCA conseguirá ficar na frente do card-b! --&gt;
  &lt;div class=&quot;tooltip&quot; style=&quot;position: absolute; z-index: 999999;&quot;&gt;
    Tooltip Preso no Teto do Pai
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;card-b&quot; style=&quot;position: relative; z-index: 2;&quot;&gt;
  &lt;p&gt;Conteúdo do Card B (Vence tudo dentro do Card A)&lt;/p&gt;
&lt;/div&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>4. Os 7 Gatilhos que Criam Novos Contextos de Empilhamento</h2>
<p>
  Um novo Contexto de Empilhamento é gerado no navegador sempre que um elemento atende a qualquer uma das seguintes condições:
</p>
<ol>
<li>O elemento raiz do documento (<code>&lt;html&gt;</code>).</li>
<li>Qualquer elemento posicionado (<code>relative</code> ou <code>absolute</code>) cujo <code>z-index</code> seja diferente de <code>auto</code> (ex.: <code>z-index: 0</code> já cria um novo contexto!).</li>
<li>Qualquer elemento com <code>position: fixed</code> ou <code>position: sticky</code>.</li>
<li>Itens flex ou grid cujo <code>z-index</code> seja diferente de <code>auto</code>.</li>
<li>Elementos com opacidade reduzida: <code>opacity &lt; 1</code>.</li>
<li>Elementos com transformações ou filtros gráficos: <code>transform</code>, <code>filter</code>, <code>perspective</code>, <code>clip-path</code> ou <code>mask</code> diferentes de <code>none</code>.</li>
<li>Elementos com <code>isolation: isolate</code>.</li>
</ol>
<h2>5. A Arma Secreta do CSS Moderno: <code>isolation: isolate</code></h2>
<p>
  No passado, para criar um contexto de empilhamento isolado em um componente (evitando que seus elementos internos colidissem com o restante do site), os programadores recorriam a &#8220;hacks&#8221; como <code>position: relative; z-index: 0;</code> ou <code>transform: translateZ(0);</code>.
</p>
<p>
  O CSS moderno introduziu a propriedade <strong><code>isolation: isolate</code></strong> especificamente para resolver esse problema com elegância cirúrgica:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-14151" 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-14151', 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-14151', 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">.card-componente {</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Cria uma fronteira de empilhamento local estrita */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Nada de z-index interno vazará para o resto da página! */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">isolation</span>: isolate;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.card-componente {
  /* Cria uma fronteira de empilhamento local estrita */
  /* Nada de z-index interno vazará para o resto da página! */
  isolation: isolate;
}</textarea>
        </div>
    </div>
    
</div>
<p>
  Com <code>isolation: isolate</code>, você pode usar <code>z-index: -1</code> dentro do card para colocar uma imagem decorativa atrás do texto, sem o risco da imagem afundar para trás do fundo da página inteira!
</p>
<h2>6. Arquitetura Profissional: Tokens de Camadas no Design System</h2>
<p>
  Para exterminar para sempre a &#8220;guerra de z-index&#8221; nos seus projetos corporativos, nunca escreva números mágicos dispersos pelo CSS. Padronize uma escala com variáveis CSS no seu <code>:root</code>:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-35242" 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-35242', 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-35242', 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">:root</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">/* Escala Semântica de Camadas Z-Index */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-abaixo:       -1;   /* Decorações atrás do fluxo */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-padrao:        1;   /* Conteúdo básico elevado */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-dropdown:    100;   /* Menus suspensos e selects */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-sticky:      200;   /* Barras de navegação fixas */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-overlay:     500;   /* Máscaras escuras de fundo */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-modal:       510;   /* Janelas modais e diálogos */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-popover:     800;   /* Tooltips e balões explicativos */</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--z-toast:      1000;   /* Alertas e notificações críticas */</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">/* Aplicação Limpa e Autoexplicativa */</span></span>
<span class="wzw-code-line">.menu-dropdown {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: absolute;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">z-index</span>: var(--z-dropdown);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.janela-modal {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: fixed;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">z-index</span>: var(--z-modal);</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>:root {
  /* Escala Semântica de Camadas Z-Index */
  --z-abaixo:       -1;   /* Decorações atrás do fluxo */
  --z-padrao:        1;   /* Conteúdo básico elevado */
  --z-dropdown:    100;   /* Menus suspensos e selects */
  --z-sticky:      200;   /* Barras de navegação fixas */
  --z-overlay:     500;   /* Máscaras escuras de fundo */
  --z-modal:       510;   /* Janelas modais e diálogos */
  --z-popover:     800;   /* Tooltips e balões explicativos */
  --z-toast:      1000;   /* Alertas e notificações críticas */
}

/* Aplicação Limpa e Autoexplicativa */
.menu-dropdown {
  position: absolute;
  z-index: var(--z-dropdown);
}

.janela-modal {
  position: fixed;
  z-index: var(--z-modal);
}</textarea>
        </div>
    </div>
    
</div>
<h2>7. Laboratório Prático: O Fenômeno do Contexto de Empilhamento</h2>
<p>
  No código abaixo, experimente observar como o <code>Card 1</code> (com <code>z-index: 1</code>) não consegue colocar seu distintivo à frente do <code>Card 2</code> (com <code>z-index: 2</code>), e como o uso de <code>isolation: isolate</code> organiza os planos de profundidade:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-20624" 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">82 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-20624', 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-20624', 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 Camadas z-index<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: #0f172a;</span>
<span class="wzw-code-line">      color: #f8fafc;</span>
<span class="wzw-code-line">      padding: 40px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    .painel-demonstracao {</span>
<span class="wzw-code-line">      position: relative;</span>
<span class="wzw-code-line">      width: 480px;</span>
<span class="wzw-code-line">      height: 260px;</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: 16px;</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">    <span class="wzw-tk-comment">/* Card 1 - Nível Base 1 */</span></span>
<span class="wzw-code-line">    .card-1 {</span>
<span class="wzw-code-line">      position: absolute;</span>
<span class="wzw-code-line">      top: 30px;</span>
<span class="wzw-code-line">      left: 30px;</span>
<span class="wzw-code-line">      width: 240px;</span>
<span class="wzw-code-line">      padding: 20px;</span>
<span class="wzw-code-line">      background: #3b82f6;</span>
<span class="wzw-code-line">      border-radius: 10px;</span>
<span class="wzw-code-line">      z-index: 1; /* Cria um Stacking Context de nível 1 */</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* Distintivo de z-index gigante dentro do Card 1 */</span></span>
<span class="wzw-code-line">    .badge-insana {</span>
<span class="wzw-code-line">      position: absolute;</span>
<span class="wzw-code-line">      bottom: -15px;</span>
<span class="wzw-code-line">      right: -30px;</span>
<span class="wzw-code-line">      background: #ef4444;</span>
<span class="wzw-code-line">      color: #fff;</span>
<span class="wzw-code-line">      padding: 8px 16px;</span>
<span class="wzw-code-line">      border-radius: 9999px;</span>
<span class="wzw-code-line">      font-weight: 800;</span>
<span class="wzw-code-line">      font-size: 0.75rem;</span>
<span class="wzw-code-line">      z-index: 99999; /* INÚTIL: Preso ao teto z-index: 1 do pai! */</span>
<span class="wzw-code-line">      box-shadow: 0 4px 12px rgba(0,0,0,0.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">/* Card 2 - Nível Base 2 */</span></span>
<span class="wzw-code-line">    .card-2 {</span>
<span class="wzw-code-line">      position: absolute;</span>
<span class="wzw-code-line">      top: 80px;</span>
<span class="wzw-code-line">      left: 140px;</span>
<span class="wzw-code-line">      width: 240px;</span>
<span class="wzw-code-line">      padding: 20px;</span>
<span class="wzw-code-line">      background: #10b981;</span>
<span class="wzw-code-line">      border-radius: 10px;</span>
<span class="wzw-code-line">      z-index: 2; /* Vence o Card 1 E a badge de 99999! */</span>
<span class="wzw-code-line">      box-shadow: 0 10px 25px rgba(0,0,0,0.4);</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&gt;</span>Por que z-index: 99999 Perde para z-index: 2?<span class="wzw-tk-tag">&lt;/h2&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;painel-demonstracao&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-1&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h4</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin:0;&quot;</span><span class="wzw-tk-tag">&gt;</span>Card 1 (z-index: 1)<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;badge-insana&quot;</span><span class="wzw-tk-tag">&gt;</span>z-index: 99999<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">&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-2&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h4</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin:0;&quot;</span><span class="wzw-tk-tag">&gt;</span>Card 2 (z-index: 2)<span class="wzw-tk-tag">&lt;/h4&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;font-size:0.85rem; margin-bottom:0;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        Observe que eu fico por cima da badge vermelha, embora meu z-index seja apenas 2!</span>
<span class="wzw-code-line">      <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;title&gt;Laboratório de Camadas z-index&lt;/title&gt;
  &lt;style&gt;
    body {
      font-family: &#039;Inter&#039;, system-ui, sans-serif;
      background: #0f172a;
      color: #f8fafc;
      padding: 40px;
    }

    .painel-demonstracao {
      position: relative;
      width: 480px;
      height: 260px;
      background: #1e293b;
      border: 1px solid #334155;
      border-radius: 16px;
      padding: 20px;
    }

    /* Card 1 - Nível Base 1 */
    .card-1 {
      position: absolute;
      top: 30px;
      left: 30px;
      width: 240px;
      padding: 20px;
      background: #3b82f6;
      border-radius: 10px;
      z-index: 1; /* Cria um Stacking Context de nível 1 */
    }

    /* Distintivo de z-index gigante dentro do Card 1 */
    .badge-insana {
      position: absolute;
      bottom: -15px;
      right: -30px;
      background: #ef4444;
      color: #fff;
      padding: 8px 16px;
      border-radius: 9999px;
      font-weight: 800;
      font-size: 0.75rem;
      z-index: 99999; /* INÚTIL: Preso ao teto z-index: 1 do pai! */
      box-shadow: 0 4px 12px rgba(0,0,0,0.5);
    }

    /* Card 2 - Nível Base 2 */
    .card-2 {
      position: absolute;
      top: 80px;
      left: 140px;
      width: 240px;
      padding: 20px;
      background: #10b981;
      border-radius: 10px;
      z-index: 2; /* Vence o Card 1 E a badge de 99999! */
      box-shadow: 0 10px 25px rgba(0,0,0,0.4);
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h2&gt;Por que z-index: 99999 Perde para z-index: 2?&lt;/h2&gt;

  &lt;div class=&quot;painel-demonstracao&quot;&gt;
    &lt;div class=&quot;card-1&quot;&gt;
      &lt;h4 style=&quot;margin:0;&quot;&gt;Card 1 (z-index: 1)&lt;/h4&gt;
      &lt;div class=&quot;badge-insana&quot;&gt;z-index: 99999&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;card-2&quot;&gt;
      &lt;h4 style=&quot;margin:0;&quot;&gt;Card 2 (z-index: 2)&lt;/h4&gt;
      &lt;p style=&quot;font-size:0.85rem; margin-bottom:0;&quot;&gt;
        Observe que eu fico por cima da badge vermelha, embora meu z-index seja apenas 2!
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
</div>
<p>
  Teste esse exemplo interativo no Playground IDE, experimente inverter os <code>z-index</code> dos pais ou aplicar <code>isolation: isolate</code> para comprovar o comportamento gráfico na prática:
</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><code>z-index</code> controla a posição no eixo Z (profundidade perpendicular à tela).</li>
<li>Elementos posicionados (<code>relative</code>, <code>absolute</code>, etc.) ficam naturalmente à frente do fluxo normal antes de qualquer <code>z-index</code> ser digitado.</li>
<li><code>z-index</code> não funciona em caixas estáticas normais; exige posicionamento ou ser filho direto de Flex/Grid.</li>
<li>Valores astronômicos como <code>z-index: 999999</code> falham quando o elemento pai está em um <strong>Contexto de Empilhamento</strong> inferior.</li>
<li>A propriedade moderna <code>isolation: isolate</code> cria uma fronteira limpa e estrita de camadas sem efeitos colaterais visuais.</li>
</ul>
<div class="wzw-callout wzw-callout-success">
<p><strong>Próximo Passo:</strong> Agora que você domina as coordenadas e o empilhamento em camadas, o que acontece quando o conteúdo de uma caixa é maior do que o tamanho delimitado para ela? Na <strong>Lição 25</strong>, dominaremos <strong>Overflow &#038; Controle de Rolagem no CSS (visible, hidden, scroll, auto e clip)</strong>!</p>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/empilhamento-z-index-camadas-css/">z-index e Contexto de Empilhamento 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/empilhamento-z-index-camadas-css/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
