DevPath · Aprenda a programar ESPTEN

CSS moderno, acessibilidade e arquitetura

CSS moderno: clamp(), aspect-ratio, :has() e mais

Funções matemáticas: clamp(), min(), max()

O CSS moderno traz ferramentas que antes exigiam malabarismo (ou JavaScript). Vamos começar pelas que você mais vai usar.

clamp(min, ideal, max) produz um valor fluido que cresce com a tela mas nunca cai abaixo do mínimo nem ultrapassa o máximo. Pense num segurança com dois limites. É a forma moderna de fazer tipografia e espaçamentos responsivos sem encher tudo de media queries:

h1 {
  /* nunca menos de 1.5rem, nem mais de 3rem; cresce com a largura do viewport */
  font-size: clamp(1.5rem, 4vw, 3rem);
}

Proporções com aspect-ratio

aspect-ratio fixa a relação largura/altura de uma caixa sem truques de padding:

.video {
  width: 100%;
  aspect-ratio: 16 / 9; /* a altura é calculada sozinha */
}

O seletor :has() — o "pai" que faltava

Durante anos você implorou por um "seletor pai" e a resposta era sempre a mesma: não existe. Pois agora existe, e se chama :has().

:has() seleciona um elemento de acordo com seu conteúdo ou seus irmãos. É o primeiro seletor que olha "para baixo", algo que parecia impossível:

/* um cartão que contém uma imagem recebe outro layout */
.cartao:has(img) {
  display: grid;
  grid-template-columns: auto 1fr;
}

/* um label cujo input é inválido é pintado de vermelho */
label:has(+ input:invalid) {
  color: #b91c1c;
}

Container queries: responsivo por contêiner

As media queries olham o viewport; as container queries (@container) reagem ao tamanho do contêiner pai. Assim um mesmo componente se adapta esteja onde estiver:

.painel { container-type: inline-size; }

@container (min-width: 400px) {
  .cartao { flex-direction: row; }
}

Nesting nativo

O CSS já permite aninhar regras como no Sass, sem compilar:

.menu {
  background: #fff;

  & a {
    color: var(--cor-primaria);

    &:hover { text-decoration: underline; }
  }
}

O & representa o seletor pai. O nesting aproxima o estilo da estrutura do componente e reduz a repetição. Só não exagere aninhando seis níveis, senão você recria justamente a bagunça que viemos evitar.

Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Custom properties: as variáveis do CSSAcessibilidade e arquitetura do CSS →