<?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 scrollbar styling - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/scrollbar-styling/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/scrollbar-styling/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Thu, 22 Oct 2026 01:42:45 +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 scrollbar styling - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/scrollbar-styling/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Overflow e Controle de Rolagem no CSS &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/overflow-controle-rolagem-css/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/overflow-controle-rolagem-css/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 01:42:45 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[curso css3 completo]]></category>
		<category><![CDATA[overflow css]]></category>
		<category><![CDATA[overflow-x]]></category>
		<category><![CDATA[overflow-y]]></category>
		<category><![CDATA[overscroll-behavior]]></category>
		<category><![CDATA[scroll-behavior]]></category>
		<category><![CDATA[scrollbar styling]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29429</guid>

					<description><![CDATA[<p>Na web responsiva, uma das leis mais fundamentais do design de interfaces é: &#8220;o conteúdo é imprevisível&#8221;. Uma imagem em alta resolução pode ser mais larga do que a tela do celular, um texto dinâmico vindo de uma API pode ultrapassar a altura máxima de um cartão, ou uma tabela com dezenas de colunas pode [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/overflow-controle-rolagem-css/">Overflow e Controle de Rolagem 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 web responsiva, uma das leis mais fundamentais do design de interfaces é: <em>&#8220;o conteúdo é imprevisível&#8221;</em>. Uma imagem em alta resolução pode ser mais larga do que a tela do celular, um texto dinâmico vindo de uma API pode ultrapassar a altura máxima de um cartão, ou uma tabela com dezenas de colunas pode quebrar a grade do layout. Quando o conteúdo interno de um elemento excede os limites físicos de sua caixa, ocorre o fenômeno conhecido como <strong>Overflow (Transbordamento)</strong>. Nesta lição, você aprenderá a dominar a propriedade <code>overflow</code>, controlar eixos individuais com <code>overflow-x</code> e <code>overflow-y</code>, eliminar o vazamento de rolagem com <code>overscroll-behavior</code> e estilizar barras de rolagem modernas.
</p>
<h2>1. Os 5 Valores da Propriedade <code>overflow</code></h2>
<p>
  A propriedade <code>overflow</code> instrui o navegador sobre como proceder quando o conteúdo de um elemento ultrapassa as dimensões de <code>width</code> ou <code>height</code> explicitamente definidas:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-71941" 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-71941', 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-71941', 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">.caixa {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: <span class="wzw-tk-num">300px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">height</span>: <span class="wzw-tk-num">180px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow</span>: auto; /* Controla o excesso de conteúdo */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.caixa {
  width: 300px;
  height: 180px;
  overflow: auto; /* Controla o excesso de conteúdo */
}</textarea>
        </div>
    </div>
    
</div>
<h3>1. <code>overflow: visible</code> (Padrão do Navegador)</h3>
<p>
  É o valor padrão de todo elemento HTML. O conteúdo excedente simplesmente vaza para fora das quatro bordas da caixa, sobrepondo-se aos parágrafos e elementos vizinhos. Nenhuma barra de rolagem é criada. É o culpado clássico de textos ilegíveis vazando em designs mal planejados.
</p>
<h3>2. <code>overflow: hidden</code></h3>
<p>
  Qualquer conteúdo que ultrapassar o contorno da caixa é impiedosamente recortado e fica invisível. Não há barras de rolagem e o usuário não pode rolar o excesso com o mouse ou toque. É muito utilizado para:
</p>
<ul>
<li>Impedir que imagens com <code>border-radius</code> no contêiner pai vazem pelas pontas arredondadas.</li>
<li>Criar um novo <em>Block Formatting Context (BFC)</em> para conter elementos flutuantes.</li>
<li>Ocultar efeitos visuais de animação que iniciam fora da tela.</li>
</ul>
<h3>3. <code>overflow: scroll</code></h3>
<p>
  Força o navegador a renderizar barras de rolagem permanentes nos eixos X e Y, <strong>mesmo quando o conteúdo cabe perfeitamente dentro da caixa</strong>! Em sistemas desktop (como Windows e Linux), isso gera barras de rolagem cinzas desativadas e visualmente desagradáveis quando o texto é curto. Evite usar <code>scroll</code> genérico; prefira <code>auto</code>.
</p>
<h3>4. <code>overflow: auto</code> (O Padrão Profissional)</h3>
<p>
  O valor mais equilibrado e inteligente. O navegador avalia o conteúdo: se ele couber dentro da caixa, nenhuma barra é exibida; se o conteúdo ultrapassar o tamanho limite, o navegador adiciona automaticamente a barra de rolagem apenas no eixo onde houve transbordamento.
</p>
<h3>5. <code>overflow: clip</code> (A Adição Moderna do CSS3)</h3>
<p>
  Semelhante ao <code>hidden</code>, o valor <code>clip</code> recorta o excesso visual. No entanto, há duas vantagens arquiteturais profundas:
</p>
<ul>
<li>Ele <strong>não cria um contêiner de rolagem</strong> na memória (não consome recursos de scroll por script nem por teclado).</li>
<li>Permite o uso da propriedade complementar <strong><code>overflow-clip-margin</code></strong>, que possibilita estender o limite do recorte alguns pixels além da borda física da caixa antes de ceifar o conteúdo (ideal para sombras finas ou traços decorativos).</li>
</ul>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-50407" 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-50407', 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-50407', 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-recortado {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow</span>: clip;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow-clip-margin</span>: <span class="wzw-tk-num">8px</span>; /* Permite que <span class="wzw-tk-num">8px</span> de sombra escapem antes de cortar */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.card-recortado {
  overflow: clip;
  overflow-clip-margin: 8px; /* Permite que 8px de sombra escapem antes de cortar */
}</textarea>
        </div>
    </div>
    
</div>
<h2>2. Controle Cirúrgico por Eixos: <code>overflow-x</code> e <code>overflow-y</code></h2>
<p>
  Em vez de aplicar o mesmo comportamento em todas as direções, podemos tratar a horizontal e a vertical de forma independente:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-52624" 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-52624', 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-52624', 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">/* Carrossel de abas ou tags com rolagem horizontal fluida */</span></span>
<span class="wzw-code-line">.carrossel-tags {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow-x</span>: auto;   /* Permite rolar para os lados */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow-y</span>: hidden; /* Corta qualquer transbordamento vertical */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">white-space</span>: nowrap;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Carrossel de abas ou tags com rolagem horizontal fluida */
.carrossel-tags {
  overflow-x: auto;   /* Permite rolar para os lados */
  overflow-y: hidden; /* Corta qualquer transbordamento vertical */
  white-space: nowrap;
}</textarea>
        </div>
    </div>
    
</div>
<div class="wzw-callout wzw-callout-warning">
<p><strong>A Regra de Dependência Entre Eixos da W3C:</strong> Você não pode combinar <code>overflow-x: visible</code> com <code>overflow-y: hidden</code> (ou <code>auto</code> / <code>scroll</code>). Se um dos eixos for definido como <code>hidden</code>, <code>scroll</code> ou <code>auto</code>, o navegador automaticamente converterá o outro eixo de <code>visible</code> para <code>auto</code>. Essa é a razão pela qual menus dropdown com posicionamento absoluto às vezes são cortados acidentalmente quando o contêiner pai tem <code>overflow-y: auto</code>.</p>
</div>
<h2>3. Usabilidade Moderna: <code>scroll-behavior</code> e <code>overscroll-behavior</code></h2>
<h3>Rolagem Suave: <code>scroll-behavior: smooth</code></h3>
<p>
  Ao clicar em links âncora (como <code>&lt;a href="#secao-precos"&gt;</code>), o navegador por padrão salta instantaneamente para a seção. Com uma única linha no elemento raiz, o deslocamento se torna cinematográfico e suave:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-76217" 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">3 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-76217', 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-76217', 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">html {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">scroll-behavior</span>: smooth;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>html {
  scroll-behavior: smooth;
}</textarea>
        </div>
    </div>
    
</div>
<h3>Bloqueio de Encadeamento: <code>overscroll-behavior: contain</code></h3>
<p>
  Imagine o seguinte cenário: o usuário abre uma janela modal ou uma lista de termos de uso com rolagem interna. Ele rola até o final do texto. Ao tentar continuar rolando, a página de trás (o <code>&lt;body&gt;</code> principal) começa a se mover loucamente! Esse comportamento incômodo chama-se <strong>Scroll Chaining (Encadeamento de Rolagem)</strong>.
</p>
<p>
  Para isolar o scroll de um contêiner e impedir que a rolagem vaze para a página principal, aplicamos:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-61086" 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-61086', 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-61086', 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">.modal-dialogo,</span>
<span class="wzw-code-line">.gaveta-lateral {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow-y</span>: auto;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overscroll-behavior</span>: contain; /* Trava o scroll estritamente dentro da gaveta! */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.modal-dialogo,
.gaveta-lateral {
  overflow-y: auto;
  overscroll-behavior: contain; /* Trava o scroll estritamente dentro da gaveta! */
}</textarea>
        </div>
    </div>
    
</div>
<h2>4. A Famosa Tríade: Truncando Textos Longos com Reticências (Ellipsis)</h2>
<p>
  Para criar títulos ou parágrafos elegantes em cartões que nunca quebram linha e exibem três pontinhos (<code>...</code>) caso o texto ultrapasse a largura do contêiner, utilizamos a combinação sagrada:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-79712" 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-79712', 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-79712', 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">.texto-truncado {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: <span class="wzw-tk-num">250px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">white-space</span>: nowrap;       /* 1. Impede a quebra em múltiplas linhas */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow</span>: hidden;          /* 2. Oculta o que ultrapassar os <span class="wzw-tk-num">250px</span> */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">text-overflow</span>: ellipsis;   /* 3. Desenha automaticamente as reticências (...) */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.texto-truncado {
  width: 250px;
  white-space: nowrap;       /* 1. Impede a quebra em múltiplas linhas */
  overflow: hidden;          /* 2. Oculta o que ultrapassar os 250px */
  text-overflow: ellipsis;   /* 3. Desenha automaticamente as reticências (...) */
}</textarea>
        </div>
    </div>
    
</div>
<h2>5. Estilizando a Barra de Rolagem: O Padrão W3C vs. WebKit</h2>
<p>
  Por anos, estilizar barras de rolagem exigia um conjunto prolixo de seletores proprietários <code>::-webkit-scrollbar</code>. Hoje, o padrão oficial da W3C já é amplamente suportado por todos os navegadores modernos através de duas propriedades simples e elegantes:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-40879" 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">25 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-40879', 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-40879', 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">/* Padrão Moderno W3C (Chrome, Firefox, Safari, Edge) */</span></span>
<span class="wzw-code-line">.painel-scroll {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">scrollbar-width</span>: thin;                  /* auto | thin | none */</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">scrollbar-color</span>: <span class="wzw-tk-num">#3b82f6</span> <span class="wzw-tk-num">#1e293b</span>;       /* [cor do indicador] [cor da trilha] */</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Fallback Legado para personalização avançada em navegadores baseados em WebKit */</span></span>
<span class="wzw-code-line">.painel-scroll::-webkit-scrollbar {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: <span class="wzw-tk-num">8px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">height</span>: <span class="wzw-tk-num">8px</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.painel-scroll::-webkit-scrollbar-track {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#1e293b</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">4px</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.painel-scroll::-webkit-scrollbar-thumb {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#3b82f6</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">4px</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.painel-scroll::-webkit-scrollbar-thumb<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#2563eb</span>;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Padrão Moderno W3C (Chrome, Firefox, Safari, Edge) */
.painel-scroll {
  scrollbar-width: thin;                  /* auto | thin | none */
  scrollbar-color: #3b82f6 #1e293b;       /* [cor do indicador] [cor da trilha] */
}

/* Fallback Legado para personalização avançada em navegadores baseados em WebKit */
.painel-scroll::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

.painel-scroll::-webkit-scrollbar-track {
  background: #1e293b;
  border-radius: 4px;
}

.painel-scroll::-webkit-scrollbar-thumb {
  background: #3b82f6;
  border-radius: 4px;
}

.painel-scroll::-webkit-scrollbar-thumb:hover {
  background: #2563eb;
}</textarea>
        </div>
    </div>
    
</div>
<h2>6. Matriz Comparativa das Opções de Overflow</h2>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Valor</th>
<th>Corta o Conteúdo?</th>
<th>Exibe Barras de Rolagem?</th>
<th>Cria Contêiner de Rolagem?</th>
<th>Uso Recomendado</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>visible</code></td>
<td>❌ Não (Vaza)</td>
<td>❌ Nunca</td>
<td>❌ Não</td>
<td>Padrão; layouts normais onde o conteúdo se expande livremente.</td>
</tr>
<tr>
<td><code>hidden</code></td>
<td>✅ Sim</td>
<td>❌ Nunca</td>
<td>✅ Sim (apenas por script)</td>
<td>Bordas arredondadas, máscaras de animação e clearfix.</td>
</tr>
<tr>
<td><code>scroll</code></td>
<td>✅ Sim</td>
<td>✅ Sempre (visíveis mesmo vazias)</td>
<td>✅ Sim</td>
<td>Raro; apenas se a presença fixa da barra evitar trepidação de layout.</td>
</tr>
<tr>
<td><code>auto</code></td>
<td>✅ Sim</td>
<td>⚠️ Apenas quando necessário</td>
<td>✅ Sim</td>
<td>Tabelas responsivas, áreas de código, caixas de chat e modais.</td>
</tr>
<tr>
<td><code>clip</code></td>
<td>✅ Sim</td>
<td>❌ Nunca</td>
<td>❌ Não (Alta performance)</td>
<td>Recortes estáticos rígidos sem overhead de rolagem.</td>
</tr>
</tbody>
</table>
</div>
<h2>7. Laboratório Prático: Painel com Rolagem Customizada e Reticências</h2>
<p>
  No exemplo abaixo, construímos um componente completo que combina um bloco de código com rolagem horizontal customizada, textos truncados com reticências e contenção de scroll:
</p>
<div class="wzw-code-wrapper">
    <div class="wzw-ide-card" id="wzw-code-60293" 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">88 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-60293', 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-60293', 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 Overflow 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">    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: 30px;</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">      max-width: 420px;</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: 24px;</span>
<span class="wzw-code-line">      margin-bottom: 24px;</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">/* 1. Truncamento com Reticências */</span></span>
<span class="wzw-code-line">    .titulo-truncado {</span>
<span class="wzw-code-line">      width: 100%;</span>
<span class="wzw-code-line">      white-space: nowrap;</span>
<span class="wzw-code-line">      overflow: hidden;</span>
<span class="wzw-code-line">      text-overflow: ellipsis;</span>
<span class="wzw-code-line">      font-size: 1.1rem;</span>
<span class="wzw-code-line">      font-weight: 700;</span>
<span class="wzw-code-line">      color: #38bdf8;</span>
<span class="wzw-code-line">      margin-top: 0;</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. Área de Código com Rolagem Horizontal */</span></span>
<span class="wzw-code-line">    .codigo-box {</span>
<span class="wzw-code-line">      background: #0b0f19;</span>
<span class="wzw-code-line">      padding: 16px;</span>
<span class="wzw-code-line">      border-radius: 8px;</span>
<span class="wzw-code-line">      overflow-x: auto;</span>
<span class="wzw-code-line">      overflow-y: hidden;</span>
<span class="wzw-code-line">      white-space: pre;</span>
<span class="wzw-code-line">      font-family: monospace;</span>
<span class="wzw-code-line">      font-size: 0.85rem;</span>
<span class="wzw-code-line">      color: #a7f3d0;</span>
<span class="wzw-code-line">      border: 1px solid #1e293b;</span>
<span class="wzw-code-line">      </span>
<span class="wzw-code-line">      <span class="wzw-tk-comment">/* Estilização moderna da barra */</span></span>
<span class="wzw-code-line">      scrollbar-width: thin;</span>
<span class="wzw-code-line">      scrollbar-color: #10b981 #0b0f19;</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. Caixa com Rolagem Vertical e Overscroll Contain */</span></span>
<span class="wzw-code-line">    .caixa-scroll-interna {</span>
<span class="wzw-code-line">      height: 120px;</span>
<span class="wzw-code-line">      overflow-y: auto;</span>
<span class="wzw-code-line">      overscroll-behavior: contain;</span>
<span class="wzw-code-line">      background: #111827;</span>
<span class="wzw-code-line">      padding: 14px;</span>
<span class="wzw-code-line">      border-radius: 8px;</span>
<span class="wzw-code-line">      margin-top: 16px;</span>
<span class="wzw-code-line">      font-size: 0.9rem;</span>
<span class="wzw-code-line">      line-height: 1.6;</span>
<span class="wzw-code-line">      scrollbar-width: thin;</span>
<span class="wzw-code-line">      scrollbar-color: #6366f1 #111827;</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;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</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;titulo-truncado&quot;</span> <span class="wzw-tk-attr">title</span>=<span class="wzw-tk-str">&quot;Este é um título gigantesco que ultrapassa a largura máxima do cartão e será elegantemente encurtado&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      Este é um título gigantesco que ultrapassa a largura máxima do cartão e será elegantemente encurtado</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">&nbsp;</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.85rem;&quot;</span><span class="wzw-tk-tag">&gt;</span>Bloco de código com rolagem horizontal (overflow-x: auto):<span class="wzw-tk-tag">&lt;/p&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;codigo-box&quot;</span><span class="wzw-tk-tag">&gt;</span>const configuracaoExtremamenteLongaComVariosParametros = { id: 1024, nome: &quot;WebZoneWare Engine 2.0&quot;, status: &quot;producao_ativa&quot; };<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;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#94a3b8; font-size:0.85rem; margin-top:16px;&quot;</span><span class="wzw-tk-tag">&gt;</span>Caixa com scroll vertical isolado (overscroll-behavior: contain):<span class="wzw-tk-tag">&lt;/p&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;caixa-scroll-interna&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      Role esta caixinha até o final. Ao atingir o último parágrafo, note que a página principal NÃO continuará rolando! O scroll fica confinado de forma limpa e confortável para o usuário.</span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;br&gt;</span><span class="wzw-tk-tag">&lt;br&gt;</span></span>
<span class="wzw-code-line">      Mais texto para forçar o scroll...</span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;br&gt;</span><span class="wzw-tk-tag">&lt;br&gt;</span></span>
<span class="wzw-code-line">      Fim da área interna de rolagem!</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 Overflow CSS&lt;/title&gt;
  &lt;style&gt;
    body {
      font-family: &#039;Inter&#039;, system-ui, sans-serif;
      background: #0f172a;
      color: #f8fafc;
      padding: 30px;
    }

    .card {
      max-width: 420px;
      background: #1e293b;
      border: 1px solid #334155;
      border-radius: 12px;
      padding: 24px;
      margin-bottom: 24px;
    }

    /* 1. Truncamento com Reticências */
    .titulo-truncado {
      width: 100%;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      font-size: 1.1rem;
      font-weight: 700;
      color: #38bdf8;
      margin-top: 0;
    }

    /* 2. Área de Código com Rolagem Horizontal */
    .codigo-box {
      background: #0b0f19;
      padding: 16px;
      border-radius: 8px;
      overflow-x: auto;
      overflow-y: hidden;
      white-space: pre;
      font-family: monospace;
      font-size: 0.85rem;
      color: #a7f3d0;
      border: 1px solid #1e293b;
      
      /* Estilização moderna da barra */
      scrollbar-width: thin;
      scrollbar-color: #10b981 #0b0f19;
    }

    /* 3. Caixa com Rolagem Vertical e Overscroll Contain */
    .caixa-scroll-interna {
      height: 120px;
      overflow-y: auto;
      overscroll-behavior: contain;
      background: #111827;
      padding: 14px;
      border-radius: 8px;
      margin-top: 16px;
      font-size: 0.9rem;
      line-height: 1.6;
      scrollbar-width: thin;
      scrollbar-color: #6366f1 #111827;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;card&quot;&gt;
    &lt;h3 class=&quot;titulo-truncado&quot; title=&quot;Este é um título gigantesco que ultrapassa a largura máxima do cartão e será elegantemente encurtado&quot;&gt;
      Este é um título gigantesco que ultrapassa a largura máxima do cartão e será elegantemente encurtado
    &lt;/h3&gt;

    &lt;p style=&quot;color:#94a3b8; font-size:0.85rem;&quot;&gt;Bloco de código com rolagem horizontal (overflow-x: auto):&lt;/p&gt;
    &lt;div class=&quot;codigo-box&quot;&gt;const configuracaoExtremamenteLongaComVariosParametros = { id: 1024, nome: &quot;WebZoneWare Engine 2.0&quot;, status: &quot;producao_ativa&quot; };&lt;/div&gt;

    &lt;p style=&quot;color:#94a3b8; font-size:0.85rem; margin-top:16px;&quot;&gt;Caixa com scroll vertical isolado (overscroll-behavior: contain):&lt;/p&gt;
    &lt;div class=&quot;caixa-scroll-interna&quot;&gt;
      Role esta caixinha até o final. Ao atingir o último parágrafo, note que a página principal NÃO continuará rolando! O scroll fica confinado de forma limpa e confortável para o usuário.
      &lt;br&gt;&lt;br&gt;
      Mais texto para forçar o scroll...
      &lt;br&gt;&lt;br&gt;
      Fim da área interna de rolagem!
    &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 na prática a rolagem horizontal do código e o bloqueio de encadeamento da caixinha:
</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>overflow: visible</code> vaza o conteúdo para fora da caixa sem criar barras.</li>
<li><code>overflow: hidden</code> recorta o excesso visualmente sem permitir rolagem.</li>
<li><code>overflow: auto</code> adiciona barras de rolagem dinamicamente apenas quando o conteúdo ultrapassa as dimensões.</li>
<li><code>overflow: clip</code> recorta com alta performance sem instanciar contêiner de rolagem.</li>
<li><code>scroll-behavior: smooth</code> suaviza saltos de links âncora pela página.</li>
<li><code>overscroll-behavior: contain</code> impede que a rolagem de modais e menus continue no corpo da página.</li>
<li><code>scrollbar-width</code> e <code>scrollbar-color</code> são as novas propriedades padrão W3C para estilizar barras de rolagem.</li>
</ul>
<div class="wzw-callout wzw-callout-success">
<p><strong>Próximo Passo:</strong> Antes da invenção do Flexbox e do Grid, como os desenvolvedores construíam páginas com colunas lado a lado e imagens flutuando entre textos? Na <strong>Lição 26</strong>, visitaremos a história e os segredos dos <strong>Layouts com float, clear e o clássico Clearfix</strong>!</p>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/overflow-controle-rolagem-css/">Overflow e Controle de Rolagem 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/overflow-controle-rolagem-css/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
