Curso profissional · 25h · TMM
CSS (Cascading Style Sheets) define a apresentação do HTML.
selector { propriedade: valor; }
.titulo { color: #4F46E5; font-size: 2rem; }
Separa conteúdo (HTML) de aparência (CSS).
.classe
#id
tag
a, b
a b
a > b
:hover
As classes são a base de um CSS organizado.
A especificidade decide qual regra ganha em conflito:
inline (1000) > id (100) > classe (10) > tag (1)
#menu .item
.item
!important
Manter especificidade baixa e plana facilita manutenção.
Cada elemento é uma caixa:
┌─ margin ───────────┐ │ ┌─ border ───────┐ │ │ │ ┌─ padding ──┐ │ │ │ │ │ content │ │ │ │ │ └────────────┘ │ │ │ └────────────────┘ │ └────────────────────┘
box-sizing: border-box faz width incluir padding+border (recomendado).
box-sizing: border-box
color
font
body { font-family: sans-serif; } /* herda para tudo */
Compreender ambas evita "porque é que isto não muda?".
Flexbox alinha elementos numa direcção (linha ou coluna):
.barra { display: flex; justify-content: space-between; /* eixo principal */ align-items: center; /* eixo cruzado */ gap: 1rem; }
Ideal para componentes e alinhamentos 1D.
flex-direction
justify-content
align-items
flex-wrap
gap
flex: 1
Grid organiza em duas dimensões (linhas e colunas):
.galeria { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }
Ideal para layouts de página e grelhas 2D.
Costumam combinar-se: Grid para a página, Flex dentro dos blocos.
Desenhar primeiro para o ecrã pequeno, depois acrescentar:
.card { width: 100%; } /* mobile */ @media (min-width: 768px) { /* tablet+ */ .card { width: 50%; } }
Base simples, melhorias progressivas.
@media (min-width: 1024px) { .grelha { grid-template-columns: repeat(4, 1fr); } }
Breakpoints típicos: ~480, 768, 1024, 1280 px. Definir conforme o conteúdo, não dispositivos específicos.
%
rem
em
vw
vh
Preferir relativas a px para layouts flexíveis e acessíveis.
px
clamp(min, ideal, max) cria valores fluidos com limites:
clamp(min, ideal, max)
.titulo { font-size: clamp(1.5rem, 4vw, 3rem); }
Tipografia e espaçamentos que escalam sozinhos — menos media queries.
:root { --cor-primaria: #4F46E5; --espaco: 1rem; } .botao { background: var(--cor-primaria); padding: var(--espaco); }
Reutilização, temas e manutenção num único ponto. Funcionam em tempo de execução (podem mudar com JS/media query).
Combina unidades diferentes em cálculos:
.coluna { width: calc(100% - 240px); /* total menos sidebar */ }
Resolve layouts que misturam fixo e fluido.
.link::after { content: '→'; } /* pseudo-elemento */ .item:hover { color: red; } /* pseudo-classe */ .item:nth-child(2) { ... }
::before/::after criam conteúdo decorativo sem HTML extra.
::before
::after
O CSS moderno suporta aninhamento nativo:
.card { padding: 1rem; & .titulo { font-weight: bold; } &:hover { box-shadow: 0 4px 12px #0002; } }
Organiza regras relacionadas (como em Sass).
CSS cresce e fica caótico. As metodologias dão convenções para:
BEM = Block, Element, Modifier:
.card { } /* Block */ .card__titulo { } /* Element */ .card--destaque { } /* Modifier */
Nomes auto-explicativos, especificidade plana, sem conflitos.
Classes utilitárias compõem o estilo no HTML:
<div class="flex items-center gap-4 p-4 rounded-lg shadow">
Filosofia oposta ao BEM; ambas válidas.
Pensar em sistemas, não páginas isoladas.
Sass estende o CSS com funcionalidades:
$primaria: #4F46E5; .botao { background: $primaria; &:hover { background: darken($primaria, 10%); } }
@mixin flex-centro { display: flex; justify-content: center; align-items: center; } .caixa { @include flex-centro; }
Reutilizar blocos de estilo — menos repetição (DRY).
PostCSS transforma CSS com plugins:
Parte do build moderno de CSS.
O inspector do browser é essencial:
clamp()
calc()