Material de apoio

Guia de HTML e CSS

As principais tags e propriedades, explicadas uma a uma, com o código e o resultado lado a lado.

Parte 1 · HTML

HTML (HyperText Markup Language) é a linguagem que dá estrutura e significado ao conteúdo de uma página. Ele é formado por tags: palavras entre < e >. A maioria das tags tem abertura e fechamento (<p>...</p>); algumas são vazias e não fecham (<br>, <img>). Tags podem ter atributos, que dão informações extras: <a href="...">.

1. Estrutura do documento

Todo arquivo HTML começa com o mesmo esqueleto. É exatamente o que está no topo deste arquivo.

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="robots" content="noindex, nofollow">
    <title>Título da aba</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    Tudo o que aparece na tela fica aqui.
</body>
</html>
<!DOCTYPE html>
Avisa ao navegador que o documento usa HTML5. Sempre a primeira linha.
<html lang="pt-BR">
Elemento raiz: envolve todo o documento. O atributo lang informa o idioma (ajuda leitores de tela e tradutores).
<head>
Cabeça do documento: informações sobre a página que não aparecem no conteúdo (título, CSS, metadados).
<meta charset="UTF-8">
Define a codificação de caracteres. Sem ele, acentos como "ç" e "ã" podem virar símbolos estranhos.
<meta name="viewport">
Faz a página se ajustar à largura da tela no celular. Essencial para sites responsivos.
<meta name="robots" content="noindex, nofollow">
Pede aos buscadores que não indexem a página (noindex) nem sigam seus links (nofollow). Usamos aqui porque este é um material de aula.
<title>
Texto que aparece na aba do navegador e nos favoritos.
<link rel="stylesheet">
Conecta um arquivo CSS externo à página. O href é o caminho do arquivo.
<body>
Corpo do documento: todo o conteúdo visível (textos, imagens, botões...).
<!-- comentário -->
Comentário: o navegador ignora. Serve para deixar anotações no código.

2. Textos

<h1> a <h6>: títulos

Seis níveis de título, do mais importante (h1) ao menos importante (h6). Use só um h1 por página e não pule níveis só por causa do tamanho: o tamanho se ajusta no CSS.

<h1>Título principal</h1>
<h2>Subtítulo</h2>
<h3>Seção menor</h3>
Resultado

Título principal

Subtítulo

Seção menor

<p>: parágrafo

Bloco de texto. O navegador coloca um espaço antes e depois de cada parágrafo.

<p>Este é um parágrafo.</p>
<p>Este é outro parágrafo.</p>
Resultado

Este é um parágrafo.

Este é outro parágrafo.

<strong>, <em>, <mark>, <small>

strong indica importância (negrito), em indica ênfase (itálico), mark destaca e small é para observações menores.

<p>Isto é <strong>importante</strong>, isto tem <em>ênfase</em>,
isto está <mark>destacado</mark> e <small>isto é nota</small>.</p>
Resultado

Isto é importante, isto tem ênfase, isto está destacado e isto é nota.

<br> e <hr>: quebra de linha e divisória

Duas tags vazias (sem fechamento). br pula uma linha dentro do mesmo texto; hr desenha uma linha separando assuntos.

<p>Rua das Flores, 123<br>São Paulo - SP</p>
<hr>
<p>Outro assunto.</p>
Resultado

Rua das Flores, 123
São Paulo - SP


Outro assunto.

<blockquote>: citação

Usado para citações longas, normalmente com recuo.

<blockquote>
    A simplicidade é o último grau de sofisticação.
</blockquote>
Resultado
A simplicidade é o último grau de sofisticação.

<code> e <pre>: código

code marca um trecho de código dentro do texto. pre mantém espaços e quebras de linha exatamente como foram digitados. Para mostrar < e > na tela, escrevemos &lt; e &gt;.

<p>Use a tag <code>&lt;p&gt;</code> para parágrafos.</p>
Resultado

Use a tag <p> para parágrafos.

<span> e <div>: contêineres genéricos

Não têm significado próprio; servem para agrupar e estilizar. span é inline (fica dentro da linha), div é bloco (ocupa a linha inteira).

<p>Texto com uma <span class="azul">palavra azul</span>.</p>
<div class="caixa">Eu sou uma div.</div>
Resultado

Texto com uma palavra azul.

Eu sou uma div.

4. Listas

<ul>, <ol> e <li>

ul é lista sem ordem (marcadores), ol é lista numerada. Cada item fica em um li. Menus de navegação costumam ser feitos com ul.

<ul>
    <li>Arroz</li>
    <li>Feijão</li>
</ul>

<ol>
    <li>Abrir o editor</li>
    <li>Criar o arquivo</li>
</ol>
Resultado
  • Arroz
  • Feijão
  1. Abrir o editor
  2. Criar o arquivo

5. Tabelas

<table>, <tr>, <th>, <td>

Para dados em linhas e colunas (não use tabela para montar layout). tr é uma linha, th é célula de cabeçalho e td é célula comum. thead e tbody separam cabeçalho e corpo.

<table>
    <thead>
        <tr><th>Tag</th><th>Função</th></tr>
    </thead>
    <tbody>
        <tr><td>p</td><td>Parágrafo</td></tr>
        <tr><td>a</td><td>Link</td></tr>
    </tbody>
</table>
Resultado
TagFunção
pParágrafo
aLink

6. Formulários

<form>, <label>, <input>, <textarea>, <select>, <button>

form agrupa os campos. label é o rótulo: o for dele deve ser igual ao id do campo (clicar no rótulo foca o campo). input muda conforme o type: text, email, password, number, date, checkbox, radio... textarea é texto longo, select é lista de opções e button é o botão.

<form>
    <label for="nome">Nome</label>
    <input type="text" id="nome" placeholder="Seu nome" required>

    <label for="email">E-mail</label>
    <input type="email" id="email">

    <label for="curso">Curso</label>
    <select id="curso">
        <option>HTML</option>
        <option>CSS</option>
        <option>JavaScript</option>
    </select>

    <label for="msg">Mensagem</label>
    <textarea id="msg" rows="3"></textarea>

    <label><input type="checkbox"> Aceito os termos</label>

    <button type="submit">Enviar</button>
</form>
Resultado

7. Tags semânticas (estrutura da página)

Tags semânticas funcionam como uma div, mas dizem o que é aquele bloco. Isso ajuda acessibilidade, SEO e a leitura do código. Esta própria página usa várias delas.

<header>  Cabeçalho: logo, título  </header>
<nav>     Menu de navegação        </nav>
<main>
    <section>  Seção temática
        <article> Conteúdo independente (post, card) </article>
    </section>
    <aside>  Conteúdo lateral, complementar </aside>
</main>
<footer>  Rodapé: contato, direitos </footer>
<header>
Cabeçalho da página ou de uma seção.
<nav>
Conjunto principal de links de navegação.
<main>
Conteúdo principal. Apenas um por página.
<section>
Agrupa conteúdo de um mesmo tema, geralmente com um título.
<article>
Conteúdo que faz sentido sozinho: um post, uma notícia, um card de produto.
<aside>
Conteúdo relacionado, mas secundário (barra lateral, "veja também").
<footer>
Rodapé da página ou de uma seção.

Parte 2 · CSS

CSS (Cascading Style Sheets) cuida da aparência: cores, fontes, espaçamentos e posição dos elementos. O HTML diz o que é cada coisa; o CSS diz como ela aparece. Todo o visual desta página está em css/style.css.

8. Sintaxe e formas de usar

Anatomia de uma regra

Uma regra tem um seletor (quem vai receber o estilo) e um bloco entre chaves com pares propriedade: valor;.

p {
    color: navy;          /* cor do texto */
    font-size: 18px;     /* tamanho da fonte */
}

■ seletor   ■ propriedade   ■ valor   ■ comentário

Três formas de aplicar CSS

<!-- 1. Externo (recomendado): arquivo separado, ligado no <head> -->
<link rel="stylesheet" href="css/style.css">

<!-- 2. Interno: dentro de <style> no <head> -->
<style>
    p { color: navy; }
</style>

<!-- 3. Inline: direto no atributo style (evite) -->
<p style="color: navy;">Texto</p>

Prefira o externo: um único arquivo estiliza todas as páginas do site e mantém o HTML limpo.

9. Seletores

SeletorExemploSeleciona
Tagp { }Todos os parágrafos
Classe.destaque { }Elementos com class="destaque" (pode repetir na página)
ID#topo { }O elemento com id="topo" (único na página)
Descendentenav a { }Links que estão dentro de um nav
Agrupamentoh1, h2 { }h1 e h2 com o mesmo estilo
Pseudo-classea:hover { }O link quando o mouse está em cima
Universal* { }Todos os elementos

Exemplo: classe + :hover

.botao {
    background-color: #3451b2;
    color: white;
}
.botao:hover {
    background-color: #263c86;   /* escurece ao passar o mouse */
}
Resultado (passe o mouse)

Cascata e especificidade: quando duas regras disputam o mesmo elemento, vence a mais específica (ID > classe > tag). Se empatar, vence a que vem por último no arquivo.

10. Box model (modelo de caixa)

Todo elemento é uma caixa formada por quatro camadas, de dentro para fora:

.caixa {
    width: 300px;              /* largura do conteúdo */
    padding: 20px;             /* espaço INTERNO, entre conteúdo e borda */
    border: 2px solid #333;    /* borda: espessura, estilo, cor */
    margin: 16px;              /* espaço EXTERNO, entre esta caixa e as vizinhas */
    border-radius: 8px;        /* arredonda os cantos */
    box-sizing: border-box;    /* width passa a incluir padding e borda */
}

Atalhos de margin/padding: 10px (todos os lados) · 10px 20px (cima/baixo, esquerda/direita) · 10px 20px 30px 40px (cima, direita, baixo, esquerda, no sentido horário).

11. Cores, unidades e texto

Formas de escrever cores

tomatonome
#3451b2hexadecimal
rgb(46, 160, 67)RGB
rgba(0,0,0,.5)com transparência

Aqui usamos style="" inline só para mostrar cada cor; no dia a dia, prefira classes.

Unidades de medida

px
Pixels: tamanho fixo.
%
Porcentagem do elemento pai.
rem
Relativo ao tamanho da fonte da raiz (normalmente 16px). 2rem = 32px. Ótimo para fontes e espaçamentos.
em
Relativo ao tamanho da fonte do próprio elemento.
vw / vh
1% da largura / altura da janela.

Propriedades de texto

.texto {
    font-family: Arial, sans-serif;  /* fonte (com alternativas) */
    font-size: 1.25rem;              /* tamanho */
    font-weight: bold;               /* espessura: normal, bold, 100 a 900 */
    color: #3451b2;                  /* cor */
    text-align: center;              /* left, center, right, justify */
    line-height: 1.6;                /* altura da linha */
    text-transform: uppercase;       /* MAIÚSCULAS */
    text-decoration: underline;      /* sublinhado (none remove) */
}
Resultado

Texto estilizado

12. Layout: display, flexbox e grid

display

Define como o elemento se comporta no fluxo da página.

block
Ocupa a linha inteira (ex.: div, p, h1).
inline
Fica na mesma linha do texto; não aceita largura/altura (ex.: span, a).
inline-block
Fica na linha, mas aceita largura, altura e padding.
none
Esconde o elemento.
flex / grid
Transformam o elemento em um contêiner de layout (abaixo).

Flexbox: alinhando em uma direção

Organiza os filhos em linha ou coluna. É a ferramenta mais usada para alinhar menus, cards e botões.

.flex {
    display: flex;
    flex-direction: row;             /* row (linha) ou column (coluna) */
    justify-content: space-between;  /* alinhamento no eixo principal */
    align-items: center;             /* alinhamento no eixo cruzado */
    gap: 12px;                       /* espaço entre os itens */
}
Resultado
1
2
3

Grid: linhas e colunas ao mesmo tempo

Cria uma grade. fr é uma fração do espaço livre: 1fr 1fr 1fr = três colunas iguais.

.grid {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;   /* 3 colunas iguais */
    gap: 12px;
}
.grid .largo {
    grid-column: span 2;                  /* ocupa 2 colunas */
}
Resultado
1 (span 2)
2
3
4
5

13. Responsividade e variáveis

Media queries

Aplicam estilos só quando a tela atende a uma condição. Assim o mesmo site se adapta a celular, tablet e computador. Diminua a janela e veja o menu e as grades desta página se reorganizarem.

/* Celular primeiro: estilo padrão para telas pequenas */
.cards { display: grid; grid-template-columns: 1fr; }

/* A partir de 768px de largura: 3 colunas */
@media (min-width: 768px) {
    .cards { grid-template-columns: repeat(3, 1fr); }
}

Variáveis CSS (custom properties)

Guardam valores para reaproveitar. Mudando em um lugar, muda no site inteiro. O style.css desta página usa variáveis para as cores.

:root {
    --cor-primaria: #3451b2;
}
.botao {
    background-color: var(--cor-primaria);
}