<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ HTML - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ HTML - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 08:43:26 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/html/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Elementos em linha e elementos de bloco em HTML explicados ]]>
                </title>
                <description>
                    <![CDATA[ Elementos de bloco e em linha Vamos entender os elementos de bloco e os elementos em linha usando os exemplos abaixo: Exemplo de código e resultados: Elementos de bloco: Um elemento de bloco (em inglês, block) ocupa todo o espaço do pai (contêiner), como <div> e <p> no exemplo. Note ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/elementos-em-linha-e-elementos-de-bloco-em-html-explicados/</link>
                <guid isPermaLink="false">66e73378275cfd04091357e5</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 19 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/5f9c9cad740569d1a4ca338e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/inline-elements-and-block-elements-in-html-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Inline Elements and Block Elements in HTML - Explained</a>
      </p><h2 id="elementos-de-bloco-e-em-linha"><strong>Elementos de bloco e em linha</strong></h2><p>Vamos entender os elementos de bloco e os elementos em linha usando os exemplos abaixo:</p><h4 id="exemplo-de-c-digo-e-resultados-"><strong>Exemplo de código e resultados:</strong></h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d.png" class="kg-image" alt="31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d.png 920w" sizes="(min-width: 720px) 720px" width="920" height="521" loading="lazy"></figure><h3 id="elementos-de-bloco-">Elementos de bloco:</h3><p>Um elemento de bloco (em inglês, <em>block</em>) ocupa todo o espaço do pai (contêiner), como <code>&lt;div&gt;</code> e <code>&lt;p&gt;</code> no exemplo.</p><p>Note que ambos, <code>&lt;div&gt;</code> e <code>&lt;p&gt;</code>, começam em uma nova linha, formando uma estrutura <strong>semelhante a um bloco</strong>. Elementos de bloco começam em novas linhas.</p><p>Elementos de <strong>bloco</strong> comuns são <code>&lt;div&gt;</code>, <code>&lt;p&gt;</code>, <code>&lt;article&gt;</code>, <code>&lt;section&gt;</code>, <code>&lt;figure&gt;</code>, <code>&lt;footer&gt;</code> etc.</p><h3 id="elementos-em-linha-">Elementos em linha:</h3><p>Elementos em linha (em inglês, <em>inline</em>), como o nome diz, estão "incluídos como parte do texto principal e não como uma seção separada". Elementos em linha ocupam o espaço conforme necessário dentro do espaço definido pelo elemento principal. Diferentemente dos elementos de bloco, eles não começam em novas linhas.</p><p>Alguns dos elementos <strong>em linha</strong> são <code>&lt;a&gt;</code>, <code>&lt;span&gt;</code>, <code>&lt;img&gt;</code>, <code>&lt;code&gt;</code>, <code>&lt;cite&gt;</code>, <code>&lt;button&gt;</code>, <code>&lt;input&gt;</code> etc.</p><h3 id="exemplo-de-c-digo-e-resultados--1">Exemplo de código e resultados:</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52.png" class="kg-image" alt="31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52.png 912w" sizes="(min-width: 720px) 720px" width="912" height="506" loading="lazy"></figure><p><strong><em>Observação</em></strong>: elementos de bloco podem conter outros elementos de bloco ou elementos em linha. Elementos em linha <strong>não podem</strong> conter elementos de bloco.</p><h3 id="mudan-as-no-html5">Mudanças no HTML5</h3><p>Embora a compreensão dos elementos de bloco e em linha ainda seja relevante, você deve estar ciente de que esses termos foram definidos em versões anteriores da especificação do HTML.</p><p>No HTML5, um conjunto mais complexo de "categorias de conteúdo" substitui os elementos de nível bloco e em linha. Elementos de bloco são amplamente colocados na categoria "conteúdo de fluxo" no HTML5, enquanto os elementos em linha correspondem à categoria "conteúdo de frase".</p><p>Para mais informações sobre as novas categorias de conteúdo no HTML5, incluindo o conteúdo de fluxo e o conteúdo de frase, consulte a <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Content_categories">página de categorias de conteúdo na Mozilla Developer Network</a>.</p><p>Leia mais sobre o HTML <a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/">aqui</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Lista em HTML – como usar marcadores, listas ordenadas e não ordenadas ]]>
                </title>
                <description>
                    <![CDATA[ Listar itens em uma página da web é uma tarefa comum que você terá que fazer como desenvolvedor para a web. Você pode ter que listar os itens do carrinho de compras, a ordem dos alunos com base em suas notas, os cães com o latido mais alto e assim ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/lista-em-html-como-usar-marcadores-listas-ordenadas-e-nao-ordenadas/</link>
                <guid isPermaLink="false">66b5c62f050d6c03fd8b37a7</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Fri, 09 Aug 2024 08:34:50 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/freeCodeCamp-Cover-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/html-list-how-to-use-bullet-points-ordered-and-unordered-lists/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML List – How to Use Bullet Points, Ordered, and Unordered Lists</a>
      </p><p>Listar itens em uma página da web é uma tarefa comum que você terá que fazer como desenvolvedor para a web. Você pode ter que listar os itens do carrinho de compras, a ordem dos alunos com base em suas notas, os cães com o latido mais alto e assim por diante.</p><p>Portanto, você precisa conhecer as diferentes maneiras de listar itens usando HTML. Embora você possa pensar que é algo simples de aprender, é importante. Também é um dos recursos mais usados do HTML no desenvolvimento para a web.</p><p>Neste artigo, você aprenderá tudo sobre elementos de listagem do HTML, suas propriedades, estilo e como realmente usá-los para criar listas organizadas. Espero que você ache útil.</p><h1 id="como-criar-listas-em-html"><strong>Como criar listas em HTML</strong></h1><p>Em HTML, podemos listar itens de maneira ordenada ou não ordenada.</p><p>Uma lista ordenada usa números ou algum tipo de notação que indica uma série de itens.</p><p>Por exemplo, uma lista ordenada pode começar com o número 1 e continuar com 2, 3, 4 e assim por diante. Sua lista ordenada também pode começar com a letra A e continuar com B, C, D e assim por diante.</p><p>Aqui está um exemplo de uma lista ordenada com os nomes e notas de alunos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/ordered-1.png" class="kg-image" alt="ordered-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/ordered-1.png 600w" width="600" height="400" loading="lazy"><figcaption>Lista ordenada de alunos</figcaption></figure><p>Por outro lado, temos as listas não ordenadas, como as listas de tarefas, por exemplo. Aqui, vemos que gosto tanto de programar que até esqueci do meu café da manhã 🤓.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/unordered-1.png" class="kg-image" alt="unordered-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/unordered-1.png 600w" width="600" height="400" loading="lazy"><figcaption>Lista de tarefas não ordenada</figcaption></figure><p>Existe mais um tipo de lista, chamado de <code>lista de descrições</code>, o qual veremos mais adiante.</p><p>Vamos, agora, entrar em mais detalhes sobre a criação de cada tipo de lista em HTML.</p><h1 id="como-criar-uma-lista-ordenada-em-html"><strong>Como criar uma lista ordenada em HTML</strong></h1><p>Em HTML, podemos criar uma lista ordenada usando a tag &lt;ol&gt;. O ol na tag vem do inglês <em>ordered list</em>, que em português quer dizer <strong>lista ordenada. Dentro de cada um dos elementos ordenados da lista que fica entre as tags &lt;ol&gt; e &lt;/ol&gt;, temos que definir os itens da lista. Podemos definir os itens da lista usando as tags &lt;li&gt; e &lt;/li&gt;.</strong></p><p>Aqui está a estrutura HTML completa para uma lista ordenada:</p><pre><code class="language-html">&lt;ol&gt;
  &lt;li&gt;Comer&lt;/li&gt;
  &lt;li&gt;Programar&lt;/li&gt;
  &lt;li&gt;Dormir&lt;/li&gt;
&lt;/ol&gt;</code></pre><p>O resultado da lista ordenada acima seria:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-4.png" class="kg-image" alt="image-4" width="242" height="137" loading="lazy"></figure><p>Assim, temos a lista de elementos ordenada, com um número começando por um 1 e aumentando de 1 em 1 – para 2 e 3. Dê uma olhada neste CodePen e veja se consegue alterar a lista e brincar um pouco com ela usando <code>ol</code> e <code>li</code>.</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_gOWpbMK" src="https://codepen.io/atapas/embed/preview/gOWpbMK?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=gOWpbMK" title="Ordered List" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Lista ordenada de itens</figcaption></figure><h3 id="tipos-de-listas-ordenadas-em-html"><strong>Tipos de listas ordenadas em HTML</strong></h3><p>Caso você não queira ordenar sua lista por números, pode ordená-la usando o alfabeto, como A, B, C ou a, b, c, por exemplo. Você pode fazer isso especificando o valor do atributo <code>type</code> da tag <code>&lt;ol&gt;</code>.</p><p>Você pode ordenar a lista usando as letras A, B, C passando A como o valor do tipo.</p><pre><code class="language-html">&lt;ol type="A"&gt;
  &lt;li&gt;Comer&lt;/li&gt;
  &lt;li&gt;Programar&lt;/li&gt;
  &lt;li&gt;Dormir&lt;/li&gt;
&lt;/ol&gt;</code></pre><p>O resultado terá esta aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-5.png" class="kg-image" alt="image-5" width="193" height="123" loading="lazy"></figure><p>Da mesma maneira, você pode usar letras minúsculas, como <code>a</code> para o valor de <code>type</code> para listar os elementos com a, b, c e assim por diante.</p><pre><code class="language-html">&lt;ol type="a"&gt;
  &lt;li&gt;Comer&lt;/li&gt;
  &lt;li&gt;Programar&lt;/li&gt;
  &lt;li&gt;Dormir&lt;/li&gt;
&lt;/ol&gt;</code></pre><p>Este é o resultado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-6.png" class="kg-image" alt="image-6" width="180" height="115" loading="lazy"></figure><p>Se quiser usar os numerais romanos, use o valor <code>I</code> para ter uma lista ordenada por eles:</p><pre><code class="language-html">&lt;ol type="I"&gt;
  &lt;li&gt;Comer&lt;/li&gt;
  &lt;li&gt;Programar&lt;/li&gt;
  &lt;li&gt;Dormir&lt;/li&gt;
&lt;/ol&gt;</code></pre><p>O resultado terá esta aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-7.png" class="kg-image" alt="image-7" width="196" height="117" loading="lazy"></figure><p>Aqui vai mais um CodePen para você experimentar com os tipos:</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_LYyVEbL" src="https://codepen.io/atapas/embed/preview/LYyVEbL?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=LYyVEbL" title="Ordered List Types" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Tipos de listas ordenadas</figcaption></figure><h2 id="como-usar-o-atributo-start-em-listas-no-html"><strong>Como usar o atributo <code>start</code> em listas no HTML</strong></h2><p>O elemento &lt;ol&gt; tem um atributo interessante chamado <code>start</code>. Você pode especificar um valor para ele para iniciar a lista ordenada a partir de um número específico.</p><p>Digamos que você queira começar a lista com o número 30 em vez de 1. Você pode especificar o número 30 como o valor do atributo <code>start</code> assim:</p><pre><code class="language-html">&lt;ol start="30"&gt;
  &lt;li&gt;Trinta&lt;/li&gt;
  &lt;li&gt;Trinta e um&lt;/li&gt;
  &lt;li&gt;Trinta e dois&lt;/li&gt;
&lt;/ol&gt;</code></pre><p>O resultado terá esta a aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-8.png" class="kg-image" alt="image-8" width="232" height="127" loading="lazy"></figure><p>Fique à vontade para experimentar com o atributo <code>start</code> usando este CodePen:</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_VwbLYzQ" src="https://codepen.io/atapas/embed/preview/VwbLYzQ?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=VwbLYzQ" title="Ordered List Start Attribute" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Atributo start</figcaption></figure><p>Aliás, eu compartilhei as mesmas dicas no Twitter recentemente. Você pode encontrar algumas discussões interessantes por lá, também:</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">💡 Did you know, you can use the 'start' attribute with the HTML ordered list(ol) to start from a specific number?<br><br>By default, the ordered list starts from 1.<br><br>The output of the example below goes like this,<br><br>30. Eat<br>31. Code<br>32. Sleep<a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a> <a href="https://twitter.com/hashtag/DEVCommunity?src=hash&amp;ref_src=twsrc%5Etfw">#DEVCommunity</a> <a href="https://twitter.com/hashtag/html?src=hash&amp;ref_src=twsrc%5Etfw">#html</a> <a href="https://twitter.com/hashtag/CSS?src=hash&amp;ref_src=twsrc%5Etfw">#CSS</a> <a href="https://t.co/sqB49wuK5L">pic.twitter.com/sqB49wuK5L</a></p>— Tapas Adhikary | tapaScript (@tapasadhikary) <a href="https://twitter.com/tapasadhikary/status/1410508936344588289?ref_src=twsrc%5Etfw">July 1, 2021</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

</figure><h1 id="como-criar-uma-lista-n-o-ordenada-no-html"><strong>Como criar uma lista não ordenada no HTML</strong></h1><p>Passemos às listas não ordenadas. Usamos a tag <code>&lt;ul&gt;</code> para criar uma lista não ordenada. Como de costume, precisamos usar as tags <code>&lt;li&gt;</code> e <code>&lt;/li&gt;</code> entre as tags <code>&lt;ul&gt;</code> e <code>&lt;ul/&gt;</code> para criar os itens da lista.</p><p>Os itens da lista (li) dentro da lista não ordenada (ul) vêm com o estilo padrão de marcadores (em inglês, <em>bullet points</em>) – portanto, cada um dos itens da lista é precedido por um ponto preto.</p><p>Vamos criar uma lista dos meus recursos favoritos <em>on-line</em> para aprender sobre desenvolvimento para a web:</p><pre><code class="language-html">Meus recursos favoritos para desenvolvimento para a web
&lt;div&gt;
  &lt;ul&gt;
    &lt;li&gt;freeCodeCamp&lt;/li&gt;
    &lt;li&gt;CSS-Tricks&lt;/li&gt;
    &lt;li&gt;Traversy Media&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</code></pre><p>Esta será a aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-9.png" class="kg-image" alt="image-9" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/08/image-9.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-9.png 620w" width="620" height="172" loading="lazy"></figure><p>Você pode ver os marcadores para cada um dos itens da lista acima. É possível personalizar isso – e já veremos como.</p><p>Antes disso, porém, fique à vontade para usar este CodePen, mudá-lo como quiser e testar.</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_zYwxgJw" src="https://codepen.io/atapas/embed/preview/zYwxgJw?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=zYwxgJw" title="Unordered Bullet List" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Marcadores em listas não ordenadas</figcaption></figure><h2 id="como-usar-os-marcadores-com-links-em-listas-no-html"><strong>Como usar os marcadores com links em listas no HTML</strong></h2><p>Podemos usar os links (tag de âncora <code>&lt;a&gt;</code>) nos itens de lista (tag <code>&lt;li&gt;</code>) para vincular cada um dos itens a uma página qualquer da web, interna ou externa.</p><p>Aqui está um exemplo que mostra como vincular cada um dos recursos de programação da web aos seus respectivos sites:</p><pre><code class="language-html">My Favorite Web Development Learning Sites
&lt;div&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href="https://www.freecodecamp.org/" target="_blank"&gt;freeCodeCamp&lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href="https://css-tricks.com/" target="_blank"&gt;CSS-Tricks&lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href="https://www.traversymedia.com/" target="_blank"&gt;Traversy Media&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</code></pre><p>Esta será a aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-10.png" class="kg-image" alt="image-10" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/08/image-10.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-10.png 652w" width="652" height="185" loading="lazy"></figure><p>Você pode usar o CodePen abaixo para tentar fazer o mesmo. Fique à vontade para modificá-lo como quiser:</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_yLbNBmj" src="https://codepen.io/atapas/embed/preview/yLbNBmj?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=yLbNBmj" title="Unordered Bullet List with Links" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Marcadores com links</figcaption></figure><h2 id="tipos-de-lista-n-o-ordenada-em-html"><strong>Tipos de lista não ordenada em HTML</strong></h2><p>Como discutimos brevemente, podemos personalizar o estilo de marcador de uma lista não ordenada, que veremos em ação agora. Podemos fazer isso usando a propriedade de estilo CSS chamada <code>list-style</code>.</p><p>Há quatro valores principais da propriedade <code>list-style</code> que nos ajudam com essa personalização:</p><!--kg-card-begin: html--><table style="border: 0px; box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(24, 26, 27); color: rgb(218, 215, 210); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--darkreader-text--gray85, #e8e6e3); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--darkreader-bg--gray10, #181a1b);">list-style</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--darkreader-text--gray85, #e8e6e3); letter-spacing: 0.2px; text-align: right; text-transform: uppercase; background-color: var(--darkreader-bg--gray10, #181a1b);">Efeito</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">none</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: right;">Não haverá marcadores na frente dos itens da lista</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">circle</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: right;">Um marcador circular (sem preenchimento) aparece na frente do item</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">disc</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: right;">Esse é o valor padrão para o marcador</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">square</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--darkreader-border--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(24, 26, 27) 50%, rgba(24, 26, 27, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: right;">Um marcador quadrado com preenchimento aparece na frente do item</td></tr></tbody></table><!--kg-card-end: html--><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_vYmOYyK" src="https://codepen.io/atapas/embed/preview/vYmOYyK?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=vYmOYyK" title="Unordered List Styles" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Estilos de listas não ordenadas</figcaption></figure><p>Use o CodePen acima para testar as diversas opções de <code>list-style</code>.</p><h1 id="voc-sabia-que-tamb-m-existe-uma-lista-de-descri-es"><strong>Você sabia que também existe uma lista de descrições?</strong></h1><p>Existe mais um tipo de lista no HTML, que, no entanto, não é usada com frequência. É chamada de <code>lista de descrição</code>.</p><p>Podemos definir uma lista de descrição usando a tag <code>&lt;dl&gt;</code>. Dentro das tags <code>&lt;dl&gt;</code> e <code>&lt;/dl&gt;</code>, precisamos definir um termo de descrição usando a tag <code>&lt;dt&gt;</code>. O termo, geralmente, é um pequeno texto sobre algo. Em seguida, podemos definir o descritor da descrição para falar sobre o termo ainda mais, usando a tag <code>&lt;dd&gt;</code>.</p><p>Muita coisa para absorver? Vamos ver como funciona com um exemplo de código.</p><p>Vamos supor que queremos descrever algumas informações sobre programação, fofoca e sono em nossa página da web. Podemos primeiro definir uma tag <code>&lt;dl&gt;</code>. Agora definimos três pares de tags <code>&lt;dt&gt;</code> e <code>&lt;dd&gt;</code> para descrever programar, fofoca e sono, respectivamente.</p><pre><code class="language-html">&lt;dl&gt;
  &lt;dt&gt;Programar&lt;/dt&gt;
  &lt;dd&gt;Atividade que deixa você feliz, mesmo quando dorme.&lt;/dd&gt;
  &lt;dt&gt;Fofocar&lt;/dt&gt;
  &lt;dd&gt;Não dá para viver sem.&lt;/dd&gt;
  &lt;dt&gt;Dormir&lt;/dt&gt;
  &lt;dd&gt;Minha atividade favorita.&lt;/dd&gt;
&lt;/dl&gt;</code></pre><p>Esta será a aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-11.png" class="kg-image" alt="image-11" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/08/image-11.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-11.png 662w" width="662" height="226" loading="lazy"></figure><p>Experimente este CodePen para brincar um pouco mais com as listas de descrição:</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_xxdGbzL" src="https://codepen.io/atapas/embed/preview/xxdGbzL?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=xxdGbzL" title="Description List" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Lista de descrição</figcaption></figure><p>Você pode estar se perguntando o motivo de não utilizarmos muito esse tipo de lista? Bem, é possível criar essa estrutura usando a lista não ordenada (ul), itens de lista (li) e estilos no CSS.</p><p>Se você considerar a semântica do HTML, é preciso dar um espaço para as listas de descrição em suas páginas sempre que perceber que há um bom caso de uso para ela.</p><h1 id="como-criar-um-cabe-alho-de-p-gina-com-elementos-de-lista-no-html"><strong>Como criar um cabeçalho de página com elementos de lista no HTML</strong></h1><p>Estamos quase no final deste tutorial. Sinto, porém, que ele está incompleto sem pelo menos um exemplo de caso de uso das listas e tags do HTML. Meu favorito é listar os itens no cabeçalho de uma página da web.</p><p>Vamos criar um cabeçalho muito básico com um logotipo e três links: <code>Página inicial</code>, <code>Produtos</code> e <code>Sobre nós</code>. Primeiro, criaremos a estrutura do HTML, assim:</p><pre><code class="language-html">&lt;nav&gt;
  &lt;span class="logo"&gt;Logotipo&lt;/span&gt;
  
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="#/home"&gt;Página inicial&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#/products"&gt;Produtos&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#/about"&gt;Sobre nós&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;  
&lt;/nav&gt;</code></pre><p>Aqui, pegamos uma lista não ordenada com três itens de lista para definir os links da <em>Página inicial</em>, de <em>Produtos</em> e de <em>Sobre nós</em>. Você também notará um elemento <code>span</code> com o texto <code>Logotipo</code>, que indica que é um logotipo. Podemos usar uma imagem adequada lá, com base em nossas necessidades posteriormente.</p><p>Até agora, o cabeçalho deve ter esta aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-12.png" class="kg-image" alt="image-12" width="332" height="175" loading="lazy"></figure><p>Não era bem isso que queríamos. Vamos, então, escrever algumas regras e propriedades do CSS para fazer com que pareça um cabeçalho de página (ou algo próximo a isso).</p><pre><code class="language-css">nav{
  background-color: #273032;
  color: #FFF;
  padding: 10px;
  display: flex;
}

.logo {
  background-color: blue
}

ul {
  margin: 0px;
}

li {
  list-style: none;
  display: inline;
  margin-right: 0.2rem;
}

a {
  color: pink;
}</code></pre><p>Bem melhor. Agora, está mais próximo de parecer um cabeçalho de página realista.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/image-13.png" class="kg-image" alt="image-13" width="573" height="56" loading="lazy"></figure><p>Novamente, use este CodePen para fazer alterações e experimentar com o cabeçalho.</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe id="cp_embed_OJmVPGe" src="https://codepen.io/atapas/embed/preview/OJmVPGe?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=OJmVPGe" title="Header Navigation Using Lists" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe><figcaption>Cabeçalho</figcaption></figure><h1 id="antes-de-terminar-"><strong>Antes de terminar...</strong></h1><p>Por enquanto, é só. Espero que este artigo tenha sido útil e que ele o auxilie a entender listas em HTML mais claramente.</p><p>Entre em contato. Você poderá encontrar o autor no <a href="https://twitter.com/tapasadhikary">Twitter (@tapasadhikary)</a>. Siga-o à vontade. Ele também tem um <a href="https://youtube.com/c/TapasAdhikary?sub_confirmation=1">canal no YouTube</a> (em inglês), onde compartilha seus conhecimentos. Confira-o também.</p><p>Outros artigos úteis (do blog do autor, em inglês):</p><ul><li><a href="https://blog.greenroots.info/10-devtools-tricks-to-help-you-with-css-and-ux-design-ckpp7mtnu04u6whs143e7huwx">10 dicas das DevTools que ajudam com o CSS e com o design de UX</a></li><li><a href="https://blog.greenroots.info/10-trivial-yet-powerful-html-facts-you-must-know-ckmx0d7q30346c1s125iydcsa">10 fatos triviais mas muito importantes sobre o HTML que você precisa saber</a></li><li><a href="https://blog.greenroots.info/10-useful-html5-features-you-may-not-be-using-ckdua7ql300l1m3s1ez7teshc">10 recursos úteis do HTML5 &nbsp;que você pode não estar usando</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Entidades em HTML – uma lista com o espaço em HTML e outros códigos de símbolos e caracteres especiais ]]>
                </title>
                <description>
                    <![CDATA[ A maioria dos caracteres de ASCII tem um código especial que você pode usar em HTML para fazer o caractere aparecer com segurança. Essas entidades do HTML são particularmente úteis, por exemplo, para inserir um espaço em branco manualmente em seu HTML. Cada um desses códigos começa com um "e" ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/entidades-em-html-uma-lista-com-o-espaco-em-html-e-outros-codigos-de-simbolos-e-caracteres-especiais/</link>
                <guid isPermaLink="false">666f7f6079dc5c03cfad3fd5</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 19 Jun 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/06/5f9c9ad4740569d1a4ca280b.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/html-entities-symbols-special-character-codes-list/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Entities – A List of HTML Space and other HTML Symbols and Special Character Codes</a>
      </p><p>A maioria dos caracteres de ASCII tem um código especial que você pode usar em HTML para fazer o caractere aparecer com segurança.</p><p>Essas entidades do HTML são particularmente úteis, por exemplo, para inserir um espaço em branco manualmente em seu HTML.</p><p>Cada um desses códigos começa com um "e" comercial e termina com um ponto-e-vírgula.</p><p>Você pode usá-los em qualquer lugar de seu HTML para fazer aparecer na página aquele caractere. Ele será renderizado da mesma maneira, não importando o idioma em que os navegadores de seus usuários estiverem configurados.</p><p>Alguns desses símbolos têm códigos mais fáceis de lembrar. Por exemplo, o código da moeda Euro (€) é <code>&amp;euro;</code></p><p>Sempre que possível, eu utilizei esses códigos fáceis de lembrar em vez dos códigos numéricos.</p><h2 id="como-usar-o-c-digo-do-espa-o-em-branco-nbsp-"><strong>Como usar o código do espaço em branco, &amp;nbsp;</strong></h2><p>Por exemplo, se você quisesse inserir um espaço em branco, poderia fazer algo assim:</p><pre><code class="language-html">&lt;span&gt;Superpoder:&amp;nbsp;escutar&lt;/span&gt;</code></pre><p>Você pode até inserir diversos deles em sequência para criar um espaçamento de texto:</p><pre><code class="language-html">&lt;span&gt;Superpoder:&amp;nbsp;&amp;nbsp;&amp;nbsp;escutar&lt;/span&gt;</code></pre><h2 id="como-fazer-uma-nova-linha-no-hmtl-usando-o-c-digo-de-caractere-13-"><strong>Como fazer uma nova linha no HMTL usando o código de caractere &amp;#13;</strong></h2><p>Se você quiser forçar uma nova linha:</p><pre><code class="language-html">&lt;p&gt;Este é o texto de um parágrafo e&amp;#13;opa! Caiu para uma nova linha.&lt;/p&gt;</code></pre><p>Sim, você pode usar vários desses um ao lado do outro também:</p><pre><code class="language-html">&lt;p&gt;Este é o texto de um parágrafo e&amp;#13;&amp;#13;&amp;#13;opa! Caiu várias linhas para baixo.&lt;/p&gt;</code></pre><h2 id="uma-lista-completa-de-c-digos-de-caractere-normalmente-usados"><strong>Uma lista completa de códigos de caractere normalmente usados</strong></h2><p>Abaixo, você verá uma tabela formatada em ASCII da maioria dos símbolos e caracteres normalmente usados. Levou um tempo até que eu reunisse todos eles e desse uma boa aparência à tabela.</p><p>Como desenvolvedor, quando eu procuro por esses códigos, geralmente obtenho resultados baseados em imagens. Eles são inacessíveis para pessoas com problemas de visão, além de dificultar o copiar e colar dos códigos.</p><p>Se achar esta lista útil, compartilhe o link deste artigo com seus amigos para que mais pessoas possam aproveitar a lista. 😉</p><pre><code>
+----------+--------+-----------------------------+
|  &amp;código | símbolo|         descrição           |
+----------+--------+-----------------------------+
| &amp;#33;    | !      | ponto de exclamação         |
| &amp;#34;    | "      | aspas duplas                |
| &amp;#35;    | #      | hashtag (octothorpe)        |
| &amp;#36;    | $      | sinal de dólar              |
| &amp;#37;    | %      | sinal de porcentagem        |
| &amp;#38;    | &amp;      | e comercial                 |
| &amp;#39;    | '      | apóstrofo                   |
| &amp;#40;    | (      | parêntese esquerdo          |
| &amp;#41;    | )      | parêntese direito           |
| &amp;#42;    | *      | asterisco                   |
| &amp;#43;    | +      | sinal de mais               |
| &amp;#44;    | ,      | vírgula                     |
| &amp;#45;    | -      | hífen                       |
| &amp;#46;    | .      | ponto                       |
| &amp;#47;    | /      | barra                       |
| &amp;#48;    | 0      | número 0                    |
| &amp;#49;    | 1      | número 1                    |
| &amp;#50;    | 2      | número 2                    |
| &amp;#51;    | 3      | número 3                    |
| &amp;#52;    | 4      | número 4                    |
| &amp;#53;    | 5      | número 5                    |
| &amp;#54;    | 6      | número 6                    |
| &amp;#55;    | 7      | número 7                    |
| &amp;#56;    | 8      | número 8                    |
| &amp;#57;    | 9      | número 9                    |
| &amp;#58;    | :      | dois pontos                 |
| &amp;#59;    | ;      | ponto-e-vírgula             |
| &amp;#60;    | &lt;      | menor que                   |
| &amp;#61;    | =      | sinal de igual              |
| &amp;#62;    | &gt;      | maior que                   |
| &amp;#63;    | ?      | ponto de interrogação       |
| &amp;#64;    | @      | arroba                      |
| &amp;#65;    | A      | A maiúsculo                 |
| &amp;#66;    | B      | B maiúsculo                 |
| &amp;#67;    | C      | C maiúsculo                 |
| &amp;#68;    | D      | D maiúsculo                 |
| &amp;#69;    | E      | E maiúsculo                 |
| &amp;#70;    | F      | F maiúsculo                 |
| &amp;#71;    | G      | G maiúsculo                 |
| &amp;#72;    | H      | H maiúsculo                 |
| &amp;#73;    | I      | I maiúsculo                 |
| &amp;#74;    | J      | J maiúsculo                 |
| &amp;#75;    | K      | K maiúsculo                 |
| &amp;#76;    | L      | L maiúsculo                 |
| &amp;#77;    | M      | M maiúsculo                 |
| &amp;#78;    | N      | N maiúsculo                 |
| &amp;#79;    | O      | O maiúsculo                 |
| &amp;#80;    | P      | P maiúsculo                 |
| &amp;#81;    | Q      | Q maiúsculo                 |
| &amp;#82;    | R      | R maiúsculo                 |
| &amp;#83;    | S      | S maiúsculo                 |
| &amp;#84;    | T      | T maiúsculo                 |
| &amp;#85;    | U      | U maiúsculo                 |
| &amp;#86;    | V      | V maiúsculo                 |
| &amp;#87;    | W      | W maiúsculo                 |
| &amp;#88;    | X      | X maiúsculo                 |
| &amp;#89;    | Y      | Y maiúsculo                 |
| &amp;#90;    | Z      | Z maiúsculo                 |
| &amp;#91;    | [      | colchete esquerdo           |
| &amp;#92;    | \      | barra invertida             |
| &amp;#93;    | ]      | colchete direita            |
| &amp;#94;    | ^      | circunflexo                 |
| &amp;#95;    | _      | sublinha                    |
| &amp;#96;    | `      | crase                       |
| &amp;#97;    | a      | a minúsculo                 |
| &amp;#98;    | b      | b minúsculo                 |
| &amp;#99;    | c      | c minúsculo                 |
| &amp;#100;   | d      | d minúsculo                 |
| &amp;#101;   | e      | e minúsculo                 |
| &amp;#102;   | f      | f minúsculo                 |
| &amp;#103;   | g      | g minúsculo                 |
| &amp;#104;   | h      | h minúsculo                 |
| &amp;#105;   | i      | i minúsculo                 |
| &amp;#106;   | j      | j minúsculo                 |
| &amp;#107;   | k      | k minúsculo                 |
| &amp;#108;   | l      | l minúsculo                 |
| &amp;#109;   | m      | m minúsculo                 |
| &amp;#110;   | n      | n minúsculo                 |
| &amp;#111;   | o      | o minúsculo                 |
| &amp;#112;   | p      | p minúsculo                 |
| &amp;#113;   | q      | q minúsculo                 |
| &amp;#114;   | r      | r minúsculo                 |
| &amp;#115;   | s      | s minúsculo                 |
| &amp;#116;   | t      | t minúsculo                 |
| &amp;#117;   | u      | u minúsculo                 |
| &amp;#118;   | v      | v minúsculo                 |
| &amp;#119;   | w      | w minúsculo                 |
| &amp;#120;   | x      | x minúsculo                 |
| &amp;#121;   | y      | y minúsculo                 |
| &amp;#122;   | z      | z minúsculo                 |
| &amp;#123;   | {      | chave da esquerda           |
| &amp;#124;   | |      | barra vertical              |
| &amp;#125;   | }      | chave da direita            |
| &amp;#126;   | ~      | til                         |
| &amp;larr;   | ←      | seta para esquerda          |
| &amp;uarr;   | ↑      | seta para cima              |
| &amp;rarr;   | →      | seta para direita           |
| &amp;darr;   | ↓      | seta para baixo             |
| &amp;harr;   | ↔      | seta esquerda/direita       |
| &amp;lArr;   | ⇐      | seta dupla para a esquerda |
| &amp;uArr;   | ⇑      | seta dupla para cima        |
| &amp;rArr;   | ⇒     | seta dupla para a direita   |
| &amp;dArr;   | ⇓      | seta dupla para baixo       |
| &amp;hArr;   | ⇔     | seta dupla esquerda/direita |
| &amp;lsquo;  | ‘      | aspa simples esquerda smart |
| &amp;rsquo;  | ’      | aspa simples direita smart  |
| &amp;ldquo;  | “      | aspa dupla esquerda smart   |
| &amp;rdquo;  | ”      | aspa dupla direita smart    |
| &amp;#8218;  | ‚      | aspa simples baixa          |
| &amp;#8222;  | „      | aspa dupla baixa            |
| &amp;ndash;  | -      | travessão en                |
| &amp;mdash;  | –      | travessão em                |
| &amp;nbsp;   |        | espaço sem quebra           |
| &amp;iexcl;  | ¡      | exclamação invertida        |
| &amp;sect;   | §      | sinal de seção (direito)    |
| &amp;brvbar; | ¦      | barra vertical quebrada     |
| &amp;copy;   | ©      | símbolo de copyright        |
| &amp;reg;    | ®      | sinal de marca registrada   |
| &amp;#8482;  | ™      | sinal de marca comercial    |
| &amp;cent;   | ¢      | sinal de centavo            |
| &amp;pound;  | £      | sinal da libra esterlina    |
| &amp;yen;    | ¥      | sinal do Yen                |
| &amp;euro;   | €      | sinal do Euro               |
| &amp;plusmn; | ±      | sinal de mais ou menos      |
| &amp;micro;  | µ      | sinal de micro (mu)         |
| &amp;183;    | ·      | caractere de ponto médio    |
| &amp;deg;    | °      | sinal de grau               |
| &amp;sup1;   | ¹      | um sobrescrito              |
| &amp;sup2;   | ²      | dois sobrescrito (quadrado) |
| &amp;sup3;   | ³      | três sobrescrito (cubo)     |
| &amp;para;   | ¶      | sinal de parágrafo          |
| &amp;middot; | ·      | ponto médio                 |
| &amp;frac14; | ¼      | fração de um quarto         |
| &amp;frac12; | ½      | fração de um meio           |
| &amp;frac34; | ¾      | fração de três quartos      |
| &amp;iquest; | ¿      | interrogação invertida      |
| &amp;#8224;  | †      | adaga                       |
| &amp;#8225;  | ‡      | adaga dupla                 |
| &amp;#8226;  | •      | marcador                    |
| &amp;#8230;  | …      | reticências (três pontos)   |
+----------+--------+-----------------------------+</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Vídeo no HTML5: como incorporar vídeos ao documento HTML ]]>
                </title>
                <description>
                    <![CDATA[ Antes do HTML5, para poder executar um vídeo em uma página da web, era necessário usar um plug-in como o Adobe Flash Player. Com a introdução do HTML5, foi possível começar a colocar vídeos diretamente na própria página. Isso torna possível fazer com que os vídeos sejam executados em páginas ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/video-no-html5-como-incorporar-videos-ao-documento-html/</link>
                <guid isPermaLink="false">651b4df6f57fe803e4aa3248</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Mon, 02 Oct 2023 23:39:41 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/5f9c9d71740569d1a4ca37cc.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/html5-video/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML5 Video: How to Embed Video in Your HTML</a>
      </p><p>Antes do HTML5, para poder executar um vídeo em uma página da web, era necessário usar um plug-in como o Adobe Flash Player. Com a introdução do HTML5, foi possível começar a colocar vídeos diretamente na própria página.</p><p>Isso torna possível fazer com que os vídeos sejam executados em páginas criadas para dispositivos móveis, pois plug-ins como o Adobe Flash Player não funcionam no Android ou no iOS.</p><p>O elemento <code>&lt;video&gt;</code> do HTML é usado para incorporar vídeos a documentos da web. Pode conter uma ou mais fontes de vídeo, representadas usando o atributo <code>src</code> ou o elemento <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/source">source</a>.</p><p>Para incorporar um arquivo de vídeo, basta adicionar este trecho de código e alterar o atributo <code>src</code>, colocando nele o caminho do arquivo de vídeo:</p><pre><code class="language-html">&lt;video controls&gt;
  &lt;source src="tutorial.ogg" type="video /ogg"&gt;
  &lt;source src="tutorial.mp4" type="video /mpeg"&gt;
  Seu navegador não oferece suporte ao elemento de vídeo. Atualize-o para a versão mais recente.
&lt;/video &gt;</code></pre><p>O elemento <code>&lt;video&gt;</code> tem suporte em todos os navegadores modernos. Porém, nem todos os navegadores dão suporte aos mesmos formatos de arquivo de vídeo. &nbsp;Arquivos MP4 são o formato de vídeo mais amplamente aceito. Outros formatos, como WebM e Ogg, já têm suporte no Chrome, no Firefox e no Opera.</p><p>Para garantir que seu vídeo seja executado na maioria dos navegadores, uma boa prática é codificá-lo nos formatos Ogg e MP4, incluindo os dois no elemento <code>&lt;video&gt;</code>, como no exemplo acima. Os navegadores usarão o primeiro formato reconhecido.</p><p>Se, por alguma razão, o navegador não reconhecer um dos formatos, o texto "Seu navegador não oferece suporte ao elemento de vídeo. Atualize-o para a versão mais recente." será exibido no lugar do vídeo.</p><p>Você também deve ter notado a palavra <code>controls</code> na tag <code>&lt;video&gt;</code>. Esse elemento inclui vários atributos úteis para personalizar a experiência de reprodução de arquivos.</p><h2 id="atributos-de-video"><strong>Atributos de <code>&lt;video&gt;</code></strong></h2><h3 id="controls"><strong><code>controls</code></strong></h3><p>O atributo <code>controls</code> trata de exibir ou não controles como o botão de reproduzir/pausar ou o botão deslizante de ajuste de volume.</p><p>Ele é um atributo booleano, o que significa que ele pode ser definido como <code>true</code> ou <code>false</code>. Para defini-lo como <code>true</code>, basta adicioná-lo à tag <code>&lt;video&gt;</code>. Se não estiver presente na tag, ele estará definido como <code>false</code> e os controles não serão exibidos.</p><h4 id="autoplay"><strong><code>autoplay</code></strong></h4><p>A reprodução automática (em inglês, <em>autoplay</em>) pode ser definida como <code>true</code> ou <code>false</code>. É mais um atributo booleano. Você a define como <code>true</code> adicionando-a à tag. Se não estiver presente na tag, ela estará definida como <code>false</code>. Caso esteja definida como <code>true</code>, o vídeo começara a ser executado assim que uma quantidade de vídeo suficiente estive no <em>buffer</em> para que seja possível executá-lo. Muita gente acha a reprodução automática incômoda e que ela atrapalha a experiência. Use este recurso pouco e com bastante critério. Observe, também, que alguns navegadores para dispositivos móveis, como o Safari para o iOS, ignoram esse atributo.</p><pre><code class="language-html">&lt;video autoplay&gt;
  &lt;source src="video.mp4" type="video/mp4"&gt;
&lt;/video&gt;
</code></pre><h4 id="poster"><strong><code>poster</code></strong></h4><p>O atributo <code>poster</code> refere-se à imagem que será exibida no vídeo até que o usuário clique nele para executar o vídeo.</p><pre><code class="language-html">&lt;video poster="poster.png"&gt;
  &lt;source src="video.mp4" type="video/mp4"&gt;
&lt;/video&gt;</code></pre><h3 id="v-deos-podem-ser-custosos"><strong>Vídeos podem ser custosos</strong></h3><p>Embora esteja mais fácil do que nunca incluir vídeos em sua página, geralmente, é melhor fazer o <em>upload </em>dos vídeos para um serviço como o YouTube, o Vimeo ou o Wistia e incorporá-lo ao seu código. Isso ocorre porque servir vídeos pode ser caro – para você em termos de custos de servidor e para os espectadores, caso tenham planos de dados limitados.</p><p>Fazer a hospedagem de seus próprios arquivos de vídeo também pode causar problemas com a largura de banda, o que pode levar a travamentos repentinos e ao carregamento lento dos vídeos. Além disso, os navegadores tendem a variar em termos da qualidade de reprodução dos vídeos. Sendo assim, é difícil controlar exatamente o que os seus espectadores acabarão assistindo. Também é muito fácil fazer o <em>download </em>de vídeos incorporados com a tag <code>&lt;video&gt;</code>. Se a pirataria é algo que preocupa você, seria melhor procurar por outras opções.</p><p>Dito isso, fique à vontade para incorporar vídeos ao HTML com conteúdo que toque o seu coração – ou não. A decisão é sua. 🙂</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como incorporar um questionário de múltipla escolha ao seu artigo ]]>
                </title>
                <description>
                    <![CDATA[ Na minha experiência, complementar os estudos com exercícios práticos aumenta consideravelmente meu entendimento sobre um assunto. Isso é verdadeiro, especialmente, quando posso testar meus conhecimentos na hora e receber feedback instantâneo sobre cada pergunta. O formato de questionário de múltipla escolha é perfeito para isso. Eu desenvolvi um método de ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-incorporar-um-questionario-de-multipla-escolha-ao-seu-artigo/</link>
                <guid isPermaLink="false">64b562ddb04bf0067ce23e5c</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Mon, 17 Jul 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/5f9c9bc5740569d1a4ca2dcf.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/multiple-choice-quiz-template/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How To Embed Multiple Choice Quiz Questions into Your Article</a>
      </p><p>Na minha experiência, complementar os estudos com exercícios práticos aumenta consideravelmente meu entendimento sobre um assunto. Isso é verdadeiro, especialmente, quando posso testar meus conhecimentos na hora e receber feedback instantâneo sobre cada pergunta.</p><p>O formato de questionário de múltipla escolha é perfeito para isso. Eu desenvolvi um método de incorporar perguntas de múltipla escolha nos artigos sobre matemática que escrevo para o freeCodeCamp. Quero, neste artigo, mostrar para outros autores como eles podem fazer o mesmo.</p><h2 id="como-adicionar-c-digo-ao-seu-artigo"><strong>Como adicionar código ao seu artigo</strong></h2><p>O editor do Ghost (editor usado pelo freeCodeCamp) permite incorporar blocos de código em um artigo. O editor de código pode ser acessado clicando no botão redondo com o sinal de mais <strong><strong>(+) </strong></strong>usado para adicionar imagens, vídeos do YouTube, entre outros:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/image-25.png" class="kg-image" alt="image-25" width="382" height="243" loading="lazy"></figure><p>Clique no botão "HTML" para adicionar outro editor ao artigo. O editor tem suporte para HTML, CSS e JavaScript.</p><p>Ao começar a adicionar o código, clique em qualquer lugar fora do quadro do editor para renderizar o código e visualizar o andamento. Clique duas vezes no resultado renderizado para reabrir a janela do editor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/editor.gif" class="kg-image" alt="editor" width="966" height="304" loading="lazy"></figure><p>Para testar a funcionalidade de seu código, salve o artigo e pressione Ctrl/⌘ + S. Depois, clique no botão "View Preview" (Visualização prévia) que aparece no canto inferior esquerdo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/image-26.png" class="kg-image" alt="image-26" width="282" height="84" loading="lazy"></figure><p>Seu artigo será aberto em uma outra guia, onde você poderá ver como seu código será renderizado quando o artigo for publicado. Aproveite para conferir o estilo e a funcionalidade de seu questionário de múltipla escolha.</p><p>O código <em>boilerplate </em>para o questionário de múltipla escolha está disponível na próxima seção. Tudo o que você precisa fazer é colá-lo em seu próprio artigo e alterar a pergunta e as respostas.</p><h2 id="como-funciona-o-question-rio-de-m-ltipla-escolha"><strong>Como funciona o questionário de múltipla escolha</strong></h2><p>Você pode adicionar quantas perguntas diferentes quiser. Porém, embora seu artigo possa ter diversas perguntas, elas estarão todas contidas em um <strong>único<strong> </strong>corpo do <strong>HTML </strong></strong>internamente. Cada elemento de pergunta começa com o código abaixo:</p><pre><code class="language-html">&lt;div style='transform: scale(0.65); position: relative; top: -100px;'&gt;
  &lt;h3&gt;ESCREVA SUA PERGUNTA AQUI&lt;/h3&gt;
  &lt;p&gt;Selecione 1 resposta&lt;/p&gt;
  &lt;hr /&gt;</code></pre><p>Cada um dos elementos <code>div</code> abaixo contém uma resposta possível:</p><pre><code class="language-html">  ...
  &lt;div id='block-11' style='padding: 10px;'&gt;
    &lt;label for='option-11' style=' padding: 5px; font-size: 2.5rem;'&gt;
      &lt;input type='radio' name='option' value='6/24' id='option-11' style='transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;' /&gt;
      RESPOSTA 1&lt;/label&gt;
    &lt;span id='result-11'&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;hr /&gt;

  &lt;div id='block-12' style='padding: 10px;'&gt;
    &lt;label for='option-12' style=' padding: 5px; font-size: 2.5rem;'&gt;
      &lt;input type='radio' name='option' value='6' id='option-12' style='transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;' /&gt;
      RESPOSTA 2&lt;/label&gt;
    &lt;span id='result-12'&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;hr /&gt;
  ...</code></pre><p>Na hora em que escrevemos o artigo, o editor de código incorporado do Ghost não dá suporte a <em>template literals</em>, o que significa que algumas coisas precisam ser colocadas diretamente no código.</p><p>Lembre-se de que todas as perguntas são, essencialmente, carregadas juntas internamente. Assim, os números de dois algarismos de cada <code>id</code> representam o seguinte:</p><ul><li>O <strong>primeiro</strong> algarismo indica a ordem da pergunta de múltipla escolha no artigo (1 é a questão um, 2 é a questão dois e assim por diante)</li><li>O <strong><strong>se</strong>gundo<strong> </strong></strong>algarismo indica a ordem de cada resposta possível dentro deste bloco de pergunta específico (1 é a resposta um, 2 é a resposta dois e assim por diante)</li></ul><p>Por exemplo, <code>block-12</code> representa <strong>pergunta</strong> <strong><strong>1/</strong>resposta<strong> 2</strong></strong>, enquanto <code>block-43</code> é a <strong>pergunta<strong> 4/</strong>resposta<strong> 3</strong></strong>.</p><p>Essa convenção de índices (id) é necessária para que blocos de perguntas diferentes funcionem independentemente dos outros.</p><p>Uma lógica semelhante se aplica aos nomes das funções responsáveis pela interatividade. O código que lida com a interação do usuário é colocado dentro das tags <code>&lt;script&gt;</code> e é composto por duas partes. A primeira parte é a função que avalia as respostas e exibe os resultados:</p><pre><code class="language-js">function displayAnswer1() {
    if (document.getElementById('option-11').checked) {
      document.getElementById('block-11').style.border = '3px solid limegreen'
      document.getElementById('result-11').style.color = 'limegreen'
      document.getElementById('result-11').innerHTML = 'Correto!'
    }
    if (document.getElementById('option-12').checked) {
      document.getElementById('block-12').style.border = '3px solid red'
      document.getElementById('result-12').style.color = 'red'
      document.getElementById('result-12').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
    if (document.getElementById('option-13').checked) {
      document.getElementById('block-13').style.border = '3px solid red'
      document.getElementById('result-13').style.color = 'red'
      document.getElementById('result-13').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
    if (document.getElementById('option-14').checked) {
      document.getElementById('block-14').style.border = '3px solid red'
      document.getElementById('result-14').style.color = 'red'
      document.getElementById('result-14').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
  }</code></pre><p>Como o nome em inglês sugere, a função <code>displayAnswer1</code> trata da primeira pergunta do artigo. Se houver uma terceira pergunta, <code>displayAnswer3</code> tratará dela.</p><p>No exemplo acima, <code>option-11</code> é a resposta correta. O estilo no primeiro bloco <code>if</code> é autalizado para mostrar que a resposta correta foi selecionada. Se qualquer outra resposta – ou seja, uma resposta incorreta – for selecionada, o estilo será atualizado para refletir isso.</p><p>Fique à vontade para brincar com as funções <code>displayAnswer_</code> em seu próprio artigo. Lembre-se apenas de associar o estilo adequado às respostas corretas e incorretas.</p><p>Aqui está a segunda parte do código que lida com a interação do usuário:</p><pre><code class="language-js">function showCorrectAnswer1() {
    let showAnswer1 = document.createElement('p')
    showAnswer1.innerHTML = 'Mostrar a resposta certa'
    showAnswer1.style.position = 'relative'
    showAnswer1.style.top = '-180px'
    showAnswer1.style.fontSize = '1.75rem'
    document.getElementById('showanswer1').appendChild(showAnswer1)
    showAnswer1.addEventListener('click', () =&gt; {
      document.getElementById('block-11').style.border = '3px solid limegreen'
      document.getElementById('result-11').style.color = 'limegreen'
      document.getElementById('result-11').innerHTML = 'Correto!'
      document.getElementById('showanswer1').removeChild(showAnswer1)
    })
  }</code></pre><p>A função é chamada de <code>showCorrectAnswer1</code> porque lida com a primeira pergunta de múltipla escolha do artigo. Você terá de adicionar <code>showCorrectAnswer2</code>, <code>showCorrectAnswer3</code> e assim por diante se mais perguntas forem adicionadas ao seu artigo.</p><p>Fique à vontade, também, para brincar com o estilo e com as dimensões no código. Personalize-os como quiser. Além disso, tenho certeza de que há outras maneiras de implementar questionários de múltipla escolha. Essa foi a minha maneira. É um prazer, para mim, compartilhá-la com vocês.</p><p>Aqui temos o código completo e um exemplo funcional:</p><pre><code class="language-html">&lt;div style='transform: scale(0.65); position: relative; top: -100px;'&gt;
  &lt;h3&gt;A que parte de um dia correspondem 6 horas?&lt;/h3&gt;
  &lt;p&gt;Escolha 1 resposta&lt;/p&gt;
  &lt;hr /&gt;

  &lt;div id='block-11' style='padding: 10px;'&gt;
    &lt;label for='option-11' style=' padding: 5px; font-size: 2.5rem;'&gt;
      &lt;input type='radio' name='option' value='6/24' id='option-11' style='transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;' /&gt;
      6/24&lt;/label&gt;
    &lt;span id='result-11'&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;hr /&gt;

  &lt;div id='block-12' style='padding: 10px;'&gt;
    &lt;label for='option-12' style=' padding: 5px; font-size: 2.5rem;'&gt;
      &lt;input type='radio' name='option' value='6' id='option-12' style='transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;' /&gt;
      6&lt;/label&gt;
    &lt;span id='result-12'&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;hr /&gt;

  &lt;div id='block-13' style='padding: 10px;'&gt;
    &lt;label for='option-13' style=' padding: 5px; font-size: 2.5rem;'&gt;
      &lt;input type='radio' name='option' value='1/3' id='option-13' style='transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;' /&gt;
      1/3&lt;/label&gt;
    &lt;span id='result-13'&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;hr /&gt;

  &lt;div id='block-14' style='padding: 10px;'&gt;
    &lt;label for='option-14' style=' padding: 5px; font-size: 2.5rem;'&gt;
      &lt;input type='radio' name='option' value='1/6' id='option-14' style='transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;' /&gt;
      1/6&lt;/label&gt;
    &lt;span id='result-14'&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;hr /&gt;
  &lt;button type='button' onclick='displayAnswer1()' style='width: 100px; height: 40px; border-radius: 3px; background-color: lightblue; font-weight: 700;'&gt;Enviar&lt;/button&gt;
&lt;/div&gt;
&lt;a id='showanswer1'&gt;&lt;/a&gt;
&lt;script&gt;
  //    A função avalia a resposta e exibe o resultado
  function displayAnswer1() {
    if (document.getElementById('option-11').checked) {
      document.getElementById('block-11').style.border = '3px solid limegreen'
      document.getElementById('result-11').style.color = 'limegreen'
      document.getElementById('result-11').innerHTML = 'Correto!'
    }
    if (document.getElementById('option-12').checked) {
      document.getElementById('block-12').style.border = '3px solid red'
      document.getElementById('result-12').style.color = 'red'
      document.getElementById('result-12').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
    if (document.getElementById('option-13').checked) {
      document.getElementById('block-13').style.border = '3px solid red'
      document.getElementById('result-13').style.color = 'red'
      document.getElementById('result-13').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
    if (document.getElementById('option-14').checked) {
      document.getElementById('block-14').style.border = '3px solid red'
      document.getElementById('result-14').style.color = 'red'
      document.getElementById('result-14').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
  }
  // a função exibe o link para a resposta correta
  function showCorrectAnswer1() {
    let showAnswer1 = document.createElement('p')
    showAnswer1.innerHTML = 'Mostrar a resposta certa'
    showAnswer1.style.position = 'relative'
    showAnswer1.style.top = '-180px'
    showAnswer1.style.fontSize = '1.75rem'
    document.getElementById('showanswer1').appendChild(showAnswer1)
    showAnswer1.addEventListener('click', () =&gt; {
      document.getElementById('block-11').style.border = '3px solid limegreen'
      document.getElementById('result-11').style.color = 'limegreen'
      document.getElementById('result-11').innerHTML = 'Correto!'
      document.getElementById('showanswer1').removeChild(showAnswer1)
    })
  }
&lt;/script&gt;</code></pre><!--kg-card-begin: html--><div style="transform: scale(0.65); position: relative; top: -100px;">
  <h3>A que parte de um dia correspondem 6 horas?</h3>
  <p>Escolha 1 resposta</p>
  <hr>

  <div id="block-11" style="padding: 10px;">
    <label for="option-11" style=" padding: 5px; font-size: 2.5rem;">
      <input type="radio" name="option" value="6/24" id="option-11" style="transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;">
      6/24</label>
    <span id="result-11"></span>
  </div>
  <hr>

  <div id="block-12" style="padding: 10px;">
    <label for="option-12" style=" padding: 5px; font-size: 2.5rem;">
      <input type="radio" name="option" value="6" id="option-12" style="transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;">
      6</label>
    <span id="result-12"></span>
  </div>
  <hr>

  <div id="block-13" style="padding: 10px;">
    <label for="option-13" style=" padding: 5px; font-size: 2.5rem;">
      <input type="radio" name="option" value="1/3" id="option-13" style="transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;">
      1/3</label>
    <span id="result-13"></span>
  </div>
  <hr>

  <div id="block-14" style="padding: 10px;">
    <label for="option-14" style=" padding: 5px; font-size: 2.5rem;">
      <input type="radio" name="option" value="1/6" id="option-14" style="transform: scale(1.6); margin-right: 10px; vertical-align: middle; margin-top: -2px;">
      1/6</label>
    <span id="result-14"></span>
  </div>
  <hr>
  <button type="button" onclick="displayAnswer1()" style="width: 100px; height: 40px; border-radius: 3px; background-color: lightblue; font-weight: 700;">Enviar</button>
</div>
<a id="showanswer1"></a>
<script>
  //    A função avalia a resposta e exibe o resultado
  function displayAnswer1() {
    if (document.getElementById('option-11').checked) {
      document.getElementById('block-11').style.border = '3px solid limegreen'
      document.getElementById('result-11').style.color = 'limegreen'
      document.getElementById('result-11').innerHTML = 'Correto!'
    }
    if (document.getElementById('option-12').checked) {
      document.getElementById('block-12').style.border = '3px solid red'
      document.getElementById('result-12').style.color = 'red'
      document.getElementById('result-12').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
    if (document.getElementById('option-13').checked) {
      document.getElementById('block-13').style.border = '3px solid red'
      document.getElementById('result-13').style.color = 'red'
      document.getElementById('result-13').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
    if (document.getElementById('option-14').checked) {
      document.getElementById('block-14').style.border = '3px solid red'
      document.getElementById('result-14').style.color = 'red'
      document.getElementById('result-14').innerHTML = 'Incorreto!'
      showCorrectAnswer1()
    }
  }
  // a função exibe o link para a resposta correta
  function showCorrectAnswer1() {
    let showAnswer1 = document.createElement('p')
    showAnswer1.innerHTML = 'Mostrar a resposta certa'
    showAnswer1.style.position = 'relative'
    showAnswer1.style.top = '-180px'
    showAnswer1.style.fontSize = '1.75rem'
    document.getElementById('showanswer1').appendChild(showAnswer1)
    showAnswer1.addEventListener('click', () => {
      document.getElementById('block-11').style.border = '3px solid limegreen'
      document.getElementById('result-11').style.color = 'limegreen'
      document.getElementById('result-11').innerHTML = 'Correto!'
      document.getElementById('showanswer1').removeChild(showAnswer1)
    })
  }
</script><!--kg-card-end: html--><p>Você também pode encontrar o código <em>boilerplate</em> completo <a href="https://github.com/sandroarobeli/quiz-template/blob/master/testTemplateHTML.txt">neste repositório do GitHub</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tag select do HTML – como fazer um menu suspenso ou uma lista de opções ]]>
                </title>
                <description>
                    <![CDATA[ Você usa a tag select do HTML para criar menus suspensos para que os usuários selecionem os valores que eles querem. É uma funcionalidade essencial na coleta de dados a serem enviados para um servidor. A tag select normalmente é usada dentro de um elemento de formulário (form), com os ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/tag-select-do-html-como-fazer-um-menu-suspenso-ou-uma-lista-de-opcoes/</link>
                <guid isPermaLink="false">642b744486dbbe0599dba6a4</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Arthur Fücher ]]>
                </dc:creator>
                <pubDate>Sun, 09 Jul 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/HTML-select-tag.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/html-select-tag-how-to-make-a-dropdown-menu-or-combo-list/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Select Tag – How to Make a Dropdown Menu or Combo List</a>
      </p><p>Você usa a tag <em>select</em> do HTML para criar menus suspensos para que os usuários selecionem os valores que eles querem. É uma funcionalidade essencial na coleta de dados a serem enviados para um servidor.</p><p>A tag <em>select</em> normalmente é usada dentro de um elemento de formulário (<code>form</code>), com os itens a serem escolhidos ficando dentro de outra tag, <code>&lt;option&gt;</code>. Ela também pode ser usada como um elemento sozinho, que ainda estaria associado com um formulário por meio de um de seus atributos especiais, <code>form</code>.</p><p>Neste tutorial, vou mostrar como criar um menu suspenso com a tag <em>select</em> para que você possa começar a coletar dados nos seus projetos de programação. Também vou mostrar um pouco sobre como estilizar a tag <em>select</em>, pois ela é notoriamente difícil de estilizar.</p><h3 id="aqui-temos-um-scrim-interativo-sobre-como-fazer-um-menu-suspenso-ou-lista-de-op-es-em-html-ingl-s-"><strong>Aqui temos um Scrim interativo sobre </strong>como fazer um menu suspenso ou lista de opções em HTML (inglês)</h3><figure class="kg-card kg-embed-card"><iframe src="https://scrimba.com/scrim/co5b3416fb871e72f3c8e1e76?embed=freecodecamp,mini-header" width="100%" height="420" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; color: rgb(218, 215, 210); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 26, 27); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"></iframe></figure><h2 id="atributos-da-tag-select"><strong>Atributos da tag <em>select</em></strong></h2><p>Antes de me aprofundar em como criar um menu suspenso com a tag <em>select</em>, precisamos discutir os atributos que a tag <em>select</em> recebe.</p><p>Os atributos são:</p><ul><li><code>name</code>: você precisa atribuir um nome para cada elemento do formulário pois é usado para referenciar o dado depois que for submetido ao servidor.</li><li><code>multiple</code>: esse atributo deixa o usuário selecionar múltiplas opções do menu suspenso.</li><li><code>required</code>: esse é tipicamente usado para validação. Com ele, o formulário não será submetido a menos que o usuário selecione pelo menos uma opção do menu suspenso.</li><li><code>disabled</code>: esse atributo impede o usuário de interagir com as opções (deixando-as desabilitadas). </li><li><code>size</code>: expresso em números, o atributo <em>size </em>(tamanho) é usado para especificar quantas opções poderão ser vistas ao mesmo tempo.</li><li><code>autofocus</code>: esse atributo é usado em todos campos de entrada de formulário, incluindo a tag <em>select</em>, para especificar qual campo de entrada deverá estar focado quando a página carregar.</li></ul><h2 id="como-criar-um-menu-suspenso-com-a-tag-select"><strong>Como criar um menu suspenso com a tag <em>select</em> </strong></h2><p>Para criar um menu suspenso com a tag <em>select</em>, você primeiro precisará de um elemento de formulário (tag <em>form</em>). Isso ocorre porque você também terá um botão de envio nele (no elemento de formulário) para enviar os dados para o servidor.</p><pre><code class="language-html">&lt;form action="#"&gt;
      &lt;label for="lang"&gt;Language&lt;/label&gt;
      &lt;select name="languages" id="lang"&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre><p>Eu adicionei um CSS simples para centralizar o menu suspenso e o botão, e dar um fundo cinza claro para o corpo da página (<em>body</em>):</p><pre><code class="language-css">body {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
     height: 100vh;
     background-color: #f1f1f1;
   }

input {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
   }
</code></pre><p>Para torná-lo mais elaborado e acessível, você também pode anexar a caixa de seleção a um elemento de rótulo (<em>label</em>), para que fique focado quando o rótulo for clicado. Você pode fazer isso com este código:</p><pre><code class="language-html">&lt;form action="#"&gt;
      &lt;label for="lang"&gt;Language&lt;/label&gt;
      &lt;select name="languages" id="lang"&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre><p>Eu coloquei o símbolo da cerquilha (#) como valor do atributo <em>action</em> para você não receber um 404 ao clicar no botão de enviar. </p><p>Agora, porém, temos que fazer uma pequena alteração no CSS:</p><pre><code class="language-css"> body {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
     height: 100vh; 
     background-color: #f1f1f1;
   }

input {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
   }

label {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
   }

select {
     margin-bottom: 10px;
     margin-top: 10px;
   }
</code></pre><p>No final, este é o resultado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/select-one.gif" class="kg-image" alt="select-one" width="600" height="321" loading="lazy"></figure><p>Não termina aqui. Um dos itens do menu suspenso aparece por padrão e será selecionado se o usuário clicar no botão de enviar assim que acessar a página.</p><p>Essa, no entanto, não é uma boa experiência para o usuário. Você pode se livrar disso colocando "<em>Select a language</em>" (selecione uma linguagem) como o primeiro elemento do menu.</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Language&lt;/label&gt;
      &lt;select name="languages" id="lang"&gt;
        &lt;option value="select"&gt;Select a language&lt;/option&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre><p>Quando o usuário clicar para selecionar um item, o menu suspenso cobrirá o botão de enviar – outra coisa que afeta negativamente a experiência do usuário.</p><p>Você pode alterar isso com o atributo <code>size</code> (tamanho), que mostrará um certo número de itens por padrão e adicionará uma rolagem para os outros itens do menu.</p><p>Isso também deixa você remover o primeiro item falso, pois alguns itens estarão visíveis para o usuário automaticamente.</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Language&lt;/label&gt;
      &lt;select name="languages" id="lang" size="4"&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/select-two.gif" class="kg-image" alt="select-two" width="600" height="400" loading="lazy"></figure><p>Com o atributo <code>multiple</code> (múltiplo), você pode permitir que o usuário selecione vários itens do menu.</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Language&lt;/label&gt;
      &lt;select name="languages" id="lang" multiple&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre><p>Isso faz com que 4 itens estejam visíveis por padrão. Para selecionar mais de um item, o usuário precisa segurar a tecla <em>Shift</em> ou <em>Control</em> e, então, selecionar com o <em>mouse</em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/select-three.gif" class="kg-image" alt="select-three" width="600" height="321" loading="lazy"></figure><p>Você pode fazer mais ainda com as tags <code>&lt;select&gt;</code> e <code>&lt;option&gt;</code>. Você também pode fazer uma caixa de seleção com agrupamentos com o elemento <code>&lt;optgroup&gt;</code> dentro da tag <code>&lt;select&gt;</code>.</p><p>Você pode converter o menu que já foi feito para ter agrupamentos assim:</p><pre><code class="language-html">&lt;form action="#"&gt;
      &lt;label for="lang"&gt;Language&lt;/label&gt;
      &lt;select name="languages" id="lang"&gt;
        &lt;optgroup label="first-choice"&gt;
          &lt;option value="select"&gt;Select a language&lt;/option&gt;
          &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
          &lt;option value="php"&gt;PHP&lt;/option&gt;
          &lt;option value="java"&gt;Java&lt;/option&gt;
          &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;/optgroup&gt;
        &lt;optgroup label="second-choice"&gt;
          &lt;option value="python"&gt;Python&lt;/option&gt;
          &lt;option value="c#"&gt;C#&lt;/option&gt;
          &lt;option value="C++"&gt;C++&lt;/option&gt;
          &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
        &lt;/optgroup&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/multi-select.png" class="kg-image" alt="multi-select" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/multi-select.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/07/multi-select.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/multi-select.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="800" loading="lazy"></figure><h2 id="como-estilizar-o-elemento-select"><strong>Como estilizar o elemento <em>select</em></strong></h2><p>Estilizar o elemento <em>select </em>geralmente é confuso e renderizado de maneira inconsistente entre os navegadores. Você, contudo, sempre pode tentar o seguinte:</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Language&lt;/label&gt;
      &lt;select name="languages" id="lang"&gt;
        &lt;option value="select"&gt;Select a Language&lt;/option&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre><pre><code class="language-css"> select {
        margin-bottom: 10px;
        margin-top: 10px;
        font-family: cursive, sans-serif;
        outline: 0;
        background: #2ecc71;
        color: #fff;
        border: 1px solid crimson;
        padding: 4px;
        border-radius: 9px;
      }
</code></pre><p>Nesse exemplo de código CSS acima, eu dei ao texto na caixa de seleção a seguinte aparência:</p><ul><li>uma família de fonte cursiva e cor branca,</li><li>um contorno (<em>outline</em>) de 0 para remover o contorno feio quando está em foco,</li><li>um fundo esverdeado,</li><li>uma borda carmesim (vermelha) de 1 pixel,</li><li>um raio de borda de 4 pixels para obter uma borda ligeiramente arredondada em todos os lados</li><li>e um preenchimento de 4 pixels para espaçar um pouco as coisas.</li></ul><p>A caixa de seleção agora parece melhor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/select-styled.gif" class="kg-image" alt="select-styled" width="600" height="358" loading="lazy"></figure><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>A tag <em>select</em> é muito útil quando você está fazendo menus suspensos ou listas de opções (pré-definidas) em HTML. É como um botão de opção (<em>radio button</em>, em inglês) e uma caixa de seleção (<em>checkbox</em>, em inglês), tudo em um único lugar.</p><p>Lembre-se de que, com o botão de opção, você só consegue selecionar um item de uma lista. Com a caixa de seleção, porém, você pode selecionar vários itens. <em>Select</em> é mais flexível, pois você consegue configurá-lo para que aceite um único item ou diversos itens.</p><p>Um problema com a tag <em>select</em> é a grande dificuldade para estilizá-la. Uma solução razoável é utilizar uma biblioteca do CSS que ofereça ótimas classes utilitárias para estilizar um formulário junto com o elemento <em>select</em>.</p><p>Eu espero que este tutorial tenha deixado você mais familiarizado com a tag <em>select</em> para que você possa começar a usá-la em seus projetos.</p><p>Obrigado pela leitura e continue programando.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Componentes de HTML reutilizáveis – como reutilizar o cabeçalho e o rodapé num site da web ]]>
                </title>
                <description>
                    <![CDATA[ > Tradução realizada em português europeu Imagina que estás a criar um site para um cliente, uma pequena loja familiar, que tem apenas duas páginas. Não é muita coisa. Por isso, quando terminas a página principal e começas a trabalhar na página de contactos, simplesmente crias um ficheiro HTML e ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/componentes-de-html-reutilizaveis-como-reutilizar-o-cabecalho-e-o-rodape-num-site-da-web/</link>
                <guid isPermaLink="false">641d633702ec1d064260e670</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Afonso Branco ]]>
                </dc:creator>
                <pubDate>Tue, 16 May 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/5f9c986b740569d1a4ca19f5.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/reusable-html-components-how-to-reuse-a-header-and-footer-on-a-website/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Reusable HTML Components – How to Reuse a Header and Footer on a Website</a>
      </p><blockquote>Tradução realizada em português europeu</blockquote><p>Imagina que estás a criar um site para um cliente, uma pequena loja familiar, que tem apenas duas páginas.</p><p>Não é muita coisa. Por isso, quando terminas a página principal e começas a trabalhar na página de contactos, simplesmente crias um ficheiro HTML e copias todo o código da primeira página.</p><p>O cabeçalho e o rodapé já têm bom aspeto e tudo o que precisas fazer é alterar o conteúdo restante.</p><p>O que fazer, no entanto, se o teu cliente quiser 10 páginas? Ou 20? Como farias se ele pedir pequenas alterações no cabeçalho e no rodapé ao longo do desenvolvimento?</p><p>De repente, qualquer alteração, por mais pequena que seja, tem de ser repetida ao longo de todos os ficheiros.</p><p>Esse é um dos maiores problemas que coisas como o React ou Handlebars.js ajudam a resolver: qualquer código, em especial, coisas estruturais como o cabeçalho ou o rodapé, pode ser escrito uma vez e reutilizado ao longo do projeto.</p><p>Até bem recentemente, era impossível utilizar componentes em HTML simples e em JavaScript. Porém, com a introdução dos Web Components, é possível criar componentes reutilizáveis sem utilizar coisas como o React.</p><h2 id="o-que-s-o-os-web-components"><strong>O que são os </strong>Web Components<strong>?</strong></h2><p>Os Web Components são, na realidade, uma coleção de algumas tecnologias diferentes que te permitem criar elementos HTML personalizados.</p><p>Essas tecnologias são:</p><ul><li><strong><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots">T</a><strong><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots">emplates</a></strong><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots"> HTM</a><strong><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots">L</a></strong></strong> (texto em inglês): fragmentos de código HTML utilizando elementos <code>&lt;template&gt;</code> que não vão ser renderizados até que sejam anexados à página com JavaScript.</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements"><strong>Elementos personalizados</strong></a> (texto em inglês): APIs do JavaScript com vasto suporte que te permitem criar elementos do DOM. Assim que criares e registares um elemento personalizado através dessas APIs, poderás utilizá-lo de modo semelhante a um componente do React.</li><li><strong><strong><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM">Shadow DOM</a></strong></strong> (texto em inglês): é um DOM menor, encapsulado, que está isolado do DOM principal e renderizado separadamente. Os estilos e scripts que crias para teus componentes personalizados no Shadow DOM não afetarão outros elementos no DOM principal.</li></ul><p>Vamos abordar cada uma dessas tecnologias ao longo do tutorial.</p><h2 id="como-utilizar-templates-de-html"><strong>Como utilizar <em>templates </em>de HTML</strong></h2><p>A primeira peça do quebra-cabeças é aprender como utilizar <em>templates </em>de HTML para criar código HTML reutilizável.</p><p>Vamos observar um exemplo de uma simples mensagem de boas-vindas:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
    &lt;script src="index.js" type="text/javascript" defer&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;template id="welcome-msg"&gt;
      &lt;h1&gt;Hello, World!&lt;/h1&gt;
      &lt;p&gt;And all who inhabit it&lt;/p&gt;
    &lt;/template&gt;
  &lt;/body&gt;
&lt;html&gt;
</code></pre><figcaption>index.html</figcaption></figure><p>Se observares a página, nem os elementos <code>&lt;h1&gt;</code> nem os <code>&lt;p&gt;</code> são renderizados. Se, contudo, abrires a consola de desenvolvimento, verás que ambos os elementos foram analisados:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-50.png" class="kg-image" alt="image-50" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/image-50.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/image-50.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-50.png 1186w" width="1186" height="692" loading="lazy"></figure><p>Para renderizar mesmo a mensagem de boas-vindas, vais precisar de utilizar um pouco de JavaScript:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const template = document.getElementById('welcome-msg');

document.body.appendChild(template.content);
</code></pre><figcaption>index.js</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-51.png" class="kg-image" alt="image-51" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/image-51.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/image-51.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-51.png 1157w" width="1157" height="683" loading="lazy"></figure><p>Embora esse seja um exemplo bastante simples, já é possível veres como a utilização de <em>templates </em>torna mais fácil reutilizar código ao longo da página.</p><p>O principal problema é que, pelo menos no exemplo atual, o código da mensagem de boas-vindas está misturado com o resto do conteúdo da página. Se desejares alterar a mensagem mais tarde, terás de alterar o código em vários ficheiros.</p><p>Em vez disso, podes puxar o <em>template </em>HTML para o ficheiro JavaScript, de maneira a que qualquer página onde o JavaScript está incluido irá renderizar a mensagem de boas-vindas:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
    &lt;script src="index.js" type="text/javascript" defer&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
      
  &lt;/body&gt;
&lt;html&gt;
</code></pre><figcaption>index.html</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-js">const template = document.createElement('template');

template.innerHTML = `
  &lt;h1&gt;Hello, World!&lt;/h1&gt;
  &lt;p&gt;And all who inhabit it&lt;/p&gt;
`;

document.body.appendChild(template.content);
</code></pre><figcaption>index.js</figcaption></figure><p>Agora que temos tudo no ficheiro JavaScript, não é necessário criares um elemento <code>&lt;template&gt;</code> – podes simplesmente criar um elemento <code>&lt;div&gt;</code> ou <code>&lt;span&gt;</code>.</p><p>No entanto, os elementos <code>&lt;template&gt;</code> podem ser combinados com um elemento <code>&lt;slot&gt;</code>, que te permite fazer coisas como alterar o texto para elementos dentro de <code>&lt;template&gt;</code>. É um pouco fora do âmbito deste tutorial. Por isso, podes ler mais sobre elementos <code>&lt;slot&gt;</code> <a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots#Adding_flexibility_with_slots">na MDN</a> (texto em inglês).</p><h2 id="como-criar-elementos-personalizados"><strong>Como criar elementos personalizados</strong></h2><p>Uma coisa que podes ter reparado ao utilizar <em>templates </em>de HTML é que pode ser complicado inserir o teu código no local correto. O exemplo anterior da mensagem de boas-vindas estava apenas anexado à página.</p><p>Se já existisse conteúdo na página, digamos, uma imagem de <em>banner</em>, a mensagem de boas-vindas apareceria abaixo da imagem.</p><p>Como elemento personalizado, a tua mensagem de boas-vindas poderia ter este aspeto:</p><pre><code class="language-html">&lt;welcome-message&gt;&lt;/welcome-message&gt;
</code></pre><p>Poderias colocá-la em qualquer local da página.</p><p>Com isto em mente, vamos observar os elementos personalizados e criar os nossos próprios elementos de cabeçalho e rodapé ao estilo do React.</p><h3 id="configura-o"><strong>Configuração</strong></h3><p>Para um site de portfólio, podes ter algum código predefinido que se pareça com isto:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;main&gt;
      &lt;!-- O conteúdo da tua página --&gt;
    &lt;/main&gt;
  &lt;/body&gt;
&lt;html&gt;
</code></pre><figcaption>index.html</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-css">* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html, body {
  height: 100%;
}

body {
  color: #333;
  font-family: sans-serif;
  display: flex;
  flex-direction: column;
}

main {
  flex: 1 0 auto;
}
</code></pre><figcaption>style.css</figcaption></figure><p>Cada página terá o mesmo cabeçalho e rodapé. Por isso, faz sentido criar um elemento personalizado para cada um deles.</p><p>Vamos começar pelo cabeçalho.</p><h3 id="definir-um-elemento-personalizado"><strong>Definir um elemento personalizado</strong></h3><p>Primeiro, cria uma pasta chamada <code>components</code>. Dentro dessa pasta, cria um ficheiro chamado <code>header.js</code>, com o seguinte código:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">class Header extends HTMLElement {
  constructor() {
    super();
  }
}
</code></pre><figcaption>components/header.js</figcaption></figure><p>É apenas uma simples <code>class</code> do ES5 a declarar o teu componente <code>Header</code> personalizado, com o método <code>constructor</code> e a palavra-chave especial <code>super</code>. Podes ler mais sobre isto <a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Classes">na MDN</a>.</p><p>Ao estender a classe genérica <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement"><code>HTMLElement</code></a>, podes criar qualquer tipo de elemento que queiras. Também é possível extender elementos específicos como <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLParagraphElement"><code>HTMLParagraphElement</code></a>.</p><h3 id="registar-o-teu-elemento-personalizado"><strong>Registar o teu elemento personalizado</strong></h3><p>Antes de começares a utilizar o teu elemento personalizado, vais precisar de o registar com o método <code>customElements.define()</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">class Header extends HTMLElement {
  constructor() {
    super();
  }
}

customElements.define('header-component', Header);
</code></pre><figcaption>components/header.js</figcaption></figure><p>Esse método recebe pelo menos dois argumentos.</p><p>O primeiro é uma <code>DOMString</code> que vais utilizar quando estiveres a adicionar o componente à página, neste caso, <code>&lt;header-component&gt;&lt;/header-component&gt;</code>.</p><p>O próximo é a classe do componente que criaste anteriormente, neste caso, a classe <code>Header</code>.</p><p>O terceiro argumento, é opcional, e descreve qual é o elemento HTML existente do qual o teu elemento personalizado optional vai herdar propriedades, por exemplo, <code>{extends: 'p'}</code>. No entanto, não vamos utilizar esta funcionalidade neste tutorial.</p><h3 id="utilizar-callbacks-de-ciclo-de-vida-para-adicionar-o-cabe-alho-p-gina"><strong>Utilizar <em>callbacks </em>de ciclo de vida para adicionar o cabeçalho à página</strong></h3><p>Existem quatro <em>callbacks </em>de ciclo de vida especiais para elementos personalizados que podemos utilizar para anexar o código do cabeçalho à página: <code>connectedCallback</code>, <code>attributeChangeCallback</code>, <code>disconnectedCallback</code> e <code>adoptedCallback</code>.</p><p>Destas <em>callbacks</em>, <code>connectedCallback</code> é uma das mais utilizadas. <code>connectedCallback</code> executa cada vez que o teu elemento personalizado é inserido no DOM.</p><p>Podes ler mais sobre outras <em>callbacks </em><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements#Using_the_lifecycle_callbacks">aqui</a>.</p><p>Para o nosso simples exemplo, <code>connectedCallback</code> é suficiente para adicionar um cabeçalho à página:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">class Header extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    this.innerHTML = `
      &lt;style&gt;
        nav {
          height: 40px;
          display: flex;
          align-items: center;
          justify-content: center;
          background-color:  #0a0a23;
        }

        ul {
          padding: 0;
        }
        
        a {
          font-weight: 700;
          margin: 0 25px;
          color: #fff;
          text-decoration: none;
        }
        
        a:hover {
          padding-bottom: 5px;
          box-shadow: inset 0 -2px 0 0 #fff;
        }
      &lt;/style&gt;
      &lt;header&gt;
        &lt;nav&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href="about.html"&gt;About&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="work.html"&gt;Work&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="contact.html"&gt;Contact&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/nav&gt;
      &lt;/header&gt;
    `;
  }
}

customElements.define('header-component', Header);
</code></pre><figcaption>components/header.js</figcaption></figure><p>Depois, no <code>index.html</code>, adiciona o script <code>components/header.js</code> e <code>&lt;header-component&gt;&lt;/header-component&gt;</code> logo acima do elemento <code>&lt;main&gt;</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
    &lt;script src="components/header.js" type="text/javascript" defer&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;header-component&gt;&lt;/header-component&gt;
    &lt;main&gt;
      &lt;!-- O conteúdo da tua página --&gt;
    &lt;/main&gt;
  &lt;/body&gt;
&lt;html&gt;
</code></pre><figcaption>index.html</figcaption></figure><p>O teu componente de cabeçalho reutilizável, agora, deve ser renderizado na página:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-54.png" class="kg-image" alt="image-54" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/image-54.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/image-54.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/05/image-54.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-54.png 1916w" sizes="(min-width: 1200px) 1200px" width="1916" height="787" loading="lazy"></figure><p>Agora, adicionar um cabeçalho à página é tão simples como adicionar uma tag <code>&lt;script&gt;</code> a apontar para <code>components/header.js</code>, e adicionar <code>&lt;header-component&gt;&lt;/header-component&gt;</code> onde quiseres.</p><p>Nota que, visto que o cabeçalho e a sua estilização estão a ser inseridos diretamente no DOM principal, é possível estilizá-lo no ficheiro <code>style.css</code>.</p><p>Se, contudo, observares os estilos do cabeçalho em <code>connectedCallback</code>, estes são bastante genéricos e podem afetar outros estilos na página.</p><p>Por exemplo, se adicionarmos o Font Awesome e um componente de rodapé a <code>index.html</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" integrity="sha512-+4zCK9k+qNFUR5X+cKL9EIR+ZOhtIloNl9GIKS57V1MyNsYpYcUrUeQc9vNfzsWfV28IaLL3i96P9sdNyeRssA==" crossorigin="anonymous" /&gt;
    &lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
    &lt;script src="components/header.js" type="text/javascript" defer&gt;&lt;/script&gt;
    &lt;script src="components/footer.js" type="text/javascript" defer&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;header-component&gt;&lt;/header-component&gt;
    &lt;main&gt;
      &lt;!-- O conteúdo da tua página --&gt;
    &lt;/main&gt;
    &lt;footer-component&gt;&lt;/footer-component&gt;
  &lt;/body&gt;
&lt;html&gt;
</code></pre><figcaption>index.html</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-js">class Footer extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    this.innerHTML = `
      &lt;style&gt;
        footer {
          height: 60px;
          padding: 0 10px;
          list-style: none;
          display: flex;
          justify-content: space-between;
          align-items: center;
          background-color: #dfdfe2;
        }
        
        ul li {
          list-style: none;
          display: inline;
        }
        
        a {
          margin: 0 15px;
          color: inherit;
          text-decoration: none;
        }
        
        a:hover {
          padding-bottom: 5px;
          box-shadow: inset 0 -2px 0 0 #333;
        }
        
        .social-row {
          font-size: 20px;
        }
        
        .social-row li a {
          margin: 0 15px;
        }
      &lt;/style&gt;
      &lt;footer&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href="about.html"&gt;About&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="work.html"&gt;Work&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="contact.html"&gt;Contact&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
        &lt;ul class="social-row"&gt;
          &lt;li&gt;&lt;a href="https://github.com/my-github-profile"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="https://twitter.com/my-twitter-profile"&gt;&lt;i class="fab fa-twitter"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="https://www.linkedin.com/in/my-linkedin-profile"&gt;&lt;i class="fab fa-linkedin"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/footer&gt;
    `;
  }
}

customElements.define('footer-component', Footer);
</code></pre><figcaption>components/footer.js</figcaption></figure><p>Aqui está como ficaria o aspeto da página:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-55.png" class="kg-image" alt="image-55" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/image-55.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/image-55.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/05/image-55.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-55.png 1919w" sizes="(min-width: 1200px) 1200px" width="1919" height="1001" loading="lazy"></figure><p>A estilização do rodapé sobrepõe-se à estilização do cabeçalho, alterando a cor dos links. Este é o comportamento esperado para o CSS, mas seria interessante se a estilização de cada componente estivesse vinculada a esse componente, sem afetar outras coisas na página.</p><p>Bem, é mesmo onde o <em>Shadow DOM</em> brilha. Ou escurece? De qualquer modo, o <em>Shadow DOM</em> pode fazer isso.</p><h3 id="como-utilizar-o-shadow-dom-com-elementos-personalizados"><strong>Como utilizar o <em>Shadow DOM</em> com elementos personalizados</strong></h3><p>O <em>Shadow DOM </em>funciona como uma instância separada e mais pequena do DOM principal. Em vez de funcionar como uma cópia do DOM principal, o <em>Shadow DOM</em> é mais uma sub-árvore apenas para o teu elemento personalizado. Qualquer coisa adicionada a ele, especialmente os estilos, está vinculada a esse elemento personalizado em particular.</p><p>De certo modo, é como utilizar <code>const</code> e <code>let</code> em vez de <code>var</code>.</p><p>Vamos começar por refatorizar o componente de cabeçalho:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const headerTemplate = document.createElement('template');

headerTemplate.innerHTML = `
  &lt;style&gt;
    nav {
      height: 40px;
      display: flex;
      align-items: center;
      justify-content: center;
      background-color:  #0a0a23;
    }

    ul {
      padding: 0;
    }
    
    ul li {
      list-style: none;
      display: inline;
    }
    
    a {
      font-weight: 700;
      margin: 0 25px;
      color: #fff;
      text-decoration: none;
    }
    
    a:hover {
      padding-bottom: 5px;
      box-shadow: inset 0 -2px 0 0 #fff;
    }
  &lt;/style&gt;
  &lt;header&gt;
    &lt;nav&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="about.html"&gt;About&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="work.html"&gt;Work&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="contact.html"&gt;Contact&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/nav&gt;
  &lt;/header&gt;
`;

class Header extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    
  }
}

customElements.define('header-component', Header);
</code></pre><figcaption>components/header.js</figcaption></figure><p>A primeira coisa que precisas fazer é utilizar o método <code>.attachShadow()</code> para anexar uma raiz do <em>Shadow Dom</em> ao teu elemento de componente de cabeçalho personalizado. Em <code>connectedCallback</code>, adiciona o seguinte código:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">...
class Header extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    const shadowRoot = this.attachShadow({ mode: 'closed' });
  }
}

customElements.define('header-component', Header);
</code></pre><figcaption>components/header.js</figcaption></figure><p>Repara que estamos a passar um objeto para <code>.attachShadow()</code> com uma opção, <code>mode: 'closed'</code>. Isto significa apenas que o <em>Shadow DOM </em>do componente de cabeçalho não é acessível a partir de JavaScript externo.</p><p>Se quiseres manipular o <em>Shadow DOM </em>do componente de cabeçalho mais tarde com JavaScript fora do ficheiro <code>components/header.js</code>, simplesmente muda a opção para <code>mode: 'open'</code>.</p><p>Por fim, anexa <code>shadowRoot</code> à página com o método <code>.appendChild()</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">...

class Header extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    const shadowRoot = this.attachShadow({ mode: 'closed' });

    shadowRoot.appendChild(headerTemplate.content);
  }
}

customElements.define('header-component', Header);
</code></pre><figcaption>components/header.js</figcaption></figure><p>Agora, visto que os estilos de componente do cabeçalho estão encapsulados no seu <em>Shadow DOM</em>, a página deve ter este aspeto:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-56.png" class="kg-image" alt="image-56" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/image-56.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/image-56.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/05/image-56.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/image-56.png 1921w" sizes="(min-width: 1200px) 1200px" width="1921" height="1005" loading="lazy"></figure><p>Aqui está o componente de rodapé refatorizado para utilizar o <em>Shadow DOM</em>:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const footerTemplate = document.createElement('template');

footerTemplate.innerHTML = `
  &lt;style&gt;
    footer {
      height: 60px;
      padding: 0 10px;
      list-style: none;
      display: flex;
      flex-shrink: 0;
      justify-content: space-between;
      align-items: center;
      background-color: #dfdfe2;
    }

    ul {
      padding: 0;
    }
    
    ul li {
      list-style: none;
      display: inline;
    }
    
    a {
      margin: 0 15px;
      color: inherit;
      text-decoration: none;
    }
    
    a:hover {
      padding-bottom: 5px;
      box-shadow: inset 0 -2px 0 0 #333;
    }
    
    .social-row {
      font-size: 20px;
    }
    
    .social-row li a {
      margin: 0 15px;
    }
  &lt;/style&gt;
  &lt;footer&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="about.html"&gt;About&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="work.html"&gt;Work&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="contact.html"&gt;Contact&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul class="social-row"&gt;
      &lt;li&gt;&lt;a href="https://github.com/my-github-profile"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="https://twitter.com/my-twitter-profile"&gt;&lt;i class="fab fa-twitter"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="https://www.linkedin.com/in/my-linkedin-profile"&gt;&lt;i class="fab fa-linkedin"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/footer&gt;
`;

class Footer extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    const shadowRoot = this.attachShadow({ mode: 'closed' });

    shadowRoot.appendChild(footerTemplate.content);
  }
}

customElements.define('footer-component', Footer);
</code></pre><figcaption>components/footer.js</figcaption></figure><p>Contudo, se observares a página, podes ver que os ícones do Font Awesome estão em falta:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/missing-fa-icons-1.png" class="kg-image" alt="missing-fa-icons-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/missing-fa-icons-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/missing-fa-icons-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/missing-fa-icons-1.png 1535w" sizes="(min-width: 1200px) 1200px" width="1535" height="785" loading="lazy"></figure><p>Agora que o componente de rodapé está encapsulado dentro do seu próprio <em>Shadow DOM</em>, já não tem acesso ao link CDN do Font Awesome em <code>index.html</code>.</p><p>Vamos observar rapidamente a razão disto acontecer e como voltar a colocar o Font Awesome a funcionar.</p><h2 id="encapsulamento-e-o-shadow-dom"><strong>Encapsulamento e o <em>Shadow DOM</em></strong></h2><p>Enquanto que o <em>Shadow DOM</em> impede que os estilos dos teus componentes afetem o resto da página, alguns estilos globais podem infiltrar-se na mesma nos teus componentes.</p><p>Nos exemplos acima, isto era uma funcionalidade útil. Por exemplo, o componente de rodapé herda a declaração <code>color: #333</code> que é definida em <code>style.css</code>. Isto acontece porque <code>color</code> é uma das propriedades que podem ser herdadas, juntamente com <code>font</code>, <code>font-family</code>, <code>direction</code>, entre outras.</p><p>Se quiseres impedir este comportamento e estilizar cada componente completamente do zero, podes fazê-lo com apenas algumas linhas de CSS:</p><pre><code class="language-css">:host {
  all: initial;
  display: block;
}</code></pre><p><code>:host</code> é um pseudosseletor que seleciona o elemento que está a hospedar o <em>Shadow DOM</em>. Neste caso, é o teu componente personalizado.</p><p>Então, a declaração <code>all: initial</code> redefine todas as propriedades CSS de volta para os seus valores iniciais. <code>display: block</code> faz a mesma coisa para a propriedade <code>display</code> e redefine a propriedade de volta para a predefinição do navegador, <code>block</code>.</p><p>Para uma lista completa de propriedades do CSS que podem ser herdadas, observa esta <a href="https://stackoverflow.com/questions/5612302/which-css-properties-are-inherited">resposta no Stack Overflow</a> (texto em inglês).</p><h2 id="como-utilizar-o-font-awesome-com-o-shadow-dom"><strong>Como utilizar o Font Awesome com o <em>Shadow DOM</em></strong></h2><p>Agora, podes estar a pensar, se <code>font</code>, <code>font-family</code> e outras propriedades do CSS relacionadas com tipos de letra são propriedades que podem ser herdadas, porque é que o Font Awesome não carrega agora que o componente de rodapé está a utilizar o <em>Shadow DOM</em>?</p><p>Acontece que, para coisas como fontes e outros recursos, estas precisam de ser referenciadas tanto no DOM principal como no <em>Shadow DOM </em>para funcionar corretamente.</p><p>Felizmente, existem algumas formas simples de corrigir isto.</p><p>Observação: todos estes métodos ainda requerem que o Font Awesome seja incluído em <code>index.html</code>, com o elemento <code>link</code> tal como no trecho de código acima.</p><h3 id="n-1-link-para-o-font-awesome-dentro-do-teu-componente"><strong>Nº 1: Link para o Font Awesome dentro do teu componente</strong></h3><p>A forma mais direta de fazer com que o Font Awesome funcione no teu componente do <em>Shadow DOM</em> é incluir um <code>link</code> para ele dentro do próprio componente:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const footerTemplate = document.createElement('template');

footerTemplate.innerHTML = `
  &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" integrity="sha512-+4zCK9k+qNFUR5X+cKL9EIR+ZOhtIloNl9GIKS57V1MyNsYpYcUrUeQc9vNfzsWfV28IaLL3i96P9sdNyeRssA==" crossorigin="anonymous" /&gt;
  &lt;style&gt;
    footer {
      height: 60px;
      padding: 0 10px;
      list-style: none;
...</code></pre><figcaption>components/footer.js</figcaption></figure><p>Uma coisa a ter em conta é que, embora pareça que estás a causar que o navegador carregue duas vezes o Font Awesome (uma para o DOM principal e novamente para o componente), os navegadores são suficientemente inteligentes para não buscar o mesmo recurso novamente.</p><p>Aqui está o separador de rede a mostrar que o Chrome vai buscar o Font Awesome uma só vez:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/Screenshot-from-2021-09-12-14-53-01.png" class="kg-image" alt="Screenshot-from-2021-09-12-14-53-01" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/Screenshot-from-2021-09-12-14-53-01.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/Screenshot-from-2021-09-12-14-53-01.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/Screenshot-from-2021-09-12-14-53-01.png 1002w" width="1002" height="261" loading="lazy"></figure><h3 id="n-2-importar-o-font-awesome-dentro-do-teu-componente"><strong>Nº 2: Importar o Font Awesome dentro do teu componente</strong></h3><p>De seguida, podes utilizar <code>@import</code> e <code>url()</code> para carregar o Font Awesome no teu componente:</p><pre><code class="language-js">const footerTemplate = document.createElement('template');

footerTemplate.innerHTML = `
  &lt;style&gt;
    @import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css");

    footer {
      height: 60px;
      padding: 0 10px;
      list-style: none;
...</code></pre><p>Nota que o URL deve ser o mesmo que estás a utilizar em <code>index.html</code>.</p><h3 id="n-3-utilizar-javascript-para-carregar-dinamicamente-o-font-awesome-para-o-teu-componente"><strong>Nº 3: Utilizar JavaScript para carregar dinamicamente o Font Awesome para o teu componente</strong></h3><p>Por fim, a forma mais prática de carregar o Font Awesome dentro do teu componente é utilizar um pouco de JavaScript:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">...
class Footer extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    // Query para o DOM principal para FA
    const fontAwesome = document.querySelector('link[href*="font-awesome"]');
    const shadowRoot = this.attachShadow({ mode: 'closed' });

    // Carregar condicionalmente FA para o componente
    if (fontAwesome) {
      shadowRoot.appendChild(fontAwesome.cloneNode());
    }

    shadowRoot.appendChild(footerTemplate.content);
  }
}

customElements.define('footer-component', Footer);</code></pre><figcaption>components/footer.js</figcaption></figure><p>Este método é baseado nesta <a href="https://stackoverflow.com/a/55360574">resposta no Stack Overflow</a> (texto em inglês) e funciona de modo bastante simples. Quando o componente carrega, se um elemento <code>link</code> a apontar para o Font Awesome existir, então é clonado e anexado ao <em>Shadow DOM </em>do componente:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/Screenshot-from-2021-09-12-19-31-19.png" class="kg-image" alt="Screenshot-from-2021-09-12-19-31-19" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/Screenshot-from-2021-09-12-19-31-19.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/Screenshot-from-2021-09-12-19-31-19.png 909w" width="909" height="187" loading="lazy"></figure><h2 id="c-digo-final"><strong>Código final</strong></h2><p>Aqui está como fica o código final ao longo de todos os ficheiros, utilizando o método nº 3 para carregar o Font Awesome no componente de rodapé:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" integrity="sha512-+4zCK9k+qNFUR5X+cKL9EIR+ZOhtIloNl9GIKS57V1MyNsYpYcUrUeQc9vNfzsWfV28IaLL3i96P9sdNyeRssA==" crossorigin="anonymous" /&gt;
    &lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
    &lt;script src="components/header.js" type="text/javascript" defer&gt;&lt;/script&gt;
    &lt;script src="components/footer.js" type="text/javascript" defer&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;header-component&gt;&lt;/header-component&gt;
    &lt;main&gt;
      &lt;!-- O conteúdo da tua página --&gt;
    &lt;/main&gt;
    &lt;footer-component&gt;&lt;/footer-component&gt;
  &lt;/body&gt;
&lt;html&gt;
</code></pre><figcaption>index.html</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-css">* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  height: 100%;
}

body {
  color: #333;
  font-family: sans-serif;
  display: flex;
  flex-direction: column;
}

main {
  flex: 1 0 auto;
}
</code></pre><figcaption>style.css</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-js">const headerTemplate = document.createElement('template');

headerTemplate.innerHTML = `
  &lt;style&gt;
    nav {
      height: 40px;
      display: flex;
      align-items: center;
      justify-content: center;
      background-color:  #0a0a23;
    }

    ul {
      padding: 0;
    }
    
    ul li {
      list-style: none;
      display: inline;
    }
    
    a {
      font-weight: 700;
      margin: 0 25px;
      color: #fff;
      text-decoration: none;
    }
    
    a:hover {
      padding-bottom: 5px;
      box-shadow: inset 0 -2px 0 0 #fff;
    }
  &lt;/style&gt;
  &lt;header&gt;
    &lt;nav&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="about.html"&gt;About&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="work.html"&gt;Work&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="contact.html"&gt;Contact&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/nav&gt;
  &lt;/header&gt;
`;

class Header extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    const shadowRoot = this.attachShadow({ mode: 'closed' });

    shadowRoot.appendChild(headerTemplate.content);
  }
}

customElements.define('header-component', Header);
</code></pre><figcaption>components/header.js</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-js">const footerTemplate = document.createElement('template');

footerTemplate.innerHTML = `
  &lt;style&gt;
    footer {
      height: 60px;
      padding: 0 10px;
      list-style: none;
      display: flex;
      flex-shrink: 0;
      justify-content: space-between;
      align-items: center;
      background-color: #dfdfe2;
    }

    ul {
      padding: 0;
    }
    
    ul li {
      list-style: none;
      display: inline;
    }
    
    a {
      margin: 0 15px;
      color: inherit;
      text-decoration: none;
    }
    
    a:hover {
      padding-bottom: 5px;
      box-shadow: inset 0 -2px 0 0 #333;
    }
    
    .social-row {
      font-size: 20px;
    }
    
    .social-row li a {
      margin: 0 15px;
    }
  &lt;/style&gt;
  &lt;footer&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="about.html"&gt;About&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="work.html"&gt;Work&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="contact.html"&gt;Contact&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul class="social-row"&gt;
      &lt;li&gt;&lt;a href="https://github.com/my-github-profile"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="https://twitter.com/my-twitter-profile"&gt;&lt;i class="fab fa-twitter"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="https://www.linkedin.com/in/my-linkedin-profile"&gt;&lt;i class="fab fa-linkedin"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/footer&gt;
`;

class Footer extends HTMLElement {
  constructor() {
    super();
  }

  connectedCallback() {
    const fontAwesome = document.querySelector('link[href*="font-awesome"]');
    const shadowRoot = this.attachShadow({ mode: 'closed' });

    if (fontAwesome) {
      shadowRoot.appendChild(fontAwesome.cloneNode());
    }

    shadowRoot.appendChild(footerTemplate.content);
  }
}

customElements.define('footer-component', Footer);
</code></pre><figcaption>components/footer.js</figcaption></figure><h2 id="para-terminar"><strong>Para terminar</strong></h2><p>Abordamos muita coisa aqui. Podes já ter decidido simplesmente utilizar React ou Handlebars.js em vez disso.</p><p>São ambas óptimas opções!</p><p>Mesmo assim, para um projeto mais pequeno onde vais precisar apenas de alguns componentes reutilizáveis, uma biblioteca completa ou linguagem de <em>template </em>pode ser demasiado.</p><p>Esperançosamente, agora tens a confiança para criar os teus próprios componentes HTML reutilizáveis. Agora, vai lá e cria algo excelente (e reutilizável).</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como fazer o efeito de piscar – tutorial do HTML sobre como usar a tag blink, com exemplos de código ]]>
                </title>
                <description>
                    <![CDATA[ Nos primeiros dias da web, os elementos HTML, como a tag blink, eram maneiras nativas de adicionar alguns efeitos de animação para animar uma página da web. Como podemos usar essas animações hoje para adicionar brilho aos nossos sites e aplicações?  * O que é a tag blink do ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-fazer-o-efeito-de-piscar-tutorial-do-html-sobre-como-usar-a-tag-blink-com-exemplos-de-codigo/</link>
                <guid isPermaLink="false">6407d18c7d24e505217397ff</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Arthur Fücher ]]>
                </dc:creator>
                <pubDate>Tue, 02 May 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/blink-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/make-it-blink-html-tutorial-how-to-use-the-blink-tag-with-code-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Make It Blink HTML Tutorial – How to Use the Blink Tag, with Code Examples</a>
      </p><p>Nos primeiros dias da web, os elementos HTML, como a tag blink, eram maneiras nativas de adicionar alguns efeitos de animação para animar uma página da web. Como podemos usar essas animações hoje para adicionar brilho aos nossos sites e aplicações?</p><ul><li><a href="https://www.freecodecamp.org/portuguese/news/como-fazer-o-efeito-de-piscar-tutorial-do-html-sobre-como-usar-a-tag-blink-com-exemplos-de-codigo/#o-que-a-tag-blink-do-html">O que é a tag blink do HTML?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-fazer-o-efeito-de-piscar-tutorial-do-html-sobre-como-usar-a-tag-blink-com-exemplos-de-codigo/#como-se-usa-a-tag-blink">Como se usa a tag blink?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-fazer-o-efeito-de-piscar-tutorial-do-html-sobre-como-usar-a-tag-blink-com-exemplos-de-codigo/#voc-ainda-pode-usar-a-tag-blink">Você ainda pode usar a tag blink?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-fazer-o-efeito-de-piscar-tutorial-do-html-sobre-como-usar-a-tag-blink-com-exemplos-de-codigo/#recriando-a-tag-blink-com-anima-es-em-css">Recriando a tag blink com animações em CSS</a></li></ul><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/-gU-gkfEA1Q?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="What is the blink Tag in HTML? How to recreate it with CSS animations" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="o-que-a-tag-blink-do-html"><strong>O que é a tag blink do HTML?</strong></h2><p>A tag <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/blink">blink</a> (<code>&lt;blink&gt;</code>) é uma tag HTML obsoleta, que faz o conteúdo da tag piscar lentamente.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/google-search-blink.gif" class="kg-image" alt="google-search-blink" width="1194" height="133" loading="lazy"><figcaption>GIF com o resultado da busca no Google por "blink tag"</figcaption></figure><p>Ela, juntamente com outras tags obsoletas, como a tag <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/marquee">marquee</a> (<code>&lt;marquee&gt;</code>), eram uma maneira fácil de adicionar efeitos de animação simples no seu site.</p><h2 id="como-se-usa-a-tag-blink"><strong>Como se usa a tag blink?</strong></h2><p>Como a tag blink era um elemento HTML simples, você a usaria diretamente com o seu conteúdo.</p><p>Por exemplo, se você quisesse que a palavra "blink" em blink-182 piscasse, você escreveria o seguinte código HTML:</p><pre><code class="language-html">&lt;p&gt;
  &lt;blink&gt;blink&lt;/blink&gt;-182
&lt;/p&gt;</code></pre><h2 id="voc-ainda-pode-usar-a-tag-blink"><strong>Você ainda pode usar a tag blink?</strong></h2><p>Como você deve ter notado no gif acima, essa tag está obsoleta.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/html-blink-browser-compatability.jpg" class="kg-image" alt="html-blink-browser-compatability" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/html-blink-browser-compatability.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/html-blink-browser-compatability.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/04/html-blink-browser-compatability.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/html-blink-browser-compatability.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="983" loading="lazy"><figcaption>Compatibilidade da tag blink nos navegadores</figcaption></figure><p>Isso significa que você não pode usar a tag blink do HTML por si só. No entanto, isso não deve nos impedir de refazer seus efeitos em toda sua glória piscante.</p><p><em>Observação: a tag blink foi depreciada devido a preocupações com acessibilidade. <a href="https://en.wikipedia.org/wiki/Blink_element#Usability_and_accessibility">Faça sua pesquisa</a> (em inglês) antes de tentar usar uma solução que traga o mesmo efeito, pois todos devemos nos esforçar para fazer nossos projetos o mais inclusivos possível.</em></p><h2 id="recriando-a-tag-blink-com-anima-es-em-css"><strong>Recriando a tag blink com animações em CSS</strong></h2><p>Hoje, no mundo do desenvolvimento para a web, animações geralmente são tratadas com CSS ou JavaScript. Usando animações em CSS, conseguimos recriar a tag blink com apenas algumas linhas e a temos funcionando de novo.</p><p>Com o seguinte CSS:</p><pre><code class="language-css">.blink {
  animation: blink 1s steps(1, end) infinite;
}

@keyframes blink {
  0% {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
</code></pre><p>Você pode adicionar a classe <code>.blink</code> a qualquer elemento HTML para fazê-lo piscar.</p><pre><code>&lt;p&gt;
  &lt;span class="blink"&gt;blink&lt;/span&gt;-182
&lt;/p&gt;
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/html-blink-effect.gif" class="kg-image" alt="html-blink-effect" width="1884" height="210" loading="lazy"><figcaption>Efeito de piscar da tag blink do HTML usando o CSS</figcaption></figure><h2 id="modernizando-a-tag-blink"><strong>Modernizando a tag blink</strong></h2><p>Se quiséssemos algo um pouco mais suave, o que poderíamos fazer?</p><p>Bom, para começar, podemos fazer a animação desaparecer gradualmente removendo os <code>steps</code><em> </em>(passos, em português) da definição da animação.</p><pre><code class="language-css">.blink {
  animation: blink 1s infinite;
}
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/css-blink-fade.gif" class="kg-image" alt="css-blink-fade" width="1884" height="210" loading="lazy"><figcaption>Efeito de piscar gradual</figcaption></figure><p>Se quiséssemos fazê-la desaparecer gradualmente como um efeito de ficção científica, seria possível?</p><pre><code>.blink {
  animation: blink 3s infinite;
}

@keyframes blink {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    color: blue;
  }
}
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/css-scfifi-fade.gif" class="kg-image" alt="css-scfifi-fade" width="1884" height="210" loading="lazy"><figcaption>Efeito do CSS de piscar gradualmente</figcaption></figure><p>Também podemos usar um efeito de crescimento e desaparecimento bem legal.</p><pre><code class="language-css">.blink {
  animation: blink 3s infinite;
}

@keyframes blink {
  0% {
    opacity: 1;
  }
  50% {
    opacity: 0;
    transform: scale(2);
  }
  51% {
    opacity: 0;
    transform: scale(0);
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/css-grow-fade.gif" class="kg-image" alt="css-grow-fade" width="1884" height="210" loading="lazy"><figcaption>Efeito de piscar com CSS, com crescimento e desaparecimento</figcaption></figure><h2 id="controlando-as-anima-es-com-css"><strong>Controlando as animações com CSS</strong></h2><p>Embora você não possa mais usar a tag blink, você ainda tem várias opções. O CSS fornece diversas opções de animação nativamente. Então, se você deseja recriar seu passatempo favorito em HTML &nbsp;ou <a href="https://codepen.io/colbyfayock/pen/aEqsL">recriar a sequência do título de "Alien, o oitavo passageiro"</a>, pratique. As possibilidades são virtualmente infinitas.</p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/fay/image/upload/w_2000,h_400,c_fill,q_auto,f_auto/w_1020,c_fit,co_rgb:007079,g_north_west,x_635,y_70,l_text:Source%20Sans%20Pro_64_line_spacing_-10_bold:Colby%20Fayock/w_1020,c_fit,co_rgb:383f43,g_west,x_635,y_6,l_text:Source%20Sans%20Pro_44_line_spacing_0_normal:Follow%20me%20for%20more%20JavaScript%252c%20UX%252c%20and%20other%20interesting%20things!/w_1020,c_fit,co_rgb:007079,g_south_west,x_635,y_70,l_text:Source%20Sans%20Pro_40_line_spacing_-10_semibold:colbyfayock.com/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_68,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_145,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_222,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_295,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/v1/social-footer-card" class="kg-image" alt="Follow me for more Javascript, UX, and other interesting things!" width="600" height="400" loading="lazy"></figure><ul><li><a href="https://twitter.com/colbyfayock">Siga o autor no Twitter</a></li><li><a href="https://youtube.com/colbyfayock">Inscreva-se no canal do autor no YouTube</a></li><li><a href="https://www.colbyfayock.com/newsletter/">✉️ Assine a newsletter do autor</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Curso introdutório de HTML – em português ]]>
                </title>
                <description>
                    <![CDATA[ O freeCodeCamp tem muito orgulho de compartilhar com vocês que está no ar o nosso canal no YouTube – freeCodeCamp em português [https://www.youtube.com/@freecodecampemportugues] – e, com ele, nosso primeiro curso, o curso introdutório de HTML [https://www.youtube.com/watch?v=ijv8-PeLZ_o], criado e produzido por Nielda Karla [https://twitter.com/NieldaKarla/]. Neste curso, você aprenderá a começar a ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/curso-introdutorio-de-html-em-portugues/</link>
                <guid isPermaLink="false">6427ec1b86dbbe0599dba5e1</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Sun, 30 Apr 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/fcc_HTML.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>O freeCodeCamp tem muito orgulho de compartilhar com vocês que está no ar o nosso canal no YouTube – <a href="https://www.youtube.com/@freecodecampemportugues">freeCodeCamp em português</a> – e, com ele, nosso primeiro curso, o <a href="https://www.youtube.com/watch?v=ijv8-PeLZ_o">curso introdutório de HTML</a>, criado e produzido por <a href="https://twitter.com/NieldaKarla/">Nielda Karla</a>.</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/ijv8-PeLZ_o?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Curso Introdutório ao HTML ( Com + de 2 horas de Projeto)" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><p>Neste curso, você aprenderá a começar a utilizar o HTML para produzir suas próprias páginas para a web. Se você está começando a aprender a respeito de tecnologia, a criação de páginas para a web é um ótimo lugar para se começar. O currículo do freeCodeCamp inicia exatamente aí, no <a href="https://www.freecodecamp.org/portuguese/learn/2022/responsive-web-design/">design responsivo para a web</a>, e o freeCodeCamp ensina sobre ele na forma de desafios, nos quais você terá um projeto para realizar enquanto aprende sobre os conceitos mais importantes.</p><p>Durante o curso, <a href="https://www.youtube.com/redirect?event=video_description&amp;redir_token=QUFFLUhqbFdCaEhMTzRObmRodnd0algtakhyWEJqQW9KQXxBQ3Jtc0ttcC12RWhyNThMQlBJNVVuN01zZ1Y2ZlRkSXhncFVfQUVrNlJROHd5SmVLY29jQVVvU1RQVUhnaG1WbDhBQjBRSEdwU3pvRzUtU285N1hPYWtXMldUZkZYXzlyaVQ0anBxRV8zSEszTzN1Y3lzamswNA&amp;q=https%3A%2F%2Ftwitter.com%2Fnieldakarla&amp;v=ijv8-PeLZ_o">Nielda</a> orienta sobre esses conceitos iniciais usando o primeiro desafio da certificação de design responsivo para a web, "Aprenda HTML criando um aplicativo de fotos de gatos".</p><p>Nele, você aprenderá a criar os vários elementos do HTML com base nos elementos e suas respectivas tags. Você verá como criar títulos, parágrafos, listas e o que torna o HTML tão interessante, a criação de links para outras páginas da web.</p><h3 id="o-que-voc-ver-no-curso">O que você verá no curso?</h3><p>Aqui, você verá uma versão reduzida do conteúdo do curso.</p><p>Nielda inicia o curso introduzindo o significado da sigla HTML (<em>HyperText Markup Language</em>, ou, em português, Linguagem de Marcação de Hipertexto). </p><p>Para desenvolver software em geral, normalmente, é recomendado o uso de editores de código. Com o HTML, não é diferente. Assim, você será apresentado ao Visual Studio Code para criar rapidamente suas páginas em HTML, já que ele vem com uma série de atalhos e funções que tornarão o processo bem mais simplificado – podendo, inclusive, ser utilizado com todos os comandos da interface em português.</p><p>Após a introdução ao VS Code, Nielda ensina você a criar sua primeira página simplificada para a web – o famoso "Olá, mundo!". Além disso, você será apresentado a um validador de HTML, onde você poderá verificar se a marcação em HTML do seu projeto é válida.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/image.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/image.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/04/image.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/image.png 1897w" sizes="(min-width: 1200px) 1200px" width="1897" height="710" loading="lazy"><figcaption><a href="https://validator.w3.org/">Validador de marcação da W3C</a></figcaption></figure><h3 id="tags">Tags</h3><p>Depois de introduzir você ao HTML, começamos a ver as várias tags, os construtores do HTML e de seus elementos, que compõem o núcleo da linguagem.</p><p>Nielda conduzirá você pelo universo das tags do HTML, passando primeiramente pela diferença entre as tags <code>head</code> e <code>body</code> e por como elas interagem para a criação da página em HTML. Você verá que o elemento <code>head</code> é utilizado para conter a metainformação da página (aquela que não é visualizada pelo usuário) e como, no elemento <code>body</code>, construímos a página em si, a interface com a qual o usuário entrará em contato.</p><p>Depois, passamos à tag <code>meta</code>, presente apenas em <code>head</code> e responsável pelas informações relevantes sobre o site.</p><p>Ao começar a tratar do elemento <code>body</code>, você será apresentado aos primeiros elementos de texto, os títulos, de <code>h1</code> a <code>h6</code>, que são os vários formatos de título que podemos utilizar na linguagem, bem como o elemento <code>p</code>, utilizado para a exibição de parágrafos em HTML.</p><p>Para aumentar a organização do conteúdo visível, somos apresentados às tags <code>header</code> (cabeçalho), <code>main</code> (conteúdo principal), <code>footer</code> (rodapé) e <code>aside</code> (conteúdo "lateral"), que, embora não apareçam visualmente na página, demarcam espaços nos quais colocaremos o conteúdo da página, e definiremos sua importância para o usuário. Além delas, vemos as tags <code>section</code> e <code>article</code>, importantes para marcar seções da página e conteúdo independente.</p><p>Durante o curso, você verá também tags usadas para realçar texto, como a tag para indicar ênfase, <code>em</code>, e a tag para reforçar texto, <code>strong</code>, os equivalentes semânticos de <em>itálico</em> e <strong>negrito</strong>, respectivamente.</p><p>A instrutora também introduz brevemente os atributos em HTML, apresentando <code>id</code> e <code>class</code> que, mais tarde, serão utilizados para identificar, individualmente, no caso do primeiro, e em grupo, no caso do segundo, elementos do HTML para identificá-los na estilização com o CSS ou para realizarmos ações com eles com o JavaScript.</p><p>Voltando aos elementos de organização do texto, vemos como criar listas usando as tags <code>ul</code> e <code>ol</code>, para criação de listas não ordenadas e ordenadas, respectivamente. Vemos, também, a utilização da tag <code>nav</code> para a criação de menus.</p><p>Para dar ao conteúdo do site um pouco mais de riqueza visual, somos também apresentados à tag <code>img</code>, responsável pela inserção de imagens no HTML. Com ela, você poderá adicionar as várias fotos de gatos (ou o que você quiser adicionar) ao seu site.</p><p>Logo depois, passamos à criação de formulários em HTML, tão importantes para receber informações diretamente do usuário. Nesta parte, Nielda introduz os elementos <code>form</code> (para envolver e criar o formulário), seu atributo <code>action</code>, que ditará o que será feito com as informações inseridas no formulário, os vários tipos de <code>input</code> - numéricos, de texto, para senhas e assim por diante. Vemos, nesta seção, como atribuir textos descritivos aos campos de <code>input</code> usando a tag <code>label</code>, bem como dividir campos do formulário com <code>fieldset</code>. A seção de formulários encerra com a criação de botões de envio de formulário e de redefinição (limpeza) dos campos, usando a tag <code>button</code>.</p><p>A criação de hiperlinks é o que torna o HTML tão rico e útil. Vemos a utilização da tag <code>a</code> para a realização desses vínculos e como associar sua página principal à página de formulário e a uma página com a galeria das fotos dos gatos, objetivo do projeto desde o início. Você terá aprendido, então, ao final do curso, a criar uma página inicial para a aplicação, uma página de galeria de fotos e uma página de formulário. O resultado pode ser visto abaixo:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/App.png" class="kg-image" alt="App" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/App.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/04/App.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/04/App.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/App.png 1920w" sizes="(min-width: 1200px) 1200px" width="1920" height="1025" loading="lazy"><figcaption>As páginas da aplicação, lado a lado</figcaption></figure><p>O curso faz, também, uma breve passagem pela introdução à estilização. Nielda insere um pouco de CSS no código e mostra como fazer isso usando um arquivo CSS externo e usando a tag <code>link</code> no HTML para vinculá-lo à página.</p><p>Você terá neste curso uma ótima introdução ao HTML, aprenderá como construir um site estático, vincular páginas entre si, ter uma galeria de imagens e criar um formulário para obter informações de seu usuário. O curso introdutório de HTML é um primeiro passo orientado com carinho para aqueles que desejam começar a aprender mais sobre o mundo do desenvolvimento para a web.</p><p>Acesse o curso no canal do freeCodeCamp no <a href="https://www.youtube.com/@freecodecampemportugues">YouTube</a> através <a href="https://www.youtube.com/watch?v=ijv8-PeLZ_o">deste link</a> e comece agora sua jornada para a web.</p><p>Confira, também, alguns <a href="https://www.freecodecamp.org/portuguese/news/author/nielda">textos traduzidos</a> pela criadora do curso aqui no editorial do freeCodeCamp.</p><p></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Manual de HTML – aprendizagem de HTML para iniciantes ]]>
                </title>
                <description>
                    <![CDATA[ Introdução Boas-vindas! Eu escrevi esse manual para ajudar você a aprender HTML de maneira rápida e para se familiarizar com tópicos avançados de HTML. HTML, forma abreviada de Hypertext Markup Language (em português, linguagem de marcação de hipertexto), é um dos blocos fundamentais da web. O HTML nasceu oficialmente em ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/</link>
                <guid isPermaLink="false">6346fc50287f9a05e0d4d424</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Nielda Karla ]]>
                </dc:creator>
                <pubDate>Thu, 16 Mar 2023 21:20:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-07-21-at-11.20.52-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-html-handbook/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The HTML Handbook – Learn HTML for Beginners</a>
      </p><h1 id="introdu-o"><strong>Introdução</strong></h1><p>Boas-vindas! Eu escrevi esse manual para ajudar você a aprender HTML de maneira rápida e para se familiarizar com tópicos avançados de HTML.</p><p>HTML, forma abreviada de <em>Hypertext Markup Language </em>(em português, linguagem de marcação de hipertexto), é um dos blocos fundamentais da web.</p><p>O HTML nasceu oficialmente em 1993 e, desde então, evoluiu até o ponto atual, partindo de simples documentos de texto até as poderosas aplicações para a web. </p><p>Este manual é destinado a um público bem amplo. </p><p>Primeiro, o público iniciante. Eu explico HTML do zero de uma maneira sucinta, mas abrangente. Assim, você pode usar este manual para aprender HTML desde o básico. </p><p>Depois, temos o público profissional. O HTML é, com frequência, considerado algo secundário a ser aprendido e, muitas vezes, não recebe a devida atenção.</p><p>Ainda assim, diversos aspectos do HTML permanecem um mistério para muitas pessoas, inclusive para o autor deste artigo. Escrevi este manual para me ajudar a entender melhor esse tópico. Afinal, quando se decide ensinar algo, melhor se certificar de que se conhece o assunto de uma ponta a outra.</p><p>Mesmo que você não escreva HTML no seu dia a dia de trabalho, saber como o HTML funciona ajudará você a evitar dores de cabeça quando precisar entender do tema em algum momento, por exemplo, ao tentar ajustar algo em uma página da web. </p><p>Você pode encontrar o autor pelo <a href="https://twitter.com/flaviocopes">Twitter</a> ou no <a href="https://flaviocopes.com/">site do autor</a>.</p><p><a href="https://flaviocopes.com/page/html-handbook/">Observação: você também pode fazer o download deste manual em inglês no formato PDF/ePub/Mobi e lê-lo off-line.</a></p><h2 id="sum-rio"><strong>Sumário</strong></h2><ul><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#pref-cio">Prefácio</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#html-b-sico">HTML Básico</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#t-tulo-do-documento">Título do documento</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#corpo-do-documento">Corpo do documento</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#tags-que-interagem-com-texto">Tags que interagem com texto</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#links">Links</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#tags-de-cont-iner-e-estrutura-da-p-gina-do-html">Tags de contêiner e estrutura da página do HTML</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#formul-rios">Formulários</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#tabelas">Tabelas</a></li><li><a href="https://freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#tags-de-multim-dia-audio-e-video">Tags de multimídia: <code>audio</code> e <code>video</code></a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#iframes">Iframes</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#imagens">Imagens</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/#acessibilidade">Acessibilidade</a></li></ul><h1 id="pref-cio"><strong>Prefácio</strong></h1><p>O HTML é a base da maravilha que chamamos de web. </p><p>Existe um poder incrível por baixo desse conjunto de regras simples e limitado, que nos permite – desenvolvedores, criadores, designers, escritores e pensadores – criar documentos, aplicações e experiências para pessoas em todo o planeta. </p><p>Meu primeiro livro sobre HTML saiu em 1997 e era chamado "HTML Unleashed", um livro grande e com muitas páginas. </p><p>Mais de vinte anos se passaram, mas o HTML ainda é a base da web, com mudanças mínimas desde então. </p><p>Claro, existem mais <em>tags</em> semânticas, o HTML de apresentação não é mais uma tendência, o CSS agora é o responsável pelo design das coisas, entre outras questões.</p><p>O sucesso do HTML é baseado em uma coisa: simplicidade. </p><p>Ele resistiu ao sequestro pelo dialeto XML via XHTML, quando, no fim, as pessoas notaram que era algo demasiadamente complexo. </p><p>Isso aconteceu por causa de outra característica que ele nos proporciona: <strong>indulgência</strong>. Existem <em>algumas</em> regras, certo, mas depois que você aprende o HTML, passa a ter muita liberdade.</p><p>Os navegadores aprenderam a ser resilientes e a sempre tentar fazer o melhor ao analisar e apresentar o HTML aos usuários.</p><p>Toda a plataforma da web fez uma coisa certa: nunca quebrou a compatibilidade com versões anteriores. Incrivelmente, podemos voltar aos documentos em HTML escritos em 1991 e eles se parecem muito com o que víamos na época.</p><p>Sabemos até qual foi a primeira página da web. Foi esta aqui: <a href="http://info.cern.ch/hypertext/WWW/TheProject.html">http://info.cern.ch/hypertext/WWW/TheProject.html</a></p><p>Você pode ver a fonte da página, graças a outro grande recurso da web e do HTML: <strong>podemos inspecionar o HTML de qualquer página da web.</strong></p><p>Não considere isso uma coisa óbvia. Não conheço nenhuma outra plataforma que nos dê essa capacidade.</p><p>As excepcionais Ferramentas de Desenvolvedor integradas a qualquer navegador nos permitem inspecionar e nos inspirar no HTML escrito por qualquer pessoa no mundo.</p><p>Se você é novo em HTML, este manual tem como objetivo ajudá-lo a começar. Se você é um desenvolvedor da web experiente, este manual ajudará a aprimorar seu conhecimento.</p><p>Aprendi muito escrevendo este manual, mesmo trabalhando com a web há mais de 20 anos, e tenho certeza de que você também encontrará algo novo.</p><p>Talvez você vá reaprender algo antigo de que você esqueceu.</p><p>De qualquer modo, o objetivo do manual é ser útil para você. Espero que ele seja bem-sucedido nisso.</p><h2 id="html-b-sico"><strong><strong>HTML BÁ</strong>SICO</strong></h2><p>HTML é um padrão definido pelo <strong>WHATWG</strong>, um acrônimo para <em>Web Hypertext Application Technology Working Group</em>, uma organização formada por pessoas que trabalham nos navegadores da web mais populares. Isso significa que é basicamente controlado por Google, Mozilla, Apple e Microsoft.</p><p>No passado, o W3C (<em>World Wide Web Consortium</em>) era a organização encarregada de criar o padrão HTML.</p><p>O controle mudou informalmente do W3C para o WHATWG quando ficou claro que o impulso do W3C em direção ao XHTML não era uma boa ideia.</p><p>Se você nunca ouviu falar de XHTML, aqui está uma pequena história. No início dos anos 2000, todos acreditávamos que o futuro da web era o XML (sério). Assim, o HTML deixou de ser uma linguagem de autoria baseada em SGML e passou a ser uma linguagem de marcação XML.</p><p>Foi uma grande mudança. Tínhamos que conhecer e respeitar mais regras, regras mais rígidas.</p><p>No fim, os fornecedores de navegadores perceberam que esse não era o caminho certo para a web e recuaram, criando o que hoje é conhecido como HTML5.</p><p>O W3C realmente não concordou em abrir mão do controle do HTML. Durante anos, tivemos dois padrões concorrentes, cada um com o objetivo de ser o oficial. Ao fim, em 28 de maio de 2019, foi oficializado pelo W3C que a versão do HTML "verdadeira" era a publicada pelo WHATWG.</p><p>Eu mencionei HTML5. Deixe-me falar dessa pequena história. Eu sei, é meio confuso até agora, como acontece com muitas coisas na vida quando muitos atores estão envolvidos, mas também é fascinante.</p><p>Tínhamos a <strong>versão HTML 1</strong> em 1993. <a href="https://tools.ietf.org/html/rfc1983">Aqui está o RFC original</a> (em inglês).</p><p>O <strong><strong><strong><strong>HTML 2</strong></strong></strong></strong> foi lançado em 1995.</p><p>Recebemos o <strong>HTML 3</strong> em janeiro de 1997 e o<strong> HTML 4 </strong>em dezembro de 1997.</p><p>Muita coisa aconteceu!</p><p>Mais de 20 anos se passaram. Houve toda essa onda de XHTML e, ao final, chegamos a essa "coisa" chamada HTML5, que não é mais<em> apenas </em>HTML.</p><p>HTML5 é um termo que agora define todo um conjunto de tecnologias, que inclui HTML, mas adiciona muitas APIs e padrões como WebGL, SVG e muito mais.</p><p>A chave para entender é a seguinte: agora, não existe (mais) uma versão de HTML. É um padrão de vida. Isso é o mesmo que ocorre com o CSS, que é chamado de "3", mas, na realidade, são vários módulos independentes desenvolvidos separadamente. Também é o mesmo que ocorre com o JavaScript, onde temos uma nova edição a cada ano, mas, hoje em dia, a única coisa que importa é quais recursos individuais são implementados pelo mecanismo.</p><p>Sim, nós o chamamos de HTML5, mas o HTML4 é de 1997. Isso é muito tempo para qualquer coisa, especialmente para a web.</p><p>É aqui que o padrão "vive" agora: <a href="https://html.spec.whatwg.org/multipage">https://html.spec.whatwg.org/multipage</a> (em inglês).</p><p>O HTML é a linguagem de marcação que usamos para estruturar o conteúdo que consumimos na web.</p><p>Ele é servido no navegador de diferentes maneiras.</p><ul><li>Ele pode ser gerado por uma aplicação do lado do servidor que o constrói dependendo da solicitação ou dos dados da sessão, por exemplo, uma aplicação de Rails, Laravel ou Django.</li><li>Ele pode ser gerado por uma aplicação em JavaScript do lado do client que gera HTML em tempo real.</li><li>No caso mais simples, ele pode ser armazenado em um arquivo e servido no navegador por um servidor da web.</li></ul><p>Vamos nos aprofundar nesse último caso. Embora, na prática, seja provavelmente o modo menos popular de se gerar HTML, ainda é essencial conhecer seus blocos básicos de construção.</p><p>Por convenção, um arquivo HTML é salvo com uma extensão <code>.html</code> ou <code>.htm</code>.</p><p>Dentro desse arquivo, organizamos o conteúdo usando <strong>tags</strong>.</p><p>As <em>tags</em> envolvem o conteúdo e cada <em>tag</em> dá um significado especial ao texto que envolve.</p><p>Vamos mostrar alguns exemplos.</p><p>Este trecho de HTML cria um parágrafo usando a tag <code>p</code>:</p><pre><code class="language-html">&lt;p&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>Este trecho de HTML cria uma lista de itens usando a tag <code>ul</code>, que significa lista não ordenada. As tags <code>li</code> significam <em>item de lista</em>:</p><pre><code class="language-html">&lt;ul&gt;
  &lt;li&gt;Primeiro item&lt;/li&gt;
  &lt;li&gt;Segundo item&lt;/li&gt;
  &lt;li&gt;Terceiro item&lt;/li&gt;
&lt;/ul&gt;
</code></pre><p>Quando uma página de HTML é servida pelo navegador, as tags são interpretadas e o navegador renderiza os elementos de acordo com as regras que definem sua aparência visual.</p><p>Algumas dessas regras são incorporadas, como quando uma lista é renderizada ou quando um link é sublinhado em azul.</p><p>Algumas outras regras são definidas por você com CSS.</p><p>O HTML não se destina à apresentação. Ele não está preocupado com a aparência das coisas. Em vez disso, seu foco é naquilo que as coisas <em>significam</em>.</p><p>Cabe ao navegador determinar como as coisas ficam, com as diretivas definidas por quem constrói a página, usando a linguagem CSS.</p><p>Agora, esses dois exemplos que fiz são trechos de HTML tirados de um contexto de página.</p><h3 id="estrutura-de-p-gina-do-html"><strong>Estrutura de página do <strong><strong><strong><strong><strong>HTML</strong></strong></strong></strong></strong></strong></h3><p>Vamos criar um exemplo de uma página do HTML adequado.</p><p>As coisas começam com a declaração do <strong>tipo de documento</strong> (também conhecido como <em>doctype</em>), uma maneira de dizer ao navegador que esta é uma página em HTML e qual versão do HTML estamos usando.</p><p>O HTML moderno usa este doctype:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
</code></pre><p>Então, temos o elemento <code>html</code>, que possui uma tag de abertura e outra de fechamento:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
...
&lt;/html&gt;
</code></pre><p>A maioria das tags vem em pares com uma tag de abertura e uma tag de fechamento. A tag de fechamento é escrita da mesma forma que a tag de abertura, mas com um /:</p><pre><code class="language-html">&lt;exemplodetag&gt;Conteúdo&lt;/exemplodetag&gt;
</code></pre><p>Existem algumas tags de fechamento automático, o que significa que elas não precisam de uma tag de fechamento separada, pois <em>não contêm nada nelas</em>.</p><p>A tag inicial <code>html</code> é usada no início do documento, logo após a declaração do tipo de documento.</p><p>A tag final <code>html</code> é a última coisa presente em um documento HTML.</p><p>Dentro do elemento <code>html</code> temos 2 elementos, <code>head</code> e <code>body</code>:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
    ...
    &lt;/head&gt;
    &lt;body&gt;
    ...
    &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Dentro de <code>head</code>, teremos tags que são essenciais para a criação de uma página web, como o título, os metadados, o CSS e o JavaScript internos ou externos. Em especial, coisas que não aparecem diretamente na página, mas apenas ajudam o navegador (ou bots como o bot de pesquisa do Google) a exibi-la corretamente.</p><p>Dentro do <code>body</code>, teremos o conteúdo da página em si – <strong>as coisas visíveis.</strong></p><h3 id="tags-x-elementos"><strong><strong><strong><strong><strong><strong>Tags </strong></strong></strong></strong></strong>x<strong><strong><strong><strong><strong> element</strong></strong></strong></strong></strong>o<strong><strong><strong><strong><strong>s</strong></strong></strong></strong></strong></strong></h3><p>Eu mencionei tags e elementos. Qual é a diferença?</p><p>Os elementos têm uma tag inicial e uma tag de fechamento. Neste exemplo, usamos as tags de abertura e de fechamento de <code>p</code> para criar um elemento <code>p</code>:</p><pre><code class="language-html">&lt;p&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>Assim, um elemento constitui <em>todo o pacote</em>:</p><ul><li>tag de abertura</li><li>conteúdo de texto (e, possivelmente, outros elementos)</li><li>tag de fechamento</li></ul><p>Se um elemento não tiver tag de fechamento, ele será escrito apenas com a tag de abertura e não poderá conter <strong>nenhum conteúdo de texto</strong>.</p><p>Dito isso, posso usar o termo tag ou elemento no manual significando a mesma coisa, exceto se mencionar explicitamente a tag de abertura ou a tag de fechamento.</p><h3 id="atributos"><strong><strong><strong><strong><strong><strong>Atribut</strong></strong></strong></strong></strong>o<strong><strong><strong><strong><strong>s</strong></strong></strong></strong></strong></strong></h3><p>A tag de abertura de um elemento pode ter trechos especiais de informações que podemos anexar. Esses trechos são chamados de <strong>atributos</strong>.</p><p>Atributos têm a sintaxe <code>chave="valor"</code>:</p><pre><code class="language-html">&lt;p class="uma-classe"&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>Você também pode usar aspas simples, mas usar aspas duplas em HTML é uma boa convenção.</p><p>Podemos ter muitos atributos:</p><pre><code class="language-html">&lt;p class="uma-classe" id="um-id"&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>Alguns atributos são booleanos, o que significa que você só precisa da chave:</p><pre><code class="language-html">&lt;script defer src="file.js"&gt;&lt;/script&gt;
</code></pre><p>Os atributos <code>class</code> e <code>id</code> são dois dos mais comuns que você encontrará sendo usados.</p><p>Eles têm um significado especial e são úteis tanto em CSS quanto em JavaScript.</p><p>A diferença entre os dois é que um <code>id</code> é único no contexto de uma página da web. Ele não pode ser duplicado.</p><p>As classes <code>class</code>, por outro lado, podem aparecer várias vezes em vários elementos.</p><p>Além disso, um <code>id</code> é apenas um valor. <code>class</code> pode conter vários valores, separados por um espaço:</p><pre><code class="language-html">&lt;p class="uma-classe outra-classe"&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>É comum usar o traço <code>-</code> para separar palavras em um valor de classe, mas é apenas uma convenção.</p><p>Esses são apenas dois dos atributos possíveis que você pode ter. Alguns atributos são usados ​​apenas para uma tag. Eles são altamente especializados.</p><p>Outros atributos podem ser usados ​​de maneira mais geral. Você acabou de ver <code>id</code> e <code>class</code>, mas temos outros também, como <code>style</code>, que pode ser usado para inserir regras CSS em linha (do inglês, <em>inline</em>) em um elemento.</p><h3 id="diferencia-o-de-mai-sculas-e-min-sculas"><strong>Diferenciação de maiúsculas e minúsculas</strong></h3><p>HTML <strong>não</strong> diferencia maiúsculas de minúsculas. As tags podem ser escritas em letras maiúsculas ou minúsculas. Inicialmente, AS MAIÚSCULAS eram a norma. Hoje, letras minúsculas são a norma. É apenas uma convenção.</p><p>Geralmente, escrevemos assim:</p><pre><code class="language-html">&lt;p&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>Não escrevemos as <em>tags</em> assim:</p><pre><code class="language-html">&lt;P&gt;Um parágrafo de texto&lt;/P&gt;
</code></pre><h3 id="espa-o-em-branco"><strong>Espaço em branco</strong></h3><p>Importante: em HTML, mesmo que você adicione vários espaços em branco em uma linha, ela é <em>recolhida</em> pelo mecanismo do CSS do navegador.</p><p>Por exemplo, a renderização deste parágrafo:</p><pre><code class="language-html">&lt;p&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>é a mesma que esse:</p><pre><code class="language-html">&lt;p&gt;        Um parágrafo de texto&lt;/p&gt;
</code></pre><p>e que esse também:</p><pre><code class="language-html">&lt;p&gt;Um parágrafo

de
           texto          &lt;/p&gt;
</code></pre><blockquote><em>Usando a propriedade do <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/white-space">white-space, do CSS</a>, você pode alterar como as coisas se comportam. Você pode encontrar mais informações sobre como o CSS processa o espaço em branco no <a href="https://www.w3.org/TR/CSS2/text.html#white-space-model">CSS Spec</a> (texto em inglês).</em></blockquote><p>Eu, geralmente, prefiro:</p><pre><code class="language-html">&lt;p&gt;Um parágrafo de texto&lt;/p&gt;
</code></pre><p>ou</p><pre><code class="language-html">&lt;p&gt;
    Um parágrafo de texto
&lt;/p&gt;
</code></pre><p>As tags aninhadas devem ser recuadas com 2 ou 4 caracteres, dependendo de sua preferência:</p><pre><code class="language-html">&lt;body&gt;
    &lt;p&gt;
        Um parágrafo de texto
    &lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Um item de lista&lt;/li&gt;
    &lt;/ul&gt;
&lt;/body&gt;
</code></pre><p>Observação: esse recurso em que o "espaço em branco não é relevante" significa que, se você quiser adicionar espaço adicional, pode acabar bem irritado. Sugiro que você use CSS para ganhar mais espaço quando necessário.</p><p>Observação: em casos especiais, você pode usar a entidade <code>&amp;nbsp;</code> do HTML (um acrônimo que significa e<em>spaço sem quebra</em>) – mais sobre entidades do HTML posteriormente. Acho que isso não deve ser abusado. O CSS é sempre preferido para alterar a apresentação visual.</p><h2 id="t-tulo-do-documento"><strong>TÍTULO DO <strong>DOCUMENT</strong>O</strong></h2><p>A tag <code>head</code> contém tags especiais que definem as propriedades do documento.</p><p>É sempre escrita antes da tag <code>body</code> e logo após a tag <code>html</code> de abertura:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        ...
    &lt;/head&gt;
    ...
&lt;/html&gt;
</code></pre><p>Nunca usamos atributos nessa tag. Também não escrevemos conteúdo nela.</p><p>Ela é apenas um recipiente para outras tags. Dentro dela, podemos ter uma grande variedade de tags, dependendo do que você precisa fazer:</p><ul><li><code>title</code></li><li><code>script</code></li><li><code>noscript</code></li><li><code>link</code></li><li><code>style</code></li><li><code>base</code></li><li><code>meta</code></li></ul><h3 id="tag-title"><strong>Tag<strong><strong><strong><strong><strong> <code>title</code> </strong></strong></strong></strong></strong></strong></h3><p>A tag <code>title</code> determina o título da página. O título é exibido no navegador e é especialmente importante, pois é um dos principais fatores para a otimização de mecanismos de pesquisa (SEO).</p><h3 id="tag-script"><strong>Tag<strong><strong><strong><strong><strong> <code>script</code> </strong></strong></strong></strong></strong></strong></h3><p>Essa tag é usada para adicionar JavaScript à página.</p><p>Você pode incluí-lo em linha, usando uma tag de abertura, o código JavaScript e depois a tag de fechamento:</p><pre><code class="language-html">&lt;script&gt;
... código em JS aqui
&lt;/script&gt;
</code></pre><p>Você também pode carregar um arquivo JavaScript externo usando o atributo <code>src</code>:</p><pre><code class="language-html">&lt;script src="arquivo.js"&gt;&lt;/script&gt;
</code></pre><p>O atributo <code>type</code>, por padrão, é definido como <code>text/javascript</code>. Portanto, é totalmente opcional.</p><p>Há algo muito importante a saber sobre essa tag.</p><p>Às vezes, ela é usada na parte inferior da página, logo antes da tag de fechamento de <code>&lt;/body&gt;</code>. Por quê? Por motivos de desempenho.</p><p>Carregar scripts por padrão bloqueia a renderização da página até que o script seja analisado e carregado.</p><p>Ao colocar os scripts na parte inferior da página, o script é carregado e executado após a página inteira já ser analisada e carregada, proporcionando uma experiência melhor ao usuário em vez de mantê-los na tag <code>head</code>.</p><p>Minha opinião é que isso agora é uma má prática. Deixe o <code>script</code> em paz na tag <code>head</code>.</p><p>No JavaScript moderno, temos uma alternativa que é mais eficiente do que manter o script na parte inferior da página - o atributo <code>defer</code>. Este é um exemplo que carrega um arquivo <code>arquivo.js</code>, relativo ao URL atual:</p><pre><code class="language-html">&lt;script defer src="arquivo.js"&gt;&lt;/script&gt;
</code></pre><p>Esse é o cenário que aciona o caminho mais rápido para uma página de carregamento rápido e para JavaScript de carregamento rápido.</p><p>Observação: o atributo <code>async</code> é semelhante, mas, na minha opinião, é uma opção pior do que <code>defer</code>. Descrevo o porquê, com mais detalhes, na página <a href="https://flaviocopes.com/javascript-async-defer/">https://flaviocopes.com/javascript-async-defer/</a> (texto em inglês).</p><h3 id="tag-noscript"><strong>Tag<strong><strong><strong><strong><strong> <code>noscript</code></strong></strong></strong></strong></strong></strong></h3><p>Essa tag é usada para detectar quando os scripts estão desabilitados no navegador.</p><p>Observação: os usuários podem optar por desabilitar os scripts de JavaScript nas configurações do navegador. O navegador também pode não os suportar por padrão.</p><p>Essa tag é usada de modos diferentes, dependendo do fato de ser colocada no cabeçalho do documento ou no corpo do documento.</p><p>Estamos falando sobre o cabeçalho do documento agora. Então, vamos primeiro apresentar esse uso.</p><p>Nesse caso, a tag <code>noscript</code> pode conter apenas outras tags:</p><ul><li><code>link</code> tags</li><li><code>style</code> tags</li><li><code>meta</code> tags</li></ul><p>Ela serve para alterar os recursos servidos pela página, ou as informações de <code>meta</code>, se os scripts estiverem desabilitados.</p><p>Neste exemplo, configurei um elemento com a classe <code>no-script-alert</code> para que seja exibido se os scripts estiverem desabilitados, pois era <code>display: none</code> por padrão:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        ...
        &lt;noscript&gt;
            &lt;style&gt;
                .no-script-alert {
                    display: block;
                }
            &lt;/style&gt;
        &lt;/noscript&gt;

        ...
    &lt;/head&gt;
    ...
&lt;/html&gt;
</code></pre><p>Vamos resolver o outro caso: se colocado no corpo, pode conter conteúdo, como parágrafos e outras tags, que são renderizadas na UI.</p><h3 id="tag-link"><strong>Tag<strong><strong><strong><strong><strong> <code>link</code> </strong></strong></strong></strong></strong></strong></h3><p>A tag de <code>link</code> é usada para definir relacionamentos entre um documento e outros recursos.</p><p>É usada principalmente para vincular um arquivo CSS externo a ser carregado.</p><p>Esse elemento não possui tag de fechamento.</p><p>Uso:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        ...
        &lt;link href="file.css" rel="stylesheet"&gt;
        ...
    &lt;/head&gt;
    ...
&lt;/html&gt;
</code></pre><p>O atributo <code>media</code> permite o carregamento de diferentes folhas de estilo, dependendo das capacidades do dispositivo:</p><pre><code class="language-html">&lt;link href="file.css" media="screen" rel="stylesheet"&gt;
&lt;link href="print.css" media="print" rel="stylesheet"&gt;
</code></pre><p>Também podemos vincular a outros recursos além de folhas de estilo.</p><p>Por exemplo, podemos associar a um feed de RSS usando</p><pre><code class="language-html">&lt;link rel="alternate" type="application/rss+xml" href="/index.xml"&gt;
</code></pre><p>Ou podemos associar um favicon usando:</p><pre><code class="language-html">&lt;link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"&gt;

&lt;link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"&gt;

&lt;link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"&gt;
</code></pre><p>Essa tag também foi usada para conteúdo de múltiplas páginas, para indicar a página anterior e a próxima usando <code>rel="prev"</code> e <code>rel="next"</code>. Principalmente para o Google. A partir de 2019, o <a href="https://twitter.com/googlewmc/status/1108726443251519489">Google anunciou que não usa mais essa tag</a> porque pode encontrar a estrutura correta da página sem ela.</p><p><strong><strong><strong><strong><strong><strong>T</strong></strong></strong></strong></strong>ag<strong><strong><strong><strong><strong> <code>style</code> </strong></strong></strong></strong></strong></strong></p><p>Essa tag pode ser usada para adicionar estilos ao documento, em vez de carregar uma folha de estilo externa.</p><p>Uso:</p><pre><code class="language-html">&lt;style&gt;
... algum css {}
&lt;/style&gt;
</code></pre><p>Assim como na tag <code>link</code>, você pode usar o atributo <code>media</code> para usar esse CSS apenas na mídia especificada:</p><pre><code class="language-html">&lt;style media="print"&gt;
... algum css {}
&lt;/style&gt;
</code></pre><h3 id="tag-base"><strong><strong><strong><strong><strong><strong>T</strong></strong></strong></strong></strong>ag<strong><strong><strong><strong><strong> <code>base</code> </strong></strong></strong></strong></strong></strong></h3><p>Essa tag é usada para definir um URL base para todos os URLs relativos contidos na página.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        ...
        &lt;base href="https://flaviocopes.com/"&gt;
        ...
    &lt;/head&gt;
    ...
&lt;/html&gt;
</code></pre><h3 id="tag-meta"><strong>Tag<strong><strong><strong><strong><strong> <code>meta</code></strong></strong></strong></strong></strong></strong></h3><p>Tags <code>meta</code> executam uma variedade de tarefas e são muito, muito importantes, especialmente para SEO.</p><p>Elementos <code>meta</code> só tem a tag de abertura. </p><p>A mais básica é a tag <code>meta</code> de descrição, ou <code>description</code>:</p><pre><code class="language-html">&lt;meta name="description" content="Uma página legal"&gt;
</code></pre><p>Ela pode ser usada pelo Google para gerar a descrição da página em suas páginas de resultados, se achar que descreve melhor a página do que o conteúdo da página (não me pergunte como).</p><p>A tag <code>meta</code> <code>charset</code> é usada para definir a codificação de caracteres da página. Essa codificação é a <code>utf-8</code>, na maioria dos casos:</p><pre><code class="language-html">&lt;meta charset="utf-8"&gt;
</code></pre><p>A tag <code>meta</code> <code>robots</code> instrui os bots de mecanismos de busca a indexar uma página ou não:</p><pre><code class="language-html">&lt;meta name="robots" content="noindex"&gt;
</code></pre><p>Ou se eles devem seguir os links ou não:</p><pre><code class="language-html">&lt;meta name="robots" content="nofollow"&gt;
</code></pre><p>Você também pode definir <code>nofollow</code> em links individuais. É assim que você pode definir o <code>nofollow</code> globalmente.</p><p>Você pode combiná-los:</p><pre><code class="language-html">&lt;meta name="robots" content="noindex, nofollow"&gt;
</code></pre><p>O comportamento padrão é <code>index, follow</code>.</p><p>Você pode usar outras propriedades, incluindo <code>nosnippet</code>, <code>noarchive</code>, <code>noimageindex</code> e mais.</p><p>Você também pode simplesmente informar algo ao Google em vez de visar <em>todos</em> os mecanismos de pesquisa:</p><pre><code class="language-html">&lt;meta name="googlebot" content="noindex, nofollow"&gt;
</code></pre><p>Outros mecanismos de pesquisa também podem ter sua própria tag <code>meta</code>.</p><p>Falando nisso, podemos dizer ao Google para desativar alguns recursos. Isso impede a funcionalidade de tradução nos resultados do mecanismo de pesquisa:</p><pre><code class="language-html">&lt;meta name="google" content="notranslate"&gt;
</code></pre><p>A tag <code>meta</code> <code>viewport</code> é usada para informar ao navegador para definir a largura da página com base na largura do dispositivo.</p><pre><code class="language-html">&lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
</code></pre><p><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Mobile/Viewport_meta_tag">Leia mais sobre essa tag aqui</a> (texto em inglês).</p><p>Outra tag <code>meta</code> bastante popular é a <code>http-equiv="refresh"</code>. Esta linha diz ao navegador para esperar 3 segundos e redirecionar para outra página:</p><pre><code class="language-html">&lt;meta http-equiv="refresh" content="3;url=http://flaviocopes.com/outra-pagina"&gt;
</code></pre><p>Usar 0 em vez de 3 redirecionará o mais rápido possível.</p><p>Esta não é uma referência completa. Existem outras tags <code>meta</code> menos usadas.</p><p>Após essa introdução ao título do documento, podemos começar a mergulhar no corpo do documento.</p><h2 id="corpo-do-documento"><strong>CORPO DO DOCUMENTO</strong></h2><p>Após o fechamento da tag <code>head</code>, só podemos ter uma coisa em um documento HTML: o elemento <code>body</code>.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        ...
    &lt;/head&gt;
    &lt;body&gt;
        ...
    &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Assim como as tags <code>head</code> e <code>html</code>, só podemos ter uma tag <code>body</code> em uma página.</p><p>Dentro da tag <code>body</code> temos todas as tags que definem o conteúdo da página.</p><p>Tecnicamente, as tags de abertura e de fechamento de <code>body</code> são opcionais. Considero, no entanto, uma boa prática adicioná-las, apenas para maior clareza.</p><p>Nos próximos capítulos, definiremos a variedade de tags que você pode usar dentro do corpo da página.</p><p>Antes, porém, devemos introduzir uma diferença entre elementos de bloco e elementos em linha (do inglês, <em>inline</em>).</p><h2 id="elementos-de-bloco-x-elementos-em-linha"><strong>Elementos de bloco x elementos em linha</strong></h2><p>Os elementos visuais, aqueles definidos no corpo da página, podem ser geralmente classificados em 2 categorias:</p><ul><li>elementos de bloco (<code>p</code>, <code>div</code>, elementos de título, listas, itens de lista, ...)</li><li>elementos em linha (<code>a</code>, <code>span</code>, <code>img</code>, ...)</li></ul><p>Qual é a diferença?</p><p>Elementos de bloco, quando posicionados na página, não permitem outros elementos próximos a eles, para a esquerda ou para a direita.</p><p>Os elementos em linha podem ficar ao lado de outros elementos em linha.</p><p>A diferença também está nas propriedades visuais que podemos editar usando CSS. Podemos alterar a largura/altura, margem, preenchimento e borda dos elementos em bloco. Não podemos fazer isso para elementos em linha.</p><p>Observe que, usando CSS, podemos alterar o padrão para cada elemento, definindo uma tag <code>p</code> para que seja em linha, por exemplo, ou um <code>span</code> para ser um elemento em bloco.</p><p>Outra diferença é que os elementos em linha podem estar contidos em elementos em bloco. O contrário, no entanto, não é verdade.</p><p>Alguns elementos em bloco podem conter outros elementos em bloco, mas isso depende. A tag <code>p</code>, por exemplo, não permite tal opção.</p><h1 id="tags-que-interagem-com-texto"><strong><strong><strong><strong><strong><strong>TAGS </strong></strong></strong></strong></strong>QUE INTERAGEM COM TEXTO</strong></h1><h2 id="tag-p"><strong><strong><strong><strong><strong><strong>T</strong></strong></strong></strong></strong>ag<strong><strong><strong><strong><strong> <code>p</code></strong></strong></strong></strong></strong></strong></h2><p>Essa tag define um parágrafo de texto.</p><pre><code class="language-html">&lt;p&gt;Um texto&lt;/p&gt;
</code></pre><p>É um elemento de bloco.</p><p>Dentro dele, podemos adicionar qualquer elemento em linha que desejarmos, como <code>span</code> ou <code>a</code>.</p><p>Não podemos adicionar elementos em bloco.</p><p>Não podemos aninhar um elemento <code>p</code> em outro.</p><p>Por padrão, os navegadores estilizam um parágrafo com uma margem na parte superior e na parte inferior. Essa margem é de <code>16px</code> no Chrome, mas o valor exato pode variar entre os navegadores.</p><p>Isso faz com que dois parágrafos consecutivos fiquem espaçados, replicando o que pensamos de um "parágrafo" no texto impresso.</p><h2 id="tag-span"><strong><strong><strong><strong><strong><strong>T</strong></strong></strong></strong></strong>ag<strong><strong><strong><strong><strong> <code>span</code></strong></strong></strong></strong></strong></strong></h2><p>Essa é uma tag em linha que pode ser usada para criar uma seção em um parágrafo. Essa seção pode ser segmentada usando CSS:</p><pre><code class="language-html">&lt;p&gt;Uma parte do texto &lt;span&gt;e aqui vai outra parte&lt;/span&gt;&lt;/p&gt;
</code></pre><h2 id="tag-br"><strong>Tag<strong><strong><strong><strong><strong> <code>br</code> </strong></strong></strong></strong></strong></strong></h2><p>Essa tag representa uma quebra de linha. É um elemento em linha e não precisa de uma tag de fechamento.</p><p>Usamos para criar uma linha dentro de uma tag <code>p</code> sem criar um parágrafo.</p><p>Em comparação com a criação de um parágrafo, não adiciona espaçamento a mais.</p><pre><code class="language-html">&lt;p&gt;Um texto&lt;br&gt;Uma nova linha&lt;/p&gt;
</code></pre><h2 id="tags-de-t-tulo"><strong>Tags<strong><strong><strong><strong><strong> </strong></strong></strong></strong></strong>de título</strong></h2><p>O HTML nos fornece 6 tags de título. Do mais importante ao menos importante, temos <code>h1</code>, <code>h2</code>, <code>h3</code>, <code>h4</code>, <code>h5</code> e <code>h6</code>.</p><p>Normalmente, uma página terá um elemento <code>h1</code>, que é o título da página. Então, você pode ter um ou mais elementos <code>h2</code> dependendo do conteúdo da página.</p><p>Os títulos, especialmente a organização dos títulos, também são essenciais para o SEO. Os mecanismos de pesquisa os usam de várias maneiras.</p><p>O navegador, por padrão, tornará a tag <code>h1</code> maior e diminuirá o tamanho dos elementos à medida que o número próximo a <code>h</code> aumentar:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-11-at-19.46.57.png" class="kg-image" alt="Screen-Shot-2019-06-11-at-19.46.57" width="563" height="587" loading="lazy"></figure><p>Todos os títulos são elementos em bloco. Eles não podem conter outros elementos, apenas texto.</p><h2 id="tag-strong"><strong>Tag<strong><strong><strong><strong><strong> <code>strong</code></strong></strong></strong></strong></strong></strong></h2><p>Essa tag é usada para marcar o texto dentro dela como <em>forte</em>. Isso é muito importante. Não é uma dica visual, mas uma dica semântica. Dependendo do meio utilizado, sua interpretação vai variar.</p><p>Os navegadores, por padrão, deixam o texto dessa tag em <strong>negrito</strong>.</p><h2 id="tag-em"><strong>Tag<strong><strong><strong><strong><strong> <code>em</code> </strong></strong></strong></strong></strong></strong></h2><p>Essa tag é usada para marcar o texto dentro dela como <em>enfatizado</em>. Do mesmo modo que em <code>strong</code>, não é uma dica visual, mas uma dica semântica.</p><p>Os navegadores, por padrão, deixam o texto em <strong>itálico</strong>.</p><h2 id="cita-es"><strong>Citações</strong></h2><p>A tag HTML <code>blockquote</code> é útil para inserir citações no texto. </p><p>Os navegadores, por padrão, aplicam uma margem ao elemento <code>blockquote</code>. O Chrome aplica uma margem à esquerda e à direita de 40 px e uma margem superior e inferior de 10 px.</p><p>A tag HTML <code>q</code> é usada para aspas em linha.</p><h2 id="linha-horizontal"><strong>Linha horizontal</strong></h2><p>Essa tag não é realmente baseada em texto. A tag <code>hr</code> é frequentemente usada dentro de uma página. "hr", aqui, significa <code>horizontal rule</code> e adiciona uma linha horizontal na página.</p><p>É útil para separar seções na página.</p><h2 id="bloco-de-c-digo">Bloco de código</h2><p>A tag <code>code</code> é especialmente útil para mostrar código, pois os navegadores fornecem uma fonte monoespaçada.</p><p>Essa é normalmente a única coisa que os navegadores fazem. Este é o CSS aplicado pelo Chrome:</p><pre><code class="language-css">code {
    font-family: monospace;
}
</code></pre><p>Essa tag é normalmente envolvida em uma tag <code>pre</code> porque o elemento <code>code</code> ignora espaços em branco e quebras de linha, assim como a tag <code>p</code>.</p><p>O Chrome dá a <code>pre</code> este estilo padrão:</p><pre><code class="language-css">pre {
    display: block;
    font-family: monospace;
    white-space: pre;
    margin: 1em 0px;
}
</code></pre><p>Este estilo evita a remoção do espaço em branco e o torna um elemento em bloco.</p><h2 id="listas"><strong><strong><strong><strong><strong><strong>List</strong></strong></strong></strong></strong>a<strong><strong><strong><strong><strong>s</strong></strong></strong></strong></strong></strong></h2><p>Temos 3 tipos de listas:</p><ul><li>listas não ordenadas</li><li>listas ordenadas</li><li>listas de definição</li></ul><p>As listas não ordenadas são criadas usando a tag <code>ul</code>. Cada item da lista é criado com a tag <code>li</code>:</p><pre><code class="language-html">&lt;ul&gt;
    &lt;li&gt;Primeiro&lt;/li&gt;
    &lt;li&gt;Segundo&lt;/li&gt;
&lt;/ul&gt;
</code></pre><p>As listas ordenadas são semelhantes, mas são criadas com a tag <code>ol</code>:</p><pre><code class="language-html">&lt;ol&gt;
    &lt;li&gt;Primeiro&lt;/li&gt;
    &lt;li&gt;Segundo&lt;/li&gt;
&lt;/ol&gt;
</code></pre><p>A diferença entre os dois é que as listas ordenadas têm um número antes de cada item:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-12-at-09.35.05.png" class="kg-image" alt="Screen-Shot-2019-06-12-at-09.35.05" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Screen-Shot-2019-06-12-at-09.35.05.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-12-at-09.35.05.png 672w" width="672" height="386" loading="lazy"></figure><p>As listas de definição são um pouco diferentes. Você tem um termo e sua definição:</p><pre><code class="language-html">&lt;dl&gt;
    &lt;dt&gt;Flavio&lt;/dt&gt;
    &lt;dd&gt;O nome&lt;/dd&gt;
    &lt;dt&gt;Copes&lt;/dt&gt;
    &lt;dd&gt;O sobrenome&lt;/dd&gt;
&lt;/dl&gt;
</code></pre><p>É assim que os navegadores normalmente os renderizam:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-12-at-09.45.21.png" class="kg-image" alt="Screen-Shot-2019-06-12-at-09.45.21" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Screen-Shot-2019-06-12-at-09.45.21.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-12-at-09.45.21.png 666w" width="666" height="261" loading="lazy"></figure><p>Devo dizer que você raramente verá listas de definição por aí. Com certeza, não tanto quanto <code>ul</code> e <code>ol</code>. Às vezes, contudo, elas podem ser úteis.</p><h2 id="outras-tags-de-texto"><strong>Outras tags de texto</strong></h2><p>Aqui está uma série de tags com fins de apresentação:</p><ul><li>tag <code>mark</code></li><li>tag <code>ins</code></li><li>tag <code>del</code></li><li>tag &nbsp;<code>sup</code></li><li>tag <code>sub</code></li><li>tag <code>small</code></li><li>tag <code>i</code></li><li>tag <code>b</code></li></ul><p>Este é um exemplo da renderização visual deles que é aplicado por padrão pelos navegadores:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-12-at-08.43.55.png" class="kg-image" alt="Screen-Shot-2019-06-12-at-08.43.55" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Screen-Shot-2019-06-12-at-08.43.55.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-12-at-08.43.55.png 730w" sizes="(min-width: 720px) 720px" width="730" height="305" loading="lazy"></figure><p>Você pode se perguntar, como <code>b</code> é diferente de <code>strong</code>? Como <code>i</code> é diferente de <code>em</code>?</p><p>A diferença está no significado semântico. Enquanto <code>b</code> e <code>i</code> são uma dica direta ao navegador para deixar um trecho de texto em negrito ou em itálico, <code>strong</code> e <code>em</code> dão ao texto um significado especial, cabendo ao navegador dar o estilo. Esses estilos são exatamente os mesmos que os de <code>b</code> e <code>i</code>, por padrão. Você pode, no entanto, alterar isso usando o CSS.</p><p>Existem várias outras tags menos usadas relacionadas ao texto. Mencionei aqui apenas as que vejo sendo mais usadas.</p><h1 id="links"><strong><strong>LINKS</strong></strong></h1><p>Os links são definidos usando a tag <code>a</code>. O destino do link é definido por meio de seu atributo <code>href</code>.</p><p>Exemplo:</p><pre><code class="language-html">&lt;a href="https://flaviocopes.com"&gt;Clique aqui&lt;/a&gt;
</code></pre><p>Entre a tag de abertura e a tag de fechamento temos o texto do link.</p><p>O exemplo acima é um URL absoluto. Os links também funcionam com URLs relativos:</p><pre><code class="language-html">&lt;a href="/test"&gt;Clique aqui&lt;/a&gt;
</code></pre><p>Nesse caso, ao clicar no link, o usuário é movido para o URL <code>/test</code> na origem atual.</p><p>Tenha cuidado com o caractere <code>/</code>. Se omitido, em vez de começar da origem, o navegador apenas adicionará a string <code>test</code> ao URL atual.</p><p>Exemplo, estou na página <a href="https://flaviocopes.com/axios/">https://flaviocopes.com/axios/</a> e tenho esses links:</p><ul><li><code>/test</code> quando clicado me leva para <code>https://flaviocopes.com/test</code></li><li><code>test</code> quando clicado me leva para <code>https://flaviocopes.com/axios/test</code></li></ul><p>As tags de link podem incluir outras coisas dentro delas, não apenas texto. Podem incluir, por exemplo, imagens:</p><pre><code class="language-html">&lt;a href="https://flaviocopes.com"&gt;
    &lt;img src="test.jpg"&gt;
&lt;/a&gt;
</code></pre><p>Também podem ter quaisquer outros elementos, exceto outras tags <code>&lt;a&gt;</code>.</p><p>Caso queira abrir o link em uma nova aba, você pode usar o atributo <code>target</code>:</p><pre><code class="language-html">&lt;a href="https://flaviocopes.com" target="_blank"&gt;Abra em uma nova aba&lt;/a&gt;
</code></pre><h1 id="tags-de-cont-iner-e-estrutura-da-p-gina-do-html">TAGS DE CONTÊINER E ESTRUTURA DA PÁGINA DO HTML</h1><h2 id="tags-de-cont-iner"><strong>Tags de c<strong><strong><strong><strong><strong>ont</strong></strong></strong></strong></strong>ê<strong><strong><strong><strong><strong>iner</strong></strong></strong></strong></strong></strong></h2><p>O HTML fornece um conjunto de tags de contêiner. Essas tags podem conter um conjunto não especificado de outras tags.</p><p>Temos:</p><ul><li><code>article</code></li><li><code>section</code></li><li><code>div</code></li></ul><p>Pode ser confuso entender a diferença entre elas.</p><p>Vamos ver quando usar cada uma.</p><h3 id="article"><strong><strong><strong><strong><strong><strong><code>article</code></strong></strong></strong></strong></strong></strong></h3><p>A tag <code>article</code> identifica <em>algo</em> que pode ser independente de outras coisas em uma página.</p><p>Por exemplo, uma lista de publicações em blog na página inicial.</p><p>Ou uma lista de links.</p><pre><code class="language-html">&lt;div&gt;
    &lt;article&gt;
        &lt;h2&gt;Uma publicação em blog&lt;/h2&gt;
        &lt;a ...&gt;Leia mais&lt;/a&gt;
    &lt;/article&gt;
    &lt;article&gt;
        &lt;h2&gt;Outra publicação em blog&lt;/h2&gt;
        &lt;a ...&gt;Leia mais&lt;/a&gt;
    &lt;/article&gt;
&lt;/div&gt;
</code></pre><p>Não estamos limitados a listas: um artigo (em inglês, <em>article</em>) pode ser o elemento principal de uma página.</p><pre><code class="language-html">&lt;article&gt;
    &lt;h2&gt;Uma publicação em blog&lt;/h2&gt;
    &lt;p&gt;Este é o conteúdo...&lt;/p&gt;
&lt;/article&gt;
</code></pre><p>Dentro de uma tag <code>article</code> devemos ter um título (<code>h1</code>-<code>h6</code>) e</p><p><strong><strong><strong><strong><strong><strong><code>section</code></strong></strong></strong></strong></strong></strong></p><p>Representa uma seção de um documento. Cada seção tem uma tag de título (<code>h1</code>-<code>h6</code>) e, em seguida, o corpo da seção.</p><p>Exemplo:</p><pre><code class="language-html">&lt;section&gt;
    &lt;h2&gt;Uma seção de página&lt;/h2&gt;
    &lt;p&gt;...&lt;/p&gt;
    &lt;img ...&gt;
&lt;/section&gt;
</code></pre><p>É útil dividir um artigo longo em diferentes <code>sections</code>.</p><p>Não deve ser usado como um elemento de contêiner genérico. <code>div</code> é feito para isso.</p><h3 id="div"><strong><strong><strong><strong><strong><strong><code>div</code></strong></strong></strong></strong></strong></strong></h3><p><code>div</code> é um elemento de contêiner genérico:</p><pre><code class="language-html">&lt;div&gt;
    ...
&lt;/div&gt;
</code></pre><p>Geralmente, adicionamos um atributo <code>class</code> ou <code>id</code> a esse elemento, para permitir que ele seja estilizado usando CSS.</p><p>Usamos <code>div</code> em qualquer lugar onde precisamos de um contêiner, mas as tags existentes não são adequadas.</p><h2 id="tags-relacionadas-p-gina">Tags relacionadas à página</h2><h3 id="nav"><strong><strong><strong><strong><strong><strong><code>nav</code></strong></strong></strong></strong></strong></strong></h3><p>Essa tag é usada para criar a marcação que define a navegação da página. Para isso, normalmente, adicionamos uma lista <code>ul</code> ou <code>ol</code>:</p><pre><code class="language-html">&lt;nav&gt;
    &lt;ol&gt;
        &lt;li&gt;&lt;a href="/"&gt;Home&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="/blog"&gt;Blog&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
&lt;/nav&gt;
</code></pre><h3 id="aside"><strong><strong><strong><strong><strong><strong><code>aside</code></strong></strong></strong></strong></strong></strong></h3><p>A tag <code>aside</code> é usada para adicionar um conteúdo relacionado ao conteúdo principal, por exemplo, uma caixa onde adicionamos uma citação ou uma barra lateral.</p><p>Exemplo:</p><pre><code class="language-html">&lt;div&gt;
  &lt;p&gt;Um texto...&lt;/p&gt;
  &lt;aside&gt;
    &lt;p&gt;Uma citação...&lt;/p&gt;
  &lt;/aside&gt;
  &lt;p&gt;Outro texto...&lt;/p&gt;
&lt;/div&gt;
</code></pre><p>Usar <code>aside</code> é um sinal de que as coisas que ele contém não fazem parte do fluxo regular da seção em que está.</p><h3 id="header"><strong><strong><strong><strong><strong><strong><code>header</code></strong></strong></strong></strong></strong></strong></h3><p>A tag <code>header</code> representa uma parte da página que é a introdução. Ela pode, por exemplo, conter uma ou mais tags de título (<code>h1</code>-<code>h6</code>), a linha orientadora do artigo, uma imagem, entre outros.</p><pre><code class="language-html">&lt;article&gt;
  &lt;header&gt;
      &lt;h1&gt;Título do artigo&lt;/h1&gt;
  &lt;/header&gt;
  ...
&lt;/div&gt;
</code></pre><h3 id="main"><strong><strong><strong><strong><strong><strong><code>main</code></strong></strong></strong></strong></strong></strong></h3><p>A tag <code>main</code> representa a parte principal de uma página:</p><pre><code class="language-html">&lt;body&gt;
  ....
  &lt;main&gt;
    &lt;p&gt;....&lt;/p&gt;
  &lt;/main&gt;
&lt;/body&gt;
</code></pre><h3 id="footer"><strong><strong><strong><strong><strong><strong><code>footer</code></strong></strong></strong></strong></strong></strong></h3><p>A tag <code>footer</code> é usada para determinar o rodapé de um artigo ou o rodapé da página:</p><pre><code class="language-html">&lt;article&gt;
 ....
  &lt;footer&gt;
    &lt;p&gt;Notas de rodapé...&lt;/p&gt;
  &lt;/footer&gt;
&lt;/div&gt;</code></pre><h1 id="formul-rios"><strong><strong><strong><strong><strong><strong>FORM</strong></strong></strong></strong></strong>ULÁRIO<strong><strong><strong><strong><strong>S</strong></strong></strong></strong></strong></strong></h1><p>Os formulários são a maneira pela qual você pode interagir com uma página ou com uma aplicação criada com tecnologias da web.</p><p>Você tem um conjunto de controles e, ao enviar o formulário, seja com um clique em um botão de "enviar" ou de maneira programada, o navegador enviará os dados para o servidor.</p><p>Por padrão, esse envio de dados faz com que a página seja recarregada logo após a ação de envio, mas, usando JavaScript, você pode alterar esse comportamento (não explicaremos isso aqui).</p><p>Um formulário é criado usando a tag <code>form</code>:</p><pre><code class="language-html">&lt;form&gt;
    ...
&lt;/form&gt;
</code></pre><p>Por padrão, os formulários são enviados usando o método de HTTP GET. Isso tem suas desvantagens e, em geral, você vai querer usar o método POST.</p><p>Você pode definir o formulário para usar POST quando enviado usando o atributo <code>method</code>:</p><pre><code class="language-html">&lt;form method="POST"&gt;
    ...
&lt;/form&gt;
</code></pre><p>O formulário é enviado, usando GET ou POST, para o mesmo URL em que reside.</p><p>Portanto, se o formulário estiver na página <code>https://flaviocopes.com/contacts</code>, pressionar o botão de "enviar" fará uma solicitação para esse mesmo URL.</p><p>Isso pode resultar em não acontecer nada.</p><p>Você precisa de algo do lado do servidor para lidar com a solicitação e, normalmente, "ouve" esses eventos de envio de formulário em um URL dedicado.</p><p>Você pode especificar o URL por meio do parâmetro <code>action</code>:</p><pre><code class="language-html">&lt;form action="/novo-contato" method="POST"&gt;
    ...
&lt;/form&gt;
</code></pre><p>Isso fará com que o navegador envie os dados do formulário usando POST para o URL <code>/novo-contato</code> na mesma origem.</p><p>Se a origem (protocolo + domínio + porta) for <code>https://flaviocopes.com</code> (porta 80 é o padrão), isso significa que os dados do formulário serão enviados para <code>https://flaviocopes.com/novo-contato</code>.</p><p>Eu falei sobre dados. Quais dados?</p><p>Os dados são fornecidos pelos usuários através do conjunto de controles que estão disponíveis na plataforma da web:</p><ul><li>caixas de entrada (em inglês, <em>input </em>– texto de linha única)</li><li>áreas de texto (em inglês, <em>textarea </em>– texto de várias linhas)</li><li>menus de seleção (em inglês, <em>select </em>– escolha uma opção em um menu suspenso)</li><li>botões de opção (em inglês, <em>radio buttons </em>– escolha uma opção de uma lista sempre visível)</li><li>caixas de seleção (em inglês, <em>checkboxes </em>– escolha zero, uma ou mais opções)</li><li>uploads de arquivos</li><li>e mais!</li></ul><p>Vamos apresentar cada um deles na visão geral dos campos de formulário a seguir.</p><h2 id="tag-input"><strong><strong><strong><strong><strong><strong>T</strong></strong></strong></strong></strong>ag<strong><strong><strong><strong><strong> <code>input</code></strong></strong></strong></strong></strong></strong></h2><p>O campo <code>input</code> é um dos elementos de formulário mais usados. Também é um elemento muito versátil e pode mudar completamente o comportamento com base no atributo <code>type</code>.</p><p>O comportamento padrão é ser um controle de entrada de texto de linha única:</p><pre><code class="language-html">&lt;input&gt;
</code></pre><p>Isso é equivalente a usar:</p><pre><code class="language-html">&lt;input type="text"&gt;
</code></pre><p>Assim como todos os outros campos a seguir, você precisa dar um <code>name</code> (nome) ao campo para que seu conteúdo seja enviado ao servidor quando o formulário for enviado:</p><pre><code class="language-html">&lt;input type="text" name="usuario"&gt;
</code></pre><p>O atributo <code>placeholder</code> é usado para que algum texto apareça, em cinza claro, quando o campo estiver vazio. Útil para adicionar uma dica ao usuário sobre o que digitar:</p><pre><code class="language-html">&lt;input type="text" name="usuario" placeholder="Seu nome de usuário"&gt;
</code></pre><h3 id="email"><strong><strong><strong><strong><strong><strong>Email</strong></strong></strong></strong></strong></strong></h3><p>O uso de <code>type="email"</code> validará um e-mail do lado do client (no navegador) quanto à correção (correção semântica, não garantindo que o endereço de e-mail exista) antes de enviar.</p><pre><code class="language-html">&lt;input type="email" name="e-mail" placeholder="Seu endereço de e-mail"&gt;
</code></pre><h3 id="password"><strong><strong><strong><strong><strong><strong>Password</strong></strong></strong></strong></strong></strong></h3><p>O uso de <code>type="password"</code> fará com que cada caractere inserido apareça como um asterisco (*) ou ponto, útil para campos que hospedam uma senha.</p><pre><code class="language-html">&lt;input type="password" name="senha" placeholder="Sua senha"&gt;
</code></pre><h3 id="numbers"><strong><strong><strong><strong><strong><strong>Numbers</strong></strong></strong></strong></strong></strong></h3><p>Você pode fazer com que um elemento de entrada aceite apenas números:</p><pre><code class="language-html">&lt;input type="number" name="idade" placeholder="Sua idade"&gt;
</code></pre><p>Você pode especificar um valor mínimo e máximo aceito:</p><pre><code class="language-html">&lt;input type="number" name="idade" placeholder="Sua idade" min="18" max="110"&gt;
</code></pre><p>O atributo <code>step</code> ajuda a identificar as etapas entre os diferentes valores. Por exemplo, ele aceita um valor entre 10 e 50, em etapas de 5:</p><pre><code class="language-html">&lt;input type="number" name="um-numero"  min="10" max="50" step="5"&gt;
</code></pre><h3 id="campo-oculto">Campo oculto</h3><p>Os campos podem ser ocultados do usuário. Eles ainda serão enviados ao servidor após o envio do formulário:</p><pre><code class="language-html">&lt;input type="hidden" name="algum-campo-oculto" value="algum-valor"&gt;
</code></pre><p>Isso é comumente usado para armazenar valores como um token CSRF, usado para segurança e identificação de usuários, ou até mesmo para detectar robôs que enviam spam, usando técnicas especiais.</p><p>Também pode ser usado apenas para identificar um formulário e sua ação.</p><h3 id="definindo-um-valor-padr-o"><strong>Definindo um valor padrão</strong></h3><p>Todos esses campos aceitam um valor predefinido. Caso o usuário não o altere, este será o valor enviado ao servidor:</p><pre><code class="language-html">&lt;input type="number" name="idade" value="18"&gt;
</code></pre><p>Se você definir um placeholder, esse valor aparecerá se o usuário limpar o valor do campo de entrada:</p><pre><code class="language-html">&lt;input type="number" name="idade" placeholder="Sua idade" value="18"&gt;
</code></pre><h2 id="enviando-formul-rios"><strong>Enviando f<strong><strong><strong><strong><strong>orm</strong></strong></strong></strong></strong>ulários</strong></h2><p>O campo <code>type="submit"</code> é um botão que, uma vez pressionado pelo usuário, envia o formulário:</p><pre><code class="language-html">&lt;input type="submit"&gt;
</code></pre><p>O atributo <code>value</code> define o texto no botão, que, em sua ausência, mostra o texto "Submit" (em português, enviar):</p><pre><code class="language-html">&lt;input type="submit" value="Clique aqui"&gt;
</code></pre><h2 id="valida-o-de-formul-rios"><strong>Validação de f<strong><strong><strong><strong><strong>orm</strong></strong></strong></strong></strong>ulários</strong></h2><p>Os navegadores fornecem a funcionalidade de validação do lado do client para formulários.</p><p>Você pode definir os campos conforme necessário, garantindo que eles sejam preenchidos, e impor um formato específico para a entrada de cada campo.</p><p>Vejamos as duas opções. </p><h3 id="definir-campo-como-obrigat-rio"><strong>Definir campo como obrigatório</strong></h3><p>O atributo <code>required</code> ajuda na validação. Se o campo não estiver definido, a validação do lado do client falha e o navegador não envia o formulário:</p><pre><code class="language-html">&lt;input type="text" name="usuario" required&gt;
</code></pre><h3 id="aplicar-um-formato-espec-fico"><strong>Aplicar um formato específico</strong></h3><p>Descrevi o campo <code>type="email"</code> acima. Ele valida automaticamente o endereço de e-mail de acordo com um formato definido na especificação.</p><p>No campo <code>type="number"</code>, mencionei o atributo <code>min</code> e <code>max</code> para limitar os valores inseridos em um intervalo.</p><p>Podemos fazer mais.</p><p>Podemos impor um formato específico em qualquer campo.</p><p>O atributo <code>pattern</code> permite definir uma expressão regular para validar o valor.</p><p>Recomendo a leitura do meu Guia de Expressões Regulares em <a href="https://flaviocopes.com/javascript-regular-expressions/">flaviocopes.com/javascript-regular-expressions/</a> (texto em inglês).</p><p>Exemplo de padrão: <code>pattern="<a href="https://.%2A/">https://.*</a>"</code></p><pre><code class="language-html">&lt;input type="text" name="usuario" pattern="[a-zA-Z]{8}"&gt;
</code></pre><h2 id="outros-campos"><strong>Outros campos</strong></h2><h3 id="upload-de-arquivos"><strong>Upload de arquivos</strong></h3><p>Você pode carregar arquivos do seu computador local e enviá-los para o servidor usando um elemento de entrada <code>type="file"</code>:</p><pre><code class="language-html">&lt;input type="file" name="documentos-secretos"&gt;
</code></pre><p>É possível anexar vários arquivos:</p><pre><code class="language-html">&lt;input type="file" name="documentos-secretos" multiple&gt;
</code></pre><p>Você pode especificar um ou mais tipos de arquivo permitidos usando o atributo <code>accept</code>. Este aceita imagens:</p><pre><code class="language-html">&lt;input type="file" name="documentos-secretos" accept="image/*"&gt;
</code></pre><p>Você pode usar um tipo MIME específico, como <code>application/json</code>, ou definir uma extensão de arquivo, como <code>.pdf</code>. Também é possível definir várias extensões de arquivo, assim:</p><pre><code class="language-html">&lt;input type="file" name="documentos-secretos" accept=".jpg, .jpeg, .png"&gt;
</code></pre><h3 id="bot-es"><strong>Botões</strong></h3><p>Os campos de entrada <code>type="button"</code> podem ser usados ​​para adicionar botões adicionais ao formulário, que não são botões de envio:</p><pre><code class="language-html">&lt;input type="button" value="Clique aqui"&gt;
</code></pre><p>Eles são usados ​​para fazer algo de maneira programada, usando JavaScript.</p><p>Existe um campo especial renderizado como um botão, cuja ação especial é limpar todo o formulário e trazer os campos de volta ao estado inicial:</p><pre><code class="language-html">&lt;input type="reset"&gt;
</code></pre><h3 id="bot-es-de-op-o"><strong>Botões de opção</strong></h3><p>Os botões de opção são usados ​​para criar um conjunto de opções. Quando uma das opções é selecionada, todas as outras são desabilitadas.</p><p>O nome em inglês, <em>radio buttons</em>, vem de rádios de carros antigos que tinham esse tipo de interface.</p><p>Você define um conjunto de entradas <code>type="radio"</code>, todas com o mesmo atributo <code>name</code> e diferentes atributos <code>value</code>:</p><pre><code class="language-html">&lt;input type="radio" name="cor" value="amarelo"&gt;
&lt;input type="radio" name="cor" value="vermelho"&gt;
&lt;input type="radio" name="cor" value="azul"&gt;
</code></pre><p>Depois que o formulário for enviado, a propriedade de dados <code>cor</code> terá um único valor.</p><p>Há sempre um elemento selecionado. O primeiro item é o marcado por padrão.</p><p>Você pode definir o valor pré-selecionado usando o atributo <code>checked</code>. Você pode usá-lo apenas uma vez por grupo de botões de opção.</p><h3 id="caixas-de-sele-o"><strong>Caixas de seleção</strong></h3><p>Essa entrada é semelhante aos botões de opção, mas permitem que vários valores sejam escolhidos, ou nenhum.</p><p>Você define um conjunto de entradas <code>type="checkbox"</code>, todas com o mesmo atributo <code>name</code> e diferentes atributos <code>value</code>:</p><pre><code class="language-html">&lt;input type="checkbox" name="cor" value="amarelo"&gt;
&lt;input type="checkbox" name="cor" value="vermelho"&gt;
&lt;input type="checkbox" name="cor" value="azul"&gt;
</code></pre><p>Todas essas caixas de seleção estarão desmarcadas por padrão. Use o atributo <code>checked</code> para habilitá-las no carregamento da página.</p><p>Como esse campo de entrada permite vários valores, no envio do formulário, os valores serão enviados ao servidor como um array.</p><h3 id="data-e-hora"><strong>Data e hora</strong></h3><p>Temos alguns tipos de entrada para aceitar valores de data.</p><p>O campo de entrada <code>type="date"</code> permite que o usuário insira uma data e mostra um seletor de data, se necessário:</p><pre><code class="language-html">&lt;input type="date" name="aniversario"&gt;
</code></pre><p>O campo de entrada <code>type="time"</code> permite que o usuário insira um horário e mostra um seletor de horário, se necessário:</p><pre><code class="language-html">&lt;input type="time" name="hora-de-buscar"&gt;
</code></pre><p>O campo de entrada <code>type="month"</code> permite que o usuário insira um mês e um ano:</p><pre><code class="language-html">&lt;input type="month" name="selecionar-mes-do-lancamento"&gt;
</code></pre><p>O campo de entrada <code>type="week"</code> permite que o usuário insira uma semana e um ano:</p><pre><code class="language-html">&lt;input type="week" name="selecionar-semana"&gt;
</code></pre><p>Todos esses campos permitem limitar o intervalo entre cada valor. Eu recomendo conferir a <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/input/date">MDN</a> para os pequenos detalhes sobre seu uso.</p><p>O campo <code>type="datetime-local"</code> permite que você escolha uma data e uma hora.</p><pre><code class="language-html">&lt;input type="datetime-local" name="data-e-hora"&gt;
</code></pre><p>Aqui está uma página para testá-los: <a href="https://codepen.io/flaviocopes/pen/ZdWQPm">https://codepen.io/flaviocopes/pen/ZdWQPm</a></p><h3 id="seletor-de-cores"><strong>Seletor de cores</strong></h3><p>Você pode permitir que os usuários escolham uma cor usando o elemento <code>type="color"</code>:</p><pre><code class="language-html">&lt;input type="color" name="cor-do-carro"&gt;
</code></pre><p>Você define um valor padrão usando o atributo <code>value</code>:</p><pre><code class="language-html">&lt;input type="color" name="cor-do-carro" value="#000000"&gt;
</code></pre><p>O navegador se encarregará de mostrar um seletor de cores para o usuário.</p><h3 id="range"><strong><strong><strong><strong><strong><strong>Range</strong></strong></strong></strong></strong></strong></h3><p>Este elemento de entrada mostra um elemento deslizante (em inglês, um <em>slider</em>). As pessoas podem usá-lo para passar de um valor inicial para um valor final:</p><pre><code class="language-html">&lt;input type="range" name="idade" min="0" max="100" value="30"&gt;
</code></pre><p>Você pode fornecer passos, como opção:</p><pre><code class="language-html">&lt;input type="range" name="idade" min="0" max="100" value="30" step="10"&gt;
</code></pre><h3 id="telefone"><strong>Telefone</strong></h3><p>O campo de entrada <code>type="tel"</code> é usado para inserir um número de telefone:</p><pre><code class="language-html">&lt;input type="tel" name="numero-de-telefone"&gt;
</code></pre><p>O principal apelo para o uso de <code>tel</code> em vez de <code>text</code> são os celulares, pois o dispositivo pode optar por mostrar um teclado numérico.</p><p>Especifique um atributo <code>pattern</code> para validação adicional:</p><pre><code class="language-html">&lt;input type="tel" pattern="[0-9]{3}-[0-9]{8}" name="numero-de-telefone"&gt;
</code></pre><h3 id="url"><strong><strong><strong><strong><strong><strong>URL</strong></strong></strong></strong></strong></strong></h3><p>O campo <code>type="url"</code> é usado para inserir um URL.</p><pre><code class="language-html">&lt;input type="url" name="site-da-web"&gt;
</code></pre><p>Você pode validá-lo usando o atributo <code>pattern</code>:</p><pre><code class="language-html">&lt;input type="url" name="site-da-web"  pattern="https://.*"&gt;
</code></pre><h2 id="a-tag-textarea"><strong>A tag<strong><strong><strong><strong><strong> <code>textarea</code></strong></strong></strong></strong></strong></strong></h2><p>O elemento <code>textarea</code> permite que os usuários insiram texto de várias linhas. Ao contrário do que acontece com <code>input</code>, essa tag requer uma tag de fechamento:</p><pre><code class="language-html">&lt;textarea&gt;&lt;/textarea&gt;
</code></pre><p>Você pode definir as dimensões usando CSS, ou também usando os atributos <code>rows</code> (linhas) e <code>cols</code> (colunas):</p><pre><code class="language-html">&lt;textarea rows="20" cols="10"&gt;&lt;/textarea&gt;
</code></pre><p>Assim como as outras tags de formulário, o atributo <code>name</code> determina o nome nos dados enviados ao servidor:</p><pre><code class="language-html">&lt;textarea name="article"&gt;&lt;/textarea&gt;
</code></pre><h2 id="a-tag-select"><strong>A tag<strong><strong><strong><strong><strong> <code>select</code> </strong></strong></strong></strong></strong></strong></h2><p>Essa tag é usada para criar um menu suspenso.</p><p>O usuário pode escolher uma das opções disponíveis.</p><p>Cada opção é criada usando a tag <code>option</code>. Você deve adicionar um nome à seleção e um valor para cada opção:</p><pre><code class="language-html">&lt;select name="cor"&gt;
    &lt;option value="vermelho"&gt;Vermelho&lt;/option&gt;
    &lt;option value="amarelo"&gt;Amarelo&lt;/option&gt;
&lt;/select&gt;
</code></pre><p>Você pode definir uma opção desativada:</p><pre><code class="language-html">&lt;select name="cor"&gt;
    &lt;option value="vermelho" disabled&gt;Vermelho&lt;/option&gt;
    &lt;option value="amarelo"&gt;Amarelo&lt;/option&gt;
&lt;/select&gt;
</code></pre><p>Você pode definir uma opção vazia:</p><pre><code class="language-html">&lt;select name="cor"&gt;
    &lt;option value=""&gt;Nenhum&lt;/option&gt;
    &lt;option value="vermelho"&gt;Vermelho&lt;/option&gt;
    &lt;option value="amarelo"&gt;Amarelo&lt;/option&gt;
&lt;/select&gt;
</code></pre><p>As opções podem ser agrupadas usando a tag <code>optgroup</code>. Cada grupo de opções tem um atributo <code>label</code>:</p><pre><code class="language-html">&lt;select name="cor"&gt;
    &lt;optgroup label="Primaria"&gt;
        &lt;option value="vermelho"&gt;Vermelho&lt;/option&gt;
        &lt;option value="amarelo"&gt;Amarelo&lt;/option&gt;
        &lt;option value="azul"&gt;Azul&lt;/option&gt;
    &lt;/optgroup&gt;
    &lt;optgroup label="Outras"&gt;
        &lt;option value="verde"&gt;Verde&lt;/option&gt;
        &lt;option value="rosa"&gt;Rosa&lt;/option&gt;
    &lt;/optgroup&gt;
&lt;/select&gt;
</code></pre><h1 id="tabelas"><strong><strong><strong><strong><strong><strong>TAB</strong></strong></strong></strong></strong>ELA<strong><strong><strong><strong><strong>S</strong></strong></strong></strong></strong></strong></h1><p>Nos primórdios da web, as tabelas eram uma parte muito importante da construção dos layouts.</p><p>Mais tarde, elas foram substituídas pelo CSS e seus recursos de layout. Hoje, temos ferramentas poderosas como CSS Flexbox e CSS Grid para construir layouts. As tabelas agora são usadas apenas para, adivinhe, construir tabelas!</p><h3 id="tag-table"><strong>Tag<strong><strong><strong><strong><strong> <code>table</code></strong></strong></strong></strong></strong></strong></h3><p>Você define uma tabela usando a tag <code>table</code>:</p><pre><code class="language-html">&lt;table&gt;

&lt;/table&gt;
</code></pre><p>Dentro da tabela vamos definir os dados. Raciocinamos em termos de linhas, o que significa que adicionamos linhas em uma tabela (não colunas). Vamos definir colunas dentro de uma linha.</p><h3 id="linhas-rows-"><strong>Linhas (rows)</strong></h3><p>Uma linha é adicionada usando a tag <code>tr</code>. Essa é a única coisa que podemos adicionar em um elemento <code>table</code>:</p><pre><code class="language-html">&lt;table&gt;
  &lt;tr&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;/tr&gt;
&lt;/table&gt;
</code></pre><p><br>Essa é uma tabela com 3 linhas.</p><p>A primeira linha <em>pode</em> assumir a função de cabeçalho.</p><h3 id="cabe-alho-de-colunas"><strong>Cabeçalho de colunas</strong></h3><p>O cabeçalho da tabela contém o nome de uma coluna, normalmente em negrito.</p><p>Pense em um documento do Excel/Planilhas do Google. O cabeçalho <code>A-B-C-D...</code> que fica acima.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.18.17.png" class="kg-image" alt="Screen-Shot-2019-06-20-at-10.18.17" width="560" height="218" loading="lazy"></figure><p>Definimos o cabeçalho usando a tag <code>th</code>:</p><pre><code class="language-html">&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Coluna 1&lt;/th&gt;
    &lt;th&gt;Coluna 2&lt;/th&gt;
    &lt;th&gt;Coluna 3&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;/tr&gt;
&lt;/table&gt;
</code></pre><h3 id="o-conte-do-da-tabela">O conteúdo da tabela</h3><p>O conteúdo da tabela é definido usando tags <code>td</code>, dentro dos outros elementos <code>tr</code>:</p><pre><code class="language-html">&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Coluna 1&lt;/th&gt;
    &lt;th&gt;Coluna 2&lt;/th&gt;
    &lt;th&gt;Coluna 3&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Linha 1 Coluna 1&lt;/td&gt;
    &lt;td&gt;Linha 1 Coluna 2&lt;/td&gt;
    &lt;td&gt;Linha 1 Coluna 3&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Linha 2 Coluna 1&lt;/td&gt;
    &lt;td&gt;Linha 2 Coluna 2&lt;/td&gt;
    &lt;td&gt;Linha 2 Coluna 3&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</code></pre><p>É assim que os navegadores renderizam tabelas se você não adicionar nenhum estilo CSS:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.24.08.png" class="kg-image" alt="Screen-Shot-2019-06-20-at-10.24.08" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Screen-Shot-2019-06-20-at-10.24.08.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.24.08.png 970w" sizes="(min-width: 720px) 720px" width="970" height="672" loading="lazy"></figure><p>Adicionamos, então, este CSS:</p><pre><code class="language-css">th, td {
  padding: 10px;
  border: 1px solid #333;
}
</code></pre><p>Isso faz com que a tabela pareça mais com uma tabela propriamente dita:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.26.15.png" class="kg-image" alt="Screen-Shot-2019-06-20-at-10.26.15" width="544" height="183" loading="lazy"></figure><h3 id="expandir-colunas-e-linhas">Expandir colunas e linhas</h3><p>Uma linha pode abranger 2 ou mais colunas, usando o atributo <code>colspan</code>:</p><pre><code class="language-html">&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Coluna 1&lt;/th&gt;
    &lt;th&gt;Coluna 2&lt;/th&gt;
    &lt;th&gt;Coluna 3&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td colspan="2"&gt;Linha 1 Colunas 1 e 2&lt;/td&gt;
    &lt;td&gt;Linha 1 Coluna 3&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td colspan="3"&gt;Linha 2 Colunas 1 a 3&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.27.59.png" class="kg-image" alt="Screen-Shot-2019-06-20-at-10.27.59" width="463" height="194" loading="lazy"></figure><p>Também é possível abranger 2 ou mais linhas, usando o atributo <code>rowspan</code>:</p><pre><code class="language-html">&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Coluna 1&lt;/th&gt;
    &lt;th&gt;Coluna 2&lt;/th&gt;
    &lt;th&gt;Coluna 3&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td colspan="2" rowspan="2"&gt;Linhas 1 e 2 Colunas 1 e 2&lt;/td&gt;
    &lt;td&gt;Linha 1 Coluna 3&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Linha 2 Coluna 3&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.29.37.png" class="kg-image" alt="Screen-Shot-2019-06-20-at-10.29.37" width="427" height="176" loading="lazy"></figure><h3 id="cabe-alho-das-linhas"><strong>Cabeçalho das linhas</strong></h3><p>Anteriormente, eu expliquei como você pode criar os cabeçalhos para as colunas, usando a tag <code>th</code> dentro da primeira tag <code>tr</code> da tabela.</p><p>Você pode adicionar uma tag <code>th</code> como o primeiro elemento dentro de um <code>tr</code> que não é o primeiro <code>tr</code> da tabela, e assim criar cabeçalhos de linha:</p><pre><code class="language-html">&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;/th&gt;
    &lt;th&gt;Coluna 2&lt;/th&gt;
    &lt;th&gt;Coluna 3&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Linha 1&lt;/th&gt;
    &lt;td&gt;Coluna 2&lt;/td&gt;
    &lt;td&gt;Coluna 3&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Linha 2&lt;/th&gt;
    &lt;td&gt;Coluna 2&lt;/td&gt;
    &lt;td&gt;Coluna 3&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.49.16.png" class="kg-image" alt="Screen-Shot-2019-06-20-at-10.49.16" width="347" height="165" loading="lazy"></figure><h3 id="mais-tags-para-organizar-a-tabela">Mais tags para organizar a tabela</h3><p>Você pode adicionar mais três <em>tags </em>em uma tabela, para deixá-la mais organizada.</p><p>Isso funciona melhor em tabelas grandes e para definir corretamente cabeçalho e rodapé.</p><p>Essas tags são:</p><ul><li><code>thead</code></li><li><code>tbody</code></li><li><code>tfoot</code></li></ul><p>Elas envolvem as tags <code>tr</code> para definir claramente as diferentes seções da tabela. Aqui está um exemplo:</p><pre><code class="language-html">&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;/th&gt;
      &lt;th&gt;Coluna 2&lt;/th&gt;
      &lt;th&gt;Coluna 3&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th&gt;Linha 1&lt;/th&gt;
      &lt;td&gt;Coluna 2&lt;/td&gt;
      &lt;td&gt;Coluna 3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th&gt;Linha 2&lt;/th&gt;
      &lt;td&gt;Coluna 2&lt;/td&gt;
      &lt;td&gt;Coluna 3&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tfoot&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;Rodapé da coluna 1&lt;/td&gt;
      &lt;td&gt;Rodapé da coluna 2&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tfoot&gt;
&lt;/table&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Screen-Shot-2019-06-20-at-10.52.41.png" class="kg-image" alt="Screen-Shot-2019-06-20-at-10.52.41" width="416" height="226" loading="lazy"></figure><h2 id="legenda-de-tabelas"><strong>Legenda de tabelas</strong></h2><p>As tabelas devem ter uma tag de legenda, <code>caption</code>, que descreva seu conteúdo. Essa tag deve ser colocada imediatamente após a tag de abertura da tabela:</p><pre><code class="language-html">&lt;table&gt;
  &lt;caption&gt;Idade dos cães&lt;/caption&gt;
  &lt;tr&gt;
    &lt;th&gt;Cão&lt;/th&gt;
    &lt;th&gt;Idade&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Roger&lt;/td&gt;
    &lt;td&gt;7&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</code></pre><h1 id="tags-de-multim-dia-audio-e-video"><strong>TAGS DE <strong><strong><strong><strong><strong>MULTIM</strong></strong></strong></strong></strong>Í<strong><strong><strong><strong><strong>DIA: <code>AUDIO</code> </strong></strong></strong></strong></strong>E<strong><strong><strong><strong><strong> <code>VIDEO</code></strong></strong></strong></strong></strong></strong></h1><p>Nesta seção, quero mostrar as tags <code>audio</code> e <code>video</code>.</p><h2 id="tag-audio"><strong>Tag<strong><strong><strong><strong><strong> <code>audio</code> </strong></strong></strong></strong></strong></strong></h2><p>Essa tag permite que você incorpore conteúdo de áudio em suas páginas de HTML.</p><p>Este elemento possibilita transmissão de áudio, tanto através de microfone via <code>getUserMedia()</code>, ou por reprodução de uma fonte de áudio que você referencia usando o atributo <code>src</code>:</p><pre><code class="language-html">&lt;audio src="arquivo.mp3"&gt;
</code></pre><p>Por padrão, o navegador não mostra nenhum controle para esse elemento. O que significa que o áudio será reproduzido apenas se configurado para reprodução automática (mais sobre isso posteriormente) e o usuário não pode ver como pará-lo, controlar o volume ou mover-se pela faixa.</p><p>Para mostrar os controles internos, você pode adicionar o atributo <code>controls</code>:</p><pre><code class="language-html">&lt;audio src="arquivo.mp3" controls&gt;
</code></pre><p>Os controles podem ter uma capa personalizada.</p><p>Você pode especificar o tipo MIME do arquivo de áudio usando o atributo <code>type</code>. Se não estiver definido, o navegador tentará determiná-lo automaticamente:</p><pre><code class="language-html">&lt;audio src="arquivo.mp3" controls type="audio/mpeg"&gt;
</code></pre><p>Um arquivo de áudio, por padrão, não é reproduzido automaticamente. Adicione o atributo <code>autoplay</code> para reproduzir o áudio automaticamente:</p><pre><code class="language-html">&lt;audio src="arquivo.mp3" controls autoplay&gt;
</code></pre><p>Observação: navegadores de dispositivos móveis não permitem reprodução automática.</p><p>O atributo <code>loop</code> reinicia a reprodução de áudio para 0:00, se definido; caso contrário, se não estiver presente, o áudio para no final do arquivo:</p><pre><code class="language-html">&lt;audio src="arquivo.mp3" controls autoplay loop&gt;
</code></pre><p>Você também pode reproduzir um arquivo de áudio silenciado usando o atributo <code>muted</code> (não tenho certeza de qual é a utilidade disso):</p><pre><code class="language-html">&lt;audio src="arquivo.mp3" controls autoplay loop muted&gt;
</code></pre><p>Usando JavaScript, você pode "ouvir" vários eventos acontecendo em um elemento <code>audio</code>, sendo os mais básicos:</p><ul><li><code>play</code> quando o arquivo começar a tocar</li><li><code>pause</code> quando a reprodução de áudio for pausada</li><li><code>playing</code> quando o áudio for retomado depois de uma pausa</li><li><code>ended</code> quando o final do arquivo de áudio for atingido</li></ul><h2 id="tag-video"><strong>Tag<strong><strong><strong><strong><strong> <code>video</code> </strong></strong></strong></strong></strong></strong></h2><p>Essa tag permite que você incorpore conteúdo de vídeo em suas páginas de HTML.</p><p>Este elemento pode transmitir vídeo, usando uma webcam via <code>getUserMedia()</code> ou <strong>WebRTC</strong>, ou pode reproduzir uma fonte de vídeo que você referencia usando o atributo <code>src</code>:</p><pre><code class="language-html">&lt;video src="arquivo.mp4"&gt;
</code></pre><p>Por padrão, o navegador não mostra nenhum controle para esse elemento, apenas o vídeo.</p><p>Isso significa que o vídeo será reproduzido apenas se configurado para reprodução automática (mais sobre isso mais tarde) e o usuário não pode ver como pará-lo, pausá-lo, controlar o volume ou pular para uma posição específica no vídeo.</p><p>Para mostrar os controles internos, você pode adicionar o atributo <code>controls</code>:</p><pre><code class="language-html">&lt;video src="arquivo.mp4" controls&gt;
</code></pre><p>Os controles podem ter uma capa personalizada.</p><p>Você pode especificar o tipo MIME do arquivo de vídeo usando o atributo <code>type</code>. Se não estiver definido, o navegador tentará determiná-lo automaticamente:</p><pre><code class="language-html">&lt;video src="arquivo.mp4" controls type="video/mp4"&gt;
</code></pre><p>Um arquivo de vídeo por padrão não é reproduzido automaticamente. Adicione o atributo <code>autoplay</code> para reproduzir o vídeo automaticamente:</p><pre><code class="language-html">&lt;video src="file.mp4" controls autoplay&gt;
</code></pre><p>Alguns navegadores também exigem o atributo <code>muted</code> para reprodução automática. O vídeo é reproduzido automaticamente apenas se silenciado:</p><pre><code class="language-html">&lt;audio src="arquivo.mp3" controls autoplay muted&gt;
</code></pre><p>O atributo <code>loop</code> reinicia a reprodução do vídeo em 0:00, se definido; caso contrário, se não estiver presente, o vídeo para no final do arquivo:</p><pre><code class="language-html">&lt;video src="arquivo.mp4" controls autoplay loop&gt;
</code></pre><p>Você pode definir uma imagem para ser a imagem de capa:</p><pre><code class="language-html">&lt;video src="arquivo.mp4" poster="imagem.png"&gt;
</code></pre><p>Se não estiver presente, o navegador exibirá o primeiro quadro do vídeo assim que estiver disponível.</p><p>Você pode definir os atributos <code>width</code> e <code>height</code> para definir o espaço que o elemento ocupará para que o navegador possa considerá-lo e não alterar o layout quando finalmente for carregado. Recebe um valor numérico, expresso em pixels.</p><p>Usando JavaScript, você pode "ouvir" vários eventos acontecendo em um elemento <code>video</code>, sendo os mais básicos:</p><ul><li><code>play</code> quando o arquivo começar a tocar</li><li><code>pause</code> quando o vídeo for pausado</li><li><code>playing</code> quando o vídeo for retomado depois de uma pausa</li><li><code>ended</code> quando o final do arquivo de vídeo for atingido</li></ul><h1 id="iframes"><strong><strong><strong><strong><strong><strong>IFRAMES</strong></strong></strong></strong></strong></strong></h1><p>A tag <code>iframe</code> nos permite incorporar conteúdo de outras origens (outros sites) em nossa página da web.</p><p>Tecnicamente, um <em>iframe</em> cria um contexto de navegação aninhado. Isso significa que qualquer coisa no <em>iframe</em> não interfere na página mãe e vice-versa. O JavaScript e o CSS não "vazam" de/para <em>iframes</em>.</p><p>Muitos sites usam <em>iframes </em>para realizar várias coisas. Você pode estar familiarizado com o Codepen, o Glitch ou outros sites que permitem programar em uma parte da página e ver o resultado em uma caixa. Isso é um <em>iframe</em>.</p><p>Você cria um desta forma:</p><pre><code class="language-html">&lt;iframe src="pagina.html"&gt;&lt;/iframe&gt;
</code></pre><p>Você também pode carregar um URL absoluto:</p><pre><code class="language-html">&lt;iframe src="https://site.com/pagina.html"&gt;&lt;/iframe&gt;
</code></pre><p>Você pode definir um conjunto de parâmetros de largura e altura (ou defini-los usando CSS). Caso contrário, o <em>iframe</em> usará os padrões, uma caixa de 300x150 pixels:</p><pre><code class="language-html">&lt;iframe src="pagina.html" width="800" height="400"&gt;&lt;/iframe&gt;
</code></pre><h2 id="srcdoc"><strong><strong><strong><strong><strong><strong>Srcdoc</strong></strong></strong></strong></strong></strong></h2><p>O atributo <code>srcdoc</code> permite especificar algum HTML embutido para mostrar. É uma alternativa ao <code>src</code>, mas recente e não suportada no Internet Explorer nem no Edge, versão 18 e anteriores:</p><pre><code class="language-html">&lt;iframe srcdoc="&lt;p&gt;Eu tenho um cão bonzinho&lt;/p&gt;"&gt;&lt;/iframe&gt;
</code></pre><h2 id="sandbox"><strong><strong><strong><strong><strong><strong>Sandbox</strong></strong></strong></strong></strong></strong></h2><p>O atributo <code>sandbox</code> permite limitar as operações permitidas nos <em>iframes</em>.</p><p>Se a omitirmos, tudo é permitido:</p><pre><code class="language-html">&lt;iframe src="pagina.html"&gt;&lt;/iframe&gt;
</code></pre><p>Se definirmos como "", nada é permitido:</p><pre><code class="language-html">&lt;iframe src="page.html" sandbox=""&gt;&lt;/iframe&gt;
</code></pre><p>Podemos selecionar o que permitir adicionando opções no atributo <code>sandbox</code>. Você pode permitir várias ações adicionando um espaço entre elas. Aqui está uma lista incompleta das opções que você pode usar:</p><ul><li><code>allow-forms</code>: permitir o envio de formulários</li><li><code>allow-modals</code>: permitir a abertura de janelas modais, incluindo chamar <code>alert()</code> em JavaScript</li><li><code>allow-orientation-lock</code>: permitir bloquear a orientação da tela</li><li><code>allow-popups</code>: permitir pop-ups, usando os links <code>window.open()</code> e <code>target="_blank"</code></li><li><code>allow-same-origin</code>: tratar o recurso que está sendo carregado como sendo da mesma origem</li><li><code>allow-scripts</code>: permitir que o <em>iframe </em>carregado execute scripts (mas não crie pop-ups).</li><li><code>allow-top-navigation</code>: dar acesso para o <em>iframe </em>ao contexto de navegação de nível superior.</li></ul><h2 id="allow"><strong><strong><strong><strong><strong><strong>Allow</strong></strong></strong></strong></strong></strong></h2><p>Atualmente experimental e suportado apenas por navegadores baseados em Chromium, este é o futuro do compartilhamento de recursos entre a janela pai e o <em>iframe</em>.</p><p>É semelhante ao atributo <code>sandbox</code>, mas nos auxilia a permitir recursos específicos, incluindo:</p><ul><li><code>accelerometer</code>: dá acesso à interface Sensors API Accelerometer</li><li><code>ambient-light-sensor</code>: dá acesso à interface Sensors API AmbientLightSensor</li><li><code>autoplay</code>: permite reproduzir automaticamente arquivos de vídeo e áudio</li><li><code>camera</code>: permite acessar a câmera da API getUserMedia</li><li><code>display-capture</code>: permite acessar o conteúdo da tela usando a API getDisplayMedia</li><li><code>fullscreen</code>: permite acessar o modo de tela cheia</li><li><code>geolocation</code>: permite acessar a API de geolocalização</li><li><code>gyroscope</code>: dá acesso à interface Sensors API Gyroscope</li><li><code>magnetometer</code>: dá acesso à interface Sensors API Magnetometer</li><li><code>microphone</code>: dá acesso ao microfone do dispositivo usando a API getUserMedia</li><li><code>midi</code>: permite acesso à API Web MIDI</li><li><code>payment</code>: dá acesso à API de solicitação de pagamento</li><li><code>speaker</code>: permite o acesso à reprodução de áudio através dos alto-falantes do dispositivo</li><li><code>usb</code>: dá acesso à API WebUSB.</li><li><code>vibrate</code>: dá acesso à API de vibração</li><li><code>vr</code>: dá acesso à API WebVR</li></ul><h2 id="referrer"><strong><strong><strong><strong><strong><strong>Referrer</strong></strong></strong></strong></strong></strong></h2><p>Ao carregar um <em>iframe</em>, o navegador envia informações importantes sobre quem o está carregando no cabeçalho <code>Referer</code> (atenção para o <code>r</code> único, um erro de digitação na língua inglesa com o qual devemos conviver).</p><p>O erro de ortografia do "referrer" originou-se na proposta original do cientista da computação Phillip Hallam-Baker para incorporar o campo na especificação do HTTP. O erro de ortografia foi definido no momento de sua incorporação no documento de padrões de solicitação de comentários RFC 1945.</p><p>O atributo <code>referrerpolicy</code> nos permite definir o referenciador para enviar ao <em>iframe </em>ao carregá-lo. O referenciador (em inglês, <em>referrer</em>) é um cabeçalho do HTTP que permite que a página saiba quem a está carregando. Estes são os valores permitidos:</p><ul><li><code>no-referrer-when-downgrade</code>: é o padrão e não envia o referenciador quando a página atual é carregada por HTTPS e o <em>iframe </em>é carregado no protocolo HTTP</li><li><code>no-referrer</code>: não envia o cabeçalho do referenciador</li><li><code>origin</code>: o referenciador é enviado e contém apenas a origem (porta, protocolo, domínio), não a origem + caminho – que é o padrão</li><li><code>origin-when-cross-origin</code>: ao carregar da mesma origem (porta, protocolo, domínio) no <em>iframe</em>, o referenciador é enviado em sua forma completa (origem + caminho). Caso contrário, apenas a origem é enviada</li><li><code>same-origin</code>: o referenciador é enviado apenas ao carregar da mesma origem (porta, protocolo, domínio) no <em>iframe</em></li><li><code>strict-origin</code>: envia a origem como o referenciador se a página atual for carregada por HTTPS e o <em>iframe </em>também carregar no protocolo HTTPS. Não envia nada se o <em>iframe </em>for carregado por HTTP</li><li><code>strict-origin-when-cross-origin</code>: envia a origem + caminho como referenciador ao trabalhar na mesma origem. Envia a origem como o referenciador se a página atual for carregada por HTTPS e o <em>iframe </em>também carregar no protocolo HTTPS. Não envia nada se o <em>iframe </em>for carregado por HTTP</li><li><code>unsafe-url</code>: envia a origem + caminho como referenciador mesmo ao carregar recursos de HTTP e a página atual é carregada por HTTPS</li></ul><h1 id="imagens"><strong><strong><strong><strong><strong><strong>IMAGE</strong></strong></strong></strong></strong>N<strong><strong><strong><strong><strong>S</strong></strong></strong></strong></strong></strong></h1><p>As imagens podem ser exibidas usando a tag <code>img</code>.</p><p>Essa tag aceita um atributo <code>src</code>, que usamos para definir a fonte da imagem:</p><pre><code class="language-html">&lt;img src="imagem.png"&gt;
</code></pre><p>Podemos usar um amplo conjunto de imagens. Os tipos mais comuns são PNG, JPEG, GIF, SVG e, mais recentemente, WebP.</p><p>O padrão HTML requer que um atributo <code>alt</code> esteja presente para descrever a imagem. Ele é usado por leitores de tela e por bots de mecanismos de pesquisa:</p><pre><code class="language-html">&lt;img src="cao.png" alt="Uma imagem de um cão"&gt;
</code></pre><p>Você pode configurar os atributos de largura, <code>width</code>, e altura, <code>height</code>, para definir o espaço que o elemento ocupará, de modo que o navegador possa considerá-lo sem alterar o layout quando a imagem estiver totalmente carregada. Eles recebem um valor numérico, expresso em pixels.</p><pre><code class="language-html">&lt;img src="cao.png" alt="Uma imagem de um cão" width="300" height="200"&gt;
</code></pre><h2 id="tag-figure"><strong>Tag<strong><strong><strong><strong><strong> <code>figure</code></strong></strong></strong></strong></strong></strong></h2><p>A tag <code>figure</code> é frequentemente usada juntamente com a tag <code>img</code>.</p><p><code>figure</code> é uma tag semântica, frequentemente usada quando você deseja exibir uma imagem com uma legenda. Você a usa assim:</p><pre><code class="language-html">&lt;figure&gt;
    &lt;img src="cao.png"
         alt="Um cãozinho dócil"&gt;
    &lt;figcaption&gt;Um cãozinho dócil&lt;/figcaption&gt;
&lt;/figure&gt;
</code></pre><p>A tag <code>figcaption</code> envolve o texto da legenda.</p><h2 id="imagens-responsivas-usando-srcset"><strong>Imagens responsivas usando <code>srcset</code></strong></h2><p>O atributo <code>srcset</code> permite definir imagens responsivas que o navegador pode usar dependendo da densidade de pixels ou da largura da janela, de acordo com suas preferências. Desse modo, o navegador pode baixar apenas os recursos necessários para renderizar a página, sem baixar uma imagem maior se estiver em um dispositivo móvel, por exemplo.</p><p>Aqui está um exemplo. Nele, fornecemos 4 imagens adicionais para 4 tamanhos de tela diferentes:</p><pre><code class="language-html">&lt;img src="cao.png"
    alt="Uma imagem de um cão"
    srcset="cao-500.png 500w,
               cao-800.png 800w,
             cao-1000.png 1000w,
             cao-1400.png 1400w"&gt;
</code></pre><p>No <code>srcset</code> usamos a medida <code>w</code> para indicar a largura da janela.</p><p>Como fazemos isso, também precisamos usar o atributo de tamanhos, <code>sizes</code>:</p><pre><code class="language-html">&lt;img src="cao.png"
    alt="Uma imagem de um cão"
    sizes="(max-width: 500px) 100vw, (max-width: 900px) 50vw, 800px"
    srcset="cao-500.png 500w,
               cao-800.png 800w,
             cao-1000.png 1000w,
             cao-1400.png 1400w"&gt;
</code></pre><p>Neste exemplo, a string <code>(max-width: 500px) 100vw, (max-width: 900px) 50vw, 800px</code> no atributo <code>sizes</code> descreve o tamanho da imagem em relação à janela de visualização, com várias condições separadas por ponto e vírgula.</p><p>A condição de mídia <code>max-width: 500px</code> define o tamanho da imagem em correlação com a largura da janela de visualização. Resumindo, se o tamanho da janela for menor do que 500px, a imagem é renderizada em 100% do tamanho da janela.</p><p>Se o tamanho da janela for maior que 500px, mas menor que 900px, a imagem é renderizada em 50% do tamanho da janela.</p><p>Se for ainda maior, a imagem é renderizada em 800px.</p><p>A unidade de medida <code>vw</code> pode ser nova para você. Resumindo, podemos dizer que 1 <code>vw</code> é 1% da largura da janela, então <code>100vw</code> é 100% da largura da janela.</p><p>Um site útil para gerar o <code>srcset</code> e imagens progressivamente menores é <a href="https://responsivebreakpoints.com/">https://responsivebreakpoints.com/</a>.</p><h2 id="tag-picture"><strong>Tag<strong><strong><strong><strong><strong> <code>picture</code> </strong></strong></strong></strong></strong></strong></h2><p>O HTML também nos dá a tag <code>picture</code>, que faz um trabalho muito semelhante ao <code>srcset</code>. As diferenças são muito sutis.</p><p>Você usa <code>picture</code> quando, em vez de apenas servir uma versão menor de um arquivo, deseja alterá-lo completamente ou veicular um formato de imagem diferente.</p><p>O melhor uso que encontrei foi com uma imagem WebP, que é um formato ainda não amplamente suportado. Na tag <code>picture</code>, você especifica uma lista de imagens e elas serão usadas em ordem. Portanto, no próximo exemplo, os navegadores que suportam WebP usarão a primeira imagem ou retornarão para JPG, do contrário:</p><pre><code class="language-html">&lt;picture&gt;
  &lt;source type="image/webp" srcset="imagem.webp"&gt;
  &lt;img src="imagem.jpg" alt="Uma imagem"&gt;
&lt;/picture&gt;
</code></pre><p>A tag <code>source</code> define um (ou mais) formatos para as imagens. A tag <code>img</code> é o substituto caso o navegador seja muito antigo e não dê suporte à tag <code>picture</code>.</p><p>Na tag <code>source</code> dentro da imagem, você pode adicionar um atributo <code>media</code> para definir consultas de mídia.</p><p>O exemplo a seguir funciona como o exemplo acima com <code>srcset</code>:</p><pre><code class="language-html">&lt;picture&gt;
  &lt;source media="(min-width: 500w)" srcset="cao-500.png" sizes="100vw"&gt;
  &lt;source media="(min-width: 800w)" srcset="cao-800.png" sizes="100vw"&gt;
  &lt;source media="(min-width: 1000w)" srcset="cao-1000.png"    sizes="800px"&gt;
  &lt;source media="(min-width: 1400w)" srcset="cao-1400.png"    sizes="800px"&gt;
  &lt;img src="cao.png" alt="Uma imagem de um cão"&gt;
&lt;/picture&gt;
</code></pre><p>Esse, porém, não é o seu caso de uso, porque, como você pode ver, é muito mais detalhado.</p><p>A tag <code>picture</code> é recente, mas agora é <a href="https://caniuse.com/#search=picture">suportada</a> por todos os principais navegadores, exceto Opera Mini e IE (todas as versões).</p><h1 id="acessibilidade"><strong>ACESSIBILIDADE</strong></h1><p>É importante que projetemos nosso HTML com acessibilidade em mente.</p><p>Fazer um HTML acessível significa que pessoas com deficiência podem usar a web. Existem usuários totalmente cegos ou com deficiência visual, pessoas com problemas de perda auditiva e uma infinidade de outras deficiências diferentes.</p><p>Infelizmente, este tópico não tem a atenção de que precisa, talvez por não ser considerado tão "legal" quanto outros tópicos.</p><p>O que acontece se uma pessoa não puder <em>ver</em> sua página, mas ainda quiser consumir seu conteúdo? Primeiro, como eles fazem isso? Eles não podem usar o mouse. Eles usam algo chamado <strong>leitor de tela</strong>. Você não precisa imaginar isso. Você pode experimentar um agora: o Google fornece a extensão <a href="https://chrome.google.com/webstore/detail/chromevox/kgejglhpjiefppelpmljglcjbhoiplfn/">ChromeVox Chrome</a> gratuita. A acessibilidade também deve cuidar de permitir que as ferramentas selecionem facilmente os elementos ou naveguem pelas páginas.</p><p>Páginas da web e aplicações da web nem sempre são construídas com acessibilidade como um de seus primeiros objetivos. Talvez a versão 1 seja lançada sem acessibilidade, mas é possível tornar uma página da web acessível depois de feita. <em>É melhor fazer isso antes</em>, mas nunca é <strong>tarde demais</strong>.</p><p>Esse é um assunto importante e, no meu país, os sites criados pelo governo ou por outras organizações públicas devem ter acessibilidade.</p><p>O que significa tornar um HTML acessível? Deixe-me ilustrar as principais coisas que você precisa pensar.</p><p>Observação: existem várias outras coisas nas quais devemos prestar atenção e que podem estar no tópico do CSS, como cores, contraste e fontes. Também é importante saber <a href="https://css-tricks.com/accessible-svgs/">como tornar as imagens SVG acessíveis</a> (texto em inglês). Eu, no entanto, não falo sobre esses assuntos aqui.</p><h2 id="use-sem-ntica-em-seu-html"><strong><strong><strong><strong><strong><strong>Use </strong></strong></strong></strong></strong>semântica em seu <strong><strong><strong><strong><strong>HTML</strong></strong></strong></strong></strong></strong></h2><p>O HTML semântico é muito importante e é uma das principais coisas das quais você precisa cuidar. Deixe-me ilustrar alguns cenários comuns.</p><p>É importante usar a estrutura correta para as tags de títulos. O mais importante é o <code>h1</code>. Você usa números mais altos para os menos importantes, mas todos os títulos de mesmo nível devem ter o mesmo significado (pense nisso como uma estrutura de árvore)</p><pre><code class="language-js">h1
    h2
        h3
    h2
    h2
        h3
            h4
</code></pre><p>Use <code>strong</code> e <code>em</code> em vez de <code>b</code> e <code>i</code>. Visualmente, eles parecem iguais, mas os 2 primeiros têm mais significado associado a eles. <code>b</code> e <code>i</code> são elementos mais visuais.</p><p>Listas são importantes. Um leitor de tela pode detectar uma lista e fornecer uma visão geral, permitindo que o usuário escolha entrar na lista ou não.</p><p>Tabelas devem ter uma tag de legenda, <code>caption</code>, que descreva seu conteúdo:</p><pre><code class="language-html">&lt;table&gt;
  &lt;caption&gt;Idade dos cães&lt;/caption&gt;
  &lt;tr&gt;
    &lt;th&gt;Cão&lt;/th&gt;
    &lt;th&gt;Idade&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Roger&lt;/td&gt;
    &lt;td&gt;7&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</code></pre><h2 id="use-atributos-alt-para-imagens"><strong><strong><strong><strong><strong><strong>Use </strong></strong></strong></strong></strong>atributos <strong><strong><strong><strong><strong><code>alt</code> </strong></strong></strong></strong></strong>para imagens </strong></h2><p>Todas as imagens devem ter uma tag <code>alt</code> descrevendo o conteúdo da imagem. Não é apenas uma boa prática. É exigido pelo padrão HTML e seu HTML sem ele não é validado.</p><pre><code class="language-html">&lt;img src="cao.png" alt="Imagem do meu cão"&gt;
</code></pre><p>Também é bom para os mecanismos de pesquisa, se isso for um incentivo para você adicioná-lo.</p><h2 id="use-o-atributo-role"><strong>Use o atributo<strong><strong><strong><strong><strong> <code>role</code> </strong></strong></strong></strong></strong></strong></h2><p>O atributo <code>role</code> permite atribuir funções específicas a vários elementos em sua página.</p><p>Você pode atribuir muitas funções diferentes: complementar <code>complementary</code>, lista <code>list</code>, item de lista <code>listitem</code>, principal <code>main</code>, navegação <code>navigation</code>, região <code>region</code>, aba <code>tab</code>, alerta <code>alert</code>, aplicação <code>application</code>, artigo <code>article</code>, <code>banner</code>, botão <code>button</code>, célula <code>cell</code>, <code>checkbox</code>, informação do conteúdo <code>contentinfo</code>, diálogo <code>dialog</code>, documento <code>document</code>, <code>feed</code>, imagem/figura <code>figure</code>, formulário <code>form</code>, grade <code>grid</code>, célula de grade <code>gridcell</code>, cabeçalho <code>heading</code>, imagem <code>img</code>, caixa de lista <code>listbox</code>, linha <code>row</code>, grupo de linhas <code>rowgroup</code>, busca <code>search</code>, troca <code>switch</code>, tabela <code>table</code>, painel de abas <code>tabpanel</code>, caixa de texto <code>textbox</code> e temporizador <code>timer</code>.</p><p>São muitas coisas. Para a referência completa de cada um deles, use este <a href="https://developer.mozilla.org/pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques">link da MDN</a>. Você, no entanto, não precisa atribuir uma função a cada elemento na página. Leitores de tela podem inferir da tag HTML na maioria dos casos. Por exemplo, você não precisa adicionar uma tag de função em tags semânticas, como <code>nav</code>, <code>button</code> ou <code>form</code>.</p><p>Vamos pegar o exemplo da tag <code>nav</code>. Você pode usá-la para definir a navegação da página assim:</p><pre><code class="language-html">&lt;nav&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="/"&gt;Início&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/blog"&gt;Blog&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
</code></pre><p>Se você fosse <em>forçado</em> a usar uma tag <code>div</code> em vez de <code>nav</code>, você usaria a função de <code>navigation</code>:</p><pre><code class="language-html">&lt;div role="navigation"&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="/"&gt;Início&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/blog"&gt;Blog&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
</code></pre><p>Então, aqui, você tem um exemplo prático: <code>role</code> é usado para atribuir um valor significativo quando a tag ainda não transmite o significado.</p><h2 id="use-o-atributo-tabindex"><strong><strong><strong><strong><strong><strong>Use </strong></strong></strong></strong></strong>o atributo<strong><strong><strong><strong><strong> <code>tabindex</code></strong></strong></strong></strong></strong></strong></h2><p>O atributo <code>tabindex</code> permite alterar a ordem de como pressionar a tecla Tab seleciona os elementos "selecionáveis". Por padrão, apenas links e elementos de formulário são "selecionáveis" por navegação usando a tecla Tab (e você não precisa definir <code>tabindex</code> nesses casos).</p><p>Adicionar <code>tabindex="0"</code> torna um elemento selecionável:</p><pre><code class="language-html">&lt;div tabindex="0"&gt;
...
&lt;/div&gt;
</code></pre><p>Usar <code>tabindex="-1"</code> remove um elemento dessa navegação baseada em guias e pode ser bastante útil.</p><h2 id="use-o-atributo-aria"><strong><strong><strong><strong><strong><strong>Use </strong></strong></strong></strong></strong>o atributo<strong><strong><strong><strong><strong> <code>aria</code></strong></strong></strong></strong></strong></strong></h2><p>ARIA é um acrônimo em inglês para Accessible Rich Internet Applications (Aplicações Avançadas de Internet Acessíveis) e define a semântica que pode ser aplicada aos elementos.</p><h3 id="aria-label"><strong><strong><strong><strong><strong><strong><code>aria-label</code></strong></strong></strong></strong></strong></strong></h3><p>Este atributo é usado para adicionar uma string para descrever um elemento.</p><p>Exemplo:</p><pre><code class="language-html">&lt;p aria-label="A descrição do produto"&gt;...&lt;/p&gt;
</code></pre><p>Eu uso esse atributo na barra lateral do meu blog, onde tenho uma caixa de entrada para pesquisa sem um rótulo explícito, pois possui um atributo <code>placeholder</code>.</p><h3 id="aria-labelledby"><strong><strong><strong><strong><strong><strong><code>aria-labelledby</code></strong></strong></strong></strong></strong></strong></h3><p>Esse atributo define uma correlação entre o elemento atual e aquele que o rotula.</p><p>Se você sabe como um elemento <code>input</code> pode ser associado a um elemento <code>label</code>, é semelhante.</p><p>Passamos o id do item que descreve o elemento atual.</p><p>Exemplo:</p><pre><code class="language-html">&lt;h3 id="description"&gt;A descrição do produto&lt;/h3&gt;

&lt;p aria-labelledby="description"&gt;
...
&lt;/p&gt;
</code></pre><h3 id="aria-describedby"><strong><strong><strong><strong><strong><strong><code>aria-describedby</code></strong></strong></strong></strong></strong></strong></h3><p>Esse atributo permite associar um elemento a outro elemento que serve como descrição.</p><p>Exemplo:</p><pre><code class="language-html">&lt;button aria-describedby="payNowDescription"&gt;Pague agora&lt;/button&gt;

&lt;div id="payNowDescription"&gt;Clicar no botão enviará você para o formulário do Stripe!&lt;/div&gt;
</code></pre><h3 id="use-aria-hidden-para-esconder"><strong><strong><strong><strong><strong><strong>Use aria-hidden </strong></strong></strong></strong></strong>para esconder</strong></h3><p>Eu gosto de um design minimalista em meus sites. Meu blog, por exemplo, é basicamente apenas conteúdo, com alguns links na barra lateral. Algumas coisas na barra lateral, porém, são apenas elementos visuais que não contribuem para a experiência de uma pessoa que não pode ver a página, como a imagem do meu logotipo ou o seletor de tema escuro/claro.</p><p>Adicionar o atributo <code>aria-hidden="true"</code> fará com que os leitores de tela ignorem esse elemento.</p><h2 id="quer-saber-mais"><strong>Quer saber mais?</strong></h2><p>Esta é apenas uma introdução ao tema. Para saber mais, recomendo estes recursos (em inglês):</p><ul><li><a href="https://www.w3.org/TR/WCAG20/">https://www.w3.org/TR/WCAG20/</a></li><li><a href="https://webaim.org/">https://webaim.org</a></li><li><a href="https://developers.google.com/web/fundamentals/accessibility/">https://developers.google.com/web/fundamentals/accessibility/</a></li></ul><hr><p>Você chegou ao final do Manual de HTML. parabéns!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1563876708.png" class="kg-image" alt="1563876708" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1563876708.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1563876708.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="662" loading="lazy"></figure><p><a href="https://thevalleyofcode.com/download/html/"><strong>Clique aqui para obter uma versão em inglês em PDF/ePub/Mobi deste livro para ler off-line!</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como criar uma apresentação de slides com HTML, CSS e JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Uma apresentação de slides para a web é uma sequência de imagens ou de texto que consiste em mostrar um elemento da sequência em um determinado intervalo de tempo. Para este tutorial, você pode criar uma apresentação de slides seguindo estes passos: Escreva a marcação em HTML   <!DOCTYPE ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-criar-uma-apresentacao-de-slides-com-html-css-e-javascript/</link>
                <guid isPermaLink="false">63d86904b42da706e17c3264</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 31 Jan 2023 01:30:44 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/01/5f9c9e44740569d1a4ca3c37.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-create-a-slideshow/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Create a Slideshow with HTML, CSS, and JavaScript</a>
      </p><p>Uma apresentação de slides para a web é uma sequência de imagens ou de texto que consiste em mostrar um elemento da sequência em um determinado intervalo de tempo.</p><p>Para este tutorial, você pode criar uma apresentação de slides seguindo estes passos:</p><h3 id="escreva-a-marca-o-em-html"><strong><strong>Escreva a marcação em HTML</strong></strong></h3><pre><code class="language-html">  &lt;!DOCTYPE html&gt;
  &lt;html lang="en"&gt;
    &lt;head&gt;
      &lt;meta charset="UTF-8"&gt;
      &lt;title&gt;Slideshow&lt;/title&gt;
      &lt;link rel="stylesheet" href="style.css"&gt;
    &lt;/head&gt;
    &lt;body&gt;
      &lt;div id="slideshow-example" data-component="slideshow"&gt;
        &lt;div role="list"&gt;
          &lt;div class="slide"&gt;
            &lt;img src="" alt=""&gt;
          &lt;/div&gt;
          &lt;div class="slide"&gt;
            &lt;img src="" alt=""&gt;
          &lt;/div&gt;
          &lt;div class="slide"&gt;
            &lt;img src="" alt=""&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;script src="slideshow.js"&gt;&lt;/script&gt;
    &lt;/body&gt;
  &lt;/html&gt;</code></pre><h2 id="escreva-os-estilos-para-ocultar-slides-e-mostrar-apenas-um-slide-"><strong>Escreva os estilos para ocultar <strong>slides </strong>e mostrar apenas um slide<strong>.</strong></strong></h2><p>Para ocultar os slides, você tem de dar a eles um estilo padrão. Isso orientará a mostrar apenas um slide se ele estiver ativo ou se você quiser mostrá-lo.</p><pre><code class="language-css">  [data-component="slideshow"] .slide {
    display: none;
  }

  [data-component="slideshow"] .slide.active {
    display: block;
  }</code></pre><h2 id="altere-os-slides-em-um-intervalo-de-tempo-"><strong>Altere os <strong>slides </strong>em um intervalo de tempo<strong>.</strong></strong></h2><p>O primeiro passo para alterar quais slides aparecem é selecionar o(s) <em>wrapper</em>(s) dos slides e, depois, os slides em si.</p><p>Ao selecionar os slides, você tem de passar por cada slide e adicionar ou remover a classe <code>active</code>, dependendo do slide que você quer mostrar. Depois, basta repetir o procesos por um determinado intervalo de tempo.</p><p>Lembre-se de que, quando você remove a classe <code>active</code> de um slide, você o estará ocultando, em função dos estilos definidos no passo anterior. Porém, ao adicionar a classe <code>active</code> ao slide, você sobrescreverá o estilo <code>display:none</code> com o estilo <code>display:block</code>, o que fará com que o slide seja exibido aos usuários.</p><pre><code class="language-js">  var slideshows = document.querySelectorAll('[data-component="slideshow"]');
  
  // Aplica a todas as apresentações de slides que você define com o HTML escrito
  slideshows.forEach(initSlideShow);

  function initSlideShow(slideshow) {

    var slides = document.querySelectorAll(`#${slideshow.id} [role="list"] .slide`); // Obter um array de slides

    var index = 0, time = 5000;
    slides[index].classList.add('active');  
    
    setInterval( () =&gt; {
      slides[index].classList.remove('active');
      
      //Passar por cada slide, incrementando o índice
      index++;
      
      // Ao passar por todos os slides, reiniciar o índice para exibir o primeiro slide e iniciar novamente
      if (index === slides.length) index = 0; 
      
      slides[index].classList.add('active');

    }, time);
  }</code></pre><p><strong><a href="https://codepen.io/AndresUris/pen/rGXpvE">Codepen de exemplo para seguir este tutorial</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como usar o Font Awesome com o HTML ]]>
                </title>
                <description>
                    <![CDATA[ O Font Awesome é uma das formas mais populares de adicionar ícones ao seu site. No entanto, se você adicionar o CDN ao elemento <head> de sua página, pode ser que você veja apenas retângulos pretos? Aqui vão algumas dicas para levar em consideração ao adicionar o Font Awesome ao ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-usar-o-font-awesome-com-o-html/</link>
                <guid isPermaLink="false">63d2eb6791baea05fef71d34</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 26 Jan 2023 21:22:21 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/01/5f9c9aa9740569d1a4ca26f1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-use-font-awesome-v5-7-2-with-html/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use Font Awesome v5.7.2 with HTML</a>
      </p><p>O Font Awesome é uma das formas mais populares de adicionar ícones ao seu site. No entanto, se você adicionar o CDN ao elemento <code>&lt;head&gt;</code> de sua página, pode ser que você veja apenas retângulos pretos?</p><p>Aqui vão algumas dicas para levar em consideração ao adicionar o Font Awesome ao seu próximo projeto.</p><h3 id="adicione-o-link-head"><strong>Adicione o link à head</strong></h3><p>Imagine que você tenha o seguinte documento em HTML:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;/title&gt;
	&lt;link rel="stylesheet" type="text/css" href="testing.css"&gt;
	&lt;link rel="stylesheet" type="text/css" href="css/all.css"&gt;
	&lt;meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no"&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;i class="fab fa-github-square"&gt;&lt;a href="https://github.com/willyblackkeez" id="profile-link"&gt;&lt;/a&gt;&lt;/i&gt;
	&lt;i class="fab fa-facebook"&gt;&lt;/i&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><p>Do mesmo modo que ocorre com os outros CDNs, você precisa adicionar um elemento <code>&lt;link&gt;</code> à <code>&lt;head&gt;</code>. Para a versão 5.7.2 do Font Awesome, ele terá essa aparência:</p><p><code>&lt;link rel="stylesheet" href="//use.fontawesome.com/releases/v5.0.7/css/all.css"&gt;</code></p><blockquote>Nota da tradução: no momento em que a tradução está sendo realizada, o Font Awesome encontra-se na versão 6.2.0, de agosto de 2022.</blockquote><h3 id="on-line-x-local"><strong>On-line x local</strong></h3><p>Ao executar o código a seguir em um editor baseado na web, como o CodePen ou o CodeSandbox, ele renderizará os ícones adequadamente:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;/title&gt;
    &lt;link rel="stylesheet" href="//use.fontawesome.com/releases/v5.0.7/css/all.css"&gt;
	&lt;link rel="stylesheet" type="text/css" href="testing.css"&gt;
	&lt;link rel="stylesheet" type="text/css" href="css/all.css"&gt;
	&lt;meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no"&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;i class="fab fa-github-square"&gt;&lt;a href="https://github.com/willyblackkeez" id="profile-link"&gt;&lt;/a&gt;&lt;/i&gt;
	&lt;i class="fab fa-facebook"&gt;&lt;/i&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><p>Porém, ao tentar abrir a página localmente em um navegador, você verá apenas retângulos de cor preta no lugar dos ícones:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/01/6f22c59bffe7f1b87fed6d58092f69d53e3bbd15-1.png" class="kg-image" alt="6f22c59bffe7f1b87fed6d58092f69d53e3bbd15-1" width="480" height="320" loading="lazy"></figure><p>Dê outra olhada no <code>href</code> do elemento <code>&lt;link&gt;</code> no código acima. Percebe o problema?</p><p>O problema está no fato de que, ao carregar a página a partir do seu sistema de arquivos local, o navegador está tentando encontrar o arquivo CSS do Font Awesome na raiz do arquivo de sistema.</p><p>Para que as coisas funcionem on-line e localmente, certifique-se de adicionar o esquema de URL (HTTP, ou, se possível, HTTPS) ao <code>href</code>:</p><p><code>&lt;link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.7/css/all.css"&gt;</code></p><h3 id="o-que-ocorre-aqui"><strong>O que ocorre aqui?</strong></h3><p>Ao deixar de fora o esquema de URL (<code>href="//use.fontawesome..."</code>), o navegador usará o mesmo esquema de URL da página a qual ele carregou.</p><p>Assim, se estiver executando a página localmente, ao rodar um arquivo HTML em um navegador, <code>href</code> assumirá que o CSS do Font Awesome também seja um arquivo que está salvo localmente (<code>file:</code>).</p><p>Basta se certificar que os atributos <code>href</code> para seus elementos <code>&lt;link&gt;</code> apontem todos para o URL completo, incluindo o esquema de URL, e tudo dará certo.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O atributo target na tag a do HTML explicado ]]>
                </title>
                <description>
                    <![CDATA[ O atributo <a target> especifica onde abrir o documento vinculado por uma tag a  (elemento de âncora). Exemplos de <a target> Um atributo target com o valor de _blank abre o documento vinculado em uma nova janela ou aba. <a href="https://www.freecodecamp.org" target="_blank">freeCodeCamp</a> Um atributo target com o valor de ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-atributo-target-na-tag-a-do-html-explicado/</link>
                <guid isPermaLink="false">63d1dbc791baea05fef71cf8</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 26 Jan 2023 01:56:02 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/01/5f9c9e4b740569d1a4ca3c5e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-a-target-html-attribute-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The a target HTML Attribute Explained</a>
      </p><p>O atributo <code>&lt;a target&gt;</code> especifica onde abrir o documento vinculado por uma tag <code>a</code> (elemento de âncora).</p><h2 id="exemplos-de-a-target"><strong>Exemplos de &lt;a target&gt;</strong></h2><p>Um atributo <code>target</code> com o valor de <code>_blank</code> abre o documento vinculado em uma nova janela ou aba.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org" target="_blank"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>Um atributo <code>target</code> com o valor de <code>_self</code> abre o documento vinculado no mesmo <em>frame</em> no qual ele foi clicado (esse é o padrão e, em geral, não precisa ser especificado).</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org" target="_self"&gt;freeCodeCamp&lt;/a&gt;</code></pre><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>Um atributo <code>target</code> com o valor de <code>_parent</code> abre o documento vinculado no <em>frame </em>do elemento pai.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org" target="_parent"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>Um atributo <code>target</code> com o valor de <code>_top</code> abre o documento vinculado no corpo completo da janela.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org" target="_top"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>Um atributo <code>target</code> com o valor de <code>framename</code> abre o documento vinculado em um <em>frame</em> nomeado e especificado.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org" target="framename"&gt;freeCodeCamp&lt;/a&gt;</code></pre><h2 id="links-relacionados-em-ingl-s-"><strong>Links relacionados</strong> (em inglês)<strong>:</strong></h2><ul><li><a href="https://guide.freecodecamp.org/html/attributes/a-href-attribute">Sobre o atributo &lt;a href&gt;</a></li><li><a href="https://guide.freecodecamp.org/html/attributes">Informações gerais sobre os atributos do HTML</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O que é a declaração de DOCTYPE em HTML? ]]>
                </title>
                <description>
                    <![CDATA[ A declaração de tipo de documento no HTML, também conhecida como DOCTYPE, é a primeira linha de código necessária em qualquer documento, HTML ou XHTML. A declaração de DOCTYPE é uma instrução para o navegador da web que diz em qual versão do HTML a página é escrita. Isso garante ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-que-e-a-declaracao-de-doctype-em-html/</link>
                <guid isPermaLink="false">63d0543d91baea05fef71b24</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 24 Jan 2023 22:35:18 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/01/5f9c9e63740569d1a4ca3cda.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/what-is-the-doctype-declaration-in-html/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is the DOCTYPE Declaration in HTML?</a>
      </p><p>A declaração de tipo de documento no HTML, também conhecida como <code>DOCTYPE</code>, é a primeira linha de código necessária em qualquer documento, HTML ou XHTML. A declaração de <code>DOCTYPE</code> é uma instrução para o navegador da web que diz em qual versão do HTML a página é escrita. Isso garante que a página da web seja analisada e exibida da mesma maneira por navegadores da web diferentes.</p><p>Em HTML 4.01, a declaração de <code>DOCTYPE</code> tem a ver com uma definição de tipo de documento (ou por sua sigla, DTD). Uma DTD define a estrutura e os elementos legais de um documento XML. Como o HTML 4.01 tinha como base a <em>Standard Generalised Markup Language</em> (SGML, ou <a href="https://pt.frwiki.wiki/wiki/Standard_Generalized_Markup_Language">linguagem de marcação generalizada padrão</a>), a referência a uma DTD na declaração de <code>DOCTYPE</code> era necessária.</p><p>Além disso, <code>doctype</code> no HTML 4.01 exigia a declaração de uma DTD <code>strict</code>, <code>transitional</code> ou <code>frameset</code>, cada uma delas com um caso de uso diferente, como descrevemos abaixo.</p><ul><li><strong><strong><strong><strong>DTD</strong></strong></strong><strong> 'strict'</strong></strong>: usado por páginas da web que <em><em>exclu</em>íam</em> atributos e elementos que a W3C esperava que saíssem de circulação conforme aumentava o suporte ao CSS</li><li><strong><strong><strong><strong>DTD</strong></strong></strong><strong> '</strong></strong><strong>t<strong><strong><strong>ransitional</strong></strong></strong>'</strong>: usado por páginas da web que <em><em>inclu</em>íam</em> &nbsp;atributos e elementos que a W3C esperava que saíssem de circulação conforme aumentava o suporte ao CSS</li><li><strong><strong><strong><strong>DTD</strong></strong></strong><strong> 'frameset'</strong></strong>: usado por páginas da web com frames</li></ul><p>Por outro lado, a declaração de <code>DOCTYPE</code> do HTML 5 é muito mais simples: ela já não precisa de uma referência às DTDs, pois já não se baseia mais em SGML. Veja os exemplos abaixo para ter uma comparação entre as declarações de <code>DOCTYPE</code> do HTML 4.01 e do HTML 5.</p><h3 id="exemplos"><strong><strong><strong>Ex</strong>emplos</strong></strong></h3><p>Sintaxe de doctype do HTML5 e posteriores:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;</code></pre><p>Sintaxe de doctype do HTML 4.01 '<em>strict</em>':</p><pre><code class="language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;</code></pre><p>Sintaxe de doctype do HTML 4.01 '<em>transitional</em>':</p><pre><code class="language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</code></pre><p>Sintaxe de doctype do HTML 4.01 para '<em>framesets</em>':</p><pre><code class="language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;</code></pre><h2 id="hist-rico"><strong><strong><strong>Hist</strong>órico</strong></strong></h2><p>Durante os primeiros anos do HTML, os padrões da web não eram aceitos do mesmo modo por todos os fabricantes de navegadores. Eles criavam os recursos do modo que eles mesmos queria, não havendo uma preocupação com os navegadores concorrentes.</p><p>O resultado foi a necessidade de os desenvolvedores da web precisarem escolher um navegador para o qual desenvolveriam os seus sites. Desse modo, os sites não renderizariam corretamente em navegadores não suportados. Essa era uma situação que não podia continuar.</p><p>O W3C (<em>World Wide Web Consortium</em>) escreveu um conjunto de padrões da web para lidar com essa situação. Todos os fabricantes de navegadores e desenvolvedores para a web deveriam aderir a esses padrões. Isso garantiria que os sites da web renderizariam corretamente em qualquer navegador.</p><p>As mudanças requeridas pelos padrões eram bastante diferentes de algumas práticas existentes. Aderir a elas poderia quebrar os sites da web existentes e que não estavam de acordo com os padrões.</p><p>Para lidar com esse problema, os fabricantes começaram a criar modos de renderizar por programação em seus navegadores. Os desenvolvedores para a web precisaram adicionar uma declaração de <code>doctype</code> à parte superior de seu documento de HTML. Essa declaração diria ao navegador qual o modo de renderização deveria ser usado para aquele documento.</p><p>Três modos de renderização separados estavam normalmente disponíveis em todos os navegadores:</p><ul><li>o modo totalmente nos padrões (ou <strong><strong><strong><strong>Full standards mode</strong></strong></strong></strong>), que renderizava as páginas de acordo com os padrões da web do W3C.</li><li>o modo 'com peculiaridades' (ou <strong><strong><strong><strong>Quirks mode</strong></strong></strong></strong>), que renderizava as páginas criadas de modo não conforme aos padrões.</li><li>o modo 'quase' nos padrões (ou <strong><strong><strong><strong>Almost standards mode</strong></strong></strong></strong>), que era próximo ao modo totalmente nos padrões, mas que ainda dava suporte a algumas das 'peculiaridades'.</li></ul><p>No momento atual do HTML 5, os padrões da web estão totalmente implementados em todos os navegadores mais importantes. Os sites da web sites geralmente são desenvolvidos em conformidade com os padrões do W3C. Assim, a declaração de <code>doctype</code> do HTML 5 existe apenas para informar o navegador de que ele deve renderizar o documento no modo totalmente nos padrões.</p><h2 id="uso"><strong><strong><strong>Us</strong>o</strong></strong></h2><p>A declaração de <code>doctype</code> deve ser a primeira linha de código de um documento em HTML, excetuando possíveis comentários, que podem vir antes, caso necessário. Para documentos de HTML 5 modernos, a declaração de <code>doctype</code> deve ser feita assim:</p><p><code>&lt;!DOCTYPE html&gt;</code></p><h4 id="para-mais-informa-es-"><strong><strong>Para mais informações<strong>:</strong></strong></strong></h4><p>Embora não seja mais de uso geral, existem vários outros tipos de declarações de <code>doctype</code> vindas de versões anteriores do HTML. Também há versões específicas para documentos em XML. Para ler mais sobre isso e para ver exemplos de código para cada uma dessas versões, dê uma olhada nesse <a href="https://en.wikipedia.org/wiki/Document_type_declaration">artigo da Wikipédia</a> (em inglês – também há uma <a href="https://pt.wikipedia.org/wiki/Doctype">versão em português</a>, mas com conteúdo bastante reduzido).</p><p>Confira também os sites abaixo:</p><p><a href="https://www.w3.org/QA/Tips/Doctype">Uma observação da W3 sobre Doctype</a> (em inglês)</p><p><a href="https://www.w3schools.com/tags/tag_doctype.asp">W3Schools</a> (em inglês)</p><p><a href="https://developer.mozilla.org/pt-BR/docs/Glossary/Doctype">Entrada sobre Doctype no glossário da MDN</a></p><p><a href="https://developer.mozilla.org/en-US/docs/Quirks_Mode_and_Standards_Mode"></a><a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Quirks_Mode_and_Standards_Mode">Uma rápida explicação da MDN sobre o modo de peculiaridades ("quirks") e sobre o modo padrão</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Exemplos de código de link em botões no HTML – como fazer hiperlinks em HTML usando o atributo HREF nas tags ]]>
                </title>
                <description>
                    <![CDATA[ Neste artigo, vamos explorar três maneiras diferentes de se fazer um botão em HTML agir como um link. Estes são os métodos que vamos analisar:  1. Estilizar um link para parecer um botão  2. Usar os atributos action e formaction em um formulário  3. Usar o evento ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/exemplos-de-codigo-de-link-em-botoes-no-html-como-fazer-hiperlinks-em-html-usando-o-atributo-href-nas-tags/</link>
                <guid isPermaLink="false">635be7f07e77d305f28d76b3</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elizabete Nakamura ]]>
                </dc:creator>
                <pubDate>Wed, 14 Dec 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/6049c377a7946308b76862f0.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/html-button-link-code-examples-how-to-make-html-hyperlinks-using-the-href-attribute-on-tags/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Button Link Code Examples – How to Make HTML Hyperlinks Using the HREF Attribute on Tags</a>
      </p><p>Neste artigo, vamos explorar três maneiras diferentes de se fazer um botão em HTML agir como um link.</p><p>Estes são os métodos que vamos analisar:</p><ol><li>Estilizar um link para parecer um botão</li><li>Usar os atributos <em>action</em> e <em>formaction</em> em um formulário</li><li>Usar o evento <em>onclick</em> do JavaScript</li></ol><p>Primeiro, porém, vamos dar uma olhada na abordagem errada.</p><h3 id="por-que-esta-abordagem-com-um-elemento-n-o-funciona"><strong>Por que esta abordagem com um elemento não funciona?</strong></h3><p>O trecho de código abaixo leva ao site do freeCodeCamp quando ele é clicado.</p><pre><code class="language-html">  &lt;a href="https://www.freecodecamp.org/"&gt;
    &lt;button&gt;freeCodeCamp&lt;/button&gt;
  &lt;/a&gt; </code></pre><p>No entanto, essa não é uma marcação válida em HTML.</p><blockquote><em>O elemento <a href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element">a</a> pode ser envolvido por parágrafos inteiros, listas, tabelas e assim por diante. É possível usar até mesmo seções inteiras, desde que não haja conteúdo interativo dentro delas (por exemplo, botões ou outros links). - Fonte: </em>Grupo de Trabalho de Tecnologia de Aplicação de Hipertexto Web</blockquote><p>Essa é considerada uma má prática, pois torna difícil entender a intenção do usuário.</p><p>Os links devem navegar o usuário para outra parte da página da web ou para um site da web externo. Os botões devem realizar uma ação específica como o envio de um formulário.</p><p>Quando você aninha um dentro do outro, isso torna confusa a ação que você quer realizar. É por isso que é melhor não aninhar um botão dentro de um elemento de âncora.</p><h3 id="como-estilizar-um-link-que-se-pare-a-com-um-bot-o-com-css"><strong>Como estilizar um link que se pareça com um botão com CSS</strong></h3><p>Esta primeira abordagem não utiliza, de fato, um botão. Podemos estilizar uma tag de âncora para que se pareça com um botão usando o CSS.</p><p>Este é o estilo padrão do HTML para um elemento de âncora.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/blue-anchor-tag.png" class="kg-image" alt="blue-anchor-tag" width="268" height="114" loading="lazy"></figure><p>Podemos adicionar uma classe ao elemento de âncora e depois usar esse seletor de classe para estilizar o elemento.</p><pre><code class="language-html">  &lt;a class="fcc-btn" href="https://www.freecodecamp.org/"&gt;freeCodeCamp&lt;/a&gt;  
</code></pre><p>Se você quiser que o link abra em uma nova página, pode adicionar o atributo target="_blank", assim:</p><pre><code class="language-html">  &lt;a target="_blank" class="fcc-btn" href="https://www.freecodecamp.org/"&gt;freeCodeCamp&lt;/a&gt;  
</code></pre><p>Então, podemos adicionar uma cor de fundo e mudar a cor da fonte, desse modo:</p><pre><code class="language-css">.fcc-btn {
  background-color: #199319;
  color: white;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/background-and-white-text.png" class="kg-image" alt="background-and-white-text" width="218" height="68" loading="lazy"></figure><p>O próximo passo é adicionar algum preenchimento (em inglês, <em>padding</em>) ao redor do texto:</p><pre><code class="language-css">.fcc-btn {
  background-color: #199319;
  color: white;
  padding: 15px 25px;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/adding-padding-1.png" class="kg-image" alt="adding-padding-1" width="338" height="134" loading="lazy"></figure><p>Finalmente, podemos usar a propriedade <em>text-decoration</em> para remover o sublinhado do texto:</p><pre><code class="language-css">.fcc-btn {
  background-color: #199319;
  color: white;
  padding: 15px 25px;
  text-decoration: none;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/removing-underline.png" class="kg-image" alt="removing-underline" width="332" height="142" loading="lazy"></figure><p>Agora temos um elemento de âncora que se parece com um botão.</p><p>Também podemos tornar este "botão" um pouco mais interativo mudando a cor de fundo, dependendo do estado do link.</p><pre><code class="language-css">.fcc-btn:hover {
  background-color: #223094;
}</code></pre><figure class="kg-card kg-embed-card"><iframe id="cp_embed_XWNyGBR" src="https://codepen.io/jessica-wilkins/embed/preview/XWNyGBR?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=XWNyGBR" title="Demo Pen" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><p>Poderíamos deixar o design mais intrincado, mas a ideia é apenas mostrar o básico de como estilizar um link para que se pareça um botão.</p><p>Você também poderia optar por usar uma biblioteca do CSS, como o <a href="https://getbootstrap.com/">Bootstrap</a>.</p><pre><code class="language-html">  &lt;a class="btn btn-primary" href="https://www.freecodecamp.org/"&gt;freeCodeCamp&lt;/a&gt;  
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/bootstrap-styles.png" class="kg-image" alt="bootstrap-styles" width="330" height="138" loading="lazy"></figure><p>Se o seu projeto já inclui o Bootstrap, você pode usar os estilos de botões incorporados. Eu, no entanto, não importaria o Bootstrap apenas para estilizar um link.</p><h3 id="quais-s-o-os-problemas-com-esta-abordagem"><strong>Quais são os problemas com esta abordagem?</strong></h3><p>Há algumas discussões sobre o fato de ser uma boa prática criar links estilizados como botões. Alguns argumentarão que os links devem sempre se parecer com links e que os botões devem sempre se parecer com botões.</p><p>No livro da web chamado <a href="https://resilientwebdesign.com/">Resilient Web Design</a>, Jeremy Keith afirma que</p><blockquote><em>Um material não deve ser usado como substituto para outro. Caso contrário, o resultado final será enganoso.</em></blockquote><p>Por que eu me dei ao trabalho de trazer à tona esse debate?</p><p>O meu objetivo não é fazer com que você escolha um lado do debate em vez do outro. Só quero que vocês estejam cientes dessa discussão em andamento.</p><h2 id="como-usar-os-atributos-action-e-formaction-para-fazer-um-bot-o-de-formul-rio"><strong>Como usar os atributos <em>action </em>e <em>formaction </em>para fazer um botão de formulário</strong></h2><h3 id="como-usar-o-atributo-action"><strong>Como usar o atributo <em>action</em></strong></h3><p>Outra alternativa seria aninhar o botão dentro de um formulário e usar o atributo <em>action</em>.</p><p>Exemplo de entrada:</p><pre><code class="language-html">  &lt;form action="https://www.freecodecamp.org/"&gt;
    &lt;input type="submit" value="freeCodeCamp"&gt;
  &lt;/form&gt;</code></pre><p>Exemplo de botão:</p><pre><code class="language-html">  &lt;form action="https://www.freecodecamp.org/"&gt;
    &lt;button type="submit"&gt;freeCodeCamp&lt;/button&gt;
  &lt;/form&gt;</code></pre><p>Este seria o estilo padrão do botão.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/default-button-style.png" class="kg-image" alt="default-button-style" width="300" height="104" loading="lazy"></figure><p>Poderíamos usar os mesmos estilos anteriores, mas teríamos que adicionar o ponteiro do cursor e definir o atributo <em>border</em> como <em>none</em>, assim:</p><pre><code class="language-css">.fcc-btn {
  background-color: #199319;
  color: white;
  padding: 15px 25px;
  text-decoration: none;
  cursor: pointer;
  border: none;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/removing-underline-1.png" class="kg-image" alt="removing-underline-1" width="332" height="142" loading="lazy"></figure><h3 id="como-utilizar-o-atributo-formaction"><strong>Como utilizar o atributo formaction</strong></h3><p>Similar à abordagem anterior, podemos criar um formulário e utilizar o atributo <em>formaction</em>.</p><p>Exemplo de entrada:</p><pre><code class="language-html">  &lt;form&gt;
    &lt;input type="submit" formaction="https://www.freecodecamp.org/" value="freeCodeCamp"&gt;
  &lt;/form&gt;</code></pre><p>Exemplo de botão:</p><pre><code class="language-html">  &lt;form&gt;
    &lt;button type="submit" formaction="https://www.freecodecamp.org/"&gt;freeCodeCamp&lt;/button&gt;
  &lt;/form&gt;</code></pre><p>Você só pode usar o atributo <em>formaction</em> com <em>input</em>s e <em>button</em>s que tenham os atributos <code>type="image"</code> ou <code>type="submit"</code>.</p><h3 id="isso-est-semanticamente-correto"><strong>Isso está semanticamente correto?</strong></h3><p>Embora essa pareça ser uma solução funcional, há uma questão a respeito de isso ser ou não semanticamente correto.</p><p>Estamos usando as tags de formulário, mas isso não funciona como um formulário real. O objetivo de um formulário é coletar e enviar dados do usuário.</p><p>Estamos, no entanto, usando o botão de envio para levar o usuário para outra página ou seção.</p><p>Quando se trata de semântica, essa não é uma boa prática de uso das tags de formulário.</p><h3 id="efeitos-colaterais-do-uso-dos-atributos-action-e-formaction"><strong>Efeitos colaterais do uso dos atributos <em>action </em>e <em>formaction</em></strong></h3><p>Quando você clica no botão, algo interessante acontece com o URL. O URL agora tem um ponto de interrogação ao final.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/question-mark-at-end.png" class="kg-image" alt="question-mark-at-end" width="300" height="64" loading="lazy"></figure><p>O motivo dessa mudança é porque o formulário está usando o método GET. Você poderia mudar para o método POST, mas pode haver casos onde isso também não seja o ideal.</p><pre><code class="language-html">  &lt;form method="POST" action="https://www.freecodecamp.org/"&gt;
    &lt;button type="submit"&gt;freeCodeCamp&lt;/button&gt;
  &lt;/form&gt;</code></pre><p>Embora essa abordagem produza uma marcação válida em HTML, ela vem com esse efeito colateral não intencional.</p><h2 id="como-usar-o-evento-onclick-do-javascript-para-fazer-um-bot-o"><strong>Como usar o evento <em>onclick </em>do JavaScript para fazer um botão</strong></h2><p>Nas abordagens anteriores, analisamos as soluções em HTML e em CSS. Também podemos usar o JavaScript para alcançar o mesmo resultado.</p><p>Exemplo de <em>input</em>:</p><pre><code class="language-html"> &lt;form&gt;
    &lt;input type="button" onclick="window.location.href='https://www.freecodecamp.org/';" value="freeCodeCamp" /&gt;
 &lt;/form&gt;</code></pre><p>Exemplo de <em>button</em>:</p><pre><code class="language-html">&lt;button onclick="window.location.href='https://www.freecodecamp.org/';"&gt;freeCodeCamp&lt;/button&gt;  
</code></pre><p><code>location.href</code> representa a localização de um URL específico. Nesse caso, o <code>window.location.href</code> retornará <a href="https://www.freecodecamp.org/">https://www.freecodecamp.org/</a>.</p><h3 id="desvantagens-dessa-abordagem"><strong>Desvantagens dessa abordagem</strong></h3><p>Embora essa solução funcione, há alguns problemas potenciais a serem considerados.</p><p>Se o usuário tiver decidido desativar o JavaScript em seu navegador, claramente, essa solução não funcionará. Infelizmente, isso poderá levar a uma má experiência para o usuário.</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>O objetivo deste artigo é mostrar três maneiras diferentes de se fazer botões agirem como links.</p><p>A primeira abordagem foi estilizar um link para que se parecesse com um botão. Também analisamos no debate se é uma boa ideia mudar a aparência dos links para se parecerem com outro elemento.</p><p>A segunda abordagem utilizou formulários e os atributos <em>action </em>e <em>formaction</em>. Também aprendemos, contudo, que essa abordagem tem alguns efeitos colaterais com o URL e não é semanticamente correta.</p><p>A terceira abordagem utilizou o evento <em>onclick </em>do JavaScript e <code>window.location.href</code>. Também aprendemos, porém, que essa abordagem pode não funcionar se o usuário decidir desativar o JavaScript em seu navegador.</p><p>Como desenvolvedor, é realmente importante observar os prós e os contras de uma abordagem específica antes de incorporá-la em seu projeto.</p><p>Espero que tenham gostado deste artigo e aprendido algumas coisas na leitura.</p><p>Desejo a você uma ótima programação! 😀</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
