Seletores
Seletores Básicos
*Universal — todos os elementos
divTipo — todos os elementos
.classClasse — elementos com a classe
#idID — elemento com o id
[attr]Atributo — tem o atributo
[attr="val"]Atributo igual ao valor
Combinadores
A BDescendente (qualquer profundidade)
A > BFilho direto apenas
A + BIrmão adjacente (próximo)
A ~ BIrmão geral (todos após)
Pseudo-classes
:hoverMouse sobre o elemento
:focusElemento com foco
:first-childPrimeiro filho do pai
:nth-child(n)Nº filho (base 1, odd, even, 2n+1)
:not(sel)Negação — excluir matches
:has(sel)Seletor pai (contém match)
Pseudo-elementos
::beforeInserir conteúdo antes do elemento
::afterInserir conteúdo após o elemento
::placeholderEstilizar texto placeholder de input
::selectionEstilizar texto selecionado
Box Model
Box Sizing
/* Include padding/border in width */ *, *::before, *::after { box-sizing: border-box; }
Propriedades
marginEspaço fora da borda
borderBorda ao redor do padding
paddingEspaço dentro da borda
width / heightDimensões do conteúdo
outlineAnel fora da margem (sem espaço)
Shorthand
margin: 10px; /* all sides */ margin: 10px 20px; /* vertical | horizontal */ margin: 10px 20px 30px; /* top | horiz | bottom */ margin: 10px 20px 30px 40px; /* T R B L */
Flexbox
Container
.flex { display: flex; justify-content: center; /* main axis */ align-items: center; /* cross axis */ gap: 1rem; }
Propriedades do Container
flex-directionrow | column | row-reverse | column-reverse
flex-wrapnowrap | wrap | wrap-reverse
justify-contentflex-start | center | space-between | space-around | space-evenly
align-itemsstretch | center | flex-start | flex-end | baseline
align-contentAlinhamento no eixo cruzado multi-linha
gapEspaço entre itens flex
Propriedades do Item
flex: 1Crescer para preencher o espaço disponível
flex: 0 0 200pxLargura fixa, sem crescer/encolher
align-selfSobrescrever align-items para um item
orderAlterar ordem visual (padrão 0)
Grid
Container
.grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: auto 1fr auto; gap: 1rem; }
Propriedades do Container
grid-template-columnsDefinir colunas: 1fr 2fr, repeat(3, 1fr)
grid-template-rowsDefinir linhas
grid-template-areasÁreas nomeadas: "header header" "nav main"
gapEspaços entre linhas e colunas
justify-itemsAlinhar itens inline (horizontal)
align-itemsAlinhar itens block (vertical)
Posicionamento de Item
.item { grid-column: 1 / 3; /* span cols 1-2 */ grid-row: 1 / -1; /* span all rows */ grid-area: header; /* named area */ }
Tipografia
Propriedades de Fonte
font-familyStack de fontes: 'Inter', sans-serif
font-sizeTamanho: 1rem, 16px, clamp(1rem, 2vw, 2rem)
font-weightnormal (400) | bold (700) | 100-900
font-stylenormal | italic | oblique
line-heightEspaçamento de linha: 1.5 (sem unidade recomendado)
letter-spacingEspaçamento de caracteres: 0.05em
Propriedades de Texto
text-alignleft | center | right | justify
text-decorationnone | underline | line-through
text-transformuppercase | lowercase | capitalize
text-overflowellipsis (com overflow: hidden)
white-spacenowrap | pre | pre-wrap
word-breakbreak-all | break-word
Cores & Fundos
Formatos de Cor
color: #ff6600; /* hex */ color: rgb(255, 102, 0); /* rgb */ color: hsl(24, 100%, 50%); /* hsl */ color: oklch(70% 0.15 50); /* oklch */
Propriedades de Background
background-colorPreenchimento sólido: #f0f0f0
background-imageurl(img.jpg) ou gradiente
background-sizecover | contain | 100px 200px
background-positioncenter | top right | 50% 50%
background-repeatno-repeat | repeat-x | repeat-y
Gradientes
background: linear-gradient(to right, #f00, #00f); background: radial-gradient(circle, #fff, #000); background: conic-gradient(red, yellow, green);
Transições & Animação
Transições
.btn { transition: background 0.3s ease, transform 0.2s; } .btn:hover { background: #0056b3; transform: scale(1.05); }
Propriedades de Transição
transition-propertyQual propriedade animar
transition-durationDuração: 0.3s, 300ms
transition-timing-functionease | linear | ease-in-out | cubic-bezier()
transition-delayAguardar antes de iniciar
Animação com Keyframes
@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .icon { animation: spin 1s linear infinite; }
Propriedades de Animação
animation-nameReferência ao nome do @keyframes
animation-durationDuração de um ciclo
animation-iteration-count1 | 3 | infinite
animation-directionnormal | alternate | reverse
animation-fill-modeforwards | backwards | both
Design Responsivo
Media Queries
@media (max-width: 768px) { .sidebar { display: none; } } @media (prefers-color-scheme: dark) { body { background: #1a1a1a; color: #eee; } }
Breakpoints Comuns
max-width: 480pxCelulares
max-width: 768pxTablets
max-width: 1024pxNotebooks pequenos
max-width: 1280pxDesktops
Unidades de Viewport
vw / vh% da largura / altura da viewport
dvhAltura de viewport dinâmica (safe para mobile)
svh / lvhAltura de viewport pequena / grande
cqiTamanho inline de container query
Container Queries
.card-wrapper { container-type: inline-size; } @container (min-width: 400px) { .card { flex-direction: row; } }
Posicionamento
Valores de Position
staticPadrão — fluxo normal do documento
relativeDeslocado da posição normal; mantém espaço
absolutePosicionado ao ancestral posicionado mais próximo
fixedPosicionado à viewport; permanece no scroll
stickyAlterna relative/fixed baseado no scroll
Padrões de Centralização
/* Flex center */ display: flex; justify-content: center; align-items: center; /* Grid center */ display: grid; place-items: center;
Empilhamento
z-indexOrdem de empilhamento (maior = na frente); exige position
isolation: isolateCria novo contexto de empilhamento
Propriedades Customizadas
Definir & Usar
:root { --color-primary: #3b82f6; --spacing-md: 1rem; } .btn { background: var(--color-primary); padding: var(--spacing-md); }
Valores de Fallback
color: var(--accent, #ff6600); /* uses #ff6600 if --accent is not defined */
Temas Dinâmicos
[data-theme="dark"] { --bg: #1a1a2e; --text: #e0e0e0; } body { background: var(--bg); color: var(--text); }