Tutoriais gratuitos e completos para desenvolvimento web
Aprenda desenvolvimento web do zero com tutoriais práticos e completos. Cada tutorial inclui código fonte, explicações detalhadas e exercícios práticos.
Estrutura e estilo para suas páginas web
Interatividade e lógica de programação
Aplicações reais do início ao fim
Aprenda a criar a estrutura fundamental de qualquer página web
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Minha Primeira Página</title>
</head>
<body>
<header>
<h1>Bem-vindo ao meu site!</h1>
</header>
<nav>
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#sobre">Sobre</a></li>
</ul>
</nav>
<main>
<section id="home">
<h2>Seção Principal</h2>
<p>Este é o conteúdo principal da página.</p>
</section>
</main>
<footer>
<p>© 2025 Meu Site</p>
</footer>
</body>
</html>
Declara que este é um documento HTML5 para o navegador
Contém metadados, título e links para CSS/JS externos
Todo o conteúdo visível da página fica aqui
Header, nav, main, footer - ajudam SEO e acessibilidade
Transforme suas páginas HTML em designs incríveis
/* CSS Externo - styles.css */
:root {
--primary-color: #10b981;
--secondary-color: #34d399;
--text-color: #ffffff;
--bg-color: #1f2937;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
.header {
background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
padding: 2rem 0;
text-align: center;
}
.btn {
background-color: var(--primary-color);
color: white;
padding: 12px 24px;
border: none;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
}
.btn:hover {
background-color: var(--secondary-color);
transform: translateY(-2px);
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin: 2rem 0;
}
.card {
background: rgba(255, 255, 255, 0.1);
padding: 1.5rem;
border-radius: 12px;
backdrop-filter: blur(10px);
}
@media (max-width: 768px) {
.grid {
grid-template-columns: 1fr;
}
}
Defina cores e valores reutilizáveis com :root
Border-box inclui padding e border na largura total
Sistemas modernos de layout responsivo
Adapte o design para diferentes tamanhos de tela
Adicione vida às suas páginas com programação
// script.js
// Variáveis e tipos de dados
let nome = "João";
const idade = 25;
let ativo = true;
let hobbies = ["programar", "ler", "jogar"];
// Função para atualizar contador
function updateCounter() {
let count = localStorage.getItem('visitorCount') || 0;
count = parseInt(count) + 1;
localStorage.setItem('visitorCount', count);
const counterElement = document.getElementById('counter');
if (counterElement) {
counterElement.textContent = count;
}
}
// Manipulação do DOM
function createCard(title, content) {
const card = document.createElement('div');
card.className = 'card';
card.innerHTML = `
<h3>${title}</h3>
<p>${content}</p>
`;
return card;
}
// Event listeners
document.addEventListener('DOMContentLoaded', function() {
updateCounter();
// Botão de toggle tema
const themeBtn = document.getElementById('theme-toggle');
if (themeBtn) {
themeBtn.addEventListener('click', function() {
document.body.classList.toggle('dark-theme');
});
}
// Form validation
const form = document.getElementById('contact-form');
if (form) {
form.addEventListener('submit', function(e) {
e.preventDefault();
const email = document.getElementById('email').value;
const message = document.getElementById('message').value;
if (!email.includes('@')) {
alert('Email inválido!');
return;
}
if (message.length < 10) {
alert('Mensagem muito curta!');
return;
}
alert('Mensagem enviada com sucesso!');
form.reset();
});
}
});
// Async function example
async function fetchUserData(userId) {
try {
const response = await fetch(`https://api.example.com/users/${userId}`);
const userData = await response.json();
return userData;
} catch (error) {
console.error('Erro ao buscar dados:', error);
return null;
}
}
JavaScript pode alterar HTML e CSS dinamicamente
Reagem a ações do usuário (clicks, submissões, etc)
Armazena dados no navegador do usuário
Lida com operações assíncronas como APIs
Automatize tarefas e crie scripts poderosos
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import shutil
from pathlib import Path
import requests
from datetime import datetime
def organize_files(directory):
"""
Organiza arquivos por tipo em pastas
"""
# Cria pastas se não existirem
folders = {
'Imagens': ['.jpg', '.jpeg', '.png', '.gif', '.bmp'],
'Documentos': ['.pdf', '.doc', '.docx', '.txt', '.xlsx'],
'Videos': ['.mp4', '.avi', '.mkv', '.mov'],
'Musica': ['.mp3', '.wav', '.flac'],
'Outros': []
}
for folder in folders:
Path(directory / folder).mkdir(exist_ok=True)
# Organiza arquivos
for file in directory.iterdir():
if file.is_file():
moved = False
for folder, extensions in folders.items():
if file.suffix.lower() in extensions:
shutil.move(str(file), str(directory / folder / file.name))
moved = True
break
if not moved and folder != 'Outros':
shutil.move(str(file), str(directory / 'Outros' / file.name))
print(f"✅ Arquivos organizados em {directory}")
def download_file(url, filename):
"""
Baixa arquivo da internet
"""
try:
response = requests.get(url, stream=True)
response.raise_for_status()
with open(filename, 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
print(f"✅ Arquivo baixado: {filename}")
return True
except Exception as e:
print(f"❌ Erro ao baixar: {e}")
return False
def create_backup(source, destination):
"""
Cria backup de pasta
"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
backup_name = f"backup_{timestamp}"
backup_path = Path(destination) / backup_name
backup_path.mkdir(parents=True, exist_ok=True)
try:
for item in Path(source).iterdir():
if item.is_file():
shutil.copy2(str(item), str(backup_path))
elif item.is_dir():
shutil.copytree(str(item), str(backup_path / item.name))
print(f"✅ Backup criado: {backup_path}")
return str(backup_path)
except Exception as e:
print(f"❌ Erro no backup: {e}")
return None
# Exemplo de uso
if __name__ == "__main__":
# Organizar downloads
downloads = Path.home() / "Downloads"
organize_files(downloads)
# Fazer backup de documentos
docs = Path.home() / "Documents"
backup_dir = Path.home() / "Backups"
create_backup(str(docs), str(backup_dir))
print("🎉 Automação concluída!")
Manipulação moderna de caminhos de arquivo
Operações de arquivo de alto nível (copiar, mover)
Biblioteca para fazer requisições HTTP
Scripts bem estruturados com funções reutilizáveis
Baixe os projetos completos e pratique com exercícios reais