Marcação HTML
📽 Veja esta vídeo-aula no Youtube
Escrevemos páginas utilizando arquivos de texto com a extensão .html (ou .htm) onde é escrito código de marcação em linguagem HTML. Na web, tudo é hipertexto: texto aumentado com imagens, sons, vídeos e outras mídias, todos conectados através de [hyper]links.
HTML é uma sigla para HyperText Markup Language, linguagem de marcação de hipertexto. Com ela definimos as páginas e seus conteúdos, bem como os links entre elas.
Como funciona o HTML
Marcações são feitas em partes do documento utilizando tags. Uma tag é um bloco escrito entre colchetes angulares < e >, em um estilo herdado da mais abrangente linguagem XML.
Por exemplo, no texto abaixo vemos uma marcação de parágrafo, contendo um texto:
<p>Não existem métodos fáceis para resolver problemas difíceis.</p>
Dizemos que:
- a tag
pé um elemento de parágrafo e contém o elemento de textoNão existem ... difíceis.; <p>é a marcação de abertura da tag;</p>é a marcação de fechamento da tag.
Elementos de texto são exibidos pelos navegadores de maneira a simplificar a leitura. Não são considerados espaços além do primeiro, nem quebras de linha. Podemos adicionar uma quebra de linha usando a tag br:
<p>
Não existem métodos fáceis para resolver problemas difíceis.
<br />
René Descartes
</p>
- A tag
brnão pode conter nenhum elemento. Quando uma tag possui essa característica simplificamos a abertura/fechamento com a sintaxe<tag />.
Podemos escrever tags aninhadas (dentro) de outras tags. Veja um exemplo usando a tag strong, que denota que um trecho é importante:
<p>
<strong>Não existem métodos fáceis para resolver problemas difíceis.</strong>
<br />
René Descartes
</p>
Agora a primeira frase foi marcada como importante, e o navegador vai destacá-la em negrito. Futuramente poderemos estilizar como quisermos.
Devemos sempre fechar as tags na ordem que abrimos, mantendo a árvore coesa. O seguinte exemplo não deve ser seguido:
<p>Texto <strong>inicial, que continua...</p>
<p>... em outro</strong> parágrafo.</p>
Tags não são case-sensitive, porém devemos utilizá-las sempre em letras minúsculas.
Sempre feche as tags!
Algumas tags podem ter seu conteúdo modificado utilizando atributos. No exemplo abaixo:
<img src="logo.png" alt="Logotipo do Dev Web" />
- A tag
imgindica uma imagem, e deve ser fechada na sintaxe reduzida. - O atributo
srcindica o URL de origem da imagem, no caso um arquivo localizado na mesma pasta com o nomelogo.png. - O atributo
altindica um texto alternativo para quando a imagem não puder ser exibida.
Outro exemplo de atributo, é border da tag table. Ele indica que a tabela deve ser renderizada com bordas, com a sua presença indicando um valor booleano verdadeiro e sua ausência, falso.
<table border>
...
</table>
Sempre escrevemos os valores de um atributo entre aspas duplas, mesmo que seja um valor numérico.
Comentários
São escritos entre <!-- e -->, e podem se estender por várias linhas.
<!-- Comentário de uma linha -->
<!-- Comentário de
várias linhas -->
Documento mínimo
Existem vários templates de documento mínimo para uma página, e esses padrões mudam conforme a linguagem e os navegadores evoluem. Para este curso, utilizaremos o template padrão do Emmet:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
<!DOCTYPE html>é obrigatório em todo documento, e indica que ele está escrito na versão 5 do HTML.- A tag
htmlé colocada em torno do restante do documento. Nada deve ser escrito fora.lang="en"indica aos mecanismos de busca e leitores de tela que o texto estará escrito em inglês. Para português, uselang="pt-BR".
- O elemento
headagrupa informações sobre o documento, como configurações, links a recursos externos e metadados destinados a motores de busca. - O elemento
bodyacolhe todo o conteúdo exibível do documento. É aqui que escreveremos a maioria de nossa marcação.
head
As tags mais comuns do cabeçalho são:
titleé obrigatório e contém o título de identificação do documento.metapermite realizar diversas configurações e difinições de metadados. Várias outras possuem o padrãonamepara o nome da configuração, econtentpara o seu valor.charset="UTF-8"indica que o arquivo será escrito em UTF-8, o que nos permite usar acentuação e emojis, por exemplo.viewportconfigura a janela do usuário. No exemplo, para usar toda a tela disponível (width=device-width) e manter o zoom inicial em 100% (initial-scale=1.0).authorcontém o nome do autor do documento.descriptioncontém uma descrição da página para motores de busca.keywordscontém uma lista separada por vírgulas de palavras-chave, para motores de busca.
linkpermite instruir o navegador a baixar outros recursos, como arquivos de estilização.stylepermite definir estilos válidos somente para uma página (e não para o site todo).scriptpermite criar códigos dinâmicos para interação com o usuário.
Elementos do corpo do documento - body
Os elementos citados a seguir só devem ser utilizados dentro de body.
Texto
Use h1 … h6 para definir títulos em 6 níveis/sub-níveis. Exemplo:
<h1>História</h1>
<p>...</p>
<h2>História do Brasil</h2>
<p>...</p>
<h3>Guerra de Canudos</h3>
<p>...</p>
<h3>Diretas Já</h3>
<p>...</p>
<h2>História do Japão</h2>
<p>...</p>
Esse código gerará uma árvore de subtítulos estruturalmente semelhante a:
- História
- História do Brasil
- Guerra de Canudos
- Diretas Já
- História do Japão
- História do Brasil
Use p para definir parágrafos. Parágrafos subsequentes são espaçados por uma linha por padrão. Não há tabulação, como em português.
Use br para quebrar uma linha forçadamente dentro de um parágrafo. hr faz o mesmo, e ainda traça uma linha horizontal.
💡 Use Lorem Ipsum para preencher espaços de parágrafo enquanto não possui o texto final. Isso ajuda a visualizar o seu design. No VsCode, digite lorem e pressione Tab ou Enter para inserir.
Elementos semânticos de texto
strongindica que o trecho é importante, e por padrão é renderizado em negrito.emindica uma ênfase no trecho, e por padrão é renderizado em itálico.delindica que o texto foi removido, e por padrão é renderizadoriscado.supesubindicam sobrescrito (acima, como em ² e ³) e subescrito (abaixo).
Há muitos outros, mas sempre tome cuidado para não utilizá-los como formatação, e sim como indicação do seu significado.
Imagens
Usamos a tag img.
srcindica a origem da imagem, e pode ser um URL ou o caminho relativo ao arquivo.alté obrigatório e indica um texto alternativo para quando a imagem não puder ser exibida.
Exemplo (com imagem hospedada externamente):
<img src="http://eteab.com.br/cms/wp-content/uploads/2014/07/banner_logo2.png" alt="Banner da Etec" />
Links
Usamos a tag a, com o atributo href.
hrefindica o destino do link. Caso seja um arquivo não exibível (.zip, por exemplo), o navegador oferecerá a realização de download.titleindica o tooltip opcional (texto exibido ao parar o ponteiro do mouse sobre o link).target="_blank"permite indicar que o link deverá abrir em uma nova janela.
Todo o conteúdo entre <a ...> e </a> será clicável e remeterá ao URL indicado. Pode ser texto, imagem ou qualquer outra tag.
Se for uma URL completa, o usuário para lá será redirecionado. Se for um nome de arquivo, ele será procurado na mesma pasta (ou no caminho relativo). Use essa característica para criar várias páginas no seu site!
Exemplo de link com imagem de um gato, que abre outra aba com site externo (página do autor da foto):
<a href="https://www.pexels.com/pt-br/@kerber" target="_blank">
<img src="pexels-marko-blazevic-774731.jpg" alt="Imagem de um gato">
</a>
Listas
Uma lista pode ser ordenada ol ou não ordenada ul, e pode conter itens e/ou outras listas.
Exemplo 1:
<ol>
<li>Senna</li>
<li>Schumacher</li>
<li>Prost</li>
</ol>
Indica algo como:
- Senna
- Schumacher
- Prost
Exemplo 2:
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
Indica algo como:
- HTML
- CSS
- JavaScript
Exemplo 3:
<ol>
<li>Item numerado</li>
<li>Item numerado</li>
<ul>
<li>Sub-item não numerado</li>
<li>Sub-item não numerado</li>
<li>Sub-item não numerado</li>
</ul>
<li>Item numerado</li>
</ol>
Indica algo como:
- Item numerado
- Item numerado
- Sub-item não numerado
- Sub-item não numerado
- Sub-item não numerado
- Item numerado
Tabelas
Veja o exemplo:
<table border>
<thead>
<tr>
<th>Coluna 1</th>
<th>Coluna 2</th>
<th>Coluna 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>C1 x L1</td>
<td>C2 x L1</td>
<td>C3 x L1</td>
</tr>
<tr>
<td>C1 x L2</td>
<td>C2 x L2</td>
<td>C3 x L2</td>
</tr>
<tr>
<td>C1 x L3</td>
<td>C2 x L3</td>
<td>C3 x L3</td>
</tr>
</tbody>
</table>
tableindica que o conteúdo é tabular (em formato de tabela, com linhas e colunas).borderindica que a tabela deve ser renderizada com bordas.
theadcontém o cabeçalho da tabela.- use um
trpara cada linha. - cada
thdentro de umtré uma célula de cabeçalho (um título de coluna).
- use um
tbodycontém o corpo (células) da tabela.- use um
trpara cada linha. - cada
tddentro de umtré uma célula da tabela.
- use um
A tabela acima indica algo como:
| Coluna 1 | Coluna 2 | Coluna 3 |
|---|---|---|
| C1 x L1 | C2 x L1 | C3 x L1 |
| C1 x L2 | C2 x L2 | C3 x L2 |
| C1 x L3 | C2 x L3 | C3 x L3 |
Células podem conter qualquer tipo de conteúdo, inclusive outras tabelas. Porém, não use isso para definir um leiaute para seu site. Há ferramentas muito melhores para isso!
Incorporando conteúdo externo
Alguns serviços permitem que seus conteúdos sejam incorporados em sites externos. Para fazê-lo, copie o código disponibilizado e cole em sua página (geralmente em opções como compartilhar ou publicar).
Veja alguns exemplos:
YouTube
<iframe width="560" height="315" src="https://www.youtube.com/embed/_o0C4-YX4qI" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/_o0C4-YX4qI" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Google Apresentações
<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vSENJRXRzwdxu0iXMhUr0qbM5IoxHjXNklT8BvSn6X05FO1YDPmlTvvt1dfuehqIvwsRJZCDu1a_x5H/embed?start=false&loop=false&delayms=3000" frameborder="0" width="640" height="389" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vSENJRXRzwdxu0iXMhUr0qbM5IoxHjXNklT8BvSn6X05FO1YDPmlTvvt1dfuehqIvwsRJZCDu1a_x5H/embed?start=false&loop=false&delayms=3000" frameborder="0" width="640" height="389" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
Google Maps e Google Street View
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d7314.907980993128!2d-46.637349877712474!3d-23.55213298874953!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x94ce59aa220b74bd%3A0x6412aad263604c19!2zU8OpLCBTw6NvIFBhdWxvIC0gU1A!5e0!3m2!1spt-BR!2sbr!4v1614302451657!5m2!1spt-BR!2sbr" width="400" height="300" style="border:0;" allowfullscreen="" loading="lazy"></iframe>
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d7314.907980993128!2d-46.637349877712474!3d-23.55213298874953!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x94ce59aa220b74bd%3A0x6412aad263604c19!2zU8OpLCBTw6NvIFBhdWxvIC0gU1A!5e0!3m2!1spt-BR!2sbr!4v1614302451657!5m2!1spt-BR!2sbr" width="400" height="300" style="border:0;" allowfullscreen="" loading="lazy"></iframe>
<iframe src="https://www.google.com/maps/embed?pb=!4v1614302514278!6m8!1m7!1svwVI0Dv6PjaCvFxizwjteg!2m2!1d-23.55077105018473!2d-46.63294713074472!3f258.5954364186578!4f13.56251446358371!5f0.7820865974627469" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy"></iframe>
<iframe src="https://www.google.com/maps/embed?pb=!4v1614302514278!6m8!1m7!1svwVI0Dv6PjaCvFxizwjteg!2m2!1d-23.55077105018473!2d-46.63294713074472!3f258.5954364186578!4f13.56251446358371!5f0.7820865974627469" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy"></iframe>