Neste capítulo, você descobrirá como transformar páginas HTML básicas em designs atraentes e profissionais usando CSS. Vamos explorar desde os conceitos fundamentais até técnicas avançadas de layout e estilização.
1. Introdução ao CSS
O que é CSS?
CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata) é uma linguagem que define o estilo visual e a apresentação de documentos HTML. Se o HTML é o esqueleto de uma página web, o CSS é a pele, as roupas e a maquiagem.
Analogia: Se o HTML fosse uma casa, seria apenas a estrutura básica - paredes, portas e janelas. O CSS seria responsável pela pintura, decoração, móveis e todo o visual que torna a casa bonita e acolhedora.
Por que o CSS foi criado?
Antes do CSS, os desenvolvedores tinham que incluir formatações dentro do próprio HTML, usando tags como <font> e atributos de cores. Isso causava diversos problemas:
Páginas ficavam com código repetitivo e difícil de manter
Alterações de design exigiam modificar cada página individualmente
HTML misturava estrutura e apresentação, prejudicando a clareza do código
Para resolver estes problemas, o World Wide Web Consortium (W3C) criou o CSS, permitindo separar a estrutura (HTML) da apresentação (CSS).
Como o CSS funciona?
O CSS funciona selecionando elementos HTML e aplicando estilos a eles:
/* Seleciona todos os parágrafos e aplica os estilos dentro das chaves */p { color: blue; /* Cor do texto */ font-size: 16px; /* Tamanho da fonte */ margin-bottom: 20px; /* Espaço abaixo do parágrafo */}
Três formas de incluir CSS:
CSS Inline: Direto no elemento HTML usando o atributo style
<p style="color: blue; font-size: 16px;">Este é um parágrafo azul.</p>
CSS Interno: Dentro da tag <head> usando a tag <style>
<head> <style> p { color: blue; font-size: 16px; } </style></head>
CSS Externo (recomendado): Em um arquivo separado com extensão .css
Boa prática: Sempre que possível, use CSS externo. Isso permite reutilizar estilos em várias páginas e mantém seu código mais organizado.
Atividade prática:
Crie três arquivos HTML diferentes e um único arquivo CSS.
Vincule o mesmo arquivo CSS às três páginas HTML.
Faça uma alteração no arquivo CSS e observe como ela afeta todas as páginas simultaneamente.
2. Seletores CSS: Encontrando os Elementos
Os seletores são como "endereços" que indicam quais elementos HTML devem receber determinados estilos. Dominar seletores é fundamental para usar o CSS efetivamente.
Seletor de elemento: Seleciona todos os elementos daquele tipo
p { color: blue; } /* Seleciona todos os parágrafos */
Seletor de ID: Seleciona um elemento com o ID específico (único na página)
#titulo-principal { font-size: 32px; } /* Elemento com id="titulo-principal" */
Seletor de classe: Seleciona todos os elementos com a classe especificada
.destaque { background-color: yellow; } /* Elementos com class="destaque" */
Seletores combinados:
/* Todos os parágrafos dentro de elementos com classe "artigo" */.artigo p { line-height: 1.5; }/* Elementos que têm ambas as classes "botao" e "primario" */.botao.primario { background-color: blue; }
Pseudo-classes: Selecionam estados especiais dos elementos
a:hover { text-decoration: underline; } /* Links quando o mouse está sobre eles */li:first-child { font-weight: bold; } /* Primeiro item de uma lista */
Especificidade: Quando regras conflitam
Quando várias regras CSS tentam aplicar estilos diferentes ao mesmo elemento, a especificidade determina qual regra "vence":
Estilos inline (mais específico)
IDs
Classes, atributos e pseudo-classes
Elementos e pseudo-elementos (menos específico)
Analogia: Pense na especificidade como uma hierarquia militar. Um general (estilo inline) dá ordens que superam as de um coronel (ID), que por sua vez superam as de um capitão (classe) e assim por diante.
/* Este estilo tem menos peso (especificidade 1) */p { color: blue; }/* Este estilo tem mais peso (especificidade 10) */.texto { color: red; }/* Este tem peso ainda maior (especificidade 100) */#paragrafo-principal { color: green; }
No exemplo acima, se um elemento tiver todas essas características (<p id="paragrafo-principal" class="texto">), o texto será verde.
Atividade prática: Crie um documento HTML com vários parágrafos e aplique diferentes seletores para estilizá-los. Experimente criar situações de conflito entre seletores e observe qual estilo prevalece.
3. Formatação de Texto
O CSS oferece um controle refinado sobre a aparência do texto, permitindo criar tipografias elegantes e legíveis.
Propriedades fundamentais de texto
p { color: #333; /* Cor do texto */ font-family: Arial, sans-serif; /* Família da fonte */ font-size: 16px; /* Tamanho da fonte */ font-weight: bold; /* Peso da fonte: normal, bold, 100-900 */ font-style: italic; /* Estilo: normal, italic, oblique */ text-align: center; /* Alinhamento: left, right, center, justify */ line-height: 1.5; /* Altura da linha (espaçamento) */ letter-spacing: 1px; /* Espaçamento entre letras */ text-decoration: underline; /* Decoração: underline, overline, line-through */ text-transform: uppercase; /* Transformação: capitalize, uppercase, lowercase */}
Atividade prática: Crie uma página com vários títulos e parágrafos. Estilize-os de maneiras diferentes, experimentando com fontes, cores e efeitos de texto. Tente criar um sistema de tipografia consistente com títulos distintos dos parágrafos.
4. Cores e Unidades de Medida
Representação de cores no CSS
CSS oferece várias maneiras de especificar cores:
Nomes de cores:
h1 { color: red; }
Valores hexadecimais:
h1 { color: #ff0000; } /* Mesmo que "red" */h2 { color: #f00; } /* Forma abreviada */
RGB e RGBA (com transparência):
p { color: rgb(255, 0, 0); } /* Mesmo que "red" */div { background-color: rgba(255, 0, 0, 0.5); } /* Vermelho 50% transparente */
CSS usa diferentes unidades para especificar tamanhos, margens, preenchimentos, etc.
Unidades absolutas:
px (pixels): Tamanho fixo na tela
pt (pontos): Usado principalmente para impressão (1pt = 1/72 polegada)
cm, mm, in: Centímetros, milímetros, polegadas
Unidades relativas (recomendadas para sites responsivos):
%: Porcentagem em relação ao elemento pai
em: Relativa ao tamanho da fonte do elemento
rem: Relativa ao tamanho da fonte do elemento raiz (html)
vw, vh: Porcentagem da largura e altura da viewport (área visível)
:root { font-size: 16px; /* Define o tamanho base para rem */}h1 { font-size: 2rem; /* 2 × o tamanho base = 32px */ margin-bottom: 5%; /* 5% da largura do contêiner */ padding: 0.5em; /* 0.5 × o tamanho da fonte de h1 */ width: 80vw; /* 80% da largura da viewport */}
Boa prática: Para criar sites responsivos (que se adaptam a diferentes tamanhos de tela), prefira unidades relativas como rem, em e porcentagens em vez de pixels.
Atividade prática: Crie uma paleta de cores para um site imaginário e aplique-a a diferentes elementos. Experimente com transparências e gradientes. Teste também diferentes unidades de medida e observe como elas se comportam quando você redimensiona a janela do navegador.
.elemento { box-sizing: border-box; /* Faz width e height incluírem padding e border */}/* Aplicar a todos os elementos (recomendado) */* { box-sizing: border-box;}
Atividade prática: Crie várias "caixas" com diferentes combinações de margens, preenchimentos e bordas. Tente replicar um card de produto ou um componente de interface simples, como um botão personalizado.
6. Backgrounds e Imagens
Propriedades de background
.elemento { /* Cor de fundo simples */ background-color: #f0f0f0; /* Imagem de fundo */ background-image: url('imagem.jpg'); /* Controle de repetição */ background-repeat: no-repeat; /* no-repeat, repeat, repeat-x, repeat-y */ /* Posicionamento */ background-position: center top; /* Tamanho */ background-size: cover; /* cover, contain, ou valores específicos */ /* Comportamento de rolagem */ background-attachment: fixed; /* fixed, scroll, local */ /* Shorthand (forma abreviada) */ background: #f0f0f0 url('imagem.jpg') no-repeat center/cover;}
Gradientes
.gradiente-linear { background: linear-gradient(to right, red, blue); /* ou usando ângulos */ background: linear-gradient(45deg, red, blue); /* com múltiplas cores e paradas */ background: linear-gradient(to bottom, red 0%, yellow 50%, blue 100%);}.gradiente-radial { background: radial-gradient(circle, white, black);}
Atividade prática: Crie uma seção de herói (hero section) para um site com uma imagem de fundo, um gradiente sobreposto para melhorar a legibilidade do texto, e texto centralizado. Tente fazer com que o background fique fixo durante a rolagem.
7. Posicionamento e Layout
Tipos de posicionamento
.elemento { /* Valores possíveis: static, relative, absolute, fixed, sticky */ position: relative; top: 10px; left: 20px; z-index: 2; /* Controla a sobreposição (maior fica na frente) */}
Static (padrão): Fluxo normal do documento
Relative: Posicionado em relação à sua posição normal
Absolute: Posicionado em relação ao ancestral posicionado mais próximo
Fixed: Posicionado em relação à viewport (permanece no mesmo lugar mesmo com rolagem)
Grid é um sistema de layout bidimensional perfeito para criar estruturas complexas.
.grid-container { display: grid; grid-template-columns: repeat(3, 1fr); /* 3 colunas de tamanho igual */ grid-template-rows: 100px auto 50px; /* tamanhos de linha específicos */ gap: 10px; /* espaçamento entre células */}.header { grid-column: 1 / -1; /* ocupa todas as colunas */}.sidebar { grid-row: 2 / 4; /* ocupa da linha 2 até a linha 4 */}
Atividade prática: Crie um layout usando CSS Grid para uma página de blog com cabeçalho, barra lateral, área de conteúdo principal e rodapé. Em seguida, use Flexbox para organizar um menu de navegação horizontal dentro do cabeçalho e cards de artigos na área principal.
8. Pseudo-classes e Pseudo-elementos
Pseudo-classes
As pseudo-classes selecionam elementos em estados específicos:
/* Links */a:link { color: blue; } /* link não visitado */a:visited { color: purple; } /* link visitado */a:hover { text-decoration: underline; } /* mouse sobre o link */a:active { color: red; } /* link sendo clicado *//* Formulários */input:focus { border-color: blue; } /* campo com foco */input:disabled { background: #eee; } /* campo desabilitado */input:checked { box-shadow: 0 0 0 3px orange; } /* checkbox/radio marcado *//* Baseadas em posição */li:first-child { font-weight: bold; } /* primeiro filho */li:last-child { border-bottom: none; } /* último filho */li:nth-child(odd) { background: #f9f9f9; } /* filhos ímpares */
Pseudo-elementos
Os pseudo-elementos criam "elementos virtuais" que não existem no HTML:
/* Primeira letra e primeira linha */p::first-letter { font-size: 2em; }p::first-line { font-style: italic; }/* Conteúdo antes e depois */.item::before { content: "→ "; color: red;}.item::after { content: " ✓"; color: green;}/* Seleção de texto */::selection { background-color: yellow; color: black;}
Atividade prática: Crie um componente de citação que use pseudo-elementos para adicionar aspas decorativas antes e depois do texto. Também crie um menu de navegação com efeitos visuais diferentes para os estados hover, active e focus.
9. Responsividade e Media Queries
O que é design responsivo?
Design responsivo é uma abordagem que faz com que as páginas web se adaptem a diferentes tamanhos de tela e dispositivos, proporcionando uma boa experiência de uso tanto em desktops quanto em celulares.
Media Queries
Media queries permitem aplicar estilos diferentes baseados em características do dispositivo:
/* Estilos base (para todos os dispositivos) */body { font-size: 16px;}/* Para telas menores que 600px (smartphones) */@media (max-width: 600px) { body { font-size: 14px; } .sidebar { display: none; /* Esconde a barra lateral */ }}/* Para telas médias (tablets) */@media (min-width: 601px) and (max-width: 900px) { .grid-container { grid-template-columns: 1fr 1fr; /* Muda para duas colunas */ }}/* Para impressão */@media print { .nav, .footer, .ads { display: none; /* Remove elementos desnecessários na versão impressa */ }}
Viewport Meta Tag
Para garantir que sites responsivos funcionem corretamente em dispositivos móveis:
Atividade prática: Adapte o layout que você criou anteriormente para ser responsivo. Certifique-se de que ele funcione bem em smartphones (até 600px), tablets (601px-900px) e desktops (acima de 900px). Teste redimensionando a janela do navegador ou usando o modo de inspeção do navegador.
10. Exercícios e Projeto Final
Exercício 1: Crie um card de produto
Desenvolva um card de produto com:
Imagem
Título
Descrição curta
Preço
Botão "Comprar"
Efeitos visuais ao passar o mouse
Exercício 2: Formulário de contato estilizado
Crie um formulário de contato com:
Campos para nome, email, assunto e mensagem
Estilização para os estados normal, focus e invalid
Layout responsivo
Botão de envio com efeito hover
Projeto final: Mini-site responsivo
Desenvolva um mini-site de página única com:
Menu de navegação fixo no topo
Seção Hero com imagem de fundo e texto sobreposto
Seção "Sobre" com duas colunas (texto e imagem)
Seção "Serviços" com cards usando flexbox
Seção "Contato" com formulário
Rodapé com links para redes sociais
Design totalmente responsivo
Glossário
CSS: Cascading Style Sheets (Folhas de Estilo em Cascata)
Seletor: Define quais elementos HTML serão estilizados
Propriedade: Característica que você deseja alterar (como color, font-size)
Valor: Configuração específica para uma propriedade
Declaração: Conjunto de propriedade e valor
Regra CSS: Conjunto de seletor e declarações
Especificidade: Mecanismo que determina qual regra tem precedência
Box Model: Modelo que define como elementos HTML são representados como caixas
Responsividade: Capacidade de adaptação a diferentes tamanhos de tela
Media Query: Regra CSS que aplica estilos com base em características do dispositivo
Próximos Passos
Depois de dominar os fundamentos do CSS, você pode aprofundar seus conhecimentos com:
CSS Frameworks como Bootstrap, Tailwind CSS ou Bulma
Pré-processadores CSS como SASS, LESS ou Stylus
CSS-in-JS para desenvolvimento com React ou outras bibliotecas
Animações avançadas com CSS e JavaScript
Metodologias de organização CSS como BEM, SMACSS ou ITCSS