CSS, caixa e layout
Seletores, cascata, herança, medidas, fluxo, posicionamento, flexbox, grid e desenho responsivo.
Seletores: ler antes de contar
- Espaço é descendente;
>é filho direto;+é o irmão seguinte;~são os posteriores. A vírgula separa alternativas. p.ativoé o próprio parágrafo;p .ativoé um descendente.:nth-childconta todos os elementos filhos;:nth-of-typesó os do tipo. A contagem começa em 1 e ignora texto.[href^="https"],[href$=".pdf"],[href*="livro"]: início, fim, parte.[class~="x"]procura palavra em lista;[lang|="pt"]aceitaptoupt-....:notexclui,:isreúne,:hastesta relação com outros elementos.&é o seletor exterior em regras aninhadas.- Pseudo-classe (
:checked) testa o elemento; pseudo-elemento (::before, comcontent) representa parte gerada.
Cascata em quatro passos
- Confirma que ambas atingem o elemento.
- Compara origem, importância e camadas. Regras sem camada vencem as com camada; nas importantes, a ordem inverte-se. Camada posterior vence anterior.
- No mesmo nível, compara
(IDs, classes/atributos/pseudo-classes, elementos)da esquerda para a direita. - Em empate, ganha a posterior.
(1,1,3) vence (1,1,0) na terceira coluna. Um ID vence qualquer número de classes. * e combinadores não contam; :where vale zero; :is, :not e :has usam o maior argumento. !important muda importância, não especificidade. Estilo em linha vence regras normais do autor.
Herança é outro mecanismo: declaração direta no filho vence valor herdado. color herda; margem, borda e padding não. inherit pede ao pai; initial pede o inicial; unset herda quando a propriedade é herdada.
Caixa: onde fica cada medida
content-box:widthmede só o conteúdo; soma padding e borda.border-box: já os inclui. Margem fica sempre fora.padding: a b c dsegue cima, direita, baixo, esquerda; dois valores dão vertical e horizontal.- Margens verticais de blocos em fluxo podem colapsar (16px com 24px dão 24px). Padding nunca colapsa.
remusa a raiz;ememfont-sizeusa o pai, nas restantes usa o próprio elemento.vw/vhusam o viewport.
Posicionar e distribuir
| Valor | Conserva lugar? | Referência |
|---|---|---|
static | Sim, fluxo normal | Nenhuma (top/left ignorados) |
relative | Sim, desloca o desenho | Posição original |
absolute | Não | Antepassado posicionado (ou transformado) mais próximo |
fixed | Não | Normalmente o viewport |
sticky | Sim, até prender | Limite definido no scroll |
display: noneretira a caixa;visibility: hiddenguarda o espaço.transformredesenha sem reservar lugar.z-indexsó compara dentro do mesmo contexto de empilhamento.- Flexbox:
justify-contentno eixo principal,align-itemsno transversal.flex: 1 1 200pxé crescimento, redução e base, não largura fixa.margin-top: autoempurra o botão para o fundo do cartão. - Grid:
1frreparte o que sobra depois de fixos e gaps.grid-column: 1 / 3ocupa duas colunas.minmax(0, 1fr)deixa a coluna encolher abaixo do mínimo do conteúdo.
Conta de fr (720px, fixa 120px, gaps 30px)
Sobra 720 - 120 - 60 = 540; com 1fr + 2fr dá 180px e 360px. Um item 2 / 4 atravessa colunas e gap interior: 180 + 30 + 360 = 570px. fr não é percentagem do contentor.