# Projeto Terrário Parte 1: Introdução ao HTML
```mermaid
journey
title Your HTML Learning Journey
section Foundation
Create HTML file: 3: Student
Add DOCTYPE: 4: Student
Structure document: 5: Student
section Content
Add metadata: 4: Student
Include images: 5: Student
Organize layout: 5: Student
section Semantics
Use proper tags: 4: Student
Enhance accessibility: 5: Student
Build terrarium: 5: Student
```

> Sketchnote por [Tomomi Imura](https://twitter.com/girlie_mac)
HTML, ou Linguagem de Marcação de Hipertexto, é a base de todos os sites que você já visitou. Pense no HTML como o esqueleto que dá estrutura às páginas da web – ele define onde o conteúdo vai, como está organizado e o que cada parte representa. Enquanto o CSS mais tarde "vestirá" seu HTML com cores e layouts, e o JavaScript dará vida com interatividade, o HTML fornece a estrutura essencial que torna tudo isso possível.
Nesta lição, você criará a estrutura HTML para uma interface de terrário virtual. Este projeto prático ensinará conceitos fundamentais de HTML enquanto você constrói algo visualmente envolvente. Você aprenderá a organizar conteúdo usando elementos semânticos, trabalhar com imagens e criar a base para um aplicativo web interativo.
Ao final desta lição, você terá uma página HTML funcional exibindo imagens de plantas em colunas organizadas, pronta para ser estilizada na próxima lição. Não se preocupe se parecer básico no início – é exatamente assim que o HTML deve ser antes que o CSS adicione o toque visual.
```mermaid
mindmap
root((HTML Fundamentals))
Structure
DOCTYPE Declaration
HTML Element
Head Section
Body Content
Elements
Tags & Attributes
Self-closing Tags
Nested Elements
Block vs Inline
Content
Text Elements
Images
Containers (div)
Lists
Semantics
Meaningful Tags
Accessibility
Screen Readers
SEO Benefits
Best Practices
Proper Nesting
Valid Markup
Descriptive Alt Text
Organized Structure
```
## Quiz Pré-Aula
[Quiz pré-aula](https://ff-quizzes.netlify.app/web/quiz/15)
> 📺 **Assista e Aprenda**: Confira este vídeo explicativo útil
>
> [](https://www.youtube.com/watch?v=1TvxJKBzhyQ)
## Configurando Seu Projeto
Antes de mergulharmos no código HTML, vamos configurar um espaço de trabalho adequado para seu projeto de terrário. Criar uma estrutura de arquivos organizada desde o início é um hábito crucial que será útil ao longo de sua jornada de desenvolvimento web.
### Tarefa: Crie a Estrutura do Projeto
Você criará uma pasta dedicada para seu projeto de terrário e adicionará seu primeiro arquivo HTML. Aqui estão duas abordagens que você pode usar:
**Opção 1: Usando o Visual Studio Code**
1. Abra o Visual Studio Code
2. Clique em "Arquivo" → "Abrir Pasta" ou use `Ctrl+K, Ctrl+O` (Windows/Linux) ou `Cmd+K, Cmd+O` (Mac)
3. Crie uma nova pasta chamada `terrarium` e selecione-a
4. No painel Explorer, clique no ícone "Novo Arquivo"
5. Nomeie seu arquivo como `index.html`

**Opção 2: Usando Comandos no Terminal**
```bash
mkdir terrarium
cd terrarium
touch index.html
code index.html
```
**O que esses comandos fazem:**
- **Cria** um novo diretório chamado `terrarium` para seu projeto
- **Navega** até o diretório terrarium
- **Cria** um arquivo vazio `index.html`
- **Abre** o arquivo no Visual Studio Code para edição
> 💡 **Dica Pro**: O nome do arquivo `index.html` é especial no desenvolvimento web. Quando alguém visita um site, os navegadores automaticamente procuram por `index.html` como a página padrão para exibir. Isso significa que uma URL como `https://mysite.com/projects/` automaticamente servirá o arquivo `index.html` da pasta `projects` sem precisar especificar o nome do arquivo na URL.
## Entendendo a Estrutura do Documento HTML
Todo documento HTML segue uma estrutura específica que os navegadores precisam entender e exibir corretamente. Pense nessa estrutura como uma carta formal – ela tem elementos obrigatórios em uma ordem específica que ajudam o destinatário (neste caso, o navegador) a processar o conteúdo corretamente.
```mermaid
flowchart TD
A[""] --> B[""]
B --> C["
"]
C --> D[""]
C --> E[""]
C --> F[""]
B --> G[""]
G --> H["
Heading"]
G --> I["
Containers"]
G --> J[" Images"]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#fff3e0
style G fill:#e8f5e8
```
Vamos começar adicionando a base essencial que todo documento HTML precisa.
### A Declaração DOCTYPE e o Elemento Raiz
As duas primeiras linhas de qualquer arquivo HTML servem como a "introdução" do documento ao navegador:
```html
```
**Entendendo o que esse código faz:**
- **Declara** o tipo de documento como HTML5 usando ``
- **Cria** o elemento raiz `` que conterá todo o conteúdo da página
- **Estabelece** padrões modernos da web para renderização adequada no navegador
- **Garante** exibição consistente em diferentes navegadores e dispositivos
> 💡 **Dica do VS Code**: Passe o mouse sobre qualquer tag HTML no VS Code para ver informações úteis dos MDN Web Docs, incluindo exemplos de uso e detalhes de compatibilidade com navegadores.
> 📚 **Saiba Mais**: A declaração DOCTYPE impede que os navegadores entrem no "modo quirks", que era usado para suportar sites muito antigos. O desenvolvimento web moderno usa a simples declaração `` para garantir [renderização compatível com padrões](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode).
### 🔄 **Checagem Pedagógica**
**Pausa e Reflexão**: Antes de continuar, certifique-se de que você entende:
- ✅ Por que todo documento HTML precisa de uma declaração DOCTYPE
- ✅ O que o elemento raiz `` contém
- ✅ Como essa estrutura ajuda os navegadores a renderizar páginas corretamente
**Teste Rápido**: Você consegue explicar com suas próprias palavras o que significa "renderização compatível com padrões"?
## Adicionando Metadados Essenciais ao Documento
A seção `` de um documento HTML contém informações cruciais que os navegadores e mecanismos de busca precisam, mas que os visitantes não veem diretamente na página. Pense nisso como as informações "nos bastidores" que ajudam sua página a funcionar corretamente e aparecer corretamente em diferentes dispositivos e plataformas.
Esses metadados dizem aos navegadores como exibir sua página, qual codificação de caracteres usar e como lidar com diferentes tamanhos de tela – tudo essencial para criar páginas web profissionais e acessíveis.
### Tarefa: Adicione o Cabeçalho do Documento
Insira esta seção `` entre suas tags de abertura e fechamento ``:
```html
Welcome to my Virtual Terrarium
```
**Desmembrando o que cada elemento faz:**
- **Define** o título da página que aparece nas abas do navegador e nos resultados de busca
- **Especifica** a codificação de caracteres UTF-8 para exibição correta de texto em todo o mundo
- **Garante** compatibilidade com versões modernas do Internet Explorer
- **Configura** design responsivo ajustando o viewport à largura do dispositivo
- **Controla** o nível inicial de zoom para exibir o conteúdo no tamanho natural
> 🤔 **Pense Nisso**: O que aconteceria se você configurasse uma tag meta de viewport assim: ``? Isso forçaria a página a ter sempre 600 pixels de largura, quebrando o design responsivo! Saiba mais sobre [configuração adequada de viewport](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag).
## Construindo o Corpo do Documento
O elemento `` contém todo o conteúdo visível da sua página – tudo o que os usuários verão e com o que interagirão. Enquanto a seção `` forneceu instruções ao navegador, a seção `` contém o conteúdo real: texto, imagens, botões e outros elementos que criam sua interface de usuário.
Vamos adicionar a estrutura do corpo e entender como as tags HTML trabalham juntas para criar conteúdo significativo.
### Entendendo a Estrutura das Tags HTML
O HTML usa tags emparelhadas para definir elementos. A maioria das tags tem uma tag de abertura como `
` e uma tag de fechamento como `
`, com conteúdo entre elas: `
Olá, mundo!
`. Isso cria um elemento de parágrafo contendo o texto "Olá, mundo!".
### Tarefa: Adicione o Elemento Body
Atualize seu arquivo HTML para incluir o elemento ``:
```html
Welcome to my Virtual Terrarium
```
**Aqui está o que essa estrutura completa fornece:**
- **Estabelece** a estrutura básica do documento HTML5
- **Inclui** metadados essenciais para renderização adequada no navegador
- **Cria** um corpo vazio pronto para seu conteúdo visível
- **Segue** as melhores práticas modernas de desenvolvimento web
Agora você está pronto para adicionar os elementos visíveis do seu terrário. Usaremos elementos `
` como contêineres para organizar diferentes seções de conteúdo e elementos `` para exibir as imagens das plantas.
### Trabalhando com Imagens e Contêineres de Layout
Imagens são especiais no HTML porque usam tags "auto-fechadas". Diferente de elementos como `` que envolvem conteúdo, a tag `` contém todas as informações necessárias dentro da própria tag usando atributos como `src` para o caminho do arquivo de imagem e `alt` para acessibilidade.
Antes de adicionar imagens ao seu HTML, você precisará organizar seus arquivos de projeto corretamente criando uma pasta de imagens e adicionando os gráficos das plantas.
**Primeiro, configure suas imagens:**
1. Crie uma pasta chamada `images` dentro da pasta do projeto terrarium
2. Baixe as imagens das plantas da [pasta de solução](../../../../3-terrarium/solution/images) (14 imagens de plantas no total)
3. Copie todas as imagens das plantas para sua nova pasta `images`
### Tarefa: Crie o Layout de Exibição das Plantas
Agora adicione as imagens das plantas organizadas em duas colunas entre suas tags ``:
```html
```
**Passo a passo, aqui está o que está acontecendo nesse código:**
- **Cria** um contêiner principal da página com `id="page"` para conter todo o conteúdo
- **Estabelece** dois contêineres de coluna: `left-container` e `right-container`
- **Organiza** 7 plantas na coluna esquerda e 7 plantas na coluna direita
- **Envolve** cada imagem de planta em um div `plant-holder` para posicionamento individual
- **Aplica** nomes de classe consistentes para estilização com CSS na próxima lição
- **Atribui** IDs únicos a cada imagem de planta para interação com JavaScript posteriormente
- **Inclui** caminhos de arquivo corretos apontando para a pasta de imagens
> 🤔 **Considere Isso**: Note que todas as imagens atualmente têm o mesmo texto alternativo "plant". Isso não é ideal para acessibilidade. Usuários de leitores de tela ouviriam "plant" repetidamente 14 vezes sem saber qual planta cada imagem mostra. Você consegue pensar em textos alternativos melhores e mais descritivos para cada imagem?
> 📝 **Tipos de Elementos HTML**: Elementos `
` são "em nível de bloco" e ocupam toda a largura, enquanto elementos `` são "em linha" e ocupam apenas a largura necessária. O que você acha que aconteceria se você mudasse todas essas tags `
` para tags ``?
### 🔄 **Checagem Pedagógica**
**Entendimento da Estrutura**: Reserve um momento para revisar sua estrutura HTML:
- ✅ Você consegue identificar os contêineres principais no seu layout?
- ✅ Você entende por que cada imagem tem um ID único?
- ✅ Como você descreveria o propósito dos divs `plant-holder`?
**Inspeção Visual**: Abra seu arquivo HTML em um navegador. Você deve ver:
- Uma lista básica de imagens de plantas
- Imagens organizadas em duas colunas
- Layout simples e sem estilo
**Lembre-se**: Essa aparência simples é exatamente como o HTML deve ser antes da estilização com CSS!
Com essa marcação adicionada, as plantas aparecerão na tela, embora ainda não pareçam polidas – isso é o que o CSS fará na próxima lição! Por enquanto, você tem uma base sólida de HTML que organiza seu conteúdo corretamente e segue as melhores práticas de acessibilidade.
## Usando HTML Semântico para Acessibilidade
HTML semântico significa escolher elementos HTML com base em seu significado e propósito, não apenas em sua aparência. Quando você usa marcação semântica, está comunicando a estrutura e o significado do seu conteúdo para navegadores, mecanismos de busca e tecnologias assistivas como leitores de tela.
```mermaid
flowchart TD
A[Need to add content?] --> B{What type?}
B -->|Main heading| C["