<?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 can i use html5 - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/can-i-use-html5/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/can-i-use-html5/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Wed, 21 Oct 2026 02:51:10 +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 can i use html5 - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/can-i-use-html5/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Suporte de Navegadores ao HTML5: Guia e Can I Use &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 02:51:10 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[can i use html5]]></category>
		<category><![CDATA[compatibilidade cross-browser]]></category>
		<category><![CDATA[feature detection javascript]]></category>
		<category><![CDATA[polyfills html5]]></category>
		<category><![CDATA[suporte de navegadores ao html5]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29317</guid>

					<description><![CDATA[<p>No ecossistema global da internet, os usuários navegam por meio de uma variedade imensa de motores e dispositivos: Google Chrome e Microsoft Edge (baseados em Chromium), Apple Safari no iOS e macOS (baseado em WebKit) e Mozilla Firefox (baseado em Gecko). Embora os navegadores modernos estejam amplamente sincronizados com o padrão Living Standard do HTML5, [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/">Suporte de Navegadores ao HTML5: Guia e Can I Use | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">No ecossistema global da internet, os usuários navegam por meio de uma variedade imensa de motores e dispositivos: Google Chrome e Microsoft Edge (baseados em Chromium), Apple Safari no iOS e macOS (baseado em WebKit) e Mozilla Firefox (baseado em Gecko). Embora os navegadores modernos estejam amplamente sincronizados com o padrão Living Standard do HTML5, nem todos os recursos, codecs de vídeo e APIs avançadas são implementados ao mesmo tempo. Compreender o <strong>suporte de navegadores ao HTML5</strong>, consultar o <em>Can I Use</em> e dominar a técnica de <strong>Detecção de Recursos (Feature Detection)</strong> é indispensável para criar aplicações robustas e livres de falhas visuais.</p>
<h2>1. O Ecossistema Cross-Browser e o Papel do Can I Use</h2>
<p>Antigamente, desenvolvedores recorriam à tentativa e erro para descobrir se uma tag funcionava em determinado navegador. Hoje, a plataforma de referência mundial para auditoria de compatibilidade é o <strong>Can I Use (caniuse.com)</strong>.</p>
<p>Ao pesquisar qualquer elemento, seletor CSS ou API do HTML5 no Can I Use, a ferramenta fornece a porcentagem exata de suporte global (Global Usage) e divide a compatibilidade em um código de cores universal:</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 140px;">Indicador</th>
<th style="width: 160px;">Significado no Can I Use</th>
<th>Conduta Recomendada na Engenharia de Software</th>
</tr>
</thead>
<tbody>
<tr>
<td><span style="display:inline-block; padding: 2px 8px; border-radius: 4px; background: #166534; color: #ffffff; font-weight: 700; font-size: 12px;">Verde (Supported)</span></td>
<td>Suporte nativo pleno e estável.</td>
<td>Pode ser utilizado em produção imediatamente sem polyfills adicionais (se a cobertura global for superior a 95%).</td>
</tr>
<tr>
<td><span style="display:inline-block; padding: 2px 8px; border-radius: 4px; background: #854d0e; color: #ffffff; font-weight: 700; font-size: 12px;">Amarelo (Partial)</span></td>
<td>Suporte parcial ou com prefixo de fornecedor.</td>
<td>Requer testes em dispositivos reais (especialmente no Safari iOS) e fallbacks defensivos de segurança.</td>
</tr>
<tr>
<td><span style="display:inline-block; padding: 2px 8px; border-radius: 4px; background: #991b1b; color: #ffffff; font-weight: 700; font-size: 12px;">Vermelho (Not supported)</span></td>
<td>Recurso inexistente naquela versão.</td>
<td>Obrigatório implementar um <strong>Polyfill</strong> ou fornecer uma alternativa funcional graciosa.</td>
</tr>
</tbody>
</table>
</div>
<h2>2. Detecção de Recursos (Feature Detection) vs User-Agent Sniffing</h2>
<p>Durante muito tempo, programadores tentavam inspecionar o texto da string <code>navigator.userAgent</code> para adivinhar o navegador do usuário (prática conhecida como <em>User-Agent Sniffing</em>). Essa técnica é considerada um <strong>grave anti-pattern</strong> por três motivos:</p>
<ol>
<li>O <code>userAgent</code> pode ser facilmente alterado ou mascarado pelo usuário ou por extensões de privacidade.</li>
<li>Navegadores modernos frequentemente copiam partes de outros agentes para evitar bloqueios indevidos (o Chrome inclui &#8220;Safari&#8221; e o Edge inclui &#8220;Chrome&#8221; em seus user-agents).</li>
<li>A cada nova versão do navegador lançada, a lógica de checagem quebra.</li>
</ol>
<div class="wzw-callout wzw-callout-info">
    <span class="wzw-callout-icon">💡</span></p>
<div class="wzw-callout-text">
        <strong>A Abordagem Moderna: Feature Detection:</strong> Em vez de perguntar ao navegador <em>&#8220;Qual é o seu nome?&#8221;</em>, a engenharia moderna pergunta: <em>&#8220;Você consegue executar este recurso específico?&#8221;</em>. Testa-se diretamente a existência da propriedade ou método no JavaScript antes de invocá-lo.
    </div>
</div>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>JavaScript — Exemplos Canônicos de Feature Detection</span><br />
        <span>feature-detection.js</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-45866" 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">JavaScript</span>
                                <span class="wzw-ide-lines-count">24 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-45866', 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-45866', 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">// 1. Verificando suporte à API de Geolocalização</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">if</span> (<span class="wzw-tk-str">&quot;geolocation&quot;</span> in navigator) {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Seguro para solicitar coordenadas do usuário</span></span>
<span class="wzw-code-line">    navigator.geolocation.<span class="wzw-tk-fn">getCurrentPosition</span>(sucesso, erro);</span>
<span class="wzw-code-line">} <span class="wzw-tk-kw">else</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Fornece um campo de CEP / endereço manual alternativo</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-fn">exibirCampoCepManual</span>();</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">// 2. Verificando suporte ao Web Storage (localStorage)</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">if</span> (<span class="wzw-tk-kw">typeof</span> Storage !== <span class="wzw-tk-str">&quot;undefined&quot;</span>) {</span>
<span class="wzw-code-line">    localStorage.<span class="wzw-tk-fn">setItem</span>(<span class="wzw-tk-str">&quot;tema_wzw&quot;</span>, <span class="wzw-tk-str">&quot;dark&quot;</span>);</span>
<span class="wzw-code-line">} <span class="wzw-tk-kw">else</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Fallback defensivo com cookies tradicionais</span></span>
<span class="wzw-code-line">    document.cookie = <span class="wzw-tk-str">&quot;tema_wzw=dark; path=/&quot;</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">// 3. Verificando suporte nativo à tag &lt;dialog&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">if</span> (<span class="wzw-tk-kw">typeof</span> HTMLDialogElement === <span class="wzw-tk-str">&quot;function&quot;</span>) {</span>
<span class="wzw-code-line">    modal.<span class="wzw-tk-fn">showModal</span>();</span>
<span class="wzw-code-line">} <span class="wzw-tk-kw">else</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Abre modal alternativo controlado por classes CSS</span></span>
<span class="wzw-code-line">    modal.classList.<span class="wzw-tk-fn">add</span>(<span class="wzw-tk-str">&quot;modal-aberto&quot;</span>);</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>// 1. Verificando suporte à API de Geolocalização
if (&quot;geolocation&quot; in navigator) {
    // Seguro para solicitar coordenadas do usuário
    navigator.geolocation.getCurrentPosition(sucesso, erro);
} else {
    // Fornece um campo de CEP / endereço manual alternativo
    exibirCampoCepManual();
}

// 2. Verificando suporte ao Web Storage (localStorage)
if (typeof Storage !== &quot;undefined&quot;) {
    localStorage.setItem(&quot;tema_wzw&quot;, &quot;dark&quot;);
} else {
    // Fallback defensivo com cookies tradicionais
    document.cookie = &quot;tema_wzw=dark; path=/&quot;;
}

// 3. Verificando suporte nativo à tag &lt;dialog&gt;
if (typeof HTMLDialogElement === &quot;function&quot;) {
    modal.showModal();
} else {
    // Abre modal alternativo controlado por classes CSS
    modal.classList.add(&quot;modal-aberto&quot;);
}</textarea>
        </div>
    </div>
    
</div>
<h2>3. O Que São Polyfills e Como Devem Ser Utilizados?</h2>
<p>Um <strong>Polyfill</strong> é um trecho de código JavaScript que replica artificialmente uma API moderna do HTML5 em um navegador que ainda não a suporta de forma nativa.</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 180px;">Recurso do HTML5</th>
<th style="width: 220px;">Cenário sem Suporte</th>
<th>Como o Polyfill Atua</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>HTML5 Shiv (Histórico)</code></td>
<td>Internet Explorer 8 e anteriores não reconheciam tags como <code>&lt;main&gt;</code> e <code>&lt;section&gt;</code>.</td>
<td>Injetava nós fictícios no DOM via script para que o IE permitisse aplicar estilos CSS nas novas tags.</td>
</tr>
<tr>
<td><code>IntersectionObserver</code></td>
<td>Navegadores legados não calculavam se uma imagem entrou na tela para Lazy Loading.</td>
<td>Escuta eventos de <code>scroll</code> com <em>throttle</em> para disparar o carregamento das imagens no momento certo.</td>
</tr>
<tr>
<td><code>Dialog Element (&lt;dialog&gt;)</code></td>
<td>Navegadores antigos ignoravam o método <code>showModal()</code>.</td>
<td>Simula a janela modal flutuante e o <code>::backdrop</code> via camadas absolutas e manipulação de foco.</td>
</tr>
</tbody>
</table>
</div>
<h2>4. Progressive Enhancement vs Graceful Degradation</h2>
<p>Ao planejar a compatibilidade do seu site, duas filosofias arquiteturais orientam as decisões da equipe:</p>
<ul>
<li><strong>Melhoria Progressiva (Progressive Enhancement):</strong> Inicia-se com a base mais simples e sólida (HTML semântico e formulários puros que funcionam até em conexões 3G e navegadores simplificados). Em seguida, adicionam-se camadas de CSS3 elegante e, por fim, enriquecimentos com APIs do HTML5 caso o navegador demonstre capacidade. É a estratégia recomendada por órgãos de acessibilidade.</li>
<li><strong>Degradação Graciosa (Graceful Degradation):</strong> Projeta-se a experiência de ponta para a versão mais recente do navegador principal da sua persona. Caso o usuário acerte o site com um software antigo, a interface simplifica o recurso (por exemplo, exibindo um campo de texto comum no lugar de um seletor de data complexo), mas mantém a tarefa executável.</li>
</ul>
<h2>5. Exemplo Prático: Inspetor de Recursos HTML5 no Playground IDE</h2>
<p>O aplicativo abaixo executa uma bateria de testes de <em>Feature Detection</em> em tempo real diretamente no seu navegador, listando o status de suporte das principais APIs do HTML5:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 + CSS3 + JavaScript — Inspetor de Suporte em Tempo Real</span><br />
        <span>html5-auditor.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-57323" 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">120 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-57323', 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-57323', 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>Auditor de Suporte HTML5 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">            padding: 30px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .card-auditor {</span>
<span class="wzw-code-line">            max-width: 760px;</span>
<span class="wzw-code-line">            margin: 0 auto;</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: 28px;</span>
<span class="wzw-code-line">            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .tabela-recursos {</span>
<span class="wzw-code-line">            width: 100%;</span>
<span class="wzw-code-line">            border-collapse: collapse;</span>
<span class="wzw-code-line">            margin-top: 20px;</span>
<span class="wzw-code-line">            font-size: 14px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .tabela-recursos th, .tabela-recursos td {</span>
<span class="wzw-code-line">            padding: 12px 16px;</span>
<span class="wzw-code-line">            text-align: left;</span>
<span class="wzw-code-line">            border-bottom: 1px solid #334155;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .tabela-recursos th {</span>
<span class="wzw-code-line">            color: #94a3b8;</span>
<span class="wzw-code-line">            font-size: 12px;</span>
<span class="wzw-code-line">            text-transform: uppercase;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .badge-sucesso {</span>
<span class="wzw-code-line">            background: #065f46;</span>
<span class="wzw-code-line">            color: #a7f3d0;</span>
<span class="wzw-code-line">            padding: 3px 8px;</span>
<span class="wzw-code-line">            border-radius: 4px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            font-size: 11px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .badge-falha {</span>
<span class="wzw-code-line">            background: #991b1b;</span>
<span class="wzw-code-line">            color: #fecaca;</span>
<span class="wzw-code-line">            padding: 3px 8px;</span>
<span class="wzw-code-line">            border-radius: 4px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            font-size: 11px;</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;card-auditor&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h2</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin-top:0; color:#38bdf8;&quot;</span><span class="wzw-tk-tag">&gt;</span>Inspetor de Recursos HTML5 em Tempo Real<span class="wzw-tk-tag">&lt;/h2&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#94a3b8;&quot;</span><span class="wzw-tk-tag">&gt;</span>Resultado da auditoria executada diretamente no motor do seu navegador atual:<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;table</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;tabela-recursos&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;thead&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;tr&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;th&gt;</span>API / Recurso do HTML5<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;th&gt;</span>Propriedade Inspecionada<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;th</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;text-align: right;&quot;</span><span class="wzw-tk-tag">&gt;</span>Status no Navegador<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;/tr&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/thead&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;tbody</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;corpo-auditoria&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-comment">&lt;!-- Preenchido via JavaScript nativo --&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/tbody&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/table&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;script&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">// Bateria de testes de Feature Detection</span></span>
<span class="wzw-code-line">        const testes = [</span>
<span class="wzw-code-line">            { nome: &quot;Canvas 2D Graphics&quot;, prop: &quot;HTMLCanvasElement&quot;, suportado: !!window.CanvasRenderingContext2D },</span>
<span class="wzw-code-line">            { nome: &quot;Geolocalização Nativa&quot;, prop: &quot;navigator.geolocation&quot;, suportado: &quot;geolocation&quot; in navigator },</span>
<span class="wzw-code-line">            { nome: &quot;Web Storage (localStorage)&quot;, prop: &quot;window.localStorage&quot;, suportado: typeof Storage !== &quot;undefined&quot; },</span>
<span class="wzw-code-line">            { nome: &quot;Web Workers (Multithread)&quot;, prop: &quot;window.Worker&quot;, suportado: typeof Worker !== &quot;undefined&quot; },</span>
<span class="wzw-code-line">            { nome: &quot;WebSockets (Tempo Real)&quot;, prop: &quot;window.WebSocket&quot;, suportado: &quot;WebSocket&quot; in window },</span>
<span class="wzw-code-line">            { nome: &quot;Service Workers (PWA / Offline)&quot;, prop: &quot;navigator.serviceWorker&quot;, suportado: &quot;serviceWorker&quot; in navigator }</span>
<span class="wzw-code-line">        ];</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        const tbody = document.getElementById(&quot;corpo-auditoria&quot;);</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        testes.forEach(t =&gt; {</span>
<span class="wzw-code-line">            const tr = document.createElement(&quot;tr&quot;);</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            const tdNome = document.createElement(&quot;td&quot;);</span>
<span class="wzw-code-line">            tdNome.innerHTML = `<span class="wzw-tk-tag">&lt;strong&gt;</span>${t.nome}<span class="wzw-tk-tag">&lt;/strong&gt;</span>`;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            const tdProp = document.createElement(&quot;td&quot;);</span>
<span class="wzw-code-line">            tdProp.innerHTML = `<span class="wzw-tk-tag">&lt;code</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#7dd3fc;&quot;</span><span class="wzw-tk-tag">&gt;</span>${t.prop}<span class="wzw-tk-tag">&lt;/code&gt;</span>`;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            const tdStatus = document.createElement(&quot;td&quot;);</span>
<span class="wzw-code-line">            tdStatus.style.textAlign = &quot;right&quot;;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            if (t.suportado) {</span>
<span class="wzw-code-line">                tdStatus.innerHTML = `<span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;badge-sucesso&quot;</span><span class="wzw-tk-tag">&gt;</span>&amp;#10003; Suportado<span class="wzw-tk-tag">&lt;/span&gt;</span>`;</span>
<span class="wzw-code-line">            } else {</span>
<span class="wzw-code-line">                tdStatus.innerHTML = `<span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;badge-falha&quot;</span><span class="wzw-tk-tag">&gt;</span>&amp;#10007; Não Suportado<span class="wzw-tk-tag">&lt;/span&gt;</span>`;</span>
<span class="wzw-code-line">            }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            tr.appendChild(tdNome);</span>
<span class="wzw-code-line">            tr.appendChild(tdProp);</span>
<span class="wzw-code-line">            tr.appendChild(tdStatus);</span>
<span class="wzw-code-line">            tbody.appendChild(tr);</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;Auditor de Suporte HTML5 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;
            padding: 30px;
        }

        .card-auditor {
            max-width: 760px;
            margin: 0 auto;
            background: #1e293b;
            border: 1px solid #334155;
            border-radius: 16px;
            padding: 28px;
            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
        }

        .tabela-recursos {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
            font-size: 14px;
        }

        .tabela-recursos th, .tabela-recursos td {
            padding: 12px 16px;
            text-align: left;
            border-bottom: 1px solid #334155;
        }

        .tabela-recursos th {
            color: #94a3b8;
            font-size: 12px;
            text-transform: uppercase;
        }

        .badge-sucesso {
            background: #065f46;
            color: #a7f3d0;
            padding: 3px 8px;
            border-radius: 4px;
            font-weight: 700;
            font-size: 11px;
        }

        .badge-falha {
            background: #991b1b;
            color: #fecaca;
            padding: 3px 8px;
            border-radius: 4px;
            font-weight: 700;
            font-size: 11px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;div class=&quot;card-auditor&quot;&gt;
        &lt;h2 style=&quot;margin-top:0; color:#38bdf8;&quot;&gt;Inspetor de Recursos HTML5 em Tempo Real&lt;/h2&gt;
        &lt;p style=&quot;color:#94a3b8;&quot;&gt;Resultado da auditoria executada diretamente no motor do seu navegador atual:&lt;/p&gt;

        &lt;table class=&quot;tabela-recursos&quot;&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;API / Recurso do HTML5&lt;/th&gt;
                    &lt;th&gt;Propriedade Inspecionada&lt;/th&gt;
                    &lt;th style=&quot;text-align: right;&quot;&gt;Status no Navegador&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody id=&quot;corpo-auditoria&quot;&gt;
                &lt;!-- Preenchido via JavaScript nativo --&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // Bateria de testes de Feature Detection
        const testes = [
            { nome: &quot;Canvas 2D Graphics&quot;, prop: &quot;HTMLCanvasElement&quot;, suportado: !!window.CanvasRenderingContext2D },
            { nome: &quot;Geolocalização Nativa&quot;, prop: &quot;navigator.geolocation&quot;, suportado: &quot;geolocation&quot; in navigator },
            { nome: &quot;Web Storage (localStorage)&quot;, prop: &quot;window.localStorage&quot;, suportado: typeof Storage !== &quot;undefined&quot; },
            { nome: &quot;Web Workers (Multithread)&quot;, prop: &quot;window.Worker&quot;, suportado: typeof Worker !== &quot;undefined&quot; },
            { nome: &quot;WebSockets (Tempo Real)&quot;, prop: &quot;window.WebSocket&quot;, suportado: &quot;WebSocket&quot; in window },
            { nome: &quot;Service Workers (PWA / Offline)&quot;, prop: &quot;navigator.serviceWorker&quot;, suportado: &quot;serviceWorker&quot; in navigator }
        ];

        const tbody = document.getElementById(&quot;corpo-auditoria&quot;);

        testes.forEach(t =&gt; {
            const tr = document.createElement(&quot;tr&quot;);

            const tdNome = document.createElement(&quot;td&quot;);
            tdNome.innerHTML = `&lt;strong&gt;${t.nome}&lt;/strong&gt;`;

            const tdProp = document.createElement(&quot;td&quot;);
            tdProp.innerHTML = `&lt;code style=&quot;color:#7dd3fc;&quot;&gt;${t.prop}&lt;/code&gt;`;

            const tdStatus = document.createElement(&quot;td&quot;);
            tdStatus.style.textAlign = &quot;right&quot;;

            if (t.suportado) {
                tdStatus.innerHTML = `&lt;span class=&quot;badge-sucesso&quot;&gt;&amp;#10003; Suportado&lt;/span&gt;`;
            } else {
                tdStatus.innerHTML = `&lt;span class=&quot;badge-falha&quot;&gt;&amp;#10007; Não Suportado&lt;/span&gt;`;
            }

            tr.appendChild(tdNome);
            tr.appendChild(tdProp);
            tr.appendChild(tdStatus);
            tbody.appendChild(tr);
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
        <span class="wzw-playground-desc">Execute este inspetor interativo e teste diferentes simulações no Playground:</span><br />
        <a href="/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Testar no Playground IDE</a>
    </div>
</div>
<h2>6. Boas Práticas para Blindagem de Código em Produção</h2>
<ul>
<li><strong>Use a Regra @supports no CSS:</strong> Antes de utilizar recursos avançados de layout (como Subgrid ou Backdrop-filter), condicione a regra ao suporte do navegador:
    <div class="wzw-ide-card" id="wzw-code-51757" 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">CSS</span>
                                <span class="wzw-ide-lines-count">9 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-51757', 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-51757', 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-backdrop {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">background</span>: rgba(15, 23, 42, 0.85); /* Fallback tradicional */</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@supports</span> (backdrop-filter: blur(<span class="wzw-tk-num">10px</span>)) {</span>
<span class="wzw-code-line">    .modal-backdrop {</span>
<span class="wzw-code-line">        <span class="wzw-tk-attr">background</span>: rgba(15, 23, 42, 0.5);</span>
<span class="wzw-code-line">        <span class="wzw-tk-attr">backdrop-filter</span>: blur(<span class="wzw-tk-num">10px</span>);</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.modal-backdrop {
    background: rgba(15, 23, 42, 0.85); /* Fallback tradicional */
}
@supports (backdrop-filter: blur(10px)) {
    .modal-backdrop {
        background: rgba(15, 23, 42, 0.5);
        backdrop-filter: blur(10px);
    }
}</textarea>
        </div>
    </div>
    
</li>
<li><strong>Não Carregue Polyfills Pesados Para Quem Não Precisa:</strong> Carregar polyfills universais para 100% dos usuários penaliza o tempo de carregamento no celular de quem já usa navegadores modernos. Utilize carregamento condicional dinâmico (com <code>import()</code> dinâmico).</li>
<li><strong>Consulte Ferramentas Nativas de Otimização:</strong> Sempre formate e valide suas estruturas utilizando o <a href="/web-ferramentas/html-cleaner/" target="_blank" rel="noopener">Limpador e Formatador HTML</a> do Web-ZoneWare.</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 29: Novos Elementos Estruturais</strong>, faremos uma imersão profunda nos elementos semânticos que organizam o esqueleto de páginas profissionais: <code>&lt;section&gt;</code>, <code>&lt;article&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;aside&gt;</code>, <code>&lt;figure&gt;</code> e <code>&lt;dialog&gt;</code>, aprendendo como eliminar a &#8220;divite&#8221; e criar hierarquias perfeitas para SEO e acessibilidade.
    </div>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/">Suporte de Navegadores ao HTML5: Guia e Can I Use | 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/suporte-de-navegadores-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
