<?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 tag script html5 - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/tag-script-html5/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/tag-script-html5/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Wed, 21 Oct 2026 02:22:05 +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 tag script html5 - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/tag-script-html5/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Scripts no HTML: Tag script, Defer e Async &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/scripts-javascript-no-html/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/scripts-javascript-no-html/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 02:22:05 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[core web vitals javascript]]></category>
		<category><![CDATA[script defer vs async]]></category>
		<category><![CDATA[scripts javascript no html]]></category>
		<category><![CDATA[tag script html5]]></category>
		<category><![CDATA[type module javascript]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29305</guid>

					<description><![CDATA[<p>Enquanto o HTML define o significado e a estrutura de um documento e o CSS dita a sua estética visual, o JavaScript é a camada de comportamento e lógica que transforma páginas estáticas em aplicações web interativas. Através do elemento &#60;script&#62;, os navegadores baixam e executam códigos que manipulam o DOM em tempo real, respondem [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/scripts-javascript-no-html/">Scripts no HTML: Tag script, Defer e Async | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">Enquanto o HTML define o significado e a estrutura de um documento e o CSS dita a sua estética visual, o <strong>JavaScript é a camada de comportamento e lógica</strong> que transforma páginas estáticas em aplicações web interativas. Através do elemento <code>&lt;script&gt;</code>, os navegadores baixam e executam códigos que manipulam o DOM em tempo real, respondem a eventos do usuário, comunicam-se com APIs assíncronas e controlam a experiência de navegação.</p>
<h2>1. A Tag &lt;script&gt;: Scripts Inline vs Arquivos Externos</h2>
<p>O HTML suporta a inclusão de código JavaScript de duas maneiras distintas: embutido diretamente no corpo do documento (inline) ou vinculado a um arquivo externo através do atributo <code>src</code>.</p>
<h3>Scripts Embutidos (Inline)</h3>
<p>O código é digitado diretamente entre a abertura e o fechamento da tag <code>&lt;script&gt;</code>. É útil para configurações imediatas, pequenos trechos de inicialização rápida ou dados globais renderizados pelo servidor:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Script Inline de Inicialização</span><br />
        <span>inline-script.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-87643" data-lang="code">
        <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">HTML</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-87643', 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-87643', 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;script&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Script executado imediatamente no ponto em que é lido</span></span>
<span class="wzw-code-line">    console.log(&quot;Web Academy: Inicializando motor da página...&quot;);</span>
<span class="wzw-code-line">    const VERSAO_APP = &quot;2.4.0&quot;;</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/script&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;script&gt;
    // Script executado imediatamente no ponto em que é lido
    console.log(&quot;Web Academy: Inicializando motor da página...&quot;);
    const VERSAO_APP = &quot;2.4.0&quot;;
&lt;/script&gt;</textarea>
        </div>
    </div>
    
</div>
<h3>Scripts Vinculados a Arquivos Externos (src)</h3>
<p>Para o desenvolvimento profissional, a imensa maioria do código deve ser organizada em arquivos separados com a extensão <code>.js</code> e carregada pelo atributo <code>src</code>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Carregando Arquivo JavaScript Externo</span><br />
        <span>external-script.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-34855" data-lang="code">
        <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">HTML</span>
                                <span class="wzw-ide-lines-count">2 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-34855', 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-34855', 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;!-- Vinculação de arquivo externo --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;script</span> <span class="wzw-tk-attr">src</span>=<span class="wzw-tk-str">&quot;assets/js/aplicacao.js&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;/script&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Vinculação de arquivo externo --&gt;
&lt;script src=&quot;assets/js/aplicacao.js&quot;&gt;&lt;/script&gt;</textarea>
        </div>
    </div>
    
</div>
<div class="wzw-callout wzw-callout-info">
    <span class="wzw-callout-icon">💡</span></p>
<div class="wzw-callout-text">
        <strong>Vantagens dos Arquivos Externos:</strong> Permitem que os navegadores armazenem o arquivo em <em>cache HTTP</em> (reduzindo o consumo de banda nas visitas seguintes), facilitam a reutilização da mesma lógica em múltiplas páginas do portal e mantêm a arquitetura limpa com a Separação de Preocupações (Separation of Concerns).
    </div>
</div>
<h2>2. Onde Posicionar a Tag &lt;script&gt;: O Problema do Bloqueio de Renderização</h2>
<p>Por padrão, o elemento <code>&lt;script&gt;</code> é um <strong>recurso bloqueador de renderização (parser-blocking)</strong>. Quando o motor do navegador está analisando o HTML (HTML Parsing) e encontra uma tag <code>&lt;script src="..."&gt;</code> tradicional:</p>
<ol>
<li>O navegador <strong>interrompe imediatamente</strong> a leitura do HTML restante.</li>
<li>Inicia o download do arquivo JavaScript pela rede.</li>
<li>Compila e <strong>executa o código</strong> até a última linha.</li>
<li>Somente após o término da execução ele retoma a leitura do HTML restante.</li>
</ol>
<p>Se você colocar um script pesado dentro da tag <code>&lt;head&gt;</code> sem atributos especiais, o usuário ficará olhando para uma tela em branco até que o script seja baixado e executado. Historicamente, os desenvolvedores contornavam isso posicionando os scripts no final da página, logo antes do fechamento da tag <code>&lt;/body&gt;</code>.</p>
<h2>3. Atributos de Alta Performance: defer vs async</h2>
<p>Com o HTML5 moderno, não precisamos mais nos preocupar em empurrar todos os scripts para o rodapé. Os atributos booleanos <code>defer</code> e <code>async</code> permitem carregar arquivos posicionados no <code>&lt;head&gt;</code> sem travar a renderização inicial da página:</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 140px;">Estratégia</th>
<th style="width: 220px;">Comportamento de Download</th>
<th style="width: 220px;">Momento da Execução</th>
<th>Ordem de Execução Garantida?</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Padrão (Sem atributo)</strong></td>
<td>Pausa o HTML imediatamente para baixar.</td>
<td>Executa no mesmo instante, antes de continuar o HTML.</td>
<td>Sim (na ordem em que aparecem no HTML).</td>
</tr>
<tr>
<td><code>async</code></td>
<td>Baixa em segundo plano enquanto o HTML é lido.</td>
<td><strong>Executa imediatamente</strong> assim que o download terminar (pausa o HTML no meio).</td>
<td><strong>Não!</strong> O primeiro arquivo que terminar de baixar será o primeiro a rodar.</td>
</tr>
<tr>
<td><code>defer</code></td>
<td>Baixa em segundo plano enquanto o HTML é lido.</td>
<td><strong>Apenas após o HTML ser 100% lido</strong>, logo antes do evento <code>DOMContentLoaded</code>.</td>
<td><strong>Sim!</strong> Mantém rigorosamente a ordem sequencial declarada.</td>
</tr>
</tbody>
</table>
</div>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🎯</span></p>
<div class="wzw-callout-text">
        <strong>A Regra de Ouro da Indústria:</strong><br />
        <br />• Use <strong><code>defer</code></strong> para scripts da aplicação, bibliotecas de UI e arquivos que dependem do DOM ou de outros scripts (ex: framework, lógica de checkout, menus interativos).<br />
        <br />• Use <strong><code>async</code></strong> exclusivamente para scripts independentes que não dependem de ninguém nem do DOM, como Google Analytics, contadores de estatísticas ou pixels de anúncios.
    </div>
</div>
<h2>4. Módulos JavaScript Modernos: type=&#8221;module&#8221;</h2>
<p>O padrão ES6 introduziu os módulos nativos (ES Modules). Ao adicionar o atributo <code>type="module"</code> à tag script, você ganha suporte nativo às instruções <code>import</code> e <code>export</code> diretamente no navegador, sem a obrigatoriedade de ferramentas de compilação complexas para testes:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Carregando Módulos ES6 com type=&#8221;module&#8221;</span><br />
        <span>modulos.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-66295" data-lang="code">
        <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">HTML</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-66295', 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-66295', 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;!-- Módulos possuem comportamento defer automático por padrão --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;script</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;module&quot;</span> <span class="wzw-tk-attr">src</span>=<span class="wzw-tk-str">&quot;assets/js/principal.js&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;/script&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- Fallback seguro para navegadores obsoletos que não entendem ES6 --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;script</span> <span class="wzw-tk-attr">nomodule</span> <span class="wzw-tk-attr">src</span>=<span class="wzw-tk-str">&quot;assets/js/bundle-legado.js&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;/script&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Módulos possuem comportamento defer automático por padrão --&gt;
&lt;script type=&quot;module&quot; src=&quot;assets/js/principal.js&quot;&gt;&lt;/script&gt;

&lt;!-- Fallback seguro para navegadores obsoletos que não entendem ES6 --&gt;
&lt;script nomodule src=&quot;assets/js/bundle-legado.js&quot;&gt;&lt;/script&gt;</textarea>
        </div>
    </div>
    
</div>
<p>Uma vantagem fantástica de <code>type="module"</code> é que o navegador aplica automaticamente o comportamento de <strong><code>defer</code></strong>: o download ocorre em segundo plano e a execução aguarda a montagem completa da árvore do DOM.</p>
<h2>5. A Tag &lt;noscript&gt;: Degradação Graciosa e Acessibilidade</h2>
<p>Se o usuário desativar o JavaScript por motivos de privacidade ou se estiver utilizando um navegador corporativo ultra-restrito, a tag <code>&lt;noscript&gt;</code> exibe um aviso ou conteúdo alternativo informativo:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Aviso de Degradação Graciosa</span><br />
        <span>noscript.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-20593" data-lang="code">
        <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">HTML</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-20593', 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-20593', 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;noscript&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;alerta-sem-js&quot;</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;background: #fef2f2; color: #991b1b; padding: 15px; border-radius: 8px; border: 1px solid #fecaca;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;strong&gt;</span>Atenção:<span class="wzw-tk-tag">&lt;/strong&gt;</span> Para utilizar os recursos interativos e geradores do Web-ZoneWare, por favor ative o JavaScript no seu navegador.</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;/noscript&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;noscript&gt;
    &lt;div class=&quot;alerta-sem-js&quot; style=&quot;background: #fef2f2; color: #991b1b; padding: 15px; border-radius: 8px; border: 1px solid #fecaca;&quot;&gt;
        &lt;strong&gt;Atenção:&lt;/strong&gt; Para utilizar os recursos interativos e geradores do Web-ZoneWare, por favor ative o JavaScript no seu navegador.
    &lt;/div&gt;
&lt;/noscript&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>6. Exemplo Prático: Calculadora Interativa no Playground IDE</h2>
<p>Abaixo está uma aplicação funcional completa em uma única página, demonstrando a manipulação do DOM e a escuta de eventos com <code>addEventListener</code>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 + CSS3 + JavaScript — Contador Interativo com Manipulação de DOM</span><br />
        <span>contador-interativo.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-72294" data-lang="code">
        <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">HTML</span>
                                <span class="wzw-ide-lines-count">115 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-72294', 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-72294', 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>Contador Dinâmico Web Academy<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: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;</span>
<span class="wzw-code-line">            background: #0f172a;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            display: flex;</span>
<span class="wzw-code-line">            justify-content: center;</span>
<span class="wzw-code-line">            align-items: center;</span>
<span class="wzw-code-line">            min-height: 100vh;</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">        .cartao-contador {</span>
<span class="wzw-code-line">            background: #1e293b;</span>
<span class="wzw-code-line">            padding: 32px 40px;</span>
<span class="wzw-code-line">            border-radius: 16px;</span>
<span class="wzw-code-line">            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            text-align: center;</span>
<span class="wzw-code-line">            width: 300px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .contador-display {</span>
<span class="wzw-code-line">            font-size: 56px;</span>
<span class="wzw-code-line">            font-weight: 800;</span>
<span class="wzw-code-line">            color: #38bdf8;</span>
<span class="wzw-code-line">            margin: 16px 0 24px;</span>
<span class="wzw-code-line">            transition: transform 0.15s ease;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .botoes-grupo {</span>
<span class="wzw-code-line">            display: flex;</span>
<span class="wzw-code-line">            gap: 12px;</span>
<span class="wzw-code-line">            justify-content: center;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .btn-acao {</span>
<span class="wzw-code-line">            background: #334155;</span>
<span class="wzw-code-line">            color: #ffffff;</span>
<span class="wzw-code-line">            border: none;</span>
<span class="wzw-code-line">            padding: 10px 18px;</span>
<span class="wzw-code-line">            border-radius: 8px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            font-size: 16px;</span>
<span class="wzw-code-line">            cursor: pointer;</span>
<span class="wzw-code-line">            transition: all 0.15s ease;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .btn-acao:hover {</span>
<span class="wzw-code-line">            background: #0284c7;</span>
<span class="wzw-code-line">            transform: translateY(-2px);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .btn-acao:active {</span>
<span class="wzw-code-line">            transform: translateY(0);</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">&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;cartao-contador&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">style</span>=<span class="wzw-tk-str">&quot;margin: 0; color: #94a3b8; font-size: 14px; text-transform: uppercase;&quot;</span><span class="wzw-tk-tag">&gt;</span>Contador Web Academy<span class="wzw-tk-tag">&lt;/h3&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;contador-display&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;valor-display&quot;</span><span class="wzw-tk-tag">&gt;</span>0<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;botoes-grupo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;button</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;button&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-acao&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;btn-decrementar&quot;</span><span class="wzw-tk-tag">&gt;</span>- 1<span class="wzw-tk-tag">&lt;/button&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;button</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;button&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-acao&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;btn-zerar&quot;</span><span class="wzw-tk-tag">&gt;</span>Zerar<span class="wzw-tk-tag">&lt;/button&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;button</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;button&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-acao&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;btn-incrementar&quot;</span><span class="wzw-tk-tag">&gt;</span>+ 1<span class="wzw-tk-tag">&lt;/button&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">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Lógica JavaScript posicionada no final do corpo --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;script&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">// Captura das referências aos elementos do DOM</span></span>
<span class="wzw-code-line">        const display = document.getElementById(&quot;valor-display&quot;);</span>
<span class="wzw-code-line">        const btnIncrementar = document.getElementById(&quot;btn-incrementar&quot;);</span>
<span class="wzw-code-line">        const btnDecrementar = document.getElementById(&quot;btn-decrementar&quot;);</span>
<span class="wzw-code-line">        const btnZerar = document.getElementById(&quot;btn-zerar&quot;);</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        let contador = 0;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        function atualizarDisplay() {</span>
<span class="wzw-code-line">            display.textContent = contador;</span>
<span class="wzw-code-line">            if (contador &gt; 0) {</span>
<span class="wzw-code-line">                display.style.color = &quot;#10b981&quot;; // Verde esmeralda para positivos</span>
<span class="wzw-code-line">            } else if (contador &lt; 0) {</span>
<span class="wzw-code-line">                display.style.color = &quot;#ef4444&quot;; // Vermelho rubi para negativos</span>
<span class="wzw-code-line">            } else {</span>
<span class="wzw-code-line">                display.style.color = &quot;#38bdf8&quot;; // Azul ciano para neutro zero</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">// Adição dos ouvintes de eventos (Event Listeners)</span></span>
<span class="wzw-code-line">        btnIncrementar.addEventListener(&quot;click&quot;, () =&gt; {</span>
<span class="wzw-code-line">            contador++;</span>
<span class="wzw-code-line">            atualizarDisplay();</span>
<span class="wzw-code-line">        });</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        btnDecrementar.addEventListener(&quot;click&quot;, () =&gt; {</span>
<span class="wzw-code-line">            contador--;</span>
<span class="wzw-code-line">            atualizarDisplay();</span>
<span class="wzw-code-line">        });</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        btnZerar.addEventListener(&quot;click&quot;, () =&gt; {</span>
<span class="wzw-code-line">            contador = 0;</span>
<span class="wzw-code-line">            atualizarDisplay();</span>
<span class="wzw-code-line">        });</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/script&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;Contador Dinâmico Web Academy&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
            background: #0f172a;
            color: #f8fafc;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            margin: 0;
        }

        .cartao-contador {
            background: #1e293b;
            padding: 32px 40px;
            border-radius: 16px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
            border: 1px solid #334155;
            text-align: center;
            width: 300px;
        }

        .contador-display {
            font-size: 56px;
            font-weight: 800;
            color: #38bdf8;
            margin: 16px 0 24px;
            transition: transform 0.15s ease;
        }

        .botoes-grupo {
            display: flex;
            gap: 12px;
            justify-content: center;
        }

        .btn-acao {
            background: #334155;
            color: #ffffff;
            border: none;
            padding: 10px 18px;
            border-radius: 8px;
            font-weight: 700;
            font-size: 16px;
            cursor: pointer;
            transition: all 0.15s ease;
        }

        .btn-acao:hover {
            background: #0284c7;
            transform: translateY(-2px);
        }

        .btn-acao:active {
            transform: translateY(0);
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;div class=&quot;cartao-contador&quot;&gt;
        &lt;h3 style=&quot;margin: 0; color: #94a3b8; font-size: 14px; text-transform: uppercase;&quot;&gt;Contador Web Academy&lt;/h3&gt;
        &lt;div class=&quot;contador-display&quot; id=&quot;valor-display&quot;&gt;0&lt;/div&gt;

        &lt;div class=&quot;botoes-grupo&quot;&gt;
            &lt;button type=&quot;button&quot; class=&quot;btn-acao&quot; id=&quot;btn-decrementar&quot;&gt;- 1&lt;/button&gt;
            &lt;button type=&quot;button&quot; class=&quot;btn-acao&quot; id=&quot;btn-zerar&quot;&gt;Zerar&lt;/button&gt;
            &lt;button type=&quot;button&quot; class=&quot;btn-acao&quot; id=&quot;btn-incrementar&quot;&gt;+ 1&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Lógica JavaScript posicionada no final do corpo --&gt;
    &lt;script&gt;
        // Captura das referências aos elementos do DOM
        const display = document.getElementById(&quot;valor-display&quot;);
        const btnIncrementar = document.getElementById(&quot;btn-incrementar&quot;);
        const btnDecrementar = document.getElementById(&quot;btn-decrementar&quot;);
        const btnZerar = document.getElementById(&quot;btn-zerar&quot;);

        let contador = 0;

        function atualizarDisplay() {
            display.textContent = contador;
            if (contador &gt; 0) {
                display.style.color = &quot;#10b981&quot;; // Verde esmeralda para positivos
            } else if (contador &lt; 0) {
                display.style.color = &quot;#ef4444&quot;; // Vermelho rubi para negativos
            } else {
                display.style.color = &quot;#38bdf8&quot;; // Azul ciano para neutro zero
            }
        }

        // Adição dos ouvintes de eventos (Event Listeners)
        btnIncrementar.addEventListener(&quot;click&quot;, () =&gt; {
            contador++;
            atualizarDisplay();
        });

        btnDecrementar.addEventListener(&quot;click&quot;, () =&gt; {
            contador--;
            atualizarDisplay();
        });

        btnZerar.addEventListener(&quot;click&quot;, () =&gt; {
            contador = 0;
            atualizarDisplay();
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
        <span class="wzw-playground-desc">Teste e modifique este aplicativo interativo em tempo real no nosso ambiente oficial:</span><br />
        <a href="/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Testar no Playground IDE</a>
    </div>
</div>
<h2>7. Boas Práticas, Segurança e Core Web Vitals</h2>
<ul>
<li><strong>Proteja Scripts de Terceiros com SRI (Subresource Integrity):</strong> Ao carregar bibliotecas externas de redes CDN (como Tailwind, Chart.js ou Bootstrap), use sempre os atributos <code>integrity</code> e <code>crossorigin</code> com hashes SHA-384 ou SHA-512. Se a CDN for comprometida por cibercriminosos, o navegador se recusará a executar o arquivo adulterado.</li>
<li><strong>Otimize o INP (Interaction to Next Paint):</strong> Evite scripts longos que travam a thread principal (Long Tasks maiores que 50ms). Divida execuções densas com <code>requestAnimationFrame()</code> ou Web Workers.</li>
<li><strong>Nunca Armazene Chaves Secretas no Código do Navegador:</strong> Qualquer variável ou credencial escrita em arquivos <code>.js</code> é visível a qualquer usuário através do Inspecionar Elemento (DevTools).</li>
<li><strong>Minifique Seus Scripts de Produção:</strong> Sempre remova comentários, quebras de linha e espaços em branco utilizando o <a href="/web-ferramentas/html-cleaner/" target="_blank" rel="noopener">HTML Cleaner &#038; Formatador</a> do Web-ZoneWare antes de subir seus arquivos para a hospedagem.</li>
</ul>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🚀</span></p>
<div class="wzw-callout-text">
        <strong>Próximo Passo Didático:</strong> Na <strong>Lição 23: Entidades de Caracteres Especiais</strong>, aprenderemos como o HTML renderiza símbolos reservados como <code>&amp;lt;</code>, <code>&amp;gt;</code>, marcas registradas, símbolos monetários internacionais e como evitar a quebra visual de acentuações no navegador.
    </div>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/scripts-javascript-no-html/">Scripts no HTML: Tag script, Defer e Async | 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-html/scripts-javascript-no-html/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
