Dimensionamento e unidades

Você define um tamanho de fonte em pixels, publica a página, e um leitor que aumentou o tamanho do texto do navegador para se sentir confortável não vê nenhuma mudança. Você dá a um card uma largura fixa e ele transborda em um telefone. Ambos vêm para a mesma pergunta: quando você digita um número em CSS, esse número é medido contra o quê? Algumas unidades são fixas, algumas escalam para uma fonte, algumas escalam para o pai, e algumas escalam para a tela. Depois de saber qual é qual, você para de adivinhar e começa a escolher a unidade que faz o trabalho.
Unidades absolutas vs relativas
As unidades CSS se dividem em duas famílias. Uma unidade absoluta é um tamanho fixo que nunca muda: px (um pixel) é aquele que você encontrará em todos os lugares. Uma unidade relativa é um tamanho que escala para algo mais, como o tamanho da fonte do leitor ou a largura da tela.
Pense em medir uma sala. Centímetros são absolutos: uma parede tem 400cm quer você seja alto ou baixo. "Três dos meus passos" é relativo: depende de cujos pés estão caminhando. Unidades absolutas dão a você controle exato; unidades relativas deixam a página se adaptar à pessoa que a está vendo.
Essa adaptação importa. Alguns leitores definem um tamanho de texto padrão maior porque é mais fácil para seus olhos. Se você dimensionar seu texto em uma unidade relativa, sua configuração se mantém e a página cresce para atendê-los. Se você a bloquear em pixels, ela fica no lugar e os ignora.
px são um tamanho fixo que nunca muda. Unidades relativas escalam para algo mais, como o tamanho da fonte do leitor ou a largura da tela. Unidades relativas deixam a página se adaptar à pessoa que a está vendo, e é por isso que são importantes para leitores que definem um tamanho de texto maior. Pixels e quando eles estão bem
Um pixel (px) é uma pequena unidade fixa de comprimento. É a mais direta para raciocinar, porque 16px é sempre 16px. Isso torna um bom ajuste para pequenas coisas que devem permanecer do mesmo tamanho não importa o quê: a espessura de uma borda, um pequeno canto arredondado, um ícone fixo.
.card {
border: 1px solid #ccc; /* uma borda filete, sempre 1px */
border-radius: 8px; /* um canto arredondado fixo */
}A pegadinha é que um pixel não se importa com o leitor. Se alguém definou seu navegador para mostrar texto maior, um cabeçalho que você travou em 24px fica em 24px e ignora sua escolha. É por isso que px é uma boa escolha para bordas e pequenos detalhes, mas não a unidade que você quer para texto.
px) é um tamanho fixo, então 16px é sempre 16px. Isso torna um bom ajuste para pequenas coisas que devem ficar no lugar, como uma borda 1px ou um pequeno canto arredondado. A compensação é que px ignora um leitor que definou texto maior, então não é a unidade que você quer para as palavras na página. em e rem
Duas unidades relativas escalam para um tamanho de fonte: em e rem. A que você deve buscar é rem. Ela mede contra o tamanho da fonte raiz da página, que é o tamanho de texto base definido em todo o documento (16px por padrão). Então 1rem é 16px, 1.5rem é 24px, e 2rem é 32px.
h1 {
font-size: 2rem; /* 2 x 16px = 32px */
}
p {
font-size: 1rem; /* 16px, o tamanho base */
margin-bottom: 1.5rem; /* 24px de espaço abaixo */
}Porque rem está ligada a esse tamanho raiz, é previsível: 1.5rem significa a mesma coisa em toda parte da página. E quando um leitor aumenta seu tamanho de fonte padrão, tudo dimensionado em rem cresce junto. A outra unidade, em, escala para o tamanho da fonte do elemento em vez disso, o que pode ficar confuso, então comece com rem e você raramente será pego desprevenido.
rem e em ambas escalam para um tamanho de fonte, e a que você deve começar é rem. Ela mede contra o tamanho raiz da página, que é 16px por padrão, então 1.5rem é 24px e significa a mesma coisa em toda parte. em escala para o tamanho de fonte do próprio elemento em vez disso, o que pode ficar confuso, então busque rem primeiro. Porcentagens
Uma porcentagem (%) dimensiona um elemento contra seu pai. Para largura, width: 50% significa metade da largura da caixa em que o elemento fica, seja qual for essa largura.
.sidebar {
width: 25%; /* um quarto da largura do pai */
}
.content {
width: 75%; /* os três quartos restantes */
}Isso é o que torna um layout fluido: porque as larguras são frações do pai, elas encolhem e crescem conforme o pai o faz. Redimensione a janela e uma coluna 50% permanece metade da largura em vez de transbordar a borda da maneira como uma coluna fixa 500px faria. Essa flexibilidade é por que as porcentagens aparecem tão frequentemente em design responsivo.
width: 50% é metade da largura da caixa em que o elemento fica. Isso torna colunas fluidas: redimensione a janela e elas crescem e encolhem em vez de transbordarem. É uma das principais ferramentas por trás de layouts que se adequam a qualquer tela. Unidades de visualização
Unidades de visualização dimensionam contra a janela do navegador em si. vw é uma porcentagem da largura de visualização e vh é uma porcentagem da altura de visualização, onde a visualização é a área visível da página. Então 100vw é a largura total da janela e 100vh é sua altura total.
.hero {
height: 100vh; /* preenche toda a altura da tela */
}Essa é a favorita para uma seção de tela cheia, como um banner de desembarque que deve preencher a janela em qualquer tamanho que seja. Porque as unidades rastreiam a janela, a seção permanece em tela cheia quando alguém redimensiona ou rotaciona seu dispositivo, sem você definir uma altura de pixel fixo que seria apenas correta em uma tela.
vw e vh dimensionam contra a janela do navegador: 100vw é sua largura total e 100vh é sua altura total. Elas são a favorita para uma seção de tela cheia como um banner de desembarque, porque fica em tela cheia quando a janela redimensiona em vez de ser travada em uma altura de pixel. 
