px). Funciona, mas em telas menores o layout “quebra”.<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Layout Fixo</title>
<style>
body { font-family: sans-serif; }
.wrap { width: 960px; margin: auto; } /* largura fixa em px → NÃO é responsivo */
.row { display: flex; gap: 16px; }
.card { width: 300px; padding: 16px; background: #f3f4f6; } /* largura fixa → NÃO responsivo */
</style>
</head>
<body>
<div class="wrap">
<h1>Layout Fixo</h1>
<div class="row">
<div class="card">Card 1</div>
<div class="card">Card 2</div>
<div class="card">Card 3</div>
</div>
</div>
</body>
</html>
<style>
.wrap { width: 90%; max-width: 1200px; margin: auto; } /* largura relativa → responsivo */
.row { display: flex; flex-wrap: wrap; gap: 1rem; } /* flex-wrap → permite quebrar em telas pequenas */
.card { flex: 1 1 300px; padding: 1rem; background: #e0f2fe; } /* flex-basis mínimo, mas adaptável */
</style>
width: 90%, max-width, flex-wrap, flex: 1 1 300px.<style>
@media (max-width: 768px) { /* REGRA RESPONSIVA: aplica só no celular */
.row { flex-direction: column; } /* cards ficam em coluna */
}
</style>
@media (max-width: ...).<style>
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); /* auto-ajuste */
gap: 1rem;
}
</style>
<div class="grid">
<div class="card">Card A</div>
<div class="card">Card B</div>
<div class="card">Card C</div>
<div class="card">Card D</div>
</div>
auto-fit e minmax(250px, 1fr) → colunas se adaptam automaticamente.<style>
.card { width: 100%; } /* padrão: mobile → responsivo desde o início */
@media (min-width: 768px) {
.card { width: 48%; display: inline-block; } /* tablet */
}
@media (min-width: 1024px) {
.card { width: 30%; } /* desktop */
}
</style>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<div class="container">
<div class="row">
<!-- Responsividade via classes prontas -->
<div class="col-12 col-md-6 col-lg-4"><div class="p-3 bg-primary text-white">Card 1</div></div>
<div class="col-12 col-md-6 col-lg-4"><div class="p-3 bg-secondary text-white">Card 2</div></div>
<div class="col-12 col-md-6 col-lg-4"><div class="p-3 bg-success text-white">Card 3</div></div>
</div>
</div>
col-12 (mobile), col-md-6 (tablet), col-lg-4 (desktop).<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex01 - Largura Fixa vs Relativa</title>
</head>
<body>
<!-- NÃO RESPONSIVO: largura fixa em px -->
<div style="width:1200px; background:tomato; color:white; padding:10px;">
Erro: largura fixa (gera scroll em telas menores)
</div>
<!-- RESPONSIVO: % + max-width -->
<div style="width:100%; max-width:1200px; background:lightgreen; padding:10px; margin-top:10px;">
Corrigido: largura relativa e adaptável
</div>
<!-- Sugestão de teste:
- Troque max-width:1200px por 900px ou 1400px e veja a diferença.
- Diminua a janela do navegador. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex02 - Fontes px vs rem</title>
<style>
/* RESPONSIVO: usar rem facilita escalonamento global */
html { font-size: 16px; }
.fixa { font-size: 16px; } /* NÃO responsivo (fixo) */
.relativa { font-size: 1.25rem; } /* RESPONSIVO (depende do root) */
</style>
</head>
<body>
<p class="fixa">Texto com fonte fixa (16px).</p>
<p class="relativa">Texto com fonte relativa (1.25rem).</p>
<!-- Testes:
- Mude html{font-size:} para 18px ou 14px e veja como o rem acompanha.
- Aplique @media alterando o font-size do html para telas pequenas. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex03 - Media Query</title>
<style>
.row { display: flex; gap: 12px; }
.card { flex: 1 1 200px; padding: 12px; background:#e0f2fe; }
/* RESPONSIVO: abaixo de 768px, coluna única */
@media (max-width: 768px) {
.row { flex-direction: column; }
}
</style>
</head>
<body>
<div class="row">
<div class="card">Card 1</div>
<div class="card">Card 2</div>
<div class="card">Card 3</div>
</div>
<!-- Testes:
- Altere 768px para 992px e observe o ponto de quebra.
- Remova a media query e veja o efeito. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex04 - Flex Wrap</title>
<style>
.wrap { width: 90%; max-width: 1200px; margin: auto; }
.row { display: flex; flex-wrap: wrap; gap: 1rem; }
/* RESPONSIVO: flex: 1 1 260px → mínimo 260px e quebra quando faltar espaço */
.card { flex: 1 1 260px; background:#fef3c7; padding: 16px; border:1px solid #f59e0b; }
</style>
</head>
<body>
<div class="wrap">
<div class="row">
<div class="card">A</div>
<div class="card">B</div>
<div class="card">C</div>
<div class="card">D</div>
</div>
</div>
<!-- Testes:
- Troque 260px por 320px.
- Troque width:90% por 80% e compare. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex05 - Grid auto-fit</title>
<style>
.grid {
display: grid;
/* RESPONSIVO: cria quantas colunas couberem, com mínimo de 220px */
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 1rem;
}
.item { background:#e9d5ff; padding: 16px; border:1px solid #8b5cf6; }
</style>
</head>
<body>
<div class="grid">
<div class="item">Item 1</div><div class="item">Item 2</div>
<div class="item">Item 3</div><div class="item">Item 4</div>
<div class="item">Item 5</div><div class="item">Item 6</div>
</div>
<!-- Testes:
- Mude 220px para 300px e veja como o número de colunas muda.
- Adicione mais itens e redimensione a janela. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex06 - Mobile First</title>
<style>
.card { width: 100%; background:#dcfce7; margin-bottom: 12px; padding: 12px; }
/* RESPONSIVO: amplia a largura conforme a tela cresce */
@media (min-width: 768px) { .card { width: 48%; display:inline-block; } }
@media (min-width: 1024px) { .card { width: 30%; } }
</style>
</head>
<body>
<div class="card">Card A</div>
<div class="card">Card B</div>
<div class="card">Card C</div>
<!-- Testes:
- Troque 48% por 45% (tablet) e 30% por 32% (desktop).
- Remova a primeira media query para observar o impacto. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex07 - Imagem Responsiva</title>
<style>
img { width: 100%; height: auto; display: block; }
/* RESPONSIVO: em telas médias, limita a 60% */
@media (min-width: 768px) { img { width: 60%; } }
</style>
</head>
<body>
<img src="https://via.placeholder.com/1200x600" alt="Exemplo de imagem responsiva">
<!-- Testes:
- Troque 60% por 40% ou 80%.
- Substitua a imagem por outra (maior/menor) e compare. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex08 - Tipografia Fluida</title>
<style>
/* RESPONSIVO: título escala com a largura da viewport */
h1 { font-size: 8vw; margin: 16px 0; }
p { font-size: 1rem; }
</style>
</head>
<body>
<h1>Título Responsivo</h1>
<p>Redimensione a janela e observe o título.</p>
<!-- Testes:
- Troque 8vw por 12vw ou 5vw.
- Combine com media queries para limitar o crescimento em telas muito grandes. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex09 - Navbar Responsiva</title>
<style>
.nav { width:90%; max-width:1200px; margin:auto; }
.nav ul { list-style:none; padding:0; margin:0; display:flex; flex-wrap:wrap; gap:8px; }
.nav a { display:block; padding:10px 14px; background:#bae6fd; text-decoration:none; }
/* RESPONSIVO: mobile-first (itens empilham naturalmente por wrap) */
@media (min-width: 768px) {
.nav ul { flex-wrap:nowrap; }
}
</style>
</head>
<body>
<nav class="nav">
<ul>
<li><a href="#">Início</a></li>
<li><a href="#">Cursos</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Contato</a></li>
</ul>
</nav>
<!-- Testes:
- Remova flex-wrap e veja itens “estourarem”.
- Aumente o padding dos links e teste o wrap. -->
</body>
</html>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ex10 - Bootstrap Grid Responsivo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-3">
<div class="row g-3">
<!-- RESPONSIVO: 1 col no mobile, 2 no md, 3 no lg -->
<div class="col-12 col-md-6 col-lg-4"><div class="p-3 bg-primary text-white">Card 1</div></div>
<div class="col-12 col-md-6 col-lg-4"><div class="p-3 bg-secondary text-white">Card 2</div></div>
<div class="col-12 col-md-6 col-lg-4"><div class="p-3 bg-success text-white">Card 3</div></div>
</div>
</div>
<!-- Testes:
- Troque col-lg-4 por col-lg-3 (e adicione mais cards).
- Use col-sm-6 para ajustar o breakpoint de 576px. -->
</body>
</html>

@media (max-width: 768px) {
.container {
width: 100%;
}
}.container {
width: 90%;
max-width: 1200px;
margin: 0 auto;
font-size: 1rem;
}.container {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}/* Estilo base (mobile) */
.container {
width: 100%;
}
/* Tablets */
@media (min-width: 768px) {
.container {
width: 750px;
}
}
/* Desktops */
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>npm install bootstrapimport 'bootstrap/dist/css/bootstrap.min.css';<div class="container">
<div class="row">
<div class="col-sm-6 col-md-4">
Coluna 1 - Ocupa 6/12 em telas pequenas e 4/12 em médias
</div>
<div class="col-sm-6 col-md-4">
Coluna 2 - Ocupa 6/12 em telas pequenas e 4/12 em médias
</div>
<div class="col-sm-12 col-md-4">
Coluna 3 - Ocupa 12/12 (toda largura) em telas pequenas e 4/12 em médias
</div>
</div>
</div>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grid Bootstrap</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
.demo-col {
background-color: #f8f9fa;
border: 1px solid #dee2e6;
padding: 1rem;
margin-bottom: 1rem;
}
</style>
</head>
<body>
<div class="container my-5">
<h1 class="mb-4">Meu Primeiro Grid Bootstrap</h1>
<div class="row">
<div class="col-12 col-md-6 demo-col">
Coluna 1 - Em telas pequenas ocupa 12 colunas, em médias ocupa 6
</div>
<div class="col-12 col-md-6 demo-col">
Coluna 2 - Em telas pequenas ocupa 12 colunas, em médias ocupa 6
</div>
</div>
</div>
</body>
</html>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="#">Meu Site</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarNav" aria-controls="navbarNav"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link active" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Sobre</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Serviços</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contato</a>
</li>
</ul>
</div>
</div>
</nav><div class="container my-5">
<h2 class="mb-4">Formulário de Contato</h2>
<form>
<div class="mb-3">
<label for="nome" class="form-label">Nome</label>
<input type="text" class="form-control" id="nome" placeholder="Digite seu nome">
</div>
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email" placeholder="seu@email.com">
</div>
<div class="mb-3">
<label for="mensagem" class="form-label">Mensagem</label>
<textarea class="form-control" id="mensagem" rows="3" placeholder="Digite sua mensagem"></textarea>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
</div>
<div class="container my-5">
<h2 class="mb-4 text-center">Nossos Serviços</h2>
<div class="row">
<div class="col-12 col-md-6 col-lg-3 mb-4">
<div class="p-3 bg-light rounded">
<h3>Web Design</h3>
<p>Criamos sites modernos e responsivos que se adaptam a qualquer dispositivo.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3 mb-4">
<div class="p-3 bg-light rounded">
<h3>E-commerce</h3>
<p>Desenvolva sua loja virtual com as melhores práticas do mercado.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3 mb-4">
<div class="p-3 bg-light rounded">
<h3>SEO</h3>
<p>Otimização para mecanismos de busca e posicionamento no Google.</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3 mb-4">
<div class="p-3 bg-light rounded">
<h3>Marketing Digital</h3>
<p>Estratégias para aumentar sua presença online e atrair mais clientes.</p>
</div>
</div>
</div>
</div>
<div class="container my-5">
<h2 class="mb-4 text-center">Nossos Cursos</h2>
<div class="row">
<div class="col-md-4 mb-4">
<div class="card">
<img src="https://placehold.co/600x400" class="card-img-top" alt="HTML e CSS">
<div class="card-body">
<h5 class="card-title">HTML e CSS</h5>
<p class="card-text">Aprenda a criar sites responsivos com HTML5 e CSS3 do zero ao avançado.</p>
<a href="#" class="btn btn-primary">Ver detalhes</a>
</div>
</div>
</div>
<div class="col-md-4 mb-4">
<div class="card">
<img src="https://placehold.co/600x400" class="card-img-top" alt="JavaScript">
<div class="card-body">
<h5 class="card-title">JavaScript</h5>
<p class="card-text">Domine a linguagem de programação mais popular da web.</p>
<a href="#" class="btn btn-primary">Ver detalhes</a>
</div>
</div>
</div>
<div class="col-md-4 mb-4">
<div class="card">
<img src="https://placehold.co/600x400" class="card-img-top" alt="Bootstrap">
<div class="card-body">
<h5 class="card-title">Bootstrap 5</h5>
<p class="card-text">Crie interfaces responsivas rapidamente com o framework Bootstrap.</p>
<a href="#" class="btn btn-primary">Ver detalhes</a>
</div>
</div>
</div>
</div>
</div><div class="container my-5">
<!-- Centralização horizontal de texto -->
<h2 class="text-center mb-4">Texto centralizado</h2>
<!-- Centralização com Flexbox -->
<div class="d-flex justify-content-center mb-4">
<div class="bg-light p-3">Este elemento está centralizado horizontalmente</div>
</div>
<!-- Centralização vertical e horizontal -->
<div class="d-flex justify-content-center align-items-center bg-light" style="height: 200px;">
<div class="bg-primary text-white p-3">Este elemento está centralizado vertical e horizontalmente</div>
</div>
<!-- Alinhamento à direita -->
<div class="d-flex justify-content-end mt-4">
<div class="bg-light p-3">Este elemento está alinhado à direita</div>
</div>
</div>
<!-- HTML -->
<button class="meu-botao">Clique Aqui</button>
/* CSS */
.meu-botao {
display: inline-block;
padding: 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #fff;
background-color: #0d6efd;
border: 1px solid #0d6efd;
border-radius: 0.25rem;
text-align: center;
text-decoration: none;
cursor: pointer;
transition: background-color 0.15s ease-in-out;
}
.meu-botao:hover {
background-color: #0b5ed7;
border-color: #0a58ca;
}<!-- HTML com Bootstrap -->
<button class="btn btn-primary">Clique Aqui</button>
/* Nenhum CSS adicional necessário! */