Introdução ao HTML, CSS e JavaScript - Guia para Iniciantes
HTML, CSS &
JavaScript
do zero ao projeto
Guia completo: da origem do HTML aos projetos práticos com JavaScript — com exemplos interativos para testar no navegador.
Esta apostila apresenta os conceitos fundamentais do desenvolvimento web de forma progressiva — da estrutura básica do HTML até a integração completa com CSS e JavaScript, com projetos práticos que você pode testar diretamente no navegador.
O que é HTML?
HTML significa HyperText Markup Language. Vamos entender cada parte desse nome:
HTML NÃO é uma linguagem de programação! É uma linguagem de marcação — define o que aparece na página, mas não executa lógica ou cálculos como JavaScript ou Python.
O HTML é usado para:
- 📰Estruturar páginas: cabeçalhos, parágrafos, listas, tabelas
- 🔗Criar links que conectam páginas e recursos da internet
- 🖼Inserir mídias: imagens, vídeos e áudios
- 📋Criar formulários para interação do usuário (login, cadastro)
- 🎨Fornecer a estrutura que será estilizada pelo CSS e dinamizada pelo JavaScript
História do HTML
Conhecer a história do HTML ajuda a entender sua evolução. Tudo começou com uma necessidade simples: compartilhar documentos científicos entre pesquisadores ao redor do mundo.
A primeira página web do mundo, criada por Tim Berners-Lee em 1991, ainda está online em info.cern.ch — é extremamente simples, mas representa o início de tudo que conhecemos como internet!
Estrutura Básica de um Documento HTML
Todo documento HTML segue uma estrutura padrão. Esta é a base que todo desenvolvedor web precisa conhecer:
<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Minha Primeira Página</title> </head> <body> <h1>Olá, Mundo!</h1> <p>Este é o meu primeiro documento HTML.</p> </body> </html>
| Elemento | Descrição |
|---|---|
<!DOCTYPE html> | Informa que é HTML5. Deve ser sempre a primeira linha do arquivo. |
<html lang="pt-BR"> | Elemento raiz. O atributo lang indica o idioma — importante para SEO e acessibilidade. |
<head> | Metadados, título, links para CSS. O conteúdo aqui NÃO aparece visualmente na página. |
<meta charset="UTF-8"> | Codificação de caracteres — suporta acentos, cedilha e emojis. |
<meta name="viewport"> | Configura responsividade em dispositivos móveis. Essencial! |
<title> | Título que aparece na aba do navegador. Muito importante para SEO. |
<body> | Contém todo o conteúdo visível da página (textos, imagens, vídeos, etc.). |
Tags e Elementos HTML
Tags são comandos escritos entre < e > que dizem ao navegador como exibir o conteúdo.
Um elemento HTML é: tag de abertura + atributos (opcionais) + conteúdo + tag de fechamento.
<p class="destaque">Este é um parágrafo</p> ↑ Abertura ↑ Atributo ↑ Conteúdo ↑ Fechamento /* 1 — Tags Pareadas (com conteúdo) */ <h1>Título Principal</h1> <p>Parágrafo de texto</p> <strong>Texto em negrito</strong> /* 2 — Tags Auto-Fechadas (sem conteúdo) */ <br> <!-- Quebra de linha --> <hr> <!-- Linha horizontal --> <img src="imagem.jpg" alt="Descrição"> <input type="text">
Atributos fornecem informações adicionais às tags. Sempre na tag de abertura no formato nome="valor". Exemplos: id, class, href, src, alt, style.
Formatação de Texto
HTML oferece 6 níveis de títulos (h1 a h6) e diversas tags para formatar texto com significado semântico:
<!-- Hierarquia de títulos --> <h1>Título Principal (h1)</h1> <h2>Subtítulo (h2)</h2> <h3>Seção (h3)</h3> <!-- Formatação semântica --> <strong>Texto importante (negrito semântico)</strong> <em>Texto com ênfase (itálico semântico)</em> <mark>Texto marcado (como marca-texto)</mark> <code>printf("Hello World");</code> <s>Texto riscado</s> <u>Texto sublinhado</u> <!-- Quebras --> Primeira linha<br>Segunda linha <hr> <!-- Linha horizontal separadora -->
- Use apenas um <h1> por página (título principal)
- Siga a hierarquia — não pule níveis (h1 → h2 → h3)
- Títulos são importantes para SEO e acessibilidade
- Prefira
<strong>a<b>: tem significado semântico para leitores de tela
Listas em HTML
HTML oferece três tipos principais de listas para organizar informações:
<!-- 1. Lista Não Ordenada (ul) — com marcadores --> <ul> <li>Maçã</li> <li>Banana</li> </ul> <!-- 2. Lista Ordenada (ol) — numerada --> <ol> <li>Abrir o navegador</li> <li>Digitar a URL</li> <li>Pressionar Enter</li> </ol> <!-- 3. Lista de Definição (dl) --> <dl> <dt>HTML</dt> <dd>Linguagem de Marcação de Hipertexto</dd> <dt>CSS</dt> <dd>Folhas de Estilo em Cascata</dd> </dl> <!-- 4. Lista Aninhada --> <ul> <li>Frutas <ul> <li>Maçã</li> <li>Banana</li> </ul> </li> </ul>
Links e Imagens
<a href="https://www.google.com">Ir para o Google</a> <a href="contato.html">Entre em Contato</a> <a href="https://exemplo.com" target="_blank" rel="noopener">Nova aba</a> <a href="mailto:contato@email.com">Enviar E-mail</a> <a href="#secao-contato">Ir para Contato</a>
| Atributo | Descrição |
|---|---|
href | Destino do link (URL, arquivo, e-mail ou âncora interna) |
target="_blank" | Abre em nova aba |
title | Dica ao passar o mouse |
rel="noopener" | Segurança ao abrir links externos em nova aba |
<img src="foto.jpg" alt="Descrição da foto"> <img src="logo.png" alt="Logo" width="200" height="100"> <a href="pagina.html"><img src="banner.jpg" alt="Clique aqui"></a>
- Acessibilidade: leitores de tela descrevem a imagem para pessoas com deficiência visual
- SEO: mecanismos de busca entendem o conteúdo da imagem
- Fallback: exibe texto caso a imagem não carregue
- 📷.jpg — Fotos com boa compressão
- 🎨.png — Imagens com transparência, logos
- 📐.svg — Gráficos vetoriais escaláveis sem perda
- ⚡.webp — Formato moderno com melhor compressão (recomendado!)
Tabelas em HTML
Tabelas organizam dados em linhas e colunas — ideais para notas, horários e relatórios.
<table> <thead> <tr> <th>Nome</th> <th>Idade</th> <th>Cidade</th> </tr> </thead> <tbody> <tr> <td>João Silva</td> <td>25</td> <td>São Paulo</td> </tr> <tr> <td>Maria Santos</td> <td>30</td> <td>Rio de Janeiro</td> </tr> </tbody> <tfoot> <tr><td colspan="3">Total: 2 registros</td></tr> </tfoot> </table>
- ↔
colspan="n"— Faz a célula ocupar N colunas (mesclagem horizontal) - ↕
rowspan="n"— Faz a célula ocupar N linhas (mesclagem vertical)
A formatação visual (cores, bordas, espaçamentos) deve ser feita com CSS, não com atributos HTML. O HTML define apenas a estrutura dos dados!
Formulários HTML
Formulários permitem que usuários insiram e enviem dados — base de cadastros, logins, pesquisas e qualquer captura de informação.
<form action="processar.php" method="POST"> <label for="nome">Nome:</label> <input type="text" id="nome" name="nome" required> <label for="email">E-mail:</label> <input type="email" id="email" name="email" required> <label for="senha">Senha:</label> <input type="password" id="senha" name="senha"> <label for="mensagem">Mensagem:</label> <textarea id="mensagem" name="mensagem" rows="4"></textarea> <label for="curso">Curso:</label> <select id="curso" name="curso"> <option value="informatica">Informática</option> <option value="administracao">Administração</option> </select> <button type="submit">Enviar</button> </form>
Associar <label for="id"> a cada campo é fundamental para acessibilidade e melhora a usabilidade — clicar no label já foca o campo correspondente.
HTML5 e Elementos Semânticos
HTML5 introduziu tags semânticas que atribuem significado ao conteúdo, melhorando SEO e acessibilidade.
<header> <h1>Meu Site</h1> <nav> <ul> <li><a href="#">Home</a></li> <li><a href="#">Sobre</a></li> </ul> </nav> </header> <main> <article> <!-- conteúdo independente: post, artigo --> <h2>Título do Artigo</h2> <p>Conteúdo...</p> </article> <section> <!-- seção temática --> <h2>Seção</h2> </section> </main> <aside> <!-- barra lateral, conteúdo complementar --> <h3>Artigos Relacionados</h3> </aside> <footer> <p>© 2025 Meu Site.</p> </footer>
- 🎵Áudio e vídeo nativos —
<audio>e<video>sem plugins - 🎨Canvas — gráficos e animações 2D via JavaScript
- 📍Geolocalização — API
navigator.geolocation - 💾LocalStorage — armazenamento no navegador sem cookies
O que é CSS?
CSS (Cascading Style Sheets) define a aparência visual. Enquanto o HTML estrutura o conteúdo, o CSS define como ele será exibido.
- 🎨Cores de fundo, texto, bordas e elementos
- 📐Tamanhos, margens, espaçamentos e dimensões
- 🗂Layout — Flexbox, Grid, posicionamento
- 📱Responsividade para diferentes tamanhos de tela
- ✨Animações e transições
h1 { color: blue; font-size: 30px; } body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; } button:hover { background-color: #2f5557; }
O que é JavaScript?
JavaScript transforma páginas estáticas em aplicações dinâmicas e interativas, respondendo às ações do usuário em tempo real.
- 🖱Criar ações ao clicar em botões e elementos
- ✅Validar campos de formulários antes do envio
- 🔄Atualizar conteúdo sem recarregar a página (DOM)
- 📦Criar aplicações completas: frontend, backend (Node.js), mobile
// Adiciona ação ao clique document.querySelector("button").onclick = function() { alert("Você clicou no botão!"); }; // Arrow function (sintaxe moderna) document.querySelector("button").addEventListener("click", () => { alert("Clique detectado!"); });
As três tecnologias com papéis bem definidos:
Exemplo Completo Integrado
<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Exemplo Completo</title> <style> body { text-align: center; margin-top: 50px; } button { padding: 10px; background-color: #38686a; color: white; border: none; border-radius: 5px; } </style> </head> <body> <h1>Exemplo Integrado</h1> <button onclick="mostrarMensagem()">Clique</button> <p id="mensagem"></p> <script> function mostrarMensagem() { document.getElementById("mensagem").innerText = "HTML, CSS e JavaScript funcionando juntos!"; } </script> </body> </html>
Projeto 1 — Contador de Cliques
A cada clique, incrementamos uma variável e atualizamos o texto na tela. Teste abaixo:
<button onclick="incrementar()">Clique</button> <p id="contador">Total: 0</p> <script> let total = 0; function incrementar() { total++; document.getElementById("contador").innerText = "Total: " + total; } </script>
let total = 0 declara a variável. ++ incrementa 1 a cada chamada. innerText atualiza o texto do elemento no DOM.
Projeto 2 — Validação de Formulário
Verificamos campos antes do envio ao servidor e exibimos feedback imediatamente:
function validarFormulario() { let nome = document.getElementById("nome").value.trim(); let email = document.getElementById("email").value.trim(); let telefone = document.getElementById("telefone").value.trim(); let emailValido = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; let telefoneValido = /^[0-9]{10,}$/; if (nome === "") { mensagem.innerHTML = "⚠ Nome obrigatório"; return false; } if (!emailValido.test(email)) { mensagem.innerHTML = "⚠ Email inválido"; return false; } if (!telefoneValido.test(telefone)) { mensagem.innerHTML = "⚠ Telefone inválido"; return false; } mensagem.innerHTML = "✅ Formulário validado com sucesso!"; return false; }
Por que o JavaScript fica no final?
- 1Melhor performanceO navegador pausa a renderização ao encontrar um script. Com ele no final, o usuário vê a página mais rápido.
- 2DOM já carregadoSe o JS tentar acessar um elemento não lido ainda, ocorre erro (
null). No final, todos os elementos já existem.
Use defer no <head>: <script src="app.js" defer></script> — carrega em paralelo e executa após o HTML ser lido.
Separação e Boas Práticas
- Conteúdo da página
- Links para .css e .js
- Tags semânticas
- Cores e tipografia
- Layout e espaçamento
- Animações
- Eventos e ações
- Manipulação do DOM
- Lógica e validações
- Estrutura básica completa:
<!DOCTYPE>,<html>,<head>,<body> - Meta charset UTF-8 e meta viewport definidos
- Título descritivo na tag
<title> - Hierarquia correta de títulos (h1 → h2 → h3, sem pular)
- Atributo
altem todas as imagens - Labels associados a todos os campos de formulário
- Links com texto descritivo (evite "clique aqui")
- Indentação consistente (2 ou 4 espaços)
- Tags semânticas HTML5 usadas em vez de
<div>genérico
Ferramentas Úteis
- 🖊Visual Studio Code — Editor gratuito e poderoso. Recomendação principal para iniciantes e profissionais
- 🌐Google Chrome + DevTools (F12) — Inspecionar elementos, depurar JS, testar responsividade
- 🌐Firefox Developer Edition — Focado especialmente em desenvolvimento web
- 📚MDN Web Docs (developer.mozilla.org) — Documentação oficial e completa de HTML, CSS e JS
- 📚W3Schools — Tutoriais interativos com exemplos editáveis
- ✅W3C Markup Validator (validator.w3.org) — Valida HTML e aponta erros de sintaxe
- ✅Can I Use (caniuse.com) — Compatibilidade de recursos com diferentes navegadores
O que você aprendeu & Próximos Passos
- O que é HTML, CSS e JavaScript e seus papéis
- A história e evolução do HTML (1991 ao presente)
- Estrutura completa de documentos HTML com tabela de referência
- Tags de texto, listas, links, imagens, tabelas e formulários
- Elementos semânticos do HTML5
- Estilização com CSS e interatividade com JavaScript
- Boas práticas, separação de arquivos e ferramentas
Continue evoluindo:
A melhor forma de aprender é construindo projetos reais. Crie sua página pessoal, um blog, um cardápio de restaurante, um currículo online. Todo desenvolvedor profissional começou exatamente onde você está agora!
Comentários