Table of Contents
Desenvolvimento de APIs e Microsserviços 💻
Domine a criação de arquiteturas modernas de backend com Microsserviços, modelagem RESTful, segurança com JWT e o desenvolvimento de interfaces SPA modernas.
Foco do Curso
Metodologia: Aprendizado prático focado na construção de ecossistemas Fullstack, integrando serviços backend robustos com frontends de alta performance.
🎯 O Que Você Vai Aprender
-
Microsserviços --- Aprenda a decompor monólitos, gerenciar comunicação entre serviços e utilizar API Gateways para escalabilidade. Ir para Módulo 1
-
Modelagem RESTful --- Domine endpoints, status codes, documentação com Swagger/OpenAPI e padrões de projeto para APIs profissionais. Ver Modelagem
-
Autenticação JWT --- Implemente segurança de ponta a ponta com JSON Web Tokens, proteção de rotas e controle de acesso RBAC. Ver Segurança
-
Frontends SPA --- Integre seu backend com Single Page Applications modernas, explorando componentes, estados e roteamento dinâmico. Ver Projetos
📚 Jornada de Aprendizado (16 Aulas)
O curso é estruturado em quatro trilhas de especialização.
🧱 Módulo 1: Serviços e Microsserviços (Aulas 01-04)
- Aula 01 - Intro Microsserviços 🧩
- Aula 02 - Arquitetura e Gateway 🏗️
- Aula 03 - Modelagem REST 📡
- Aula 04 - Documentação (Swagger) 📄
🏗️ Módulo 2: CRUD e Persistência (Aulas 05-08)
- Aula 05 - Implementação de APIs ⚙️
- Aula 06 - Persistência e Banco 💾
- Aula 07 - Testes Unitários 🧪
- Aula 08 - Testes Integrados 🚢
🔌 Módulo 3: Autenticação e Segurança (Aulas 09-11)
🚀 Módulo 4: Aplicações Web SPA (Aulas 12-16)
- Aula 12 - Conceito de SPA 🌐
- Aula 13 - Componentes e Templates 🧱
- Aula 14 - Estados e Eventos 🔄
- Aula 15 - Roteamento 🛣️
- Aula 16 - Integração e Projeto Final 🎓
Programação Web I 💻
Aprenda a implementar páginas web modernas utilizando HTML5 e CSS3, aplicando boas práticas de organização, criatividade e resolução de problemas.
Foco do Curso
Metodologia: Aprendizado prático focado na construção de sites estáticos modernos e responsivos, utilizando HTML5 e CSS3.
🎯 O Que Você Vai Aprender
-
HTML5 Semântico --- Estruturação profissional de documentos utilizando as tags semânticas corretas para SEO e acessibilidade. Ir para Módulo 2
-
CSS3 Moderno --- Estilização avançada com Flexbox, Grid Layout, animações e estratégias de responsividade Mobile-First. Ver Estilização
-
Responsividade --- Adaptação de layouts para diferentes dispositivos, garantindo uma experiência de usuário impecável em celulares e desktops. Ver Responsividade
-
Versionamento e Deploy --- Publicação de projetos online utilizando Git, GitHub e GitHub Pages para hospedar seus sites estáticos. Ver Projetos
📚 Jornada de Aprendizado (16 Aulas)
O curso é estruturado em três módulos fundamentais.
🧩 Módulo 1: Fundamentos da Web (Aulas 01-02)
🏗️ Módulo 2: HTML5 Completo (Aulas 03-08)
- Aula 03 - Estrutura e Semântica 🧱
- Aula 04 - Textos e Links 🔗
- Aula 05 - Imagens e SVG 🖼️
- Aula 06 - Tabelas 📊
- Aula 07 - Formulários 📝
- Aula 08 - Projeto HTML 🏛️
🎨 Módulo 3: CSS3 Moderno (Aulas 09-16)
- Aula 09 - Introdução ao CSS 🖍️
- Aula 10 - Box Model 📦
- Aula 11 - Display e Posicionamento 📍
- Aula 12 - Flexbox 📐
- Aula 13 - Grid Layout 🏁
- Aula 14 - Responsividade 📱
- Aula 15 - Animações e Transições ✨
- Aula 16 - Projeto Final + Deploy 🚢
Começar Minha Jornada Web * Projetos: 16 mini-projetos práticos de fixação. * Quizzes: 16 testes de conhecimento imediato. * Projeto Integrador: Desenvolvimento de uma aplicação Fullstack (API + SPA) para portfólio.
Aulas
Aula 01 - Introdução à Web 🌐
Objetivo
Objetivo: Compreender os fundamentos de como a internet funciona, a relação entre cliente e servidor, e preparar o seu ambiente de desenvolvimento profissional.
1. Como a Internet Funciona? 🌍
Muitas vezes pensamos na internet como uma "nuvem" mágica, mas na verdade ela é uma infraestrutura gigantesca de cabos e servidores conectados ao redor do mundo.
🔌 O Modelo Cliente x Servidor
Toda interação na web acontece seguindo este modelo básico:
- Cliente: É você (ou melhor, o seu navegador). Você faz uma Requisição (Request).
- Servidor: É um computador potente que "serve" o site. Ele envia uma Resposta (Response).
[!NOTE] Imagine que você está em um restaurante. Você é o cliente, o garçom leva o seu pedido (requisição) para a cozinha (servidor), que então devolve o seu prato (resposta).
📊 Fluxo de Requisição
sequenceDiagram
participant C as Cliente (Navegador)
participant S as Servidor (Host)
C->>S: Requisição HTTP (Quero o site x.com)
S-->>C: Resposta HTTP (Aqui está o HTML/CSS/JS)
Note over C: O navegador renderiza a página
2. Navegadores Modernos 🧭
O navegador (Browser) é a ferramenta que traduz o código que escrevemos em interfaces visuais bonitas.
- Google Chrome: O mais utilizado, excelente motor V8.
- Firefox: Focado em privacidade e padrões abertos.
- Edge: Baseado em Chromium (mesmo motor do Chrome).
- Safari: Padrão da Apple, focado em performance energética.
3. DevTools: O Superpoder do Desenvolvedor 🛠️
Todo navegador moderno possui ferramentas de desenvolvedor integradas. Com elas, podemos inspecionar, editar e depurar sites em tempo real.
Como abrir?
- Windows/Linux:
F12ouCtrl + Shift + I - Mac:
Cmd + Option + I
[!IMPORTANT] A aba Elements permite ver o HTML/CSS de qualquer site na internet. É a melhor forma de aprender observando o que já existe!
4. Estrutura de Projeto 📂
Um projeto web bem organizado é o primeiro passo para um código limpo.
$ mkdir meu-primeiro-site
$ cd meu-primeiro-site
$ touch index.html estilo.css script.js
$ ls
index.html
estilo.css
script.js
[!TIP] Sempre use nomes de arquivos em letras minúsculas, sem espaços e sem acentos para evitar problemas de compatibilidade nos servidores.
5. Mini-Projeto: Explorando a Web 🚀
Sua missão hoje é puramente investigativa:
- Abra o site do Google.
- Abra o DevTools (
F12). - Use a ferramenta de seleção (ícone de seta no canto superior esquerdo do DevTools) e clique no logo do Google.
- Tente alterar o texto de algum botão ou cor na aba Elements. (Não se preocupe, você não quebrou o Google, as mudanças são apenas locais!).
6. Exercícios Progressivos 📝
Básicos
- Qual a diferença entre Cliente e Servidor?
- O que acontece quando você digita uma URL no navegador e aperta Enter?
Intermediários
- Cite 3 navegadores modernos e o motivo de termos ferramentas de desenvolvedor neles.
- Por que é recomendado usar nomes de arquivos sem espaços na web?
Desafio 🧠
- Pesquise o que significa a sigla HTTP e qual o seu papel fundamental na comunicação web.
Próxima Aula: Vamos criar o nosso primeiro Documento HTML Mínimo! 🏗️
Aula 02 - Documento HTML Mínimo 🏗️
Objetivo
Objetivo: Entender a estrutura base de todo site moderno e escrever as suas primeiras linhas de código HTML5, compreendendo o papel de cada tag fundamental.
1. O que é HTML? 🤔
HTML significa HyperText Markup Language (Linguagem de Marcação de Hipertexto).
- Não é uma linguagem de programação: Ela não tem lógica de "se" ou "faça enquanto".
- É uma linguagem de marcação: Ela usa "etiquetas" (tags) para dizer ao navegador o que cada parte do conteúdo é (um título, um parágrafo, uma imagem).
2. A Anatomia de uma Tag 🦴
A maioria das tags HTML funciona como "recipientes" com uma abertura e um fechamento:
<p>: Tag de abertura.class="texto-bonito": Atributo (dá informações extras à tag).Olá, Mundo!: Conteúdo.</p>: Tag de fechamento (notou a barra/?).
3. A Estrutura Básica (O Boilerplate) 📜
Todo arquivo HTML deve começar com uma estrutura padrão. Imagine que é o "esqueleto" do site.
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Meu Primeiro Site</title>
</head>
<body>
<h1>Olá, Web!</h1>
<p>Este é o meu primeiro documento HTML5.</p>
</body>
</html>
🧩 Entendendo as Partes:
<!DOCTYPE html>: Avisa o navegador que estamos usando a versão mais recente (HTML5).<html lang="pt-br">: O elemento raiz que envolve tudo. O atributolangajuda os buscadores e tradutores.<head>(Cabeça): Contém Metadados (informações para o navegador e Google, não aparecem na página).<body>(Corpo): É onde fica tudo o que o usuário vê no site.
4. Metadados Essenciais 🧠
Dentro do <head>, temos informações cruciais:
<meta charset="UTF-8">: Garante que acentos (á, õ) e emojis apareçam corretamente.<meta name="viewport" ...>: Crucial para que o site funcione bem em celulares (Responsividade).<title>: O texto que aparece na aba do navegador.
5. Prática: Criando sua Primeira Página 🚀
Vamos colocar a mão na massa usando o terminal e o VS Code:
[!DICA] No VS Code, digite
!e aperteTabdentro de um arquivo.html. Ele vai gerar toda a estrutura básica para você automaticamente! Isso se chama Emmet.
6. Mini-Projeto: Perfil Pessoal 👤
- Crie um arquivo chamado
index.html. - Gere a estrutura básica.
- No
<body>, use uma tag<h1>para o seu nome. - Use uma tag
<p>para escrever uma breve descrição sobre você. - Abra o arquivo no seu navegador (clique duplo no arquivo).
7. Exercícios Progressivos 📝
Básicos
- Qual a diferença entre as tags
<head>e<body>? - Para que serve o atributo
langna tag<html>?
Intermediários
- O que acontece se esquecermos de fechar uma tag, como o
<title>? - Explique a função do
meta charset="UTF-8".
Desafio 🧠
- Pesquise e cite 2 tags HTML que não precisam de fechamento (tags auto-contidas).
Próxima Aula: Vamos aprender a organizar o conteúdo com Estrutura e Semântica! 🧱
Aula 03 - Estrutura e Semântica 🧱
Objetivo
Objetivo: Compreender a importância do HTML Semântico para SEO e acessibilidade, e aprender a utilizar as tags corretas para cada parte da estrutura de uma página web moderna.
1. O que é HTML Semântico? 🧐
Semântica é o estudo do significado. No HTML, usar tags semânticas significa escolher etiquetas que descrevem claramente o que o conteúdo é, não apenas como ele deve parecer.
- Antigamente (Não Semântico): Usava-se
<div>para tudo. O Google e leitores de tela ficavam "cegos". - Hoje (Semântico): Usamos tags como
<header>,<nav>e<footer>.
[!DICA] Um site semântico é muito melhor ranqueado no Google e é acessível para pessoas que usam leitores de tela.
2. As Tags de Estrutura Principal 🏗️
Imagine a estrutura de um jornal ou blog:
<header>: O cabeçalho da página ou de uma seção. Geralmente contém o logo e o título principal.<nav>: Define um conjunto de links de navegação (o menu).<main>: O conteúdo principal e exclusivo da página. Só deve haver um por página!<footer>: O rodapé. Contém informações de copyright, contato e links secundários.
📊 Mapa Semântico
graph TD
BODY[body] --> HEADER[header - Logo/Menu]
BODY --> MAIN[main - Conteúdo Único]
BODY --> FOOTER[footer - Info/Rodapé]
MAIN --> SECTION[section - Bloco de Assunto]
SECTION --> ARTICLE[article - Conteúdo Independente]
HEADER --> NAV[nav - Links de Navegação]
3. Entendendo Section e Article 📰
Muitas pessoas confundem essas duas:
<section>: Representa um agrupamento genérico de conteúdo, normalmente com um título. Ex: "Sobre nós", "Nossos Serviços".<article>: Representa uma composição independente e auto-contida. Se você puder "recortar" esse conteúdo e publicar em outro lugar e ele ainda fizer sentido, use<article>. Ex: Um post de blog, um comentário, um card de produto.
4. Hierarquia de Títulos (h1 a h6) 🔝
Os títulos não servem para aumentar o tamanho da letra (isso é tarefa do CSS!). Eles definem a importância da informação.
<h1>: O assunto principal da página (use apenas UM por página).<h2>a<h6>: Subtítulos em ordem decrescente de importância.
[!IMPORTANT] Nunca pule níveis! Não passe de um
<h1>direto para um<h3>. Siga a escada lógica.
5. Prática: Organizando o Código 🚀
Vamos estruturar um layout profissional no terminal:
$ mkdir aula-03
$ cd aula-03
$ touch index.html
$ # Vamos abrir o arquivo e criar a estrutura semântica básica...
Exemplo de Estrutura Correta:
<body>
<header>
<h1>Meu Blog Tech</h1>
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Posts</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h2>Destaques</h2>
<article>
<h3>O Poder do HTML5</h3>
<p>Neste post, exploramos a semântica...</p>
</article>
</section>
</main>
<footer>
<p>© 2026 - Desenvolvido com ❤️</p>
</footer>
</body>
6. Mini-Projeto: Estrututra de Notícias 📰
- Crie um documento HTML completo.
- Adicione um
<header>com o nome de um portal de notícias. - Crie um
<main>com duas<section>. - Dentro de cada seção, coloque um
<article>com um título<h3>e um parágrafo. - Finalize com um
<footer>.
7. Exercícios Progressivos 📝
Básicos
- Qual a tag usada para definir o menu de navegação?
- Quantas vezes devemos usar a tag
<h1>em uma única página?
Intermediários
- Explique a principal diferença entre a tag
<section>e a tag<article>. - Por que usar
<div>para tudo é considerado uma má prática hoje em dia?
Desafio 🧠
- Pesquise sobre a tag
<aside>. Em que situações ela deve ser utilizada em um layout semântico?
Próxima Aula: Vamos aprender a trabalhar com Textos e Links! 🔗
Aula 04 - Textos e Links 🔗
Objetivo
Objetivo: Aprender a organizar informações textuais utilizando listas e parágrafos, e dominar a criação de hyperlinks para conectar páginas e sites externos.
1. Organizando Textos 📝
O HTML oferece tags específicas para dar significado ao texto corrido.
<p>(Parágrafo): Usado para blocos de texto. O navegador adiciona automaticamente um espaço (margem) entre um parágrafo e outro.<br>(Quebra de linha): Uma tag auto-contida (<br>) usada para pular linha dentro de um mesmo parágrafo. Use com moderação!
2. Listas: Ordenadas e Não Ordenadas 📋
As listas são fundamentais para organizar itens, menus e instruções.
🔹 Lista Não Ordenada (<ul>)
Usada quando a ordem dos itens não importa (exibe "bolinhas").
* <ul>: Unordered List (Lista Não Ordenada).
* <li>: List Item (Item da Lista).
🔢 Lista Ordenada (<ol>)
Usada quando a sequência é importante (exibe números).
* <ol>: Ordered List (Lista Ordenada).
3. Hyperlinks: A Teia da Web 🕸️
A tag <a> (Anchor/Âncora) é o que torna a internet uma "teia" conectada.
Anatomia de um Link:
href: O atributo mais importante. Define o destino (URL).target="_blank": Abre o link em uma nova aba. Se omitido, abre na mesma aba.
4. Links Internos vs Externos 🔄
- Externos: Apontam para outros sites (precisam do
https://). - Internos: Apontam para outras páginas do seu próprio projeto.
Exemplo de Link Interno:
5. Visualizando com Mermaid 📊
graph LR
A[Página Home] -- href='contato.html' --> B[Página Contato]
A -- href='https://github.com' --> C[Site Externo]
6. Prática: Menu de Navegação 🚀
Vamos criar um menu funcional no terminal:
$ touch index.html contato.html
$ # No index.html, adicione:
$ <ul>
$ <li><a href="index.html">Início</a></li>
$ <li><a href="contato.html">Contato</a></li>
$ </ul>
[!IMPORTANT] Nunca use espaços nos nomes dos arquivos que serão linkados!
meu projeto.htmlvai quebrar o link. Usemeu-projeto.html.
7. Mini-Projeto: Favoritos da Web ⭐
- Crie uma página HTML estruturada.
- Adicione um título
<h1>"Meus Sites Favoritos". - Crie uma lista não ordenada com 3 itens.
- Cada item da lista deve conter um link (
<a>) para um site diferente, abrindo em uma nova aba. - Adicione um parágrafo abaixo da lista explicando por que você gosta desses sites.
8. Exercícios Progressivos 📝
Básicos
- Qual o atributo obrigatório da tag
<a>para que o link funcione? - Qual a diferença visual entre
<ul>e<ol>?
Intermediários
- Como fazer para um link abrir em uma aba separada do navegador?
- Crie o código de uma lista ordenada com os 3 passos para fazer um café.
Desafio 🧠
- É possível transformar uma imagem em um link? Como você faria isso (tente imaginar a estrutura das tags)?
Próxima Aula: Vamos dar vida ao site com Imagens e SVG! 🖼️
Aula 05 - Imagens e SVG 🖼️
Objetivo
Objetivo: Aprender a inserir conteúdos visuais de forma otimizada utilizando a tag <img> e compreender os benefícios dos gráficos vetoriais (SVG).
1. A Tag de Imagem 📷
Diferente das tags de texto, a tag <img> é auto-contida (não tem fechamento) e depende de atributos para funcionar.
Anatomia básica:
src(Source): O caminho para o arquivo da imagem.alt(Alternative Text): O texto que descreve a imagem para cegos e motores de busca. Obrigatório!
2. Formatos de Imagem na Web 📂
Escolher o formato certo garante que o seu site carregue rápido.
| Formato | Tipo | Uso Recomendado |
|---|---|---|
| JPG | Raster | Fotos com muitas cores e detalhes. |
| PNG | Raster | Imagens que precisam de transparência. |
| WebP | Raster | Formato moderno, super leve (Google). |
| SVG | Vetor | Logos, ícones e ilustrações simples. |
3. O Poder do SVG ⚡
SVG (Scalable Vector Graphics) não é feito de pixels, mas de fórmulas matemáticas.
- Infinitamente escalável: Você pode aumentar o tamanho o quanto quiser e ele nunca fica "pixelado".
- Super leve: Geralmente são apenas algumas linhas de código.
- Editável com CSS: Podemos mudar a cor de um SVG via código!
Exemplo de código SVG (Um círculo):
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>
4. Caminhos de Arquivo 🛣️
Saber organizar suas imagens em pastas é essencial:
$ mkdir meu-site
$ cd meu-site
$ mkdir assets
$ touch index.html
$ # Mova suas imagens para a pasta 'assets'
Como linkar no HTML:
5. Visualizando a Hierarquia 📊
graph TD
DIR[Pasta Raiz] --> HTML[index.html]
DIR --> ASSETS[Pasta assets]
ASSETS --> IMG1[foto.webp]
ASSETS --> IMG2[icon.svg]
HTML -.-> |src| IMG1
HTML -.-> |src| IMG2
6. Prática: Galeria de Fotos 🚀
- Crie uma pasta para o projeto.
- Crie uma pasta chamada
imagens. - Baixe ou salve uma imagem qualquer dentro dela.
- No seu
index.html, insira a imagem usando o caminho correto. - Adicione um atributo
width="300"para controlar o tamanho.
7. Mini-Projeto: Perfil com Avatar 👤
- Crie uma página de perfil.
- Insira uma imagem circular (
svg) ou uma foto sua. - Use tags semânticas (
<header>,<main>). - Crie uma lista de suas redes sociais abaixo da foto.
- Capriche no
altda sua foto de perfil!
8. Exercícios Progressivos 📝
Básicos
- Qual a diferença entre os atributos
srcealt? - Por que a tag
<img>não tem fechamento?
Intermediários
- Cite uma vantagem do formato SVG sobre o JPG.
- O que acontece com o site se você linkar uma imagem de 10MB diretamente na Home?
Desafio 🧠
- Pesquise como transformar uma imagem em um link (hyperlink). Escreva o código necessário para realizar essa tarefa.
Próxima Aula: Vamos organizar dados complexos com Tabelas! 📊
Aula 06 - Tabelas 📊
Objetivo
Objetivo: Aprender a organizar dados tabulares de forma estruturada e semântica utilizando as tags de tabela do HTML5.
1. Quando usar Tabelas? 🤔
Tabelas devem ser usadas exclusivamente para dados tabulares (planilhas, horários, listas de preços, classificações).
- Antigamente: Usava-se tabelas para criar o layout do site. Isso é proibido hoje!
- Hoje: O layout é feito com CSS (Flexbox/Grid), e tabelas são apenas para dados.
2. Estrutura Básica 🧱
Uma tabela é composta por linhas e células:
<table>: O recipiente principal.<tr>(Table Row): Define uma linha.<td>(Table Data): Define uma célula de dados comum.<th>(Table Header): Define uma célula de cabeçalho (geralmente em negrito e centralizada).
Exemplo simples:
3. Semântica de Tabelas 🧠
Para tabelas mais complexas e acessíveis, dividimos em seções:
<thead>: Cabeçalho da tabela (títulos das colunas).<tbody>: O corpo com os dados principais.<tfoot>: O rodapé da tabela (totalizadores, observações).
📊 Fluxo Estrutural
graph TD
T[table] --> TH[thead]
T --> TB[tbody]
T --> TF[tfoot]
TH --> TR1[tr]
TB --> TR2[tr]
TF --> TR3[tr]
TR1 --> TH_CELL[th]
TR2 --> TD_CELL[td]
4. Bordas e Estilo 🎨
Por padrão, as tabelas HTML não têm bordas visíveis. Embora o estilo deva ser feito no CSS, podemos usar o atributo border="1" para visualizar a estrutura durante o aprendizado:
[!NOTE] A tag
<caption>serve para dar um título ou legenda à tabela e deve ser a primeira tag dentro de<table>.
5. Prática: Tabela de Notas 🚀
Vamos criar uma planilha de notas no terminal:
$ mkdir aula-06
$ cd aula-06
$ touch index.html
$ # No seu HTML, crie uma tabela com:
$ # thead: Matéria e Nota
$ # tbody: HTML (10), CSS (9)
6. Mini-Projeto: Tabela de Campeonato 🏆
- Crie uma página de Classificação de Futebol (ou outro esporte).
- Use a estrutura semântica (
<thead>,<tbody>). - As colunas devem ser: Posição, Time, Pontos e Vitórias.
- Adicione pelo menos 4 times.
- Destaque o cabeçalho usando a tag
<th>.
7. Exercícios Progressivos 📝
Básicos
- Qual a tag usada para definir uma linha na tabela?
- Qual a diferença entre as tags
<td>and<th>?
Intermediários
- Por que não devemos usar tabelas para criar o layout (posicionamento) do site?
- Para que servem as tags
<thead>e<tbody>?
Desafio 🧠
- Pesquise sobre os atributos
colspanerowspan. Para que eles servem e como fariam para "unir" duas células em uma tabela?
Próxima Aula: Vamos interagir com o usuário através de Formulários! 📝
Aula 07 - Formulários 📝
Objetivo
Objetivo: Compreender como coletar dados do usuário utilizando a tag <form>, associar rótulos com <label> e utilizar os diversos tipos de <input> disponíveis no HTML5.
1. O Recipiente de Dados: <form> 📥
Todo formulário deve estar envolvido pela tag <form>. Ela é responsável por agrupar os campos e definir para onde os dados serão enviados.
action: Define a URL ou página que vai receber os dados.method: Define como os dados são enviados (GETaparece na URL,POSTé oculto).
2. Rótulos e Inputs: O Par Perfeito 💑
Nunca use um campo de entrada sem um rótulo explicativo.
<label>: Define o nome do campo.<input>: Onde o usuário digita ou seleciona.
Atributo for e id:
Para "ligar" o label ao input, usamos o id. Isso melhora a acessibilidade: se o usuário clicar no texto do label, o cursor pula para o input automaticamente.
3. Principais Tipos de Input 🎛️
O HTML5 introduziu tipos específicos que facilitam a vida do usuário (como abrir o teclado numérico no celular).
Tipo (type) |
Descrição |
|---|---|
| text | Texto simples curto. |
| password | Oculta os caracteres (bolinhas). |
| Valida se há um "@" e um domínio. | |
| number | Permite apenas números. |
| date | Abre um calendário para seleção. |
| color | Abre um seletor de cores. |
4. Botões de Ação 🔘
Para "enviar" o formulário, precisamos de um botão do tipo submit.
5. Visualizando a Conexão 📊
graph LR
U[Usuário] --> L[Label clicável]
L -- For/ID --> I[Input focado]
I --> B[Botão Submit]
B --> F[Form Envies]
6. Prática: Formulário de Contato 🚀
Vamos criar uma página de contato no terminal:
$ mkdir aula-07
$ cd aula-07
$ touch index.html
$ # No seu HTML, crie um form com:
$ # Nome (text), Email (email) e Mensagem (textarea)
7. Mini-Projeto: Cadastro de Alunos 🎓
- Crie um formulário de cadastro completo.
- Campos obrigatórios: Nome, Email, Senha, Data de Nascimento e Nota Final (número).
- Use a tag
<fieldset>e<legend>para agrupar e dar um título visual ao formulário. - Adicione um botão de "Salvar" e um de "Limpar".
- Dica: Use o atributo
requirednos inputs para torná-los obrigatórios!
8. Exercícios Progressivos 📝
Básicos
- Qual a tag usada para criar um rótulo para um campo de entrada?
- Para que serve o atributo
type="password"?
Intermediários
- Explique por que é importante usar o
idno input associado aofordo label. - Qual a diferença entre os métodos
GETePOSTem um formulário?
Desafio 🧠
- Pesquise sobre as tags
<select>e<option>. Como você criaria uma lista de seleção para o usuário escolher o seu estado (UF)?
Próxima Aula: Vamos consolidar tudo no Projeto HTML! 🏛️
Aula 08 - Projeto HTML 🏛️
Objetivo
Objetivo: Consolidar todos os conhecimentos adquiridos no Módulo 2 para construir a estrutura completa e semântica de uma Landing Page (Página de Destino) profissional, focando na organização e acessibilidade do código.
1. O Desafio: Era uma Vez uma Empresa... 🏢
Imagine que você foi contratado para criar a página inicial de uma startup tecnológica. Seu objetivo hoje não é a beleza (isso faremos com CSS depois!), mas sim a estrutura impecável.
Requisitos do Projeto:
- Layout totalmente semântico.
- Navegação funcional.
- Uso de imagens e SVGs.
- Uma tabela de serviços ou preços.
- Um formulário de contato.
2. Planejamento do Layout 📐
Antes de codar, precisamos planejar o "esqueleto" do nosso site.
📊 Estrutura Proposta
graph TD
BODY[body] --> H[header]
BODY --> M[main]
BODY --> F[footer]
H --> NAV[nav]
M --> S1[section: Sobre]
M --> S2[section: Serviços]
M --> S3[section: Contato]
S2 --> TAB[table: Preços]
S3 --> FOR[form: Contato]
3. Passo a Passo do Desenvolvimento 🚀
Etapa 1: O Esqueleto Mínimo
Crie o arquivo index.html e gere o boilerplate. Lembre-se do lang="pt-br" e do UTF-8.
Etapa 2: O Cabeçalho (<header>)
Adicione o logo (um SVG ou texto <h1>) e um menu de navegação (<nav>) com links internos para as seções da página.
Etapa 3: O Conteúdo Principal (<main>)
Divida o conteúdo em seções claras: * Hero Section: Um título cativante e uma descrição breve. * Serviços: Use uma tabela para mostrar o que a empresa oferece. * Equipe: Use uma lista para listar os fundadores. * Inscrição: Um formulário para capturar o e-mail do cliente.
Etapa 4: O Rodapé (<footer>)
Adicione informações de copyright e links para redes sociais em uma lista.
4. Checklist de Qualidade ✅
Antes de dar o projeto como concluído no terminal:
$ # Verificando o código...
$ # 1. Todas as imagens possuem atributo 'alt'?
$ # 2. O formulário possui labels conectados aos inputs?
$ # 3. Existe apenas um 'h1' na página?
$ # 4. A hierarquia de títulos (h2, h3) está correta?
[!IMPORTANT] A semântica não é apenas "organização", é empatia com quem usa tecnologias assistivas e inteligência para os motores de busca.
5. Mini-Projeto: Landing Page "Tech Solutions" 🎨
Este é o seu grande momento!
- Crie uma pasta chamada
projeto-html. - Dentro dela, crie as pastas
assetse o arquivoindex.html. - Implemente a estrutura planejada acima.
- Dica: Use o site Unsplash ou Pexels para buscar imagens reais para o seu projeto.
- Desafio Extra: No seu formulário, use pelo menos 5 tipos diferentes de
input(text, email, tel, date, select).
6. Exercícios de Revisão do Módulo 📝
- Qual a tag que representa o conteúdo único de uma página?
- Por que o
altem imagens e olabelem formulários são obrigatórios para acessibilidade? - O que define se um conteúdo deve ser um
articleou umasection? - Qual a diferença entre um link interno e um link externo?
- Qual tag de tabela deve ser usada para os títulos das colunas?
Fim do Módulo 2! 🎉 Prepare-se, pois na próxima aula entraremos no mundo das cores e formas com o Introdução ao CSS! 🖌️
Aula 09 - Introdução ao CSS 🖌️
Objetivo
Objetivo: Compreender o que é o CSS, como ele se diferencia do HTML e aprender os primeiros seletores para transformar o visual das suas páginas web.
1. O que é CSS? 🤔
CSS significa Cascading Style Sheets (Folhas de Estilo em Cascata).
- HTML: Define o que o site tem (estrutura).
- CSS: Define como o site aparece (estética).
💡 Analogia da Construção
- HTML: É o tijolo, a viga e o cimento. { .fragment }
- CSS: É a pintura, o piso e a decoração. { .fragment }
2. Sintaxe Básica 🧱
Um código CSS é composto por um Seletor e um Bloco de Declarações.
h1: O Seletor (quem queremos estilizar).color: A Propriedade (o que queremos mudar).blue: O Valor (como queremos que fique).
3. Formas de Aplicar CSS 📍
Existem três formas de inserir CSS em um projeto:
- Inline: Direto na tag HTML (Evite!).
- Interno: Dentro da tag
<style>no<head>. - Externo: Em um arquivo separado
.css(O melhor!).
4. Seletores Básicos 🎯
Para sermos específicos em quem queremos mudar:
- Seletor de Tag: Aplica a todas as tags daquele tipo. (Ex:
p { ... }) - Seletor de Classe (
.): Aplica a elementos com o atributoclass. (Ex:.azul { ... }). Pode ser usado em vários elementos. - Seletor de ID (
#): Aplica a um elemento único com o atributoid. (Ex:#topo { ... }). Use apenas um por página!
5. Visualizando a Cascata 📊
O termo Cascata significa que as regras se sobrepõem seguindo uma hierarquia.
graph TD
EXT[Arquivo Externo] --> INT[Estilo Interno]
INT --> INL[Estilo Inline]
INL --> WIN[Elemento Final]
[!NOTE] Regras mais "próximas" ao elemento (como o Inline) geralmente vencem as regras mais distantes (como o Arquivo Externo).
6. Prática: Pintando o Site 🚀
Vamos criar o nosso primeiro arquivo de estilo no terminal:
$ touch index.html estilo.css
$ # No HTML, link o CSS:
$ # <link rel="stylesheet" href="estilo.css">
$ # No CSS, mude a cor do body:
$ # body { background-color: lightgrey; }
7. Mini-Projeto: Cartão de Visitas Colorido 👤
- Crie um HTML com um título
<h1>e um parágrafo<p>. - Crie um arquivo
style.css. - No CSS, mude a cor do
h1para azul e o parágrafo para cinza. - Crie uma classe chamada
.destaqueno CSS com a cor de fundo amarela. - Aplique essa classe a uma palavra dentro do seu parágrafo.
8. Exercícios Progressivos 📝
Básicos
- O que significa a sigla CSS?
- Qual a diferença entre uma Propriedade e um Valor?
Intermediários
- Por que usar um arquivo CSS externo é melhor do que usar o estilo inline?
- Qual a diferença entre o seletor de Classe (
.) e o seletor de ID (#)?
Desafio 🧠
- Imagine que você tem um
h1com a cor vermelha definida no CSS externo e azul definida no estilo interno. Qual cor o navegador vai exibir? Por quê?
Próxima Aula: Vamos entender como os elementos ocupam espaço com o Box Model! 📦
Aula 10 - Box Model 📦
Objetivo
Objetivo: Compreender que cada elemento no HTML é uma "caixa" e aprender a controlar o seu tamanho, espaçamento interno, bordas e margens externas utilizando o conceito de Box Model.
1. Tudo é uma Caixa! 📦
No CSS, todo elemento (um título, uma imagem, um parágrafo) é tratado como uma caixa retangular. O Box Model define como essas caixas são calculadas.
2. As Camadas da Caixa 🍰
Imagine uma caixa de presente protegida para envio:
- Content (Conteúdo): É o presente em si (texto ou imagem).
- Padding (Preenchimento): É o plástico bolha dentro da caixa. O espaço entre o conteúdo e a borda.
- Border (Borda): É o papelão da caixa. A linha que envolve o preenchimento e o conteúdo.
- Margin (Margem): É o espaço vazio entre a sua caixa e outras caixas ao redor.
3. Visualizando o Modelo 📊
graph TD
M[Margin - Espaço Externo] --> B[Border - Linha da Caixa]
B --> P[Padding - Espaço Interno]
P --> C[Content - Texto/Imagem]
4. Propriedades CSS do Box Model 🛠️
.caixa {
width: 300px; /* Largura do conteúdo */
height: 150px; /* Altura do conteúdo */
padding: 20px; /* Espaço interno */
border: 2px solid; /* Borda */
margin: 30px; /* Espaço externo */
}
🧩 O Grande Problema do Tamanho
Por padrão, o navegador soma tudo! Se você tem uma caixa de 300px de largura e 20px de padding, o tamanho total na tela será 340px.
✅ A Solução: box-sizing
Para que a caixa mantenha sempre o tamanho que você definiu, usamos esta regra de ouro:
5. Prática: Brincando com Espaços 🚀
Vamos criar uma caixa visual no terminal:
$ touch index.html estilo.css
$ # No CSS, crie:
$ .bloco {
$ background-color: lightgreen;
$ padding: 20px;
$ border: 5px solid darkgreen;
$ margin-bottom: 50px;
$ }
6. Mini-Projeto: Card de Produto 🏷️
- Crie um
<div>com a classe.card. - Dentro dele, coloque um
<h2>(Nome do Produto) e um<p>(Preço). - No CSS, aplique:
- Um fundo cinza claro.
- Um
paddingde20pxpara que o texto não encoste na borda. - Uma borda sólida de
1px. - Uma
margindeautoe umawidthde250pxpara centralizar o card na tela.
7. Exercícios Progressivos 📝
Básicos
- Quais as 4 partes que compõem o Box Model?
- Qual a diferença entre
paddingemargin?
Intermediários
- Se um elemento tem
width: 100pxepadding: 10px, qual será a largura total dele sem usar oborder-box? - Como fariam para colocar uma margem apenas na parte de baixo de um elemento?
Desafio 🧠
- Pesquise e explique a diferença entre as unidades
px(pixels) e%(porcentagem) ao definir awidthde um elemento.
Próxima Aula: Vamos aprender como as caixas se posicionam com Display e Posicionamento! 📍
Aula 11 - Display e Posicionamento 📍
Objetivo
Objetivo: Compreender como os elementos se comportam no fluxo da página (display) e aprender a movê-los e fixá-los em locais específicos utilizando a propriedade position.
1. O Comportamento Display 🎛️
A propriedade display define como o elemento se comporta em relação aos seus vizinhos.
block: O elemento ocupa toda a largura disponível (como um parágrafo ou título). Ele sempre pula para uma nova linha.inline: O elemento ocupa apenas o espaço necessário para o seu conteúdo (como um link ou negrito). Ele não permite definirwidthouheight.inline-block: Um híbrido. Ele fica na mesma linha que outros, mas permite definir largura, altura e padding.none: O elemento desaparece completamente da página (ele nem ocupa espaço).
2. Posicionamento (Position) 🧭
Por padrão, os elementos seguem o fluxo natural (um abaixo do outro). Com position, podemos quebrar esse fluxo.
static: O padrão. O elemento segue o fluxo normal.relative: O elemento se move em relação à sua posição original, mas ainda ocupa o espaço original.absolute: O elemento "flutua" e se move em relação ao seu pai que tenha um posicionamento definido (não-static). Ele sai do fluxo normal.fixed: O elemento fica "colado" na tela do navegador, mesmo que você role a página.sticky: O elemento se comporta como relativo até atingir um ponto específico na rolagem, onde ele fica "preso" (muito usado em menus).
3. Visualizando o Posicionamento 📊
graph TD
S[Static - Fluxo Normal] --> R[Relative - Move mas deixa espaço]
R --> A[Absolute - Flutua em relação ao Pai]
A --> F[Fixed - Preso no Navegador]
4. Coordenadas: top, bottom, left e right 🗺️
Quando usamos relative, absolute ou fixed, podemos usar estas propriedades para definir a distância exata:
[!IMPORTANT] A propriedade
z-indexdefine quem fica "em cima" de quem quando os elementos se sobrepõem. Quanto maior o número, mais à frente o elemento fica.
5. Prática: Menu Fixo e Botão Flutuante 🚀
Vamos experimentar com o terminal:
$ touch index.html estilo.css
$ # No CSS, crie um elemento que não sai da tela:
$ .botao-suporte {
$ position: fixed;
$ bottom: 10px;
$ right: 10px;
$ background-color: yellow;
$ }
6. Mini-Projeto: Dashboard com Menu Sticky 🖱️
- Crie uma página longa com muito texto (use
lorem ipsum). - Crie um
<nav>com a classe.menu. - No CSS, aplique
position: sticky; top: 0;ao menu. - Crie um pequeno quadrado no canto inferior direito com
position: fixed. - Dica: Use
background-colordiferentes para visualizar bem onde cada elemento começa e termina.
7. Exercícios Progressivos 📝
Básicos
- Qual a diferença entre
display: blockedisplay: inline? - O que acontece com um elemento se usarmos
display: none?
Intermediários
- Se eu quiser que um menu de topo não suma ao rolar a página, qual
positiondevo usar? - Explique a relação entre um elemento com
position: absolutee o seu pai.
Desafio 🧠
- Pesquise e explique para que serve o
z-index. O que acontece se dois elementos tiverem o mesmoz-indexe estiverem sobrepostos?
Próxima Aula: Vamos aprender a alinhar tudo perfeitamente com o Flexbox! 📐
Aula 12 - Flexbox 📐
Objetivo
Objetivo: Dominar o CSS Flexbox para criar layouts flexíveis e alinhar elementos de forma profissional e simples, tanto na horizontal quanto na vertical.
1. O que é Flexbox? 🤔
O Flexible Box Layout (ou Flexbox) é um modelo de layout que permite distribuir espaço e alinhar itens em uma interface de forma muito eficiente.
- Antigamente: Usávamos
floate tabelas (dava muito erro). - Hoje: O Flexbox é o padrão para layouts de uma única direção (uma linha ou uma coluna).
2. O Container e os Itens 📦
Para usar Flexbox, precisamos de um pai (Flex Container) e seus filhos (Flex Items).
3. Alinhamento no Eixo Principal (Justify Content) ↔️
O Eixo Principal (Main Axis) é, por padrão, a horizontal. Com a propriedade justify-content, controlamos o alinhamento horizontal:
flex-start: Itens no início (esquerda).center: Itens no centro.flex-end: Itens no final (direita).space-between: Espaço igual entre os itens.space-around: Espaço igual ao redor dos itens.
4. Alinhamento no Eixo Secundário (Align Items) ↕️
O Eixo Secundário (Cross Axis) é a vertical. Com align-items, controlamos a altura dos itens:
stretch: Estica os itens para ocupar toda a altura (padrão).center: Centraliza verticalmente.flex-start: Alinha no topo.flex-end: Alinha na base.
5. Visualizando os Eixos 📊
graph LR
P[Pai: display: flex] --> I1[Item 1]
P --> I2[Item 2]
P --> I3[Item 3]
Note over P: Eixo Principal (Justify)
Note over P: Eixo Secundário (Align)
6. Direção e Quebra (Direction & Wrap) 🔄
flex-direction: Define se os itens ficam em linha (row) ou coluna (column).flex-wrap: Por padrão, o flex tenta colocar tudo em uma linha só. Comflex-wrap: wrap, os itens pulam de linha se não houver espaço.
7. Prática: Centralização Perfeita 🚀
Antes do Flexbox, centralizar algo era um pesadelo. Agora:
$ touch index.html estilo.css
$ # No CSS, para centralizar um item no meio da tela:
$ .container-pai {
$ display: flex;
$ justify-content: center;
$ align-items: center;
$ height: 100vh; /* Altura total da tela */
$ }
8. Mini-Projeto: Barra de Navegação Moderna 🖱️
- Crie um
<nav>com uma lista<ul>e 4 links. - No CSS, transforme o
<ul>em um Flex Container. - Use
justify-content: space-betweenpara afastar os links. - Remova as "bolinhas" da lista com
list-style: none. - Adicione um
paddingpara ficar elegante.
9. Exercícios Progressivos 📝
Básicos
- Como transformamos um elemento em um Flex Container?
- Para que serve a propriedade
justify-content?
Intermediários
- Qual a diferença entre
space-betweenespace-around? - Como fariam para transformar uma lista de links horizontal em uma lista vertical usando Flexbox?
Desafio 🧠
- O que acontece com os itens de uma lista flex se definirmos
flex-direction: column-reverse? Teste e descreva o resultado.
Próxima Aula: Vamos construir grades complexas com o Grid Layout! 🏁
Aula 13 - Grid Layout 🏁
Objetivo
Objetivo: Compreender o potencial do CSS Grid para criar layouts bidimensionais (linhas e colunas simultâneas) e aprender a dividir a página em grades profissionais e flexíveis.
1. O que é CSS Grid? 🤔
Diferente do Flexbox (que foca em uma dimensão), o Grid Layout é feito para duas dimensões: você controla o alinhamento tanto na horizontal (colunas) quanto na vertical (linhas).
- Flexbox: Ideal para componentes (menus, botões alinhados).
- Grid: Ideal para o layout geral da página (cabeçalho, barra lateral, conteúdo e rodapé).
2. Definindo a Grade 📐
Para começar, transformamos um elemento em um Grid Container:
.container {
display: grid;
grid-template-columns: 200px auto; /* Duas colunas */
grid-template-rows: 100px auto 50px; /* Três linhas */
}
3. Unidades Modernas: fr e repeat 📏
O CSS Grid introduziu a unidade de Fração (fr), que distribui o espaço disponível de forma proporcional.
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 colunas iguais */
gap: 20px; /* Espaçamento entre as células */
}
repeat(3, 1fr): Cria 3 colunas que dividem o espaço igualmente.gap: Define o "respiro" entre as linhas e colunas.
4. Posicionando Itens (Grid Column/Row) 🎯
Podemos dizer exatamente onde um item começa e onde ele termina na grade usando as linhas da grade.
5. Visualizando a Grade 📊
graph TD
subgraph Grid
C1[Coluna 1]
C2[Coluna 2]
C3[Coluna 3]
end
Note over C1,C3: grid-template-columns: 1fr 1fr 1fr
6. Prática: Layout de Galeria 🚀
Vamos criar uma grade de fotos no terminal:
$ touch index.html estilo.css
$ # No CSS, para criar um grid 3x3:
$ .galeria {
$ display: grid;
$ grid-template-columns: repeat(3, 1fr);
$ gap: 10px;
$ }
7. Mini-Projeto: Layout Completo de Site 🖱️
- Crie um
<div>pai chamado.layout. - Dentro dele, coloque:
<header>,<aside>,<main>e<footer>. - No CSS, transforme o
.layoutem um Grid. - Configure o grid para ter:
- Um cabeçalho que ocupa toda a largura (
grid-column: 1 / 3). - Uma barra lateral (
aside) e o conteúdo principal (main) lado a lado. - Um rodapé que também ocupa toda a largura.
- Um cabeçalho que ocupa toda a largura (
- Dica: Use cores de fundo diferentes para ver a "mágica" acontecer.
8. Exercícios Progressivos 📝
Básicos
- Qual a diferença fundamental entre Flexbox e Grid?
- Para que serve a propriedade
gap?
Intermediários
- O que significa a unidade
1frno CSS Grid? - Como fariam para criar uma grade com 4 colunas de exatamente
250pxcada uma, usando a funçãorepeat?
Desafio 🧠
- Pesquise sobre a propriedade
grid-area. Como ela facilita a montagem de layouts complexos comparada ao uso de números de linhas?
Próxima Aula: Vamos aprender a adaptar o site para celulares com a Responsividade! 📱
Aula 14 - Responsividade 📱
Objetivo
Objetivo: Aprender a criar sites que se adaptam automaticamente a qualquer tamanho de tela (celulares, tablets e desktops) utilizando Media Queries e a filosofia Mobile-First.
1. O que é Web Design Responsivo? 🤔
Hoje, mais de 60% dos acessos à internet vêm de dispositivos móveis. Um site responsivo é aquele que rearranja seus elementos para oferecer a melhor experiência, independente do tamanho da tela.
- Não Responsivo: O site fica "pequeno" e você precisa dar zoom. ❌
- Responsivo: O conteúdo se ajusta, botões ficam maiores e o texto legível. ✅
2. A Meta Tag Viewport 🖼️
Para que a responsividade funcione, precisamos avisar o navegador que o site deve respeitar a largura do dispositivo. Lembra dessa tag no <head>?
3. Media Queries 📡
As Media Queries são filtros que aplicam CSS apenas se certas condições forem atendidas (como a largura da tela).
/* Estilo padrão (para celular) */
body { background-color: white; }
/* Se a tela tiver pelo menos 768px (Tablet) */
@media (min-width: 768px) {
body { background-color: lightgrey; }
}
/* Se a tela tiver pelo menos 1024px (Desktop) */
@media (min-width: 1024px) {
body { background-color: grey; }
}
4. Mobile-First 📱➡️💻
A técnica mais moderna consiste em escrever o CSS primeiro para telas pequenas e depois usar Media Queries para adicionar complexidade em telas maiores.
- Vantagem: O site carrega mais rápido no celular e o design fica mais limpo.
5. Visualizando a Adaptação 📊
graph LR
subgraph Mobile
M1[Logo]
M2[Conteúdo]
M3[Menu Burguer]
end
subgraph Desktop
D1[Logo]
D2[Conteúdo]
D3[Menu Extenso]
D4[Barra Lateral]
end
Mobile -- Media Query --> Desktop
6. Prática: Grade Responsiva 🚀
Vamos transformar o Grid da aula anterior em algo que muda de acordo com a tela:
$ touch index.html estilo.css
$ # No CSS, crie uma grade que é 1 coluna no celular e 3 no PC:
$ .grade {
$ display: grid;
$ grid-template-columns: 1fr;
$ }
$ @media (min-width: 800px) {
$ .grade { grid-template-columns: repeat(3, 1fr); }
$ }
7. Mini-Projeto: Dashboard Flexível 🖱️
- Crie uma página com um Header e 3 Cards de conteúdo.
- No celular: Os cards devem ficar um abaixo do outro (empilhados).
- No Desktop (min-width: 768px): Os cards devem ficar lado a lado usando Flexbox ou Grid.
- O Header deve mudar de cor quando a tela for maior que 1024px.
- Dica: Use as ferramentas de desenvolvedor (
F12) e clique no ícone de celular para testar diferentes tamanhos.
8. Exercícios Progressivos 📝
Básicos
- Por que a responsividade é essencial na web moderna?
- Para que serve a meta tag
viewport?
Intermediários
- Explique como funciona uma Media Query com
min-width. - O que significa a filosofia "Mobile-First"?
Desafio 🧠
- Pesquise sobre as unidades de medida
vw(viewport width) evh(viewport height). Como elas podem ajudar na criação de layouts que ocupam toda a tela?
Próxima Aula: Vamos dar movimento ao site com Animações e Transições! ✨
Aula 15 - Animações e Transições ✨
Objetivo
Objetivo: Dar vida e interatividade às suas páginas web utilizando transições suaves, transformações de elementos e animações complexas baseadas em keyframes.
1. Transições Suaves (transition) 🧚
A transição permite que a mudança de um estilo para outro ocorra de forma gradual, em vez de ser instantânea.
.botao {
background-color: blue;
transition: background-color 0.5s ease-in-out;
}
.botao:hover {
background-color: darkblue;
}
0.5s: A duração da animação (meio segundo).ease-in-out: O ritmo da transição (começa lento, acelera e termina lento).
2. Transformações (transform) 📐
Com a propriedade transform, podemos girar, inclinar, aumentar ou mover elementos sem afetar o layout ao redor.
rotate(45deg): Gira o elemento.scale(1.2): Aumenta o tamanho em 20%.translate(10px, 20px): Move o elemento nos eixos X e Y.
3. Animações com Keyframes 🎬
Quando precisamos de algo mais complexo que uma simples transição, usamos os Keyframes (Quadros-Chave).
@keyframes flutuar {
0% { transform: translateY(0); }
50% { transform: translateY(-10px); }
100% { transform: translateY(0); }
}
.imagem-hero {
animation: flutuar 3s infinite ease-in-out;
}
3s: Duração de um ciclo.infinite: Repete para sempre.
4. Visualizando o Ciclo da Animação 📊
graph LR
A[0% - Início] --> B[50% - Meio]
B --> C[100% - Fim]
C -- Loop --> A
5. Prática: Botão Pulsante 🚀
Vamos criar um efeito de pulsação no terminal:
$ touch index.html estilo.css
$ # No CSS, crie uma animação de escala:
$ @keyframes pulsar {
$ from { transform: scale(1); }
$ to { transform: scale(1.1); }
$ }
$ .botao { animation: pulsar 1s infinite alternate; }
6. Mini-Projeto: Dashboard Interativo 🖱️
- Crie um card com uma imagem e um título.
- Adicione uma transição para que, ao passar o mouse (
:hover), a sombra do card aumente e ele suba levemente (translateY). - Crie um ícone de "carregando" (pode ser um círculo SVG).
- Faça o ícone girar infinitamente usando
rotate(360deg)nos keyframes. - Dica: Use
transition: all 0.3spara que todas as mudanças sejam suaves.
7. Exercícios Progressivos 📝
Básicos
- Qual a diferença entre uma transição e uma animação?
- O que faz a propriedade
transform: scale(1.5)?
Intermediários
- Como fariam para uma animação nunca parar de rodar?
- Para que serve o seletor
:hoverno contexto de transições?
Desafio 🧠
- Pesquise sobre a propriedade
opacity. Como você criaria um efeito de "esmaecer" (fade-in) para que um texto apareça suavemente ao carregar a página?
Próxima Aula: Vamos consolidar tudo no Projeto Final + Deploy! 🚢
Aula 16 - Projeto Final + Deploy 🚢
Objetivo
Objetivo: Consolidar todo o conhecimento de HTML5 e CSS3 construindo um projeto completo, responsivo e interativo, e aprender como publicar seu site gratuitamente para que qualquer pessoa no mundo possa acessá-lo via GitHub Pages.
1. O Desafio Final: Seu Portfólio ou Site de Empresa 🏗️
Neste projeto, você deve unir a estrutura semântica do Módulo 2 com o estilo avançado, layout e animações do Módulo 3.
Requisitos Obrigatórios:
- Semântica: Header, Nav, Main (com sections), e Footer.
- Estilo: Uso de cores harmoniosas e fontes profissionais (Google Fonts).
- Layout: Flexbox para o menu/cards e Grid para a estrutura da página.
- Responsividade: O site deve funcionar perfeitamente no celular e no PC.
- Interatividade: No mínimo uma animação com Keyframes e transições nos botões.
2. O que é Deploy? ☁️
Fazer o Deploy significa colocar o seu site (que hoje só existe no seu computador) em um servidor na nuvem. Existem várias formas de fazer isso, mas a mais usada por desenvolvedores é o GitHub Pages.
3. Passo a Passo do Deploy no GitHub 🚀
Etapa 1: Criar o Repositório
No seu GitHub, crie um novo repositório chamado meu-primeiro-site.
Etapa 2: Subir os Arquivos
Envie seu index.html, style.css e a pasta assets para o repositório.
Etapa 3: Ativar o GitHub Pages
- No repositório, vá em Settings (Configurações).
- Clique na aba Pages no menu lateral.
- Em "Branch", selecione
main(oumaster) e clique em Save. - Aguarde 2 minutos e você receberá um link (ex:
usuario.github.io/meu-primeiro-site).
4. Visualizando o Fluxo de Deploy 📊
graph LR
PC[Seu Computador] -- Git Push --> GH[GitHub Repositório]
GH -- Build --> GHP[GitHub Pages URL]
GHP --> World[Qualquer pessoa acessa!]
5. Prática: Verificando antes de subir ✅
Use o terminal para garantir que seu projeto está organizado:
$ # 1. Verifique se o index.html está na raiz do projeto
$ ls
$ # 2. Verifique se os caminhos das imagens estão corretos
$ # 3. Remova arquivos de teste ou lixo
$ # 4. Garanta que o meta viewport está presente
6. Mini-Projeto: Dashboard Completo com Deploy 🎨
- Finalize sua Landing Page (da Aula 08) com todo o CSS aprendido.
- Adicione um menu "sticky" e cards flexíveis.
- Garanta que a grade mude de 1 para 3 colunas no desktop.
- Suba para o GitHub e ative o Pages.
- Desafio Extra: Compartilhe o link do seu site com um colega!
7. Exercícios de Finalização do Curso 📝
- Qual a importância de separar o código HTML do CSS para a manutenção do site?
- O que acontece se você esquecer de subir a pasta de imagens para o GitHub?
- Como você pode testar se o seu site ficou realmente responsivo após o deploy?
- Qual o comando ou configuração no GitHub Pages que ativa o site a partir da branch principal?
- Qual a sensação de ver o seu primeiro site "vivo" na internet? 😍
Parabéns! 🎉 Você concluiu o curso de Programação Web I - HTML5 e CSS3. Agora você tem as ferramentas para construir o que imaginar na rede mundial de computadores. Continue praticando e codando! 🚀
Exercícios
Listas de Exercícios 🏋️
Pratique o que aprendeu com desafios graduais para cada aula.
-
Módulo 1: Fundamentos de Backend ---
-
Módulo 2: Manipulação de Dados ---
-
Módulo 3: Segurança e Autenticação ---
-
Módulo 4: Aplicações SPA (React) ---
Exercícios 01 - Introdução a Microsserviços 🧩
🟢 Fáceis
- Definição: Explique com suas palavras o que é um microsserviço.
- Diferenciação: Cite 3 desvantagens de um sistema Monolítico em relação a uma arquitetura de Microsserviços.
🟡 Médios
- Cenário: Uma startup de delivery começou com um monólito e agora está sofrendo para atualizar o sistema de pagamentos sem quebrar o rastreamento de pedidos. Qual vantagem dos microsserviços resolveria esse problema? Justifique.
- Conectividade: O que é uma API e por que ela é fundamental na integração de sistemas distribuídos?
🔴 Desafio
- Análise de Arquitetura:
Imagine o sistema do "Netflix". Ele possui milhões de usuários acessando simultaneamente filmes, perfis e faturas.
- Se o serviço de "Busca" falhar, o usuário deve ser impedido de assistir aos filmes que já estão na sua lista "Continuar Assistindo"? Como a arquitetura de microsserviços ajuda nesse isolamento?
- Desenhe/Escreva como seria a divisão básica: Quais seriam os pelo menos 4 serviços independentes que você criaria para o Netflix?
Exercícios 02 - Arquitetura e Gateway 🏗️
🟢 Fáceis
- Conceitos: Explique o que é um API Gateway com uma analogia da vida real (ex: uma recepção de hotel).
- Síncrono vs Assíncrono: Diferencie os dois modelos de comunicação em uma frase cada.
🟡 Médios
- Resiliência: O que acontece com um sistema distribuído que só usa comunicação síncrona se o serviço de banco de dados ficar muito lento? Como isso afeta o usuário final?
- Segurança: Por que é melhor colocar a lógica de autenticação no API Gateway do que repetir em cada um dos 20 microsserviços?
🔴 Desafio
- Cenário de Falha Crítica:
O serviço de "Notificação" (envio de e-mail e SMS) está fora do ar.
- Se o seu sistema for síncrono, o usuário conseguirá finalizar uma compra?
- Como a abordagem assíncrona com filas resolveria esse problema, garantindo que o e-mail seja enviado quando o serviço voltar?
- Cite um exemplo de serviço que precisa ser síncrono (não pode esperar).
Exercícios 03 - Modelagem REST 📡
🟢 Fáceis
- URI Design: Corrija as URIs abaixo para seguirem as boas práticas REST:
GET /listar_todos_usuariosPOST /criarNovoPedidoDELETE /remover-produto-por-id/123
- Verbos: Qual o verbo HTTP mais adequado para atualizar a senha de um usuário? Por que?
🟡 Médios
- Status Codes: Escolha o código de status ideal para as situações:
- Usuário tentou deletar um arquivo, mas ele não tem permissão de administrador.
- O cadastro foi realizado com sucesso e o sistema retornou os dados do novo usuário.
- O servidor caiu por falta de memória.
- Idempotência: Explique por que o
POSTnão é idempotente e oGETé.
🔴 Desafio
- Design de Contrato:
Desenhe as rotas para um sistema de E-commerce.
- Como seria a URI para listar todos os itens de um carrinho específico?
- Como seria a URI para adicionar um item a este carrinho?
- Escreva o JSON que representaria um "Item de Carrinho" com:
produto_id,nome,quantidadeepreco_unitario.
Exercícios 04 - Documentação e Mocks 📝
🟢 Fáceis
- Conceitos: O que é OpenAPI e qual a relação dela com o Swagger?
- Mocks: Explique com suas palavras por que um desenvolvedor Frontend desejaria usar um Mock Server.
🟡 Médios
- Análise de YAML: Analise o trecho OpenAPI abaixo e responda: Qual o endpoint? Qual o verbo? O que ele retorna no sucesso?
- Developer Experience (DX): Imagine que você recebeu uma documentação que diz apenas:
POST /login - Envie os dados do usuário. Por que essa documentação é ruim sob a ótica de DX?
🔴 Desafio
- Cenário de Desenvolvimento:
Você é o arquiteto de um projeto onde o Backend vai demorar 3 semanas para liberar a primeira API, mas o Frontend precisa começar amanhã.
- Como você organizaria o trabalho usando Mocks?
- Como garantir que, quando o Backend ficar pronto, a integração ocorra sem precisar mudar nada no código do Frontend?
- Cite uma ferramenta que você usaria para subir esse Mock Server rapidamente.
Exercícios 05 - Implementação de APIs ⚙️
🟢 Fáceis
- Responsabilidade: Qual a principal função de um Controller em uma arquitetura de camadas?
- Mapeamento: O que é um "Handler" no contexto de rotas backend?
🟡 Médios
- Parâmetros: Diferencie, com exemplos de URIs, o uso de Path Params e Query Params.
- Erros: Por que o Controller nunca deve retornar uma resposta sem um Status Code explícito?
🔴 Desafio
- Cenário Real:
Imagine que você está implementando a rota de
PUT /produtos/123.- Como você capturaria o
123? - Como você capturaria o novo nome do produto?
- Em qual objeto (
req.params,req.queryoureq.body) cada um desses dados estaria? - O que você faria se o cliente enviasse o
idno Body diferente doidna URL?
- Como você capturaria o
Exercícios 06 - Services e Regras de Negócio 🧠
🟢 Fáceis
- Conceito: Explique por que não é uma boa prática colocar lógica de cálculo ou validação dentro do Controller.
- Responsabilidade: Cite 3 exemplos de tarefas que devem ser feitas na camada de Service.
🟡 Médios
- Tratamento de Erros: Por que o Service deve lançar (throw) um erro em vez de retornar um Status Code (ex: 404)?
- Reutilização:
Imagine que você tem um
EmailService. Cite dois Controllers diferentes que poderiam usar esse mesmo serviço.
🔴 Desafio
- Lógica de Negócio:
Escreva o pseudocódigo para um
PedidoService.finalizar(pedidoId).- Quais validações você faria? (Estoque, status do pedido, limite de crédito do cliente).
- Como você lidaria com o caso de "Produto Sem Estoque"?
- Qual tipo de dado (DTO) o Service deveria retornar para o Controller após o sucesso?
Exercícios 07 - Repositories e Banco de Dados 🗄️
🟢 Fáceis
- Fundamentos: O que significa a sigla SQL e para que ela serve?
- CRUD: Escreva o comando SQL para inserir um novo produto (nome "Mouse", preço 50.00) na tabela
produtos.
🟡 Médios
- Relacionamentos: Explique a diferença entre uma Primary Key (PK) e uma Foreign Key (FK). Por que a FK é essencial para bancos relacionais?
- Isolamento: Por que usamos o padrão Repository em vez de escrever o código SQL diretamente dentro do Service?
🔴 Desafio
- Modelagem Real:
Imagine um sistema de Blog. Temos
EscritoreseArtigos.- 1:N: Como você modelaria a ligação entre um Escritor e seus Artigos?
- SQL: Escreva uma query que retorne o título de todos os artigos escritos pelo autor com
id = 5. - Repository: Como ficaria a assinatura (nome e parâmetros) da função no
ArtigoRepositoryresponsável por essa busca?
Exercícios 08 - Boas Práticas e Validação de Dados ✅
🟢 Fáceis
- Conceito: Por que nunca devemos confiar 100% nos dados vindos do frontend?
- Validação: Dê um exemplo de uma regra de validação para um campo de "Senha".
🟡 Médios
- Sanitização: Qual a diferença prática entre validar um campo e sanitizar um campo? Quando usamos cada um?
- Clean Code: Refatore o nome da função abaixo para seguir as boas práticas:
🔴 Desafio
- Tratamento de Erros:
Imagine que o banco de dados caiu. O Service lança um erro técnico.
- Como o Middleware Global de Erros deve reagir?
- O que ele deve enviar para o usuário final? (Erro 500 com mensagem técnica ou mensagem genérica?)
- Por que é importante logar o erro real apenas no console do servidor?
Exercícios 09 - Segurança e Autenticação com JWT 🔐
🟢 Fáceis
- Conceito: Qual a principal diferença entre Autenticação e Autorização?
- JWT: Quais são as 3 partes de um token JWT?
🟡 Médios
- Segurança: Por que nunca devemos incluir informações sensíveis (como a senha do usuário) dentro do Payload do JWT?
- Stateless: Quais as vantagens de uma arquitetura "Stateless" em sistemas que precisam escalar para milhões de usuários?
🔴 Desafio
- Análise de Token:
Imagine que você interceptou um token JWT.
- Como você faria para ler o nome do usuário que está dentro dele sem saber a chave secreta?
- Agora, imagine que você tentou mudar o
iddo usuário para burlar o sistema. Por que o servidor vai rejeitar esse token quando você tentar usá-lo? - Onde o frontend deve armazenar o token para que ele não suma quando a página for recarregada?
Exercícios 10 - Controle de Acesso (RBAC) 🛡️
🟢 Fáceis
- Conceito: No sistema RBAC, o que é uma "Role"?
- Status Code: Se um usuário comum tenta acessar uma área de administrador, qual o código de erro HTTP (Status Code) mais apropriado?
🟡 Médios
- Diferença: Explique a diferença fundamental entre erro 401 e erro 403. Em qual desses casos o usuário deve ser redirecionado para a tela de login?
- Middleware:
Imagine que você tem uma rota
/admin/dashboard. Quais seriam os dois middlewares (nesta ordem) que o usuário deveria passar antes de chegar no Controller final?
🔴 Desafio
- Hierarchy (Hierarquia):
Implemente (em pseudocódigo) uma lógica onde a função
autorizar(['EDITOR', 'ADMIN'])permita a passagem se o usuário logado tiver QUALQUER um desses dois perfis.- Como você garantiria que um
ADMINsempre consiga acessar rotas deUSEReEDITORsem precisar listar oADMINem todas as rotas do sistema? - Qual a vantagem dessa abordagem centralizada?
- Como você garantiria que um
Exercícios 11 - Refresh Token e Segurança Avançada 🏗️
🟢 Fáceis
- Conceito: Por que Access Tokens costumam ter vida curta?
- Bibliotecas: Para que serve a biblioteca Helmet em um aplicativo Express?
🟡 Médios
- CORS: Explique por que o CORS é uma segurança do Navegador e não do servidor. O que acontece se você tentar chamar uma API sem CORS a partir de um script no Terminal (cURL)?
- Flow: Desenhe o fluxo de uma requisição que retorna erro 401 por token expirado e como o frontend deve agir para usar o Refresh Token.
- Headers: Cite três informações sensíveis que o Helmet ajuda a esconder nos cabeçalhos HTTP.
🔴 Desafio
- Segurança de Refresh Tokens:
Se o Refresh Token permite gerar novos Access Tokens, por que ele é considerado mais seguro?
- Onde ele deve ser armazenado preferencialmente no navegador (LocalStorage ou Cookies HttpOnly)? Por quê?
- O que é o "Refresh Token Rotation"?
Exercícios 12 - Introdução ao React ⚛️
🟢 Fáceis
- Conceito: O que significa a sigla SPA e qual sua principal vantagem?
- Sintaxe: No React, usamos
classNameouclasspara definir classes CSS? Por quê?
🟡 Médios
- Componentes: Por que dizemos que a arquitetura do React é baseada em "LEGO"? Como isso ajuda na organização do código?
- Vite: Qual a função do Vite no desenvolvimento de um projeto React moderno?
- Props:
Explique como as
propspermitem que um mesmo componente (ex: um Botão) seja usado em vários lugares com textos e cores diferentes.
🔴 Desafio
- JSX vs HTML:
O código abaixo é Javascript ou HTML? Justifique sua resposta mencionando pelo menos duas diferenças sutis que o JSX impõe.
- O que acontece se eu esquecer de fechar a tag
<br>? - Como eu faria para exibir o valor de uma variável
nomedentro doh1?
- O que acontece se eu esquecer de fechar a tag
Exercícios 13 - Estado e Reatividade (Hooks) 🎣
🟢 Fáceis
- Conceito: Por que uma variável comum (ex:
let x = 0) não serve para atualizar um contador na tela do React? - Sintaxe: O que faz o comando
const [valor, setValor] = useState(0);? Explique cada um dos 3 elementos.
🟡 Médios
- Eventos: Como passamos uma função que deve ser executada apenas quando o usuário clica em um botão? Mostre um exemplo de código.
- Imutabilidade:
Por que não podemos fazer
lista.push(item)e depoissetLista(lista)no React? Qual o jeito correto de adicionar um item a um array no estado? - Inputs:
O que é um "Input Controlado" e como o atributo
valuee o eventoonChangetrabalham juntos?
🔴 Desafio
- Toggle de Visibilidade:
Crie a lógica para um componente que esconde ou mostra um texto secreto.
- Qual tipo de dado você usaria no
useState(Boolean, String ou Number)? - Como ficaria a expressão JSX para mostrar o texto apenas se o estado for verdadeiro?
- Qual tipo de dado você usaria no
Exercícios 14 - Efeitos e Chamadas de API 🌐
🟢 Fáceis
- Conceito: O que é um "Efeito Colateral" (Side Effect) no desenvolvimento Frontend?
- useEffect: O que acontece se passarmos um array de dependências vazio
[]para ouseEffect?
🟡 Médios
- Dependências:
Se eu quiser que o
useEffectrode sempre que a variávelusuarioIDmudar, como deve ficar o array de dependências? - Fetch: Explique a ordem de execução do código abaixo:
- Estados de Rede:
Por que é importante ter um estado de
loading(carregando) em aplicações que buscam dados na internet?
🔴 Desafio
- Ciclo de Efeitos:
Imagine que seu efeito faz um
fetche, dentro do.then(), você chama umsetData(dados).- O que acontece se você NÃO passar o array
[]? Explique o loop infinito que isso gera. - Como você faria para exibir uma mensagem "Nenhum resultado encontrado" caso a API retorne um array vazio?
- O que acontece se você NÃO passar o array
Exercícios 15 - Navegação com React Router 🚦
🟢 Fáceis
- Conceito: Por que usamos o React Router em vez de links
<a>comuns em uma SPA? - Componentes: Para que servem os componentes
<BrowserRouter>e<Routes>?
🟡 Médios
- Navegação:
Qual a diferença entre usar o componente
<Link>e o hookuseNavigate? Em quais situações você usaria cada um? - Rota 404: Como configuramos uma rota que deve ser exibida quando o usuário digita uma URL que não existe no site?
- Parâmetros:
Dada a rota
<Route path="/usuario/:nome" element={<Perfil />} />, como o componentePerfilpode descobrir qual o nome que foi digitado na URL?
🔴 Desafio
- Proteção de Rotas:
Imagine que você tem uma página
/adminque só pode ser acessada se o usuário estiver logado.- Como você usaria o
useNavigatedentro de umuseEffectpara redirecionar o usuário para a página de/logincaso ele não tenha um token salvo nolocalStorage? - O que acontece se o usuário clicar no botão "Voltar" do navegador após ser redirecionado?
- Como você usaria o
Exercícios 16 - Planejamento do Projeto Final 🏆
🟢 Fáceis
- Escolha do Tema: Qual dos temas sugeridos (Tarefa Cloud, E-commerce, Rede Social, Helpdesk) você escolheu para o seu projeto final? Se for um tema autoral, descreva-o em uma frase.
- Tecnologias: Enumere pelo menos 3 tecnologias do Frontend e 3 do Backend que você usará no seu TCC.
🟡 Médios
- Arquitetura: Desenhe um diagrama simples (ou explique em texto) como os dados fluirão da sua API Node.js até a tela do usuário no React.
- Segurança: Como você planeja proteger as informações sensíveis (senhas, segredos JWT) no seu projeto final?
- CORS: Por que você precisará configurar o CORS no seu servidor para que o projeto funcione?
🔴 Desafio
- Plano de Entrega:
Crie um cronograma de 3 passos para a construção do seu projeto:
- Passo 1: O que será feito primeiro no Backend?
- Passo 2: Como será a integração inicial?
- Passo 3: Qual a funcionalidade de "brilho" (extra) que você quer adicionar?
Projetos
Projetos Práticos 🚀
Transforme teoria em prática com desafios progressivos que compõem seu portfólio.
-
Módulo 1: Fundamentos de Backend ---
-
Módulo 2: Manipulação de Dados ---
-
Módulo 3: Segurança e Autenticação ---
-
Módulo 4: Aplicações SPA (React) ---
Projeto 01 - Cinto de Utilidades Backend 🛠️
Objetivo: Validar a instalação das ferramentas e testar a comunicação básica com uma API pública.
O Desafio
- Instale o Postman ou Insomnia.
- Realize uma requisição do tipo
GETpara a API pública do GitHub:https://api.github.com/users/github. - Analise a resposta (JSON). Identifique os campos
login,idepublic_repos. - Instale o Docker Desktop e rode o comando
docker run hello-worldno terminal para garantir que a virtualização está ativa. - Crie uma conta no GitHub (se não tiver) e instale o Git.
O que entregar?
- Print (screenshot) da resposta JSON no Postman/Insomnia.
- Print do terminal com a mensagem de sucesso do Docker "Hello from Docker!".
Projeto 02 - Modelagem de Fluxo de Gateway 🏗️
Objetivo: Entender o roteamento e a agregação de dados em um Gateway.
O Desafio
Imagine que você tem dois serviços:
- Serviço A (User): Retorna { "id": 1, "nome": "Ricardo" }
- Serviço B (Orders): Retorna [ { "id": 101, "valor": 50.0 }, { "id": 102, "valor": 30.0 } ]
- Desenhe um diagrama (pode ser no Mermaid ou papel) onde um API Gateway recebe uma chamada em
/dashboard/1e busca os dados nos dois serviços. - Escreva o JSON final que o Gateway entregaria para o Frontend, unindo as informações do usuário e seus pedidos.
- Pesquisa: Liste 3 ferramentas famosas de API Gateway de mercado (ex: Kong, AWS API Gateway, etc).
O que entregar?
- O diagrama de fluxo.
- O JSON de resposta agregada.
- A lista de ferramentas pesquisadas.
Projeto 03 - Contrato de API de Rede Social ⚡
Objetivo: Aplicar os conceitos de recursos, verbos e JSON na modelagem de uma rede social.
O Desafio
Você deve projetar a API para o recurso "Postagens" (Posts).
- Liste as 5 rotas principais (CRUD) para gerenciar postagens, indicando o Verbo, a URI e o Status Code de sucesso esperado.
- Crie um exemplo de JSON para uma postagem que contenha:
idautor_idconteúdo(texto)data_publicacaotags(lista de strings)
- Simulação de Erro: Qual seria a URI e o Verbo para dar um "Like" em uma postagem? Projete isso.
O que entregar?
- Tabela com as 5 rotas (Verbo, URI, Status).
- Bloco de código com o JSON de exemplo.
- Proposta da rota de "Like".
Projeto 04 - Criando o Primeiro Mock 🧱
Objetivo: Dominar o fluxo de documentação de contrato e simulação de servidor.
O Desafio
Você deve criar um servidor de Mock para uma API de Lista de Tarefas (ToDo).
- Use o Postman (Mock Server) ou o Mockoon para criar 2 rotas:
GET /tarefas: Deve retornar uma lista com pelo menos 3 tarefas.POST /tarefas: Deve aceitar uma nova tarefa e retornar201 Created.
- Documente os campos de uma tarefa (ex:
id,titulo,concluida). - Teste as rotas e garanta que o servidor responda corretamente no formato JSON.
O que entregar?
- Print (screenshot) do Swagger UI ou da tela do Mock Server rodando.
- O JSON de exemplo retornado pelo
GET /tarefas. - Print do teste da rota
POST /tarefascom sucesso.
Projeto 05 - Meu Primeiro Controller ⚙️
Objetivo: Praticar a criação de rotas e a captura de diferentes tipos de parâmetros.
O Desafio
Crie a estrutura de um Controller para um sistema de Gestão de Tarefas (To-Do). Você deve definir (em pseudocódigo ou na linguagem que preferir):
- Uma rota para listar todas as tarefas, permitindo um filtro opcional por
status(ex: concluída ou pendente). - Uma rota para buscar uma única tarefa pelo seu
id. - Uma rota para criar uma tarefa, recebendo
tituloedescricao. - Sinalize qual seria o Status Code de sucesso para cada uma das rotas acima.
O que avaliar?
- Uso correto de Path Params vs Query Params.
- Escolha dos verbos HTTP adequados.
- Padronização das respostas de sucesso.
Projeto 06 - Implementando a Lógica de Negócio 🧠
Objetivo: Aplicar a separação de camadas criando um Service para validação de dados.
O Desafio
Você deve criar o UsuarioService para um sistema de cadastro.
- Função
validarSenha(senha): Deve garantir que a senha tenha no mínimo 8 caracteres e contenha pelo menos um número. - Função
criarUsuario(dados):- Chama a validação de senha.
- Verifica se o e-mail já está sendo usado (simule um erro se estiver).
- Retorna o usuário criado (sem a senha!).
- Simule o Controller chamando esse Service e tratando o erro de "Senha Insegura" com um Status Code 400.
O que observar?
- O Service não deve usar objetos globais como
reqoures. - As mensagens de erro devem ser claras e informativas.
- Uso de DTOs (retornar objeto filtrado).
Projeto 07 - Modelagem de Banco de Dados 🗄️
Objetivo: Praticar a criação de esquemas relacionais e comandos SQL básicos.
O Desafio
Modele o banco de dados para um sistema de Aluguel de Filmes:
- Tabelas: Crie as tabelas
ClienteseFilmes. - Campos:
Clientesdeve terid,nomeeemail.Filmesdeve terid,tituloegenero.
- Relacionamento: Crie uma terceira tabela
Alugueisque ligue um cliente a um filme (incluindo adata_aluguel). - SQL: Escreva uma query que liste o nome do cliente e o título do filme para todos os aluguéis feitos hoje.
O que avaliar?
- Definição correta das Chaves Primárias.
- Uso de Chaves Estrangeiras para conectar as tabelas.
- Clareza na estrutura das colunas.
Projeto 08 - Schema de Validação Profissional ✅
Objetivo: Praticar a criação de regras de validação para garantir a integridade da API.
O Desafio
Crie o esquema de validação (em pseudocódigo ou usando uma biblioteca como Zod/Joi) para um Cadastro de Eventos:
- Campos Obrigatórios:
titulo(mín. 10 char),data(deve ser futura),capacidade_maxima(número positivo). - Campos Opcionais:
descricao(máx. 500 char),link_inscricao(formato de URL). - Sanitização: O título não deve conter espaços em branco sobrando no início ou no fim (trim).
- Simulação: Mostre qual seria a mensagem de erro retornada se o usuário enviasse uma capacidade negativa.
O que avaliar?
- Clareza e rigor das regras de validação.
- Escolha dos tipos de dados corretos.
- Mensagens de erro amigáveis ao desenvolvedor (DX).
Projeto 09 - Sistema de Login (Simulado) 🔐
Objetivo: Implementar a lógica de geração de tokens JWT para autenticação.
O Desafio
Crie uma API de simulação de login:
- Entrada: Receba um JSON com
emailesenha. - Validação: Verifique se a senha tem mais de 6 caracteres.
- JWT: Use uma biblioteca (ou pseudocódigo) para gerar um token que contenha o
iddo usuário e suapermissão(ex: 'aluno'). - Expiração: Configure o token para ser válido por apenas 24 horas.
- Resposta: Retorne para o cliente um objeto contendo o
tokene onomedo usuário.
O que avaliar?
- Tratamento correto de erro caso a senha seja curta.
- Estrutura limpa do Payload do JWT.
- Escolha de uma chave secreta segura (simulada).
Projeto 10 - Gerenciador de Permissões 🛡️
Objetivo: Implementar a lógica de proteção de rotas baseada em perfis de usuário.
O Desafio
Crie a estrutura de autorização para um Sistema de RH:
- Roles: Defina três tipos:
ADMIN,GESTOReFUNCIONARIO. - Regras:
- Todos podem ver o próprio perfil (
GET /me). - Apenas
GESTOReADMINpodem ver a lista de salários (GET /salarios). - Apenas
ADMINpode deletar um registro (DELETE /colaboradores/:id).
- Todos podem ver o próprio perfil (
- Middleware: Desenhe (em desenho técnico ou código) como seria o "fluxo da cancela" (Authentication Middleware -> Authorization Middleware).
O que avaliar?
- Separação clara entre quem é você e o que você pode fazer.
- Uso correto dos Status Codes em caso de bloqueio.
- Lógica de hierarquia (Admin pode tudo).
Projeto 11 - Blindagem de API 🏗️
Objetivo: Implementar camadas avançadas de segurança e renovação de tokens.
O Desafio
Fortaleça sua API de login:
- Helmet: Instale e configure o Helmet para proteger os Headers.
- CORS: Restrinja o acesso à API para que apenas o domínio
http://localhost:3000possa consultá-la. - Refresh Token: Implemente uma rota
/refreshque receba um refresh token, valide-o no banco (ou lista em memória) e gere um novoaccessToken. - Rate Limit: Adicione uma trava para que ninguém possa tentar logar mais de 5 vezes em 1 minuto.
O que avaliar?
- Configuração correta das origens no CORS.
- Lógica de expiração do Refresh Token (ele deve durar muito mais que o Access Token).
- Verificação se o Helmet está realmente escondendo o header
X-Powered-By.
Projeto 12 - Primeiro App React ⚛️
Objetivo: Criar e organizar componentes básicos usando React e Vite.
O Desafio
Crie uma página de Perfil de Usuário:
- Componente
FotoPerfil: Exibe uma imagem circular. - Componente
InfoUsuario: Recebenomeebiovia props e exibe na tela. - Componente
BotaoSeguir: Um botão simples que, por enquanto, apenas exibe um alerta ao ser clicado. - Layout: Organize esses componentes dentro do
App.jsxusando CSS simples para centralizar o conteúdo.
O que avaliar?
- Separação correta dos componentes em arquivos diferentes (ou funções separadas).
- Uso correto de Props para personalizar o nome do usuário.
- Sintaxe JSX correta (tags fechadas, className, etc).
Projeto 13 - Lista Dinâmica de Contatos 📱
Objetivo: Aplicar o uso de useState e gerenciamento de listas.
O Desafio
Crie um mini-gerenciador de contatos:
- Inputs: Dois campos de texto (Nome e Telefone).
- Botão Adicionar: Quando clicado, deve validar se os campos estão preenchidos e adicionar o contato em um Estado de Array.
- Lista: Exiba todos os contatos adicionados abaixo do formulário.
- Botão Limpar: Um botão que limpa toda a lista de contatos.
O que avaliar?
- Uso correto do
useStatepara os inputs e para a lista. - Uso do
.map()para renderizar a lista de contatos. - Limpeza dos campos de input após a adição com sucesso.
Projeto 14 - Buscador de Repositórios 🔍
Objetivo: Consumir uma API real e gerenciar estados de carregamento.
O Desafio
Crie um app que busca repositórios do GitHub de um usuário:
- Input: Campo para digitar o nome do usuário do GitHub.
- Botão Buscar: Ao clicar, deve disparar a busca.
- Loading: Enquanto a API não responde, deve aparecer o texto "Buscando repositórios...".
- Lista: Exiba o nome de todos os repositórios públicos encontrados.
- Erro: Se o usuário não existir, exiba "Erro: Usuário não encontrado".
O que avaliar?
- Uso do
useEffectpara carregar dados (pode ser ao carregar a página ou via clique). - Tratamento correto dos estados:
null,loading,dataeerror. - Renderização limpa usando
.map().
Projeto 15 - Sistema de Multi-Páginas 🚦
Objetivo: Implementar a navegação completa em uma SPA.
O Desafio
Transforme seu app de repositórios ou contatos em um site completo com 3 páginas:
- Home (/): Uma página de boas-vindas com links para as outras seções.
- Dashboard (/app): Onde fica a funcionalidade principal (ex: a busca de repositórios).
- Sobre (/sobre): Uma página contando quem criou o projeto.
- 404: Uma página personalizada para links quebrados.
Requisito Extra (Parâmetro)
Crie uma página de Perfil de Repositório (/repo/:id) que deve ser aberta ao clicar em um item da lista. Essa página só precisa exibir o ID que foi clicado por enquanto.
O que avaliar?
- Configuração correta do
BrowserRouternomain.jsxouApp.jsx. - Uso exclusivo de
<Link>para navegação em menus. - Funcionamento correto dos parâmetros de URL com
useParams.
Projeto 16 - App Final Full-Stack Integrador 🏆
Objetivo: O "TCC (Trabalho de Conclusão de Curso)" do desenvolvedor Full-Stack.
O Tema
Escolha um tema que resolva um problema real integrando o que você construiu no Backend (Módulos 1-3) com o que aprendeu no Frontend (Módulo 4).
Requisitos Mínimos
- Backend (Express): Uso obrigatório de rotas protegidas por JWT e validação de dados.
- Frontend (React): Componentização clara, uso de Hooks (
useState,useEffect) e navegação comReact Router. - Integração: O Frontend deve consumir a sua própria API de forma assíncrona.
- UX/UI: Interface amigável, com tratamento de estados de carregamento e erro.
- Segurança: Configuração correta de CORS e Headers de segurança (Helmet).
Documentação ✨
Seu repositório no GitHub deve ter um README.md impecável, com imagens (prints) da aplicação, explicação das tecnologias usadas e instruções claras de como rodar o servidor e o cliente. Este projeto será o seu maior cartão de visitas!
Boa sorte e bom código! 🚀🚀🚀
Quizzes
Quizzes Interativos 🧠
Teste seus conhecimentos rapidamente ao final de cada módulo.
-
Fase 1 ---
-
Fase 2 ---
-
Fase 3 ---
-
Fase 4 ---
Quiz 01 - Introdução
Quiz 02 - Introdução
`
Quiz 03 - Introdução
`?
` é o título de nível mais alto e define o tema central da página para acessibilidade e SEO.*
Quiz 04 - Introdução
` no HTML?
` é usada para agrupar sentenças em blocos de texto chamados parágrafos.*
`?
` (Break Row) apenas pula para a linha seguinte dentro do mesmo elemento.*
- ` e `
- `?
- ` é para links e `
- ` é para imagens
- ` cria listas com marcadores (bolinhas) e `
- ` cria listas numeradas
- ` é apenas para textos curtos
- `
- `
*Explicação: a tag `
Quiz 05 - Introdução
Quiz 06 - Introdução
| ` e ` | `?
` | ` é para texto e ` | ` é para imagens
` | ` fica no final da tabela e ` | ` no início
` | ` é para dados comuns e ` | ` é para células de cabeçalho (títulos)
Não há nenhuma diferença
*Explicação: `th` (Table Header) destaca os títulos das colunas ou linhas.*
4. É correto usar tabelas para criar o layout (posicionamento de menus, colunas) do site todo?
Sim, é a forma mais moderna de fazer sites
Não, tabelas devem ser usadas apenas para dados tabulares
Sim, mas apenas se o site for simples
Depende do navegador
*Explicação: Usar tabelas para layout prejudica a acessibilidade e a manutenção. Hoje usamos CSS para isso.*
5. Qual tag deve ser usada para agrupar o cabeçalho de uma tabela complexa?
``
`
` |
|---|---|---|---|---|---|---|---|
| ` *Explicação: ` |
Quiz 07 - Introdução
Quiz 08 - Introdução
Quiz 09 - Introdução
Quiz 10 - Introdução
Quiz 11 - Introdução
Quiz 12 - Introdução
Quiz 13 - Introdução
Quiz 14 - Introdução
Quiz 15 - Introdução
Quiz 16 - Introdução
Slides
Slides 📺
Material visual para acompanhamento das vídeo-aulas.
-
Módulo 1 ---
-
Módulo 2 ---
-
Módulo 3 ---
-
Módulo 4 ---
Aula 01 - Introdução à Web 🌐
O Início da Jornada Front-end
👋 Bem-vindos!
Nesta aula, vamos desbravar como a internet realmente funciona.
Preparem-se para entender o que acontece nos bastidores de cada clique!
Agenda de Hoje 📅
- O que é a Internet?
- Modelo Cliente x Servidor
- Navegadores (Browsers)
- Ferramentas do Desenvolvedor
- Estrutura de Projetos
- Primeiros Passos Práticos
1. O que é a Internet? 🌍
- Uma rede global de computadores interconectados.
- Infraestrutura física: cabos submarinos, satélites e roteadores.
- Um sistema para troca de informações.
🏛️ 2. Modelo Cliente x Servidor
A base da Web! 🚀
👤 O Cliente
- É quem solicita a informação.
- Exemplos: Celular, Notebook, Tablet.
- Na prática, o Navegador age como o cliente.
⚙️ O Servidor
- É quem armazena e envia a informação.
- Computadores de alta performance ligados 24h.
- Responde às requisições dos clientes.
💡 Metáfora do Restaurante
- Você: Cliente
- Pedido: Requisição (Request)
- Cozinha: Servidor
- Prato Pronto: Resposta (Response)
📊 Fluxo de Comunicação
sequenceDiagram
participant C as Cliente (Browser)
participant S as Servidor
Note over C: Usuário digita URL
C->>S: Requisição HTTP
S-->>C: Resposta (HTML/CSS)
Note over C: Renderização da página
🧭 3. Navegadores (Browsers)
O que eles fazem? 🤔
- Interpretam o código (HTML, CSS, JS).
- Renderizam os pixels na tela.
- Atuam como nossa principal ferramenta de trabalho.
Os Grandes Navegadores 🏆
- Chrome: Motor V8, o mais popular.
- Firefox: Independente, foco em privacidade.
- Safari: Performance para o ecossistema Apple.
- Edge: Moderno e baseado em Chromium.
🛠️ 4. DevTools (Ferramentas)
Seu melhor amigo! 🤝
- Inspecione qualquer site.
- Altere estilos em tempo real.
- Depure erros de console.
Como abrir? ⌨️
- Windows/Linux:
F12ouCtrl+Shift+I - Mac:
Cmd+Option+I
Aba Elements 🏗️
- Mostra a estrutura do DOM (HTML).
- Permite alterar textos e cores visualmente.
📂 5. Estrutura de Projetos
Como organizar seus arquivos?
Pasta do Projeto 📁
- Um site é um conjunto de arquivos.
- Tudo deve estar dentro de uma pasta raiz.
Nomes de Arquivos 📝
- Use apenas letras minúsculas.
- Sem espaços (use
-ou_). - Sem acentos ou caracteres especiais.
O Arquivo Principal 🏠
- Todo projeto web começa pelo
index.html. - Os servidores procuram por este nome primeiro automaticamente.
🚀 6. Prática Inicial
- Abrir o Chrome.
- Acessar um site popular.
- Abrir o DevTools.
- Tentar destruir o layout (brincadeira, apenas alterar!).
Resumo da Aula ✅
- Internet = Rede de conexões.
- Web = Requisição e Resposta.
- Browser = Tradutor de código.
- DevTools = Raio-X do site.
Próxima Aula 🏗️
Documento HTML Mínimo
Vamos escrever nossa primeira linha de código real!
Dúvidas? 🤔
"A web é a maior biblioteca da história, e agora você está aprendendo a escrever os livros."
Aula 02 - Documento HTML Mínimo 🏗️
O Esqueleto da Web
👋 Olá Novamente!
Hoje vamos aprender a base de tudo o que você vê na internet.
Vamos sair da teoria e começar a escrever código de verdade! 💻
Agenda de Hoje 📅
- O que é HTML?
- Anatomia de uma Tag
- O "Boilerplate" (ESTRUTURA)
- Cabeça vs Corpo
- Metadados
- Nossa Primeira Página
1. O que é HTML? 🤔
- HyperText Markup Language.
- É uma linguagem de Marcação, não de programação.
- Define o significado e a estrutura do conteúdo.
🏗️ Como o HTML funciona?
- Ele usa "Tags" para identificar elementos.
- Exemplo: "Isso aqui é um título", "Isso é um parágrafo".
🦴 2. Anatomia de uma Tag
Estrutura Básica 🧱
-<tag>: Abertura
- Conteúdo: O que aparece na tela
- </tag>: Fechamento (Obrigatório na maioria!)
Atributos 🏷️
Dão informações extras às tags.
-class: Nome do atributo
- "destaque": Valor do atributo
📜 3. A Estrutura Mínima
Todo site começa assim:
O Início 🚀
-<!DOCTYPE html>: Define a versão (HTML5).
- <html>: O elemento pai (raiz).
🧠 4. A Cabeça ()
- Informações para o Navegador / Google.
- Não aparecem na área branca do site.
- Configurações, Título da aba, Estilos.
👤 5. O Corpo ()
- Onde a mágica acontece! ✨
- Tudo o que o usuário vê e interage.
- Títulos, Imagens, Parágrafos, Botões.
🧩 Hierarquia Visual
graph TD
HTML[html] --> HEAD[head - Configurações]
HTML --> BODY[body - Conteúdo Visível]
HEAD --> META[meta]
HEAD --> TITLE[title]
BODY --> H1[h1]
BODY --> P[p]
🔍 5. Metadados Importantes
UTF-8 🔠
- Garante que acentos (á, é, í) funcionem. - Sem isso, teríamos símbolos estranhos!Viewport 📱
- Adapta o site para telas de celulares. - Essencial para a Web moderna.Title 🏷️
- O nome que fica na aba do navegador.💻 6. Mão na Massa!
Atalho Ninja no VS Code 🥷
- Crie um arquivo
.html. - Digite
!e aperteEnter. - O VS Code gera toda a estrutura para você! ⚡
Resumo da Aula ✅
- HTML é Marcação.
- Tags têm abertura e fechamento.
<head>= Configurações.<body>= Conteúdo Real.
Desafio de Hoje 🚀
- Criar sua pasta de projeto.
- Criar o
index.html. - Escrever seu nome em um
<h1>. - Abrir no navegador!
Próxima Aula 🧱
Estrutura e Semântica
Vamos aprender a organizar o site profissionalmente!
Dúvidas? 🤔
"O código é a poesia do desenvolvedor. Comece a escrever seus primeiros versos hoje."
Aula 03 - Estrutura e Semântica 🧱
Organizando a Web com Significado
👋 Olá!
Hoje vamos aprender a diferença entre um site "amador" e um site profissional.
A palavra mágica de hoje é: Semântica. 🧠
Agenda de Hoje 📅
- O que é HTML Semântico?
- Tags de Estrutura
- O Conteúdo (Section vs Article)
- Hierarquia de Títulos (H1-H6)
- Acessibilidade e SEO
- Prática Profissional
1. O que é Semântica? 🧐
- Na linguística: o estudo do significado.
- No HTML: escolher a tag que descreve o que o conteúdo é.
Antes vs Depois 🔄
- Antes: Tudo era
<div>(sem significado). - Hoje: Cada parte tem seu nome correto (
<header>,<main>,<footer>).
🚀 Por que usar Semântica?
- SEO: O Google entende melhor seu site.
- Acessibilidade: Leitores de tela para cegos funcionam melhor.
- Manutenção: Código muito mais fácil de ler.
🏗️ 2. Tags de Estrutura
Header (Cabeçalho) 顶部
- Fica no topo da página ou de seções.
- Contém logos, títulos e navegação.
Nav (Navegação) 🧭
- Bloco que contém os links principais do site.
- Menu superior ou lateral.
Main (Conteúdo Principal) 🏠
- O "recheio" exclusivo da sua página.
- REGRA: Apenas UM
<main>por página!
Footer (Rodapé) 🦶
- Final da página.
- Direitos autorais, contato, redes sociais.
📊 Arquitetura Visual
graph TD
BODY[body] --> H[header]
BODY --> M[main]
BODY --> F[footer]
H --> N[nav]
📰 3. Section vs Article
A grande dúvida!
Section (Seção) 📦
- Um agrupamento temático de conteúdo.
- Geralmente tem um título próprio.
- Ex: "Nossos Preços", "Sobre a Empresa".
Article (Artigo) 📝
- Conteúdo que faz sentido sozinho.
- Pode ser "reutilizado" em outro lugar.
- Ex: Post de blog, notícia, comentário.
🔝 4. Hierarquia de Títulos
H1 ao H6
A Regra de Ouro 👑
- H1: O título mais importante. Use apenas um!
- H2-H6: Subtítulos organizados por importância.
Não use para Estilo! ❌
- Títulos definem a estrutura, não o tamanho da letra.
- Para mudar tamanho e cor, usamos CSS futuramente.
📊 Exemplo de Hierarquia
- H1: Receitas Iniciais
- H2: Sobremesas
- H3: Pudim de Leite
- H3: Mousse de Chocolate
- H2: Pratos Salgados
- H2: Sobremesas
👨💻 5. Código Real
<header>
<h1>Logo</h1>
<nav>Menu</nav>
</header>
<main>
<article>Conteúdo</article>
</main>
<footer>Rodapé</footer>
Resumo da Aula ✅
- Semântica = Significado.
- Tags Estruturais = Header, Main, Footer.
- Conteúdo = Section e Article.
- Títulos = Escada lógica (H1 -> H6).
Próxima Aula 🔗
Textos e Links
Vamos aprender a conectar o mundo com Hyperlinks!
Dúvidas? 🤔
"Um código bem estruturado é como um livro bem escrito: qualquer um consegue entender a história."
Aula 04 - Textos e Links 🔗
Conectando Ideias e Páginas
👋 Olá!
Hoje vamos aprender as tags que dão volume e conexão à Web.
Sem os links, a internet seria apenas um monte de páginas isoladas. 🕸️
Agenda de Hoje 📅
- Parágrafos e Formatação
- Quebras de Linha
- Listas Não Ordenadas (UL)
- Listas Ordenadas (OL)
- A Tag de Âncora (Links)
- Atributos href e target
📝 1. Parágrafos
A Tag
- Define um bloco de texto.
- O navegador adiciona espaço antes e depois.
💡 Curiosidade
O HTML ignora múltiplos espaços em branco no código.
Para forçar uma quebra de linha: use <br>.
📋 2. Listas
Para organizar qualquer coisa!
Listas Não Ordenadas (UL) 🔹
- Mostra marcadores (bolinhas). - UL = Unordered List.Listas Ordenadas (OL) 🔢
- Mostra números (1, 2, 3...). - OL = Ordered List.O Item da Lista (LI) 📑
- LI = List Item.
- Deve estar sempre dentro de uma
<ul>ou<ol>.
📊 Estrutura de Listas
graph TD
UL[ul - Unordered] --> LI1[li - Item 1]
UL --> LI2[li - Item 2]
OL[ol - Ordered] --> LI3[li - Passo 1]
OL --> LI4[li - Passo 2]
🔗 3. Hyperlinks (Links)
O coração da Web!
A Tag ⚓
- A = Anchor (Âncora).
- Permite "pular" de uma página para outra.
Atributo href 📍
- É o destino do link.
Atributo target 🎯
- Define onde o link será aberto.
_blank: Abre em uma nova aba._self: Abre na mesma aba (padrão).
🌏 Links Externos
- Apontam para outro domínio.
- Sempre comece com
https://.
🏠 Links Internos
- Apontam para arquivos dentro do seu projeto.
🕵️♂️ Boas Práticas
- Texto do link deve ser descritivo.
- Ruim: "Clique aqui"
- Bom: "Veja nossa galeria de fotos"
💻 4. Exemplo Completo
<p>Visite meus amigos:</p>
<ul>
<li>
<a href="https://github.com" target="_blank">
GitHub
</a>
</li>
</ul>
Resumo da Aula ✅
<p>para textos.<ul>e<ol>para listas.<a>comhrefpara links.target="_blank"para novas abas.
Próxima Aula 🖼️
Imagens e SVG
Vamos deixar o nosso site visualmente incrível!
Dúvidas? 🤔
"A Web não é sobre páginas, é sobre as conexões entre elas."
Aula 05 - Imagens e SVG 🖼️
Dando Vida e Cor ao seu Site
👋 Olá!
Um site sem imagens é como um livro sem capa.
Hoje vamos aprender a inserir e otimizar conteúdos visuais! 📸
Agenda de Hoje 📅
- A Tag
- Atributos Fundamentais
- Formatos: Raster vs Vetor
- O Poder do SVG
- Caminhos de Arquivos
- Performance e Otimização
📸 1. A Tag ![]()
- Tag auto-contida (não fecha).
- Depende essencialment de atributos.
Atributo src 🔗
- Source (Origem).
- É o caminho onde a imagem está salva.
Atributo alt 🗣️
- Alternative Text.
- Para leitores de tela (acessibilidade).
- Para o Google (SEO).
- Importante: Se a imagem não carregar, o texto aparece.
📂 2. Formatos de Imagem
Raster (Pixels) 🟦
- Feitas de pequenos pontos.
- Perdem qualidade se aumentarem muito.
- Ex: JPG, PNG, WebP.
Vetor (Matemática) 📈
- Feitas de fórmulas geométricas.
- Qualidade infinita!
- Ex: SVG.
Qual escolher? 🤔
- JPG: Fotos complexas.
- PNG: Transparência.
- WebP: Versão moderna e leve de tudo.
- SVG: Logos e ícones.
⚡ 3. O Mundo SVG
O que é? 🎨
- Scalable Vector Graphics.
- É código Puro! 💻
- Pode ser editado com CSS.
Exemplo de Código SVG
📊 Vantagem Visual
graph LR
Raster[Raster - Pixels] -- Aumentar --> Blur[Fica Embaçado]
Vector[Vetor - SVG] -- Aumentar --> Sharp[Continua Nítido]
🛣️ 4. Organização de Arquivos
Onde colocar as imagens?
Pasta de Assets 📁
- Nunca deixe imagens soltas na raiz.
- Crie uma pasta
assetsouimagens.
Caminhos Relativos 📍
- Se a imagem está na pasta
assets:
🚀 5. Performance
- Imagens pesadas matam o site. 💀
- Use ferramentas de compressão.
- Prefira WebP sempre que possível.
Resumo da Aula ✅
<img>precisa desrcealt.alté obrigatório para acessibilidade.- SVG é código e não perde qualidade.
- Organize imagens em pastas.
Próxima Aula 📊
Tabelas
Vamos aprender a organizar dados de forma estruturada!
Dúvidas? 🤔
"Uma imagem vale mais que mil palavras, mas uma imagem otimizada vale mil visitas."
Aula 06 - Tabelas 📊
Organizando Dados de Forma Estruturada
👋 Olá!
Hoje vamos aprender a organizar informações complexas.
Pense em planilhas, notas, horários e preços. Tudo isso vive em Tabelas! 🏗️
Agenda de Hoje 📅
- Quando usar Tabelas?
- Estrutura Básica (table, tr, td)
- Cabeçalhos (th)
- Semântica (thead, tbody, tfoot)
- Legendas (caption)
- Boas Práticas
🚫 1. O que NÃO fazer
- Regra de Ouro: Não use tabelas para criar o layout do site.
- Para posicionar menus e colunas, usamos CSS.
✅ O que fazer
- Use tabelas apenas para dados tabulares.
- Ex: Uma tabela de preços de produtos.
🧱 2. Estrutura Básica
Como construir o esqueleto?
O Recipiente 📦
- Define o início e o fim da tabela.A Linha (TR) 📏
- TR = Table Row.
<tr> cria uma nova linha horizontal.
A Célula (TD) 🧊
- TD = Table Data.
🔝 3. Cabeçalhos (TH)
- TH = Table Header.
📊 Exemplo Visual
graph TD
TABLE[table] --> R1[tr - Linha 1]
R1 --> TH1[th - Título 1]
R1 --> TH2[th - Título 2]
TABLE --> R2[tr - Linha 2]
R2 --> TD1[td - Dado 1]
R2 --> TD2[td - Dado 2]
🧠 4. Semântica Avançada
Divisão profissional da tabela.
thead e tbody 📂
- thead: Envolve o cabeçalho.
- tbody: Envolve o conteúdo principal.
- Ajuda o navegador a entender a divisão dos dados.
tfoot (Rodapé) 🦶
- Usado para totais ou observações ao final da tabela.
🏷️ 5. Caption (Legenda)
- Dá um título à tabela.
- Deve ser a primeira tag dentro do
<table>.
🗺️ Hierarquia Completa
graph TD
T[table] --> C[caption]
T --> TH[thead]
T --> TB[tbody]
T --> TF[tfoot]
🕵️♂️ Resumo da Aula ✅
<table>é o container.<tr>cria linhas.<td>dados,<th>títulos.thead,tbodyetfootdão ordem semântica.
💻 6. Prática de Hoje
Criar uma tabela simples de 3 colunas e 3 linhas com seus tópicos favoritos de estudo.
Próxima Aula 📝
Formulários
Vamos aprender a receber dados do usuário de forma interativa!
Dúvidas? 🤔
"Dados sem estrutura são apenas ruído. Tabelas transformam ruído em informação."
Aula 07 - Formulários 📝
Interatividade e Coleta de Dados
👋 Olá!
Hoje vamos aprender como o usuário "fala" com o nosso site.
Cadastros, logins, buscas e contatos: tudo isso é possível graças aos Formulários! 📥
Agenda de Hoje 📅
- A Tag
- Rótulos (
- Campos de Entrada ()
- Tipos de Input (HTML5)
- Botões de Envio
- Agrupamento (Fieldset)
📥 1. O Recipiente
- Envolve todos os campos do formulário.
- Gerencia o envio dos dados.
Atributos Principais 📍
- action: Destino dos dados.
- method: Como os dados viajam (GET ou POST).
🙋♂️ 2. Rótulos (
- Identificam o que o usuário deve digitar.
- Aumentam a área de clique.
- Acessibilidade: Vital para cegos.
Conexão Label + Input 🔗
- Ofor do label deve ser igual ao id do input.
⌨️ 3. Campos ()
- A peça fundamental do formulário.
- É uma tag auto-contida (não fecha).
O Poder do type="?" 🎛️
- O atributo
typemuda completamente o comportamento. - text: Texto simples.
- password: Oculta caracteres.
🚀 4. Tipos HTML5 Modernos
- email: Valida @ automaticamente.
- date: Abre um calendário nativo.
- color: Abre um seletor de cores.
- number: Abre o teclado numérico no celular.
📊 Fluxo de Interação
graph LR
U[Usuário] --> L[Clica no Label]
L --> I[Foca no Input]
I --> B[Clica no Submit]
B --> F[Processamento]
🖱️ 5. Botões de Ação
- submit: Envia o formulário. - reset: Limpa todos os campos.📦 6. Agrupamento de Campos
Fieldset e Legend 📋
- fieldset: Cria uma moldura visual.
- legend: Dá um título a essa moldura.
🕵️♂️ Boas Práticas
- Use o atributo
requiredpara campos obrigatórios. - Use
placeholderpara dar dicas temporárias. - Sempre conecte Labels e Inputs via ID.
Resumo da Aula ✅
<form>agrupa tudo.<label>dá nome e acessibilidade.<input>recebe os dados.typedefine a função do campo.
💻 7. Prática de Hoje
Criar um formulário de login com campos de "E-mail" e "Senha", e um botão de "Entrar".
Próxima Aula 🏛️
Projeto HTML
Vamos juntar TUDO o que aprendemos e criar uma página real!
Dúvidas? 🤔
"Formulários são o diálogo entre o seu código e o coração (ou os dedos) do usuário."
Aula 08 - Projeto HTML 🏛️
Consolidando o Conhecimento em HTML5
👋 Olá!
Chegou o grande dia do nosso primeiro projeto completo.
Hoje vamos transformar tudo o que aprendemos em um site real e estruturado! 🚀
Agenda de Hoje 📅
- O Que Vamos Construir?
- Planejamento (Sitemap)
- O Esqueleto do Site
- Seções Semânticas
- Checklist de Qualidade
- Mão na Massa!
🏛️ 1. O Projeto
Uma Landing Page 📄
- Uma página de destino focada em um objetivo.
- Vamos criar a estrutura de uma Startup de Tecnologia.
O que será avaliado? ✅
- Semântica (Tags corretas).
- Acessibilidade (alt, labels).
- Organização do código.
- Hierarquia de títulos.
📐 2. Planejamento
O Sitemap 📊
graph TD
H[header] --> N[nav]
M[main] --> S1[section: Hero]
M --> S2[section: Serviços]
M --> S3[section: Contato]
F[footer] --> Info[Info / Social]
🏗️ 3. O Esqueleto (Boilerplate)
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Landing Page Tech</title>
</head>
<body>
<!-- Conteúdo -->
</body>
</html>
🔝 4. O Cabeçalho (Header)
- Logo (h1).
- Menu (nav + ul + li + a).
🏠 5. Conteúdo Principal (Main)
Hero Section ⚡
- O "cartão de visitas" do site.
- Título impactante (h1 ou h2).
- Descrição clara.
Serviços (Table) 📊
- Use uma tabela para mostrar planos ou serviços.
- Colunas: Serviço, Descrição, Valor.
Contato (Form) 📥
- Nome, E-mail e Mensagem.
- Botão de envio (Submit).
🧩 6. Checklist de Acessibilidade
Imagens 🖼️
- Todas têm o atributo
alt? - Descrição clara para quem não vê?
Formulários 📝
- Todo input tem um
<label>correspondente? - O
idestá batendo com ofor?
Títulos 👑
- Existe apenas um
h1? - A ordem
h2 -> h3 -> h4está lógica?
👨💻 7. Dicas de Ouro
- Comente seu código para se organizar.
- Recue o código (indentação) corretamente.
- Use nomes de arquivos em minúsculas.
Resumo do Módulo ✅
- Fundamentos (Browser, Cliente/Servidor).
- Estrutura (Boilerplate).
- Semântica (Tags de significado).
- Elementos (Listas, Links, Imagens, Tabelas, Forms).
🚀 Desafio Final
Implementar o index.html completo seguindo todas as normas semânticas.
Próxima Aula 🎨
Início do Módulo 3: CSS3
Onde vamos dar estilo, cor e forma a esse esqueleto que criamos hoje!
Dúvidas? 🤔
"A estrutura é a alma da Web. O estilo é o seu corpo emocional."
Aula 09 - Introdução ao CSS 🖌️
Dando Cor e Vida à Estrutura
👋 Olá!
Até agora, nossos sites eram apenas "esqueletos" brancos e pretos.
Hoje, vamos aprender a pintar e decorar a Web! 🎨
Agenda de Hoje 📅
- O que é CSS?
- Sintaxe (Regras)
- Onde escrever CSS?
- Seletores de Tag, Classe e ID
- Propriedades Iniciais
- O Conceito de Cascata
🖌️ 1. O que é CSS?
- Cascading Style Sheets.
- É uma linguagem de Estilo.
- HTML = O que o site TEM.
- CSS = Como o site PARECE.
🏗️ Analogia do Carro
- HTML: Chassi, motor, rodas.
- CSS: Cor da pintura, estofado, design dos faróis.
🧱 2. Sintaxe Básica
Como escrevemos CSS?
A Regra CSS 📜
- Seletor: Escolhe o elemento HTML. - Propriedade: O que mudar (cor, tamanho). - Valor: O resultado desejado.📍 3. Onde Colocar o CSS?
Inline Style ❌
- Direto no elemento.
- Difícil de manter. Evite!
Internal Style 📂
- No topo do HTML (
<style>). - Bom para testes rápidos.
External Style ✅
- Arquivo separado
.css. - O padrão da indústria.
🎯 4. Seletores Básicos
Como selecionar quem mudar?
Por Tag 🏷️
- Seleciona todas as tags iguais.
Por Classe ( . ) 👥
- Seleciona elementos com a mesma
class.
Por ID ( # ) 👤
- Seleciona um único elemento específico.
📊 Hierarquia de Seletores
graph TD
TAG[Tag - Geral] --> CLASS[Classe - Grupo]
CLASS --> ID[ID - Único/Específico]
🌊 5. O Conceito de Cascata
- As regras são lidas de cima para baixo.
- Regras mais específicas vencem as gerais.
- O último estilo lido geralmente é o que fica.
🌈 6. Primeiras Cores
- color: Muda a cor do texto.
- background-color: Muda o fundo.
💻 7. Prática Inicial
- Criar
style.css. - Conectar ao HTML.
- Mudar o fundo do site.
- Colorir os parágrafos.
Resumo da Aula ✅
- CSS = Estilo.
- Seletor { Propriedade: Valor }.
- Use arquivos externos.
- Classes para grupos, IDs para um.
Próxima Aula 📦
Box Model
Vamos entender como as caixas se comportam na tela!
Dúvidas? 🤔
"O design não é apenas o que parece e o que se sente. O design é como funciona."
Aula 10 - Box Model 📦
A Ciência das Caixas no CSS
👋 Olá!
Você já se perguntou por que um botão fica maior quando mudamos o espaçamento?
Tudo no CSS é uma caixa, e hoje vamos aprender a medi-las! 📏
Agenda de Hoje 📅
- O Conceito de Caixa
- Content (Conteúdo)
- Padding (Preenchimento)
- Border (Borda)
- Margin (Margem)
- Box Sizing (O Segredo)
📦 1. Tudo é uma Caixa
- Cada tag HTML (
h1,p,div,img) é um retângulo invisível. - O CSS permite controlar cada camada desse retângulo.
🍔 As Camadas da Caixa
Content (Conteúdo) 📝
- É o texto, imagem ou vídeo dentro da tag.
- Definido pelas propriedades
widtheheight.
Padding (Preenchimento) ☁️
- Espaço interno entre o conteúdo e a borda.
- "Respiro" para o texto não encostar nas paredes.
Border (Borda) 🧱
- A linha que envolve o conteúdo e o preenchimento.
- Pode ter cor, estilo e espessura.
Margin (Margem) ⬅️➡️
- Espaço externo entre a caixa atual e as vizinhas.
- Serve para afastar um elemento do outro.
📊 Anatomia Visual
graph TD
M[Margin - Distância Externa] --> B[Border - Moldura]
B --> P[Padding - Respiro Interno]
P --> C[Content - Texto/Imagem]
🧱 2. Propriedades na Prática
Margin e Padding 📏
- Você pode definir cada lado:margin-top, padding-left, etc.
Bordas Estilosas ✨
- 2px: Espessura. - solid: Estilo (contínuo). - black: Cor.⚠️ 3. O Problema do Tamanho
- Por padrão, o navegador SOMA tudo!
- Largo: 300px
-
- Padding: 20px (cada lado)
- = Total: 340px! 😱
🛡️ 4. Box Sizing
A propriedade que salva vidas!
- Faz com que o Padding e a Borda fiquem dentro da largura definida. - 300px será SEMPRE 300px.👨💻 5. Exemplo Completo
.card {
width: 200px;
padding: 20px;
border: 1px solid #ccc;
margin: 10px;
box-sizing: border-box;
}
Resumo da Aula ✅
- Content = O presente.
- Padding = Plástico bolha.
- Border = A caixa de papelão.
- Margin = Distância entre caixas.
- Border-box é essencial!
Próxima Aula 📍
Display e Posicionamento
Vamos aprender a mover essas caixas por toda a tela!
Dúvidas? 🤔
"Dominar o Box Model é 50% do caminho para ser um mestre no CSS."
Aula 11 - Display e Posicionamento 📍
Onde e Como as Coisas Ficam na Tela
👋 Olá!
Até agora, as caixas ficavam uma abaixo da outra.
Hoje vamos aprender a quebrar as regras de gravidade da Web! 🚀
Agenda de Hoje 📅
- Propriedade Display
- Block vs Inline
- Elementos Invisíveis (none)
- Posicionamento Static e Relative
- O Poder do Absolute
- Elementos Fixos (Fixed e Sticky)
🎛️ 1. Propriedade Display
- Define como o elemento interage com seus vizinhos.
Block (Bloco) 🧱
- Ocupa toda a largura disponível.
- Empilha elementos um abaixo do outro.
- Ex:
div,p,h1.
Inline (Em linha) ⛓️
- Ocupa apenas o espaço do conteúdo.
- Não aceita
widthouheight. - Ex:
span,a,strong.
Inline-Block ⚖️
- O melhor dos dois mundos.
- Fica na mesma linha, mas aceita largura e altura!
Display: none 👻
- O elemento desaparece da tela.
- Não ocupa espaço algum no layout.
🧭 2. Posicionamento (Position)
Static (Padrão) 🗼
- É o fluxo natural do HTML.
- Top, Left, Bottom e Right não funcionam aqui.
Relative 📍
- Move o elemento sem tirar ele do "lugar original".
- Funciona como um "desvio".
Absolute 🚀
- O elemento flutua!
- Move-se em relação ao seu pai (que não seja static).
- Sai do fluxo normal da página.
Fixed 📌
- Fica preso na janela do navegador.
- Não se move mesmo que você role a página.
- Útil para botões de chat ou suporte.
Sticky (Grudento) 🍯
- O elemento "gruda" quando atinge o topo.
- Sensacional para menus de navegação!
📊 Resumo do Position
graph LR
Static[Static - Normal]
Relative[Relative - Move]
Absolute[Absolute - Flutua]
Fixed[Fixed - Gruda na Tela]
Sticky[Sticky - Gruda no Topo]
🔢 3. z-index
- Define quem fica "na frente".
- Números maiores = Mais perto de você.
🗺️ 4. Coordenadas
Sempre use: - top / bottom - left / right
Resumo da Aula ✅
- Display define como o elemento se comporta (bloco ou linha).
- Position define se ele sai ou não do fluxo.
- Relative = Move de leve.
- Absolute = Sai do fluxo.
- Fixed/Sticky = Fixação.
Próxima Aula 📐
Flexbox
O fim de todos os seus problemas de alinhamento!
Dúvidas? 🤔
"Posicionar elementos é como jogar xadrez: cada peça tem seu movimento e sua importância no tabuleiro."
Aula 12 - Flexbox 📐
Alinhamento Flexível e Moderno
👋 Olá!
Você já tentou centralizar um elemento e ele simplesmente se recusou?
Hoje, seus problemas de alinhamento acabam com o Flexbox! 🚀
Agenda de Hoje 📅
- O que é Flexbox?
- Flex Container vs Flex Items
- O Eixo Principal (Justify)
- O Eixo Secundário (Align)
- A Direção (Row vs Column)
- Quebra de Linha (Wrap)
📐 1. O que é Flexbox?
- Modelo de layout de uma dimensão.
- Excelente para alinhar itens em linha ou coluna.
- Substitui técnicas antigas e complicadas.
📦 2. A Hierarquia Flex
Flex Container (Pai) 👨
- É quem recebe o comando
display: flex;. - Ele controla como seus filhos se comportam.
Flex Items (Filhos) 🧒
- São os elementos diretos dentro do container.
- Tornam-se automaticamente "flexíveis".
📊 Estrutura Flex
graph TD
P[Flex Container - display: flex] --> I1[Item 1]
P --> I2[Item 2]
P --> I3[Item 3]
↔️ 3. Justify Content
Alinhamento no Eixo Principal.
Opções do Justify 🎛️
- flex-start: No início.
- center: No meio.
- flex-end: No final.
Espaçamento Inteligente 🧠
- space-between: Espaço entre eles.
- space-around: Espaço ao redor.
↕️ 4. Align Items
Alinhamento no Eixo Secundário (Vertical).
Opções do Align 🎛️
- flex-start: No topo.
- center: No meio vertical.
- flex-end: Na base.
- stretch: Estica para ocupar tudo.
📐 5. Centralização Perfeita
O "Santo Graal" do CSS!
🔄 6. Flex Direction
- Muda a direção dos itens.
- row: Linha (padrão).
- column: Coluna (empilhados).
🌯 7. Flex Wrap
- Define se os itens podem pular de linha.
- nowrap: Tudo esmagado em uma linha (padrão).
- wrap: Pula de linha se não houver espaço.
🕵️♂️ Resumo da Aula ✅
display: flexativa o modo flexível.justify-contentpara horizontal (geralmente).align-itemspara vertical (geralmente).flex-directionpara mudar de linha para coluna.
Próxima Aula 🏁
Grid Layout
Para quando você precisar de um layout em duas dimensões (X e Y)!
Dúvidas? 🤔
"Flexbox é como plasticina: você pode esticar, alinhar e moldar o layout como quiser."
Aula 13 - Grid Layout 🏁
O Poder das Grades no CSS
👋 Olá!
Se o Flexbox era sobre linhas, o Grid é sobre o tabuleiro inteiro!
Hoje vamos aprender a dividir a tela em áreas profissionais. 🏗️
Agenda de Hoje 📅
- Flexbox vs Grid
- Criando o Grid Container
- Colunas e Linhas
- A Unidade FR (Fração)
- A Função Repeat
- Espaçamento (Gap)
📐 1. Flexbox vs Grid
- Flexbox: Unidimensional (Linha OU Coluna).
- Grid: Bidimensional (Linha E Coluna ao mesmo tempo).
Quando usar qual? 🤔
- Flexbox: Conteúdo flexível (menus, cards).
- Grid: Estrutura da página (cabeçalho, lateral, centro).
📦 2. Grid Container
- Define que o pai agora é uma grade.🧱 3. Colunas e Linhas
Definindo Colunas 🏛️
- Cria duas colunas com larguras fixas.Definindo Linhas 📏
- A primeira linha tem 100px e a segunda se adapta ao conteúdo.📊 Estrutura da Grade
graph TD
PARENT[Grid Container] --> C1[Coluna 1]
PARENT --> C2[Coluna 2]
Note over C1,C2: grid-template-columns
🍰 4. A Unidade FR
- FR = Fraction (Fração).
- Divide o espaço livre proporcionalmente.
🔄 5. Função Repeat
- Para não ficar repetindo valores.
/* Antigo */
grid-template-columns: 1fr 1fr 1fr;
/* Moderno */
grid-template-columns: repeat(3, 1fr);
🕳️ 6. Gap (O Respiro)
- Espaço entre as células.
- Sem precisar de
marginnos itens!
🎯 7. Posicionando Itens
Diga onde o item deve morar.
🕵️♂️ Resumo da Aula ✅
display: gridinicia a grade.grid-template-columnscria as colunas.fré a unidade de flexibilidade.gapcria o espaçamento interno da grade.
Próxima Aula 📱
Responsividade
Vamos fazer nosso site se adaptar magicamente a qualquer tela!
Dúvidas? 🤔
"Grid Layout é como desenhar em papel quadriculado: você decide exatamente onde cada peça do quebra-cabeça deve estar."
Aula 14 - Responsividade 📱
Um Site Para Todos os Tamanhos
👋 Olá!
Hoje em dia, a maioria das pessoas acessa a web pelo celular.
Seu site está pronto para caber na palma da mão? 📲
Agenda de Hoje 📅
- O que é Responsividade?
- Meta Tag Viewport
- Media Queries
- Breakpoints (Pontos de Quebra)
- Estratégia Mobile-First
📱 1. O que é Responsividade?
- É a capacidade do site se adaptar ao tamanho da tela.
- Layouts flexíveis que mudam conforme o dispositivo.
O Problema do Zoom 🔍
- Sites antigos ficavam minúsculos no celular.
- O usuário tinha que dar "pinça" para ler.
- Hoje, isso é inaceitável!
🖼️ 2. Meta Tag Viewport
O tradutor de telas!
- Diz ao navegador: "Use a largura real do aparelho". - Sem ela, as Media Queries não funcionam bem.📡 3. Media Queries
O "SE" do CSS.
Como funciona? 🤔
"SE a tela for maior que 800px, mude a cor para azul."
📊 Estrutura de Adaptação
graph LR
C[Celular - 1 Coluna] -- min-width: 768px --> T[Tablet - 2 Colunas]
T -- min-width: 1024px --> D[Desktop - 3 Colunas]
🏗️ 4. Mobile-First
O Jeito Moderno! 🚀
Primeiro o Celular 🤳
- Escreva o CSS básico pensando no celular.
- Use Media Queries para adicionar colunas no PC.
- Resultado: Site mais rápido e leve.
📍 5. Breakpoints Comuns
- 576px: Celulares grandes.
- 768px: Tablets (iPad).
- 1024px: Desktops e Laptops.
- 1200px: Telas grandes.
💻 6. Exemplo de Layout Flexível
/* Celular */
.alinhamento {
display: flex;
flex-direction: column;
}
/* Desktop */
@media (min-width: 768px) {
.alinhamento {
flex-direction: row;
}
}
Resumo da Aula ✅
- Responsividade = Adaptação.
- Viewport tag é obrigatória.
- Media Queries filtram o estilo por tamanho.
- Mobile-First: comece pelo pequeno.
Próxima Aula ✨
Animações e Transições
Vamos dar movimento e suavidade ao nosso design!
Dúvidas? 🤔
"Um site não deve ser um objeto estático, mas um ecossistema que se adapta ao ambiente do usuário."
Aula 15 - Animações e Transições ✨
Dando Movimento ao seu Design
👋 Olá!
A Web não precisa ser estática.
Pequenos movimentos podem transformar um site comum em uma experiência incrível! 🎬
Agenda de Hoje 📅
- O que são Transições?
- Manipulando o Tempo
- Transformações (Girar, Escalar)
- O Mundo das Animações
- Keyframes (Quadros-Chave)
- Interatividade Ética
🧚 1. Transições (Transitions)
- Permitem que mudanças ocorram de forma suave.
- Sem o efeito "pisca-pisca" das mudanças instantâneas.
Como aplicar? 🛠️
- all: Todas as propriedades. - 0.3s: Tempo de duração. - ease: Ritmo da animação.📐 2. Transformações (Transforms)
Mude a forma e a posição sem quebrar o layout!
Girar (Rotate) 🔄
Aumentar (Scale) 🔍
Mover (Translate) 📍
🎬 3. Animações Complexas
Para quando a transição não é suficiente.
@keyframes 🖼️
- Definimos os passos da animação.
@keyframes pulsar {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
Aplicando a Animação 🏷️
- pulsar: Nome que criamos. - 2s: Tempo de um ciclo. - infinite: Nunca para!📊 Fluxo de Loop
graph LR
A[Início - 0%] --> B[Meio - 50%]
B --> C[Fim - 100%]
C -- Loop --> A
🤝 4. Interatividade
- Use animações para dar feedback ao usuário.
- Um botão que aumenta levemente confirma o clique.
- Um ícone que gira indica carregamento (loading).
🕵️♂️ Boas Práticas
- Menos é mais! Não sature o site de movimento.
- Use animações curtas (entre 0.1s e 0.5s).
- Respeite quem tem sensibilidade ao movimento.
Resumo da Aula ✅
transitionsuaviza mudanças.transformaltera a geometria.@keyframescria movimentos contínuos.- Interatividade melhora a experiência.
Próxima Aula 🚢
Projeto Final + Deploy
Onde vamos publicar nosso trabalho para o mundo ver!
Dúvidas? 🤔
"Animação é a alma da interface. Use-a para guiar o olhar, não para distrair o usuário."
Aula 16 - Projeto Final + Deploy 🚢
Do Código Local para o Mundo Inteiro
👋 Olá!
Chegamos ao final da nossa jornada!
Hoje você vai parar de ser alguém que "estuda código" e se tornar alguém que "publica sites". 🚀
Agenda de Hoje 📅
- O Grande Projeto Final
- Checklist de Qualidade
- O que é Deploy?
- GitHub Pages Step-by-Step
- Encerramento e Próximos Passos
🏗️ 1. O Projeto Final
O Desafio 🎯
- Construir uma Landing Page Completa.
- Deve ser Responsiva (Mobile e PC).
- Deve usar Flexbox e Grid.
- Deve ter pelo menos uma animação interativa.
Temas Sugeridos 💡
- Seu Portfólio Pessoal.
- Site para uma Petshop ou Pizzaria.
- Página de captura para um App.
✅ 2. Checklist de Qualidade
Antes de publicar, verifique:
- [ ] HTML Semântico (header, main, footer).
- [ ] Meta Viewport presente.
- [ ] Imagens com
alt. - [ ] Form com
labelseids. - [ ] CSS em arquivo externo.
☁️ 3. O que é Deploy?
- É o ato de hospedar seu site em um servidor.
- Torna seu site acessível via um Link (URL).
🚀 4. GitHub Pages
A forma mais rápida, gratuita e profissional de hospedar sites estáticos.
Passo a Passo 🗺️
- Criar novo repositório no GitHub.
- Fazer o Upload dos arquivos (
index.html,style.css,assets/). - Ir em Settings -> Pages.
- Salvar na Branch
main.
📊 Fluxo do Deploy
graph LR
Dev[Desenvolvedor] --> GH[GitHub Repo]
GH --> Build[Build Automático]
Build --> Web[Site no Ar!]
🔗 Seu Link Público
https://usuario.github.io/repositorio
- Compartilhe com o mundo!
🎉 5. Conclusão do Curso
- Módulo 1: Fundamentos da Web.
- Módulo 2: HTML5 Semântico e Completo.
- Módulo 3: CSS3 Moderno, Layout e Animação.
Próximos Passos? 🛣️
- Aprofundar em JavaScript.
- Conhecer Frameworks (React, Vue).
- Estudar Back-end (Node, Python).
💻 Mão na Massa!
Finalize seu código, suba para o GitHub e comemore seu primeiro deploy!
Dúvidas Finais? 🤔
"O código que você escreve e guarda na sua máquina não ajuda ninguém. O código que você publica tem o poder de mudar o mundo."
Configuração
Ambientes de Desenvolvimento 🛠️
Guias para configurar seu computador para o desenvolvimento mobile.
-
Android --- Instalação do Android Studio, SDK e emuladores.
-
iOS (Opcional/Referência) --- Configuração básica de Xcode e ferramentas Mac.
-
Ferramentas de Apoio --- Git, Terminais e Postman/Insomnia para testes de API.
Setup 01: Android Studio 🤖
O Android Studio é a IDE oficial para o desenvolvimento Android.
1. Requisitos de Sistema
- RAM: Mínimo 8GB (Sugerido 16GB+).
- Espaço: Mínimo 10GB para IDE + SDKs.
- Processador: Intel Core i5 ou equivalente.
2. Instalação
- Acesse o site oficial: developer.android.com/studio.
- Baixe a versão mais recente para o seu Sistema Operacional.
- Execute o instalador e escolha a opção "Standard" na configuração inicial.
3. Configurando o SDK
- Após a instalação, vá em Settings > Languages & Frameworks > Android SDK.
- Certifique-se de que a versão mais recente do Android (estável) esteja instalada.
- Na aba SDK Tools, instale o "Android Emulator" e o "Intel x86 Emulator Accelerator (HAXM)" se estiver no Windows com Intel.
4. Criando um Emulador (AVD)
- Abra o Device Manager.
- Clique em Create Device.
- Escolha um dispositivo (ex: Pixel 7).
- Selecione uma imagem de sistema (ex: Level 34 - Android 14).
- Finalize e clique no "Play" para iniciar o celular virtual.
5. Solução de Problemas ⚠️
- VT-x is disabled: Você precisa habilitar a virtualização na BIOS do seu computador.
- Studio muito lento: Adicione a pasta do projeto e as pastas do Android SDK nas exclusões do seu Antivírus.
Setup 02: Xcode (iOS Foundation) 🍎
O Xcode é a ferramenta necessária para compilar e testar apps iOS.
[!IMPORTANT] O Xcode requer um computador Mac (macOS).
1. Instalação
- Abra a App Store no seu Mac.
- Pesquise por Xcode.
- Clique em Obter/Instalar.
- Após o download, abra o Xcode para carregar os componentes adicionais do macOS.
2. Configurando Simuladores
- Vá em Settings > Platforms.
- Verifique se o componente "iOS" está baixado.
- Se não estiver, clique em "GET" para baixar a versão mais estável.
3. Comandos de Linha (CLI)
Para que ferramentas de automação funcionem, você precisa instalar os Command Line Tools:
4. Opcional: CocoaPods
Muitos projetos iOS antigos ainda usam CocoaPods para dependências:
5. Solução de Problemas ⚠️
- Espaço em Disco: O Xcode é muito grande. Garanta pelo menos 40GB de espaço livre para ele e os simuladores.
- Build Lento: Use simuladores de modelos mais simples (ex: iPhone SE) para poupar memória RAM se necessário.
Sobre
Sobre o Curso
🎓 Programação Web I (HTML5 & CSS3)
Este curso foi projetado para capacitar estudantes na criação de páginas web modernas, fundamentadas nas tecnologias essenciais da internet: HTML5 e CSS3.
🎯 Objetivos do Curso
-
Estruturação Semântica --- Aprender a organizar o conteúdo de forma lógica, acessível e otimizada para buscadores utilizando as melhores práticas do HTML5.
-
Design Responsivo --- Dominar as técnicas de layout modernas (Flexbox e Grid) para garantir que sites funcionem perfeitamente em qualquer dispositivo.
-
Estilização Moderna --- Utilizar CSS3 avançado para criar interfaces atraentes, com animações, transições e efeitos visuais contemporâneos.
-
Prática Real --- Desenvolver 16 projetos práticos que compõem um portfólio sólido de desenvolvedor web focado em interface.
📚 O Que Você Vai Aprender
Módulo 1 – Fundamentos da Web
- Funcionamento da internet e cliente-servidor
- Navegadores modernos e DevTools
- Estrutura básica do HTML5 e Metadados
Módulo 2 – HTML5 Completo
- Tags Semânticas e Hierarquia de Títulos
- Mídias (Imagens, SVG, Áudio e Vídeo)
- Tabelas e Formulários com Validação Nativa
Módulo 3 – CSS3 Moderno
- Seletores, Cascata e Box Model
- Layouts Profissionais com Flexbox e Grid
- Design Responsivo (Mobile-first) e Animações
🛠️ Metodologia
Nosso foco é "aprender fazendo". Cada aula propõe um desafio prático imediato, culminando na construção de uma Landing Page completa e funcional publicada no GitHub Pages.
Pronto para criar para a Web? Começar Agora
Roadmap do Projeto: APIs e Microsserviços 🚀
Este documento rastreia a evolução do curso.
✅ Fase 1: Planejamento (Concluído)
- [x] Definição Syllabus (16 Aulas)
- [x] Estrutura Backend-first com integração SPA
- [x] Configuração MkDocs Material
✅ Fase 2: Conteúdo Base (Concluído)
- [x] Criação das 16 Aulas (Markdown)
- [x] Criação dos 16 Quizzes (HTML)
- [x] Criação dos 16 Conjuntos de Exercícios
- [x] Criação dos 16 Slides (RevealJS)
✅ Fase 3: Projetos e UX (Concluído)
- [x] Definição dos 16 Projetos práticos
- [x] Documentação Swagger/OpenAPI integrada
- [x] Diagramação Mermaid de arquitetura de serviços
🚀 Fase 4: Lançamento e Manutenção
- [x] Deploy GitHub Pages (GitHub Actions)
- [ ] Atualização para novas versões de frameworks (Spring/Node/React)
- [ ] Inclusão de exemplos de mensageria (RabbitMQ/Kafka)
Status Atual: Finalizado / Manutenção Última Atualização: 19/02/2026
Materiais Complementares 📚
Bem-vindo à seção de materiais complementares do curso de APIs e Microsserviços. Aqui você encontra recursos adicionais para apoiar seus estudos e aprofundar seu conhecimento técnico.
-
- Acompanhe o conteúdo teórico com slides dinâmicos.
-
- Pratique a implementação de microsserviços e rotas REST.
-
- Valide seu aprendizado com testes rápidos por módulo.
-
- Construa um ecossistema completo para seu portfólio.
-
- Guias de instalação (Docker, IDEs, Postman).
Versão para Impressão
Esta página foi gerada automaticamente para impressão.