Fundamentos de CSS
BásicoAula 4 de 8 do curso Curso de Noções básicas de desenvolvimento web
O que você vai aprender
- Escreva regras CSS válidas, vincule uma folha de estilo a uma página HTML e use os estilos que o navegador já aplica como ponto de partida, usando as ferramentas do desenvolvedor para entender o que acontece.
- Escreva regras CSS e vincule uma folha de estilo a uma páginaLeia e escreva as partes de uma regra CSS, escolha entre uma folha de estilo externa, um elemento
<style>e estilos em linha, e saiba o que o navegador faz quando encontra erros. - Use os estilos padrão do navegador como ponto de partida e inspecione-osReconheça os estilos que cada navegador aplica antes dos seus, decida o que redefinir e use as ferramentas do desenvolvedor para descobrir por que um elemento tem determinada aparência.
- Escreva regras CSS e vincule uma folha de estilo a uma página
- Selecione exatamente os elementos desejados com seletores de tipo, classe e ID, seletores de atributo, pseudoclasses, pseudoelementos e combinadores.
- Selecione elementos por tipo, classe e IDSelecione elementos por nome, classe ou ID, combine seletores que devem corresponder ao mesmo elemento e agrupe vários seletores em uma regra.
- Selecione por atributos, estados e partes dos elementosUse seletores de atributo, pseudoclasses para estados e posições e pseudoelementos que estilizam parte de um elemento ou adicionam conteúdo gerado.
- Combine seletores de acordo com a posição dos elementos na páginaSelecione elementos por sua relação com outros elementos na árvore HTML: em qualquer nível dentro, diretamente dentro, imediatamente depois ou em algum ponto depois de outro elemento.
- Selecione elementos por tipo, classe e ID
- Determine qual declaração se aplica quando várias regras definem a mesma propriedade, calcule a especificidade e explique como os elementos recebem valores que nenhuma regra lhes atribuiu diretamente.
- Acompanhe a cascata para identificar a declaração que prevaleceAplique as etapas da cascata (origem e importância, especificidade e, depois, ordem de aparecimento) e use com cuidado estilos em linha,
!importante camadas de cascata. - Calcule e compare a especificidadeCalcule a pontuação de qualquer seletor no formato ID–classe–tipo, compare pontuações coluna por coluna e mantenha a especificidade baixa para facilitar a substituição dos estilos.
- Use a herança e as palavras-chave globaisSaiba quais propriedades passam do elemento pai para o filho, use a herança para escrever menos CSS e controle-a com
inherit,initial,unseterevert.
- Acompanhe a cascata para identificar a declaração que prevalece
- Especifique cores nas principais notações CSS, torne o texto legível sobre seu fundo e escolha entre unidades absolutas e relativas para texto, espaçamento e dimensões.
- Especifique cores com palavras-chave, notação hexadecimal, rgb() e hsl()Use palavras-chave de cores, códigos hexadecimais,
rgb()ehsl(), adicione transparência e verifique se o texto tem contraste suficiente com o fundo. - Escolha medidas de comprimento e unidadesUse corretamente pixels,
em,rem, porcentagens e unidades relativas à área de visualização, saiba qual é a referência de cada unidade relativa e combine unidades comcalc().
- Especifique cores com palavras-chave, notação hexadecimal, rgb() e hsl()
- Explique como cada elemento é desenhado como uma caixa com conteúdo, preenchimento interno, borda e margem, calcule seu tamanho e controle o espaço dentro e entre caixas.
- Calcule as dimensões das caixas a partir do conteúdo, do preenchimento interno, da borda e da margemNomeie as quatro partes de uma caixa, escreva as propriedades abreviadas de espaçamento e calcule o tamanho de um elemento nos modelos de caixa padrão e alternativo.
- Controle o espaçamento entre caixas de bloco e caixas em linhaPreveja como caixas de bloco, em linha e de bloco em linha ocupam espaço, centralize um bloco com margens automáticas e reconheça quando margens verticais entram em colapso.
- Calcule as dimensões das caixas a partir do conteúdo, do preenchimento interno, da borda e da margem
- Escolha e carregue fontes, torne o texto legível, estilize listas e links e decore caixas com fundos, gradientes, bordas, cantos arredondados e sombras.
- Escolha fontes e carregue fontes webEscreva listas de fontes alternativas, defina tamanho, peso e estilo, use a propriedade abreviada
fonte carregue uma fonte personalizada com@font-face. - Estilize textos, listas e links para facilitar a leituraDefina altura de linha, alinhamento, decoração, maiúsculas e minúsculas e espaçamento, altere marcadores e recuos de listas e dê aos links estados claros e acessíveis.
- Adicione cores, imagens e gradientes de fundoPreencha caixas com cores, imagens e gradientes, controle como as imagens de fundo se repetem, são dimensionadas e posicionadas, e escreva a propriedade abreviada
background. - Desenhe bordas, cantos arredondados, contornos e sombrasEscreva propriedades abreviadas de borda para todos os lados ou para lados individuais, arredonde cantos com
border-radiuse adicione contornos e sombras sem alterar o layout.
- Escolha fontes e carregue fontes web
Guia de estudo de CSS
1Vincule o CSS e inspecione o resultado
O CSS transforma uma página HTML com significado em uma página com cores, fontes e espaçamentos escolhidos. Uma regra funcional precisa de sintaxe válida e de uma conexão com o documento. O navegador também traz seus próprios estilos, então você sempre começa com uma aparência existente. Aprenda a vincular uma folha de estilo externa, fazer uma pequena alteração e acompanhá-la nas ferramentas do desenvolvedor quando o resultado for diferente do esperado.
1.1 Regras, declarações e folhas de estilo
O HTML descreve conteúdo e significado. CSS, sigla de folhas de estilo em cascata, descreve a apresentação: cores, fontes, espaçamento, bordas e fundos. Alterar uma folha de estilo pode dar ao mesmo HTML uma aparência diferente sem mudar seus títulos, parágrafos ou links.
Leia uma regra
p {
color: navy;
font-size: 18px;
}
O seletor p corresponde a parágrafos. As chaves delimitam o bloco de declarações. Cada declaração tem uma propriedade, dois-pontos, um valor e um ponto e vírgula. Aqui, color e font-size são propriedades; navy e 18px são valores. Quebras de linha e espaços entre essas partes tornam o código mais fácil de ler sem alterar seu efeito.
Um ponto e vírgula separa uma declaração da seguinte. O último é opcional, mas mantê-lo evita erros quando você adiciona outra linha. Em color: navy font-size: 18px;, o navegador lê um único valor de cor inválido. Ele não consegue recuperar as duas declarações pretendidas, então nenhum dos dois estilos é definido por esse texto.
Vincule o CSS
Uma folha de estilo externa é um arquivo CSS separado, vinculado a partir do head do HTML:
<link rel="stylesheet" href="css/styles.css">
Esse caminho indica que uma pasta chamada css fica ao lado do arquivo HTML e contém styles.css. Um arquivo externo pode estilizar várias páginas. Salvar uma alteração nele atualiza as regras que essas páginas carregam.
Um elemento style no head contém regras para uma página. Um atributo style em linha contém declarações para um elemento, como em <p style="color: crimson;">Hello.</p>. Folhas de estilo externas geralmente são mais fáceis de manter. Declarações normais em linha também têm precedência sobre regras normais de folhas de estilo do autor, o que pode dificultar alterações posteriores.
Para obter um primeiro resultado, coloque body { font-family: Arial, sans-serif; } e h1 { color: darkslateblue; } no arquivo vinculado. Recarregue a página. O corpo do texto usa Arial quando disponível, com uma fonte sem serifa como alternativa; o título muda de cor. Controles como botões podem manter sua própria fonte do navegador até que você os faça herdá-la explicitamente.
Encontre erros de sintaxe e de caminho
Navegadores ignoram declarações inválidas e continuam. color: 12px; é inválido porque uma medida de comprimento não é uma cor. font-size: 16 px; é inválido porque o número e a unidade devem estar juntos. Uma propriedade escrita incorretamente também é ignorada. Uma declaração de borda válida no mesmo bloco ainda pode funcionar, então uma alteração visível não prova que todas as declarações são válidas.
Comentários CSS usam /* Header styles */ e podem ocupar várias linhas. // não inicia um comentário CSS; pode fazer com que o código seguinte seja ignorado. Nomes de propriedades e valores comuns de palavras-chave não diferenciam maiúsculas de minúsculas; por convenção, mantenha-os em minúsculas. Nomes de classes e caminhos de arquivos devem corresponder à grafia e ao uso de maiúsculas e minúsculas reais.
Se nenhum estilo aparecer, verifique a requisição no painel Rede. Um caminho errado como style.css pode retornar 404 mesmo que a própria página HTML abra normalmente.
Trate propriedades abreviadas como configurações completas
Uma propriedade abreviada define várias propriedades relacionadas de uma vez. margin: 10px 20px; define as quatro margens. Partes omitidas voltam a seus valores iniciais: background-image: url("sky.jpg"); seguido de background: lightblue; remove a imagem. Coloque primeiro a propriedade abreviada e depois as exceções individuais que devem ser mantidas.
Principais conclusões
- Escreva cada declaração como
property: value;dentro de uma regra. - Vincule uma folha de estilo externa a partir do
headdo HTML; resolva seu caminho a partir do arquivo HTML. - Um navegador ignora CSS inválido e continua com as declarações válidas.
- Use
/* ... */para comentários CSS. - Uma propriedade abreviada redefine as propriedades individuais relacionadas que omite.
1.2 Padrões do navegador e ferramentas do desenvolvedor
Uma página HTML simples ainda tem títulos grandes, espaçamento entre parágrafos, marcadores de lista e links sublinhados. Eles vêm da folha de estilo do agente de usuário, o CSS embutido do navegador. Seus estilos começam a partir desses padrões; uma página sem estilização própria não é uma página sem regras CSS.
Escolha o significado antes da aparência
Padrões típicos incluem uma margem de 8px no body, margens verticais de 1em nos parágrafos e 40px de preenchimento interno no lado inicial das listas. Os padrões de títulos incluem 2em para h1 e 1.5em para h2, com margens verticais de 0.67em para h1. Texto de importância acentuada fica em negrito; texto enfatizado fica em itálico. Links não visitados geralmente são azuis e links visitados, roxos. Configurações e implementações dos navegadores podem afetar os padrões, então inspecione a página real quando a precisão for importante.
O tamanho padrão do texto costuma ser 16px, com uma fonte escolhida nas configurações do navegador. Leitores podem alterar esse tamanho. Tamanhos de fonte relativos podem acompanhar essa escolha.
Escolha um elemento HTML por seu significado e depois estilize-o. Se um h2 parecer grande demais, use h2 { font-size: 1.25rem; }. Escolher um h4 apenas para obter letras menores mudaria a estrutura de títulos. Alterar o tamanho no CSS mantém intacto o significado do título de segundo nível.
Os padrões também determinam como os elementos ocupam espaço. Parágrafos e seções normalmente formam caixas de bloco. Elementos span e links normalmente fluem dentro das linhas. Itens de lista têm display: list-item, o que lhes dá uma caixa de nível de bloco e um marcador. Uma alteração de display no CSS muda o comportamento da caixa, preservando o significado HTML do elemento.
Redefina apenas o que você pretende
Uma redefinição de estilos remove padrões selecionados. body { margin: 0; } remove o espaço externo. Uma regra abrangente como * { margin: 0; padding: 0; } também remove o espaçamento dos parágrafos e o recuo das listas, que você precisará reconstruir. Uma abordagem de normalização mantém padrões úteis e ajusta inconsistências.
Controles de formulário frequentemente têm fontes atribuídas diretamente pelo navegador. Para fazê-los usar a mesma fonte da página, escreva:
button, input, select, textarea {
font: inherit;
}
Comece o documento HTML com <!DOCTYPE html>. Isso seleciona o modo de padrões. Omitir a declaração de tipo de documento pode ativar o modo de compatibilidade, no qual comportamentos de compatibilidade antigos alteram alguns dimensionamentos e outros resultados do CSS.
Inspecione a propriedade que surpreende você
Clique com o botão direito em um elemento e escolha Inspecionar. O painel Estilos mostra as regras correspondentes, incluindo regras do navegador identificadas como estilos do agente de usuário. Uma declaração riscada perdeu para outra declaração; um aviso pode indicar CSS inválido. As declarações que prevalecem são escolhidas propriedade por propriedade, então uma regra pode perder sua cor e ainda fornecer seu preenchimento interno.
O painel Computado mostra os valores finais das propriedades e o conteúdo, o preenchimento interno, a borda e a margem do modelo de caixa. Se um título tiver um espaço inesperado, inspecione sua margem antes de adicionar preenchimento interno a outro elemento. Teste uma alteração diretamente nas ferramentas do desenvolvedor e depois copie a regra que funciona para sua folha de estilo: alterações feitas na inspeção desaparecem ao recarregar a página.
Quando um estilo falhar, siga uma ordem útil: verifique se a folha de estilo carregou, se o seletor corresponde, se a declaração é válida, se ela prevalece e se a propriedade afeta esse tipo de caixa. Um width: 200px válido ainda não dimensiona um span comum exibido em linha.
Principais conclusões
- A folha de estilo do agente de usuário fornece padrões legíveis antes de seu CSS ser aplicado.
- Escolha elementos HTML pelo significado e altere sua aparência com CSS.
- Uma redefinição de estilos remove padrões que você pode precisar adicionar novamente.
- Use o modo de padrões com
<!DOCTYPE html>. - Inspecione as regras correspondentes, a validade e as declarações riscadas antes de alterar o código.
- Salve na folha de estilo os testes bem-sucedidos feitos nas ferramentas do desenvolvedor.
2Selecione exatamente os elementos desejados
Um seletor descreve quais elementos uma regra alcança. Alguns seletores correspondem a nomes ou atributos; outros correspondem a um estado, a uma parte de um elemento ou a uma relação na árvore HTML. Pequenas mudanças na pontuação importam: um espaço, uma vírgula e um ponto fazem solicitações diferentes. Comece pelo elemento que você quer estilizar e volte pelas condições que o identificam, para que uma regra alcance todos os elementos pretendidos e deixe os demais intactos.
2.1 Seletores de tipo, classe, ID e compostos
Um seletor responde a uma pergunta prática: quais elementos devem receber estas declarações? Comece pela correspondência mais simples que expresse a função desejada. Uma classe pode ser reutilizada em muitos elementos sem vincular o estilo a uma única posição na página.
Selecione nomes e atributos
| Seletor | Corresponde a |
|---|---|
p | Todos os parágrafos |
.warning | Todos os elementos com a classe warning |
#site-header | O elemento com o ID site-header |
* | Todos os elementos |
Um seletor de tipo é o nome de um elemento. Um seletor de classe começa com um ponto; um seletor de ID começa com #. A pontuação pertence ao seletor CSS, não ao valor do atributo HTML. Escreva <p class="warning">, não <p class=".warning">.
Um elemento pode ter várias classes separadas por espaços. Tanto <p class="warning"> quanto <div class="box warning"> correspondem a .warning. Um ID deve ser único dentro de uma página. Sua alta especificidade também dificulta sobrescrever estilos baseados em ID, então classes costumam ser a principal ferramenta para estilos reutilizáveis.
Use nomes que descrevam uma função, como .error-message ou .product-card. Um nome como .red-text se torna enganoso se o design mudar para outra cor. Nomes de classes diferenciam maiúsculas de minúsculas: .Warning e .warning são diferentes. Um nome que começa com um dígito precisa ser escapado em um seletor CSS; escolher .three-columns evita a forma inválida sem escape .3-columns.
Exija várias condições em um elemento
Escrever seletores juntos cria um seletor composto. O mesmo elemento deve satisfazer todas as partes. p.intro corresponde a parágrafos que têm a classe intro. .card.featured corresponde a um elemento com ambas as classes.
<p class="note important">Doors open at 19:00.</p>
<p class="note">Bring your ticket.</p>
.note { color: #333333; }
.important { font-weight: bold; }
p.note.important { border-left: 4px solid crimson; }
Primeiro encontre as correspondências. Ambos os parágrafos têm note, então ambos recebem texto cinza-escuro. Apenas o primeiro tem important, então só ele fica em negrito. O seletor composto adiciona a borda esquerda a esse mesmo primeiro parágrafo porque ele é um p com ambas as classes. Nenhum elemento envolvente adicional é necessário.
Um espaço muda a tarefa: p .intro seleciona um elemento com a classe intro dentro de um parágrafo. Ele não seleciona o próprio parágrafo. Mantenha as partes juntas quando descreverem o mesmo elemento.
Compartilhe um bloco de declarações
Uma vírgula cria uma lista de seletores:
h1, h2, h3 { font-family: Georgia, serif; }
Cada seletor corresponde independentemente a seu nível de título. Sem as vírgulas, h1 h2 h3 buscaria um h3 dentro de um h2 dentro de um h1.
Um seletor inválido em uma lista comum de seletores pode invalidar a regra inteira. h1, h2..title, h3 não estiliza nenhum desses títulos porque o ponto duplo é inválido. Quando uma regra compartilhada parece ausente, verifique todos os seletores da lista, não apenas o do elemento inspecionado.
Principais conclusões
- Uma classe pode aparecer em muitos elementos, e um elemento pode ter várias classes.
- Um ID deve ser único na página e tem alta especificidade como seletor.
p.introexige ambas as condições em um elemento;p .introdescreve um descendente.- Vírgulas criam seletores independentes que compartilham declarações.
2.2 Atributos, estados e partes
Algumas condições de estilização já estão presentes nos atributos HTML. Outras dependem do que o leitor está fazendo ou da posição de um elemento entre seus irmãos. O CSS pode corresponder a essas condições sem adicionar uma classe para cada uma.
Selecione um atributo ou seu valor
Seletores de atributo usam colchetes. [alt] corresponde à presença de um atributo, mesmo que seu valor esteja vazio. input[type="email"] exige o valor exato do atributo.
| Padrão | Significado |
|---|---|
[href^="https"] | O valor começa com https |
[href$=".pdf"] | O valor termina com .pdf |
[href*="example"] | O valor contém example |
[class~="note"] | Uma lista separada por espaços contém a palavra note |
| `[lang | ="en"]` |
Adicione i antes do colchete de fechamento para ignorar a diferença entre maiúsculas e minúsculas, como em a[href$=".pdf" i]. Ele também alcança um link terminado em .PDF. A correspondência de palavra inteira impede que note corresponda acidentalmente a uma palavra de classe mais longa, como notebook.
Selecione um estado ou uma posição
Uma pseudoclasse usa um par de dois-pontos: :hover, :focus, :checked ou :disabled. :focus-visible seleciona um elemento com foco quando o navegador determina que um indicador visível é necessário, geralmente durante a navegação por teclado.
Um link pode estar visitado e com o ponteiro sobre ele ao mesmo tempo. Para regras concorrentes com a mesma especificidade, escreva os estados de link nesta ordem: :link, :visited, :focus, :hover, :active. Caso contrário, uma regra posterior de cor de visitado prevaleceria sobre uma regra anterior de cor ao passar o ponteiro em um link visitado. Os navegadores restringem :visited a certas alterações de cor para proteger a privacidade; definir seu peso de fonte não funciona, e a transparência não pode revelar o histórico de visitas.
Pseudoclasses estruturais contam irmãos. :first-child significa o primeiro elemento filho de seu elemento pai. Em <article><h2>News</h2><p>Update</p></article>, p:first-child não corresponde a nada. p:first-of-type corresponde a esse parágrafo.
:nth-child(3) seleciona o terceiro filho. odd seleciona as posições 1, 3, 5; even seleciona 2, 4, 6. Em :nth-child(3n+1), comece com n = 0, depois 1, 2 e 3: as posições correspondentes são 1, 4, 7 e 10. li:not(:last-child) exclui o último item, sendo útil para separadores apenas entre itens.
Estilize uma parte ou adicione uma indicação
Um pseudoelemento usa dois pares de dois-pontos. ::first-line e ::first-letter estilizam partes do texto; ::marker estiliza marcadores de lista, ::placeholder estiliza a orientação de um campo e ::selection estiliza texto selecionado. As formas antigas com um par de dois-pontos para before, after, first-line e first-letter ainda funcionam.
.required::after {
content: " *";
color: crimson;
}
::after cria conteúdo dentro do elemento selecionado, depois do conteúdo existente. ::before o cria antes. Ambos precisam de um valor de content; até content: "" cria uma caixa decorativa. Textos essenciais pertencem ao HTML, onde continuam sendo conteúdo real do documento. Use esses pseudoelementos para decoração ou pequenas indicações, pois o texto gerado não pode ser selecionado ou copiado de forma confiável como o texto HTML.
Principais conclusões
- Operadores de atributo distinguem presença, valores exatos, fragmentos de texto e palavras inteiras.
- Uma pseudoclasse seleciona um estado ou uma posição; um pseudoelemento estiliza uma parte ou conteúdo gerado.
:first-childconta todos os elementos irmãos, enquanto:first-of-typeconta o mesmo tipo de elemento.- Estados de links podem se sobrepor, então regras de estado concorrentes precisam de uma ordem planejada.
::beforee::afterprecisam decontent; informações essenciais pertencem ao HTML.
2.3 Relações na árvore HTML
Elementos HTML formam uma árvore. Um elemento diretamente dentro de outro é seu filho; qualquer elemento aninhado dentro dele é um descendente. Elementos que compartilham um elemento pai são irmãos. Um combinador conecta seletores por uma dessas relações.
Acompanhe a relação até o alvo
| Combinador | Exemplo | Alvo |
|---|---|---|
| Espaço | nav a | Qualquer link dentro de um nav, em qualquer nível |
> | .menu > li | Um li diretamente dentro de .menu |
+ | h2 + p | Um parágrafo imediatamente depois de um h2, com o mesmo elemento pai |
~ | h2 ~ p | Qualquer parágrafo irmão posterior a um h2 |
A parte mais à direita nomeia o elemento que recebe as declarações. h2 + p estiliza o parágrafo, não o título. Ambos os combinadores de irmãos olham para a frente entre os irmãos; nenhum deles seleciona um elemento pai ou um irmão anterior.
Acompanhe uma lista aninhada
<ul class="menu">
<li>Guides</li>
<li>Topics
<ul>
<li>Typography</li>
</ul>
</li>
</ul>
.menu li corresponde aos três itens de lista porque os três são descendentes da lista externa. .menu > li corresponde apenas a “Guides” e “Topics”: o elemento pai deles é a lista com a classe menu. O elemento pai do item “Typography” é o ul interno, que não tem essa classe.
Essa distinção importa quando itens de nível superior precisam de preenchimento interno amplo, mas itens aninhados precisam de espaçamento compacto. Um seletor de descendente alcança todos os níveis, a menos que outra condição o restrinja.
Acompanhe os irmãos seguintes
<article>
<h2>Opening hours</h2>
<p>Visit in the morning.</p>
<aside>Closed on holidays.</aside>
<p>Booking is optional.</p>
</article>
h2 + p corresponde a “Visite pela manhã.” Ele não pula o aside para encontrar outro parágrafo. h2 ~ p corresponde a ambos os parágrafos porque os dois vêm depois do título e compartilham seu elemento pai. Se um parágrafo estivesse dentro do aside, ele não seria irmão do título e, por esse motivo, não corresponderia a nenhum dos dois seletores.
Combine relações sem alcançar elementos indesejados
.sidebar > ul a:hover corresponde a links com o ponteiro sobre eles em qualquer nível dentro de um ul cujo elemento pai direto tem a classe sidebar. Leia da direita para a esquerda: um link com o ponteiro sobre ele; dentro de uma lista; essa lista diretamente dentro da barra lateral. O espaço permite elementos intermediários entre a lista e o link.
Combinadores não acrescentam especificidade. O elemento, a classe, o ID e outras partes de correspondência do seletor continuam acrescentando. Por isso, sequências longas podem tornar as regras mais difíceis de manter, embora os símbolos de relação não acrescentem pontos: alterar o aninhamento do HTML pode impedir suas correspondências. Uma classe descritiva no alvo, como .menu-link, frequentemente expressa uma função reutilizável com mais clareza.
Quando uma regra não corresponder, inspecione a árvore real em vez de contar espaços visuais. Dois elementos podem aparecer lado a lado na tela e ter elementos pais diferentes no HTML. Comentários e espaços em branco não contam como elementos irmãos para esses combinadores.
Principais conclusões
- Um espaço alcança descendentes em qualquer nível;
>alcança filhos diretos. +alcança o elemento irmão imediatamente seguinte;~alcança irmãos posteriores correspondentes.- O seletor mais à direita nomeia o elemento que recebe o estilo.
- Combinadores não acrescentam especificidade, mas sequências longas de seletores dependem muito da estrutura HTML.
3Determine qual declaração prevalece
Várias regras podem corresponder a um elemento, e cada uma pode contribuir com uma parte diferente de sua aparência. A cascata escolhe um valor para cada propriedade por meio de uma sequência de comparações. A especificidade só importa depois que as comparações de prioridade mais alta empatam. A herança ajuda os estilos de texto a se propagarem pela página sem uma regra para cada elemento. Manter essas funções separadas torna muito mais fácil explicar e corrigir uma declaração riscada.
3.1 A cascata, estilos em linha e camadas
A cascata escolhe a declaração que prevalece para cada propriedade de cada elemento. Ela não escolhe uma regra inteira e descarta todas as outras. Com p { color: gray; font-size: 18px; } e .lead { color: black; }, um parágrafo com a classe lead pode receber sua cor da regra de classe e seu tamanho da regra de tipo.
Compare na ordem correta
Primeiro, elimine as declarações que não se aplicam: seus seletores devem corresponder e quaisquer condições devem ser atendidas. Depois, compare origem e importância, incluindo a prioridade da camada de cascata. Estilos normais em linha do autor têm precedência sobre regras normais das folhas de estilo do autor. Quando as declarações ainda empatam nessas etapas anteriores, compare a especificidade; use a ordem de aparecimento para resolver um empate restante.
| Origem da declaração normal | Prioridade |
|---|---|
| Autor: o CSS do site | A mais alta das três |
| Usuário: estilos personalizados do leitor | Entre autor e navegador |
| Agente de usuário: padrões do navegador | A mais baixa |
Duas regras .button de mesma prioridade que definem cores de fundo diferentes são resolvidas pela ordem: a posterior prevalece. Folhas de estilo vinculadas mais adiante no HTML também vêm depois nesses empates. Um arquivo chegar mais rápido pela rede não faz com que ele venha depois na cascata.
Entenda a importância antes de adicioná-la
Uma declaração em linha como style="color: purple;" prevalece sobre seletores normais de folhas de estilo do autor, mesmo seletores com IDs. Uma declaração de folha de estilo do autor com !important pode prevalecer sobre essa declaração normal em linha.
<p class="note" style="color: purple;">Check the time.</p>
p { color: gray !important; }
.note { color: blue; }
O parágrafo fica cinza. A importância é comparada antes da especificidade do seletor ou da vantagem normal do estilo em linha. Se a cor em linha também tiver !important, essa declaração importante em linha prevalecerá sobre a regra importante da folha de estilo do autor.
Para declarações importantes, a prioridade das origens se inverte: declarações importantes do navegador têm precedência sobre declarações importantes do usuário, que têm precedência sobre declarações importantes do autor. Isso protege regras que leitores ou navegadores precisam impor. Dentro de uma origem, a precedência de estilos em linha e de camadas ainda vem antes da especificidade e da ordem no código-fonte.
Usar !important para todo conflito cria substituições cada vez mais difíceis. Prefira um seletor mais simples ou uma ordem planejada. Sobrescrever regras de terceiros que você não pode editar pode justificar uma declaração importante; ela deve ser uma exceção consciente.
Agrupe regras em camadas de cascata
@layer reset, base, components;
@layer base {
p { margin: 0 0 1rem; }
}
Isso declara a ordem das camadas antes de suas regras. Para declarações normais, camadas posteriores prevalecem sobre camadas anteriores, independentemente da especificidade do seletor. Regras normais fora de qualquer camada prevalecem sobre regras normais em camadas. Assim, uma regra de componente com baixa especificidade pode sobrescrever uma regra de base com alta especificidade sem adicionar IDs.
Declarações importantes invertem essa ordem das camadas: camadas anteriores prevalecem sobre posteriores, e declarações importantes em camadas prevalecem sobre declarações importantes fora de camadas. Essa inversão preserva proteções importantes nas camadas fundamentais. Ao investigar um conflito, estabeleça a origem, a importância e o grupo de camadas que prevalecem antes de gastar tempo contando partes de seletores.
Principais conclusões
- A cascata seleciona declarações separadamente para cada propriedade.
- Origem, importância, prioridade de estilos em linha e prioridade de camadas vêm antes da especificidade.
- Estilos normais em linha do autor prevalecem sobre regras normais de folhas de estilo do autor.
!importantaltera a prioridade; não acrescenta especificidade.- A prioridade normal favorece camadas posteriores e regras fora de camadas; a prioridade de camadas importantes se inverte.
- A ordem de aparecimento só resolve declarações depois que as comparações anteriores empatam.
3.2 Especificidade sem adivinhação
A especificidade mede o peso de seleção do seletor. Compare-a apenas entre declarações que ainda empatam nas etapas anteriores da cascata, incluindo origem, importância, camada e prioridade de estilos em linha.
Conte três colunas
Escreva a especificidade como ID–CLASSE–TIPO, por exemplo, 0-1-1.
| Coluna | Conte cada um destes |
|---|---|
| ID | Seletores de ID como #menu |
| CLASSE | Classes, seletores de atributo e pseudoclasses comuns |
| TIPO | Seletores de tipo e pseudoelementos |
O seletor universal * e os combinadores não acrescentam nada. Para a[href^="https"]:focus, conte nenhum ID, duas partes de CLASSE (o atributo e :focus) e uma parte de TIPO (a). O resultado é 0-2-1.
Mais exemplos: .nav a é 0-1-1; ul li a:hover é 0-1-3; #main .card > h2 é 1-1-1; article p::first-line é 0-0-3. Um pseudoelemento conta com os tipos, embora seu nome comece com dois-pontos.
Compare a partir da esquerda
Compare os IDs primeiro. Se houver empate, compare CLASSE; se também houver empate, compare TIPO. Apenas triplas iguais passam para a ordem no código-fonte. São contagens separadas, não dígitos de um número decimal: 0-11-0 ainda perde para 1-0-0. Classes adicionais não são transportadas para um ID.
<nav id="site-nav">
<a class="active" href="/">Home</a>
</nav>
#site-nav a { color: white; }
nav a.active { color: orange; }
.active { color: yellow; }
Suponha que essas sejam declarações normais na mesma camada do autor. Suas pontuações são 1-0-1, 0-1-2 e 0-1-0. A primeira prevalece, então o link fica branco. Sua coluna ID resolve a comparação antes que qualquer contagem de classes ou tipos importe.
#site-nav .active prevaleceria com 1-1-0, mas um design baseado em classes é mais fácil de ampliar: .site-nav a pode fornecer o estilo base, com .site-nav .active alterando o link ativo. Isso mantém a especificidade baixa e relativamente uniforme.
Conheça as exceções funcionais
:is(), :not() e :has() não acrescentam peso pela própria função. Seu argumento mais específico fornece o peso. Assim, li:not(.done) é 0-1-1, e :is(#intro, p) a é 1-0-1. Conte o seletor mais específico da lista de argumentos, não aquele que você considera visualmente mais próximo do elemento.
:where() e tudo o que está dentro dele sempre contribuem com zero. Portanto, :where(#main) p tem pontuação 0-0-1. Ele é útil para padrões que devem ser fáceis de sobrescrever.
A distância até um ancestral não conta. body h1 e html h1 têm pontuação 0-0-2, então uma declaração posterior resolve o empate. Estilos em linha são tratados antes da especificidade do seletor, e !important pertence à importância. Nenhum dos dois é outra parte comum de seletor a ser adicionada à tripla.
Principais conclusões
- Conte IDs, depois classes/atributos/pseudoclasses e, por fim, tipos/pseudoelementos.
- Compare triplas coluna por coluna; uma coluna de prioridade menor não pode superar uma de prioridade maior.
- Combinadores e
*acrescentam zero. :is(),:not()e:has()usam seu argumento mais específico;:where()contribui com zero.- A distância até um ancestral não afeta a especificidade.
3.3 Valores herdados e redefinições intencionais
A herança permite que um filho receba um valor de seu elemento pai quando a propriedade normalmente é herdada e nenhuma declaração fornece um valor diferente para o filho. É por isso que uma regra no body pode estabelecer a cor e a fonte do texto para grande parte de uma página.
Separe o texto herdado das configurações de caixa
A maioria das propriedades de texto é herdada: color, propriedades de fonte, line-height, letter-spacing, text-align e text-transform. Estilos de lista e visibility também são herdados. Propriedades de caixa como margem, preenchimento interno, borda, largura, altura, fundos, exibição e dimensionamento da caixa não são.
body { color: #222222; font-family: Georgia, serif; }
h1, h2 { font-family: Arial, sans-serif; }
footer { color: #666666; }
O corpo do texto comum usa Georgia em cinza-escuro. Os títulos recebem sua família de fontes atribuída diretamente e mantêm a cor herdada. O texto do rodapé herda Georgia, enquanto sua cor muda localmente.
O fundo transparente de um filho deixa o fundo do elemento pai aparecer; isso não significa que o filho herdou a cor de fundo. Da mesma forma, filhos de uma caixa com borda não recebem automaticamente suas próprias bordas.
Atribuições diretas prevalecem sobre valores que seriam herdados
Com #content { color: red; } e p { color: blue; }, um parágrafo dentro da área de conteúdo fica azul. A especificidade do ID não compete com a regra do parágrafo porque as declarações selecionam elementos diferentes. O parágrafo já tem uma cor atribuída diretamente, então não precisa do vermelho herdado.
Os filhos geralmente herdam valores computados. Se uma seção tem font-size: 20px e seu filho tem font-size: 0.8em, o valor computado desse filho é 16px. Um parágrafo dentro dele herda 16px; ele não multiplica por 0.8 novamente. Uma altura de linha sem unidade é útil porque o valor herdado continua sendo um multiplicador para o tamanho da fonte de cada filho.
Escolha o significado de uma redefinição
| Palavra-chave | Efeito |
|---|---|
inherit | Recebe o valor computado do elemento pai |
initial | Usa o valor inicial da propriedade CSS |
unset | Herda uma propriedade herdada; inicializa uma não herdada |
revert | Reverte os estilos da origem atual |
revert-layer | Reverte os estilos da camada de cascata atual |
Para CSS do autor, revert revela a estilização da origem do usuário ou do navegador. A diferença importa em um div: display: initial resulta no valor inicial inline da propriedade, enquanto display: revert restaura sua exibição block habitual do navegador. Um valor inicial pertence à propriedade CSS; um padrão do navegador pode depender do elemento HTML.
inherit funciona mesmo em uma propriedade que normalmente não é herdada, como border: inherit. button, input { font: inherit; } substitui as fontes atribuídas diretamente aos controles pela fonte de seu elemento pai. all: unset redefine quase todas as propriedades de uma vez, o que também remove aparências nativas úteis.
Uma aparente exceção é o sublinhado. text-decoration não é herdada, mas o sublinhado de um elemento pai é desenhado através de seus descendentes em linha. Definir text-decoration: none em um span aninhado não pode apagar a linha do elemento pai. Remova-a do elemento pai e aplique-a apenas ao texto que deve recebê-la.
Principais conclusões
- A maioria das propriedades de texto é herdada; propriedades de caixa geralmente não são.
- Um valor atribuído diretamente a um filho tem prioridade sobre um valor herdado do elemento pai.
initialsignifica o valor inicial do CSS;revertpode restaurar padrões do navegador para elementos.unsetescolhe entre herança e inicialização de acordo com a propriedade.revert-layerremove a camada atual da decisão sobre essa propriedade.- O sublinhado de um elemento pai é desenhado através de descendentes em linha sem ser herdado.
4Especifique cores e escolha unidades úteis
Valores CSS precisam ter um significado claro e uma grafia válida. Uma cor pode ser especificada por nome, por valores de canais ou por matiz, e a transparência muda o que o leitor vê no final. Uma medida de comprimento pode acompanhar o texto, um contêiner ou a janela do navegador. Aprenda qual referência cada unidade usa e calcule o valor antes de verificá-lo no navegador. Essas escolhas ajudam os estilos a permanecer legíveis quando o conteúdo e as configurações do leitor mudam.
4.1 Valores de cor, alfa e contraste
color define a cor do texto. Fundos, bordas, contornos, decorações e sombras também aceitam valores de cor. A mesma cor pode ser especificada de várias formas; escolha uma notação que facilite entender a alteração pretendida.
Leia nomes e canais hexadecimais
O CSS tem cerca de 150 cores nomeadas, incluindo navy, tomato e rebeccapurple. Nomes são convenientes para testes rápidos, mas seus significados cotidianos podem surpreender: green é #008000, enquanto o verde puro e brilhante é lime, ou #00ff00. Valores exatos eliminam essa incerteza.
Uma cor hexadecimal de seis dígitos tem três pares de canais: vermelho, verde e azul. Cada par vai de 00 a ff, equivalente a 0 até 255. Todos em zero produzem preto; todos no máximo produzem branco. Pares iguais produzem um cinza, como em #808080.
A forma hexadecimal de três dígitos duplica cada dígito: #f0a se expande para #ff00aa. Ela não adiciona zeros. Uma cor como #1e90ff não pode ser abreviada porque nem todos os pares repetem seu dígito. Letras hexadecimais maiúsculas e minúsculas representam os mesmos valores.
Para converter um par, multiplique seu primeiro dígito por 16 e adicione o segundo. As letras de a a f significam 10 a 15. Para #1e90ff, 1e resulta em 30, 90 em 144 e ff em 255. A notação RGB correspondente é rgb(30 144 255). Código mais antigo pode usar vírgulas ou rgba(); essas formas ainda funcionam.
Descreva matiz ou transparência
hsl() especifica matiz, saturação e luminosidade. Matiz é um ângulo: 0 ou 360 é vermelho, 120 é verde e 240 é azul. A saturação vai de cinza em 0% a cor plena em 100%. A luminosidade vai de preto em 0% a branco em 100%. Uma matiz pura tem 100% de saturação e 50% de luminosidade, como em hsl(0 100% 50%). Alterar apenas a luminosidade cria versões escuras e claras relacionadas.
Um valor alfa vem depois de uma barra: rgb(0 0 0 / 0.6) é preto com 60% de opacidade. Zero é totalmente transparente e um é totalmente opaco. A notação hexadecimal de oito dígitos acrescenta um par alfa: #00000080 tem 128 de 255, cerca de 50% de alfa. transparent é totalmente transparente.
.notice {
color: white;
background-color: rgb(0 0 0 / 0.6);
}
Aqui, apenas o fundo é parcialmente transparente. opacity: 0.6 tornaria todo o elemento mais transparente, incluindo seu texto e seus filhos. Essa diferença importa quando você quer texto opaco e legível sobre uma superfície colorida.
Reutilize a cor e verifique o resultado
currentColor significa a própria cor de texto do elemento. Com color: #0055aa; border: 2px solid currentColor;, a borda acompanha o texto. Alterar a cor do texto também altera essa borda sem repetir um valor de cor.
O nível AA das WCAG 2.2 exige contraste de pelo menos 4,5:1 para texto normal e 3:1 para texto em tamanho grande, cerca de 24px ou cerca de 18,5px em negrito. #767676 sobre branco tem cerca de 4,54:1; #999999 sobre branco tem cerca de 2,85:1 e não atende a nenhum dos dois limiares. Use um verificador de contraste ou as ferramentas de cores do navegador no par real de primeiro plano e fundo, incluindo o efeito da transparência.
Principais conclusões
- Cores hexadecimais codificam vermelho, verde e azul; a forma de três dígitos repete cada dígito.
rgb()fornece canais, enquantohsl()fornece matiz, saturação e luminosidade.- Alfa em uma cor de fundo afeta essa cor;
opacitytorna todo o elemento mais transparente. currentColoracompanha a cor do texto do elemento.- Texto normal precisa de contraste de pelo menos 4,5:1 no nível AA das WCAG; texto grande precisa de 3:1.
4.2 Pixels e medidas de comprimento relativas
Uma medida de comprimento combina um número com uma unidade, como 16px ou 1.5rem. Não há espaço entre eles. Uma largura diferente de zero precisa de unidade: width: 300; é inválido. Zero pode omitir sua unidade. Algumas propriedades recebem intencionalmente números simples, incluindo line-height: 1.5, opacity: 0.8 e font-weight: 700.
Relacione a unidade à sua referência
| Unidade | Referência |
|---|---|
px | Um pixel de referência CSS |
em em font-size | O tamanho da fonte do elemento pai |
em em espaçamento e outras medidas de comprimento | O tamanho da fonte do próprio elemento |
rem | O tamanho da fonte do elemento raiz |
% | Uma referência determinada pela propriedade |
vw, vh | Largura ou altura da área de visualização |
ch | A largura do caractere zero da fonte |
Um pixel CSS não é necessariamente um ponto físico da tela. Telas de alta densidade podem usar vários pixels do dispositivo para um pixel CSS. Relações fixas entre unidades incluem 1in = 96px = 2,54cm e 1pt = 1/72in. Assim, 12pt equivale a 16px e 1cm é cerca de 37,8px. Essas conversões não garantem uma medida física em todas as telas.
Calcule valores relativos à fonte
Suponha que um elemento pai tenha uma fonte de 16px e seu filho tenha font-size: 1.25em; padding: 2em;. Calcule primeiro o tamanho da fonte: 1,25 vez 16px resulta em 20px. O preenchimento interno usa então o tamanho do próprio filho, então 2 vezes 20px resulta em 40px de cada lado.
Tamanhos de fonte em aninhados podem se multiplicar. Com li { font-size: 1.25em; }, três níveis aninhados a partir de 16px passam a ter 20px, 25px e 31,25px. Já 1.25rem resulta em 20px em todos os níveis quando a raiz tem 16px.
Deixar o tamanho da raiz no padrão do navegador, ou defini-lo em porcentagem, permite que o texto relativo responda quando um leitor altera esse padrão. Um html { font-size: 16px; } fixo anula essa configuração. Um padrão prático é usar rem para o tamanho da fonte e em para o preenchimento interno de um botão, para que seu espaçamento cresça com seu próprio texto.
Verifique porcentagens e a área de visualização
A propriedade determina a referência da porcentagem. Um bloco de referência fornece uma referência para o tamanho da caixa; nestes exemplos de fluxo normal, ela costuma ser a área de conteúdo do elemento pai. Um filho com width: 40% em um bloco de referência de 600px tem 240px de largura antes de qualquer preenchimento interno ou borda no modelo content-box. font-size: 150% usa o tamanho da fonte do elemento pai. Mesmo o preenchimento interno e as margens superior e inferior em porcentagem usam a largura do bloco de referência, não sua altura.
1vw é 1% da largura da área de visualização; 1vh é 1% de sua altura. Em uma área de visualização de 1280 por 800 pixels CSS, 50vw é 640px e 10vh é 80px. 100vw pode incluir a largura da barra de rolagem, produzindo transbordamento horizontal onde 100% do elemento pai caberia.
max-width: 65ch dá a uma coluna de texto uma largura relacionada à fonte. É aproximadamente uma medida de comprimento de leitura, não uma garantia de que cada linha tenha exatamente 65 caracteres.
Combine unidades com um cálculo
width: calc(100% - 40px); subtrai uma quantidade fixa de um tamanho relativo. Mantenha espaços ao redor de + e -; calc(100%-40px) é inválido. Navegadores calculam medidas relativas à fonte em pixels, enquanto porcentagens do tamanho do contêiner são resolvidas durante o cálculo do layout. As ferramentas do desenvolvedor mostram os tamanhos resultantes para que você possa verificar tanto a referência quanto a conta.
Principais conclusões
- Una os números diretamente às suas unidades; zero pode aparecer sozinho.
emusa o elemento pai para o tamanho da fonte e o próprio elemento para outras medidas de comprimento.remacompanha a raiz, evitando a multiplicação de tamanhos de fonte aninhados.- Referências de porcentagem dependem da propriedade; preenchimento interno em porcentagem usa a largura do contêiner.
- Unidades relativas à área de visualização acompanham a janela;
chacompanha a fonte. - Use espaços ao redor de adição e subtração dentro de
calc().
5Meça caixas e controle o espaçamento
Todo elemento visível ocupa espaço como uma caixa. A largura que você escreve pode descrever apenas o conteúdo ou toda a caixa até a borda, e margens acrescentam outra camada de espaçamento fora dela. O tipo de exibição altera quais propriedades de tamanho e espaçamento têm efeito. Aprenda a calcular uma caixa antes de mudar suas dimensões e depois explique surpresas comuns, como um cartão de largura total que transborda, um link em linha que ignora a largura ou duas margens verticais que se combinam.
5.1 Conteúdo, preenchimento interno, borda e margem
De dentro para fora, uma caixa tem conteúdo, preenchimento interno, borda e margem. O conteúdo contém texto, imagens ou elementos filhos. O preenchimento interno cria espaço ao redor desse conteúdo. A borda envolve o preenchimento interno; a margem separa a caixa até a borda de suas vizinhas.
Um fundo preenche o conteúdo e o preenchimento interno e se estende sob a borda, mas nunca colore a margem. Use preenchimento interno quando o espaço deve fazer parte de um cartão colorido. Use margem para o espaço fora dele. Margens podem ser negativas; preenchimento interno não pode.
Leia as propriedades abreviadas de espaçamento
margin, padding e border-width aceitam de um a quatro valores:
| Valores | Lados definidos |
|---|---|
10px | Todos os quatro |
10px 20px | Superior/inferior, depois esquerdo/direito |
10px 20px 30px | Superior, esquerdo/direito, inferior |
10px 20px 30px 40px | Superior, direito, inferior, esquerdo |
A ordem de quatro valores segue no sentido horário a partir do topo. Use propriedades individuais como padding-left para alterar apenas um lado depois da propriedade abreviada. Não leia o segundo valor de uma forma com dois valores como o inferior: ele define ambos os lados horizontais.
Calcule a caixa de conteúdo padrão
.card {
width: 300px;
padding: 20px;
border: 5px solid;
margin: 10px;
}
O valor inicial de box-sizing é content-box. A largura declarada de 300px cobre apenas o conteúdo. Adicione duas vezes os 20px de preenchimento interno e duas vezes os 5px de borda: a caixa até a borda tem 350px de largura. Adicione as duas margens de 10px para obter 370px de espaço horizontal.
A altura funciona da mesma maneira quando é definida explicitamente, mas o texto frequentemente precisa de uma caixa que possa crescer. Manter height: auto evita prender conteúdo variável em uma altura fixa.
Inclua preenchimento interno e borda na largura
Com box-sizing: border-box, a mesma largura declarada inclui preenchimento interno e borda. A caixa até a borda continua com 300px; subtraia 40px de preenchimento interno e 10px de borda para encontrar uma área de conteúdo de 250px. As margens permanecem fora, resultando em 320px de espaço horizontal.
Uma redefinição comum aplica esse modelo aos elementos e às suas partes geradas:
*, *::before, *::after { box-sizing: border-box; }
box-sizing não é herdada automaticamente, então a regra seleciona as caixas diretamente.
Um filho de largura total facilita ver a diferença. Em um contêiner de 600px, width: 100%; padding: 0 20px; produz uma caixa até a borda de 640px no dimensionamento content-box, antes de qualquer borda. Com o dimensionamento border-box, a mesma largura declarada de 600px inclui o preenchimento interno e cabe no contêiner.
Faça o conteúdo caber com segurança
min-height define um limite inferior e permite o crescimento. max-width: 800px permite que um bloco de largura automática encolha em um contêiner estreito, impedindo que fique mais largo que 800px.
Se o conteúdo ultrapassar uma caixa fixa, overflow controla o resultado: visible transborda, hidden recorta, scroll solicita barras de rolagem e auto fornece rolagem quando necessário. pre { overflow: auto; } dá a uma linha longa de código sua própria área de rolagem. Recortar é uma solução ruim para texto de que os leitores ainda precisam; primeiro verifique se o tamanho fixo é necessário.
Use o diagrama de caixa do painel Computado para comparar os valores de conteúdo, preenchimento interno, borda e margem do navegador com seu cálculo.
Principais conclusões
- O preenchimento interno fica dentro da borda; a margem fica fora e permanece transparente.
- A largura content-box exclui o preenchimento interno e a borda.
- A largura border-box inclui o preenchimento interno e a borda, mas nunca a margem.
- As propriedades abreviadas de espaçamento seguem no sentido horário a partir do topo, com formas mais curtas compartilhando valores entre lados.
- Use altura flexível e limites de tamanho para acomodar conteúdo variável.
overflowcontrola o conteúdo que ultrapassa a caixa.
5.2 Exibição, centralização e colapso de margens
O tipo de exibição determina como uma caixa se encaixa no que está ao seu redor. Um bloco normalmente começa em uma nova linha e preenche a largura disponível quando sua largura é automática. Uma caixa em linha comum flui dentro do texto e é dimensionada por seu conteúdo. Uma caixa de bloco em linha mantém a posição em linha e aceita dimensões explícitas.
Escolha o comportamento necessário
| Exibição | Largura e altura | Comportamento do espaçamento |
|---|---|---|
block | São aplicadas | Margens e preenchimento interno separam caixas |
inline comum | Não dimensionam a caixa | O espaçamento horizontal afeta o texto próximo |
inline-block | São aplicadas | O espaçamento vertical e horizontal afeta o layout ao redor |
Em elementos em linha comuns como span e a, margens superior e inferior não têm efeito. O preenchimento interno e as bordas verticais são desenhados, mas não afastam as linhas vizinhas, então podem se sobrepor a elas. Preenchimento interno, bordas e margens horizontais ocupam espaço ao longo da linha.
nav a {
display: inline-block;
padding: 8px 16px;
}
Esses links permanecem em uma linha enquanto suas caixas com preenchimento interno reservam espaço vertical. display: block daria a cada link sua própria linha. Imagens são um caso especial em linha: aceitam largura e altura. Seu alinhamento padrão pela linha de base pode deixar um pequeno espaço abaixo para as hastes descendentes das letras; img { display: block; } remove esse espaço da linha de base.
display: none remove a caixa e seu espaço e a remove da leitura por leitores de tela. visibility: hidden a oculta enquanto preserva seu espaço.
Centralize uma caixa ou seu conteúdo
.page {
max-width: 960px;
margin: 0 auto;
}
Em um contêiner mais largo, o bloco para de crescer em 960px e as duas margens horizontais automáticas dividem igualmente o espaço restante. Um bloco que preenche o contêiner não tem espaço horizontal restante para dividir. Margens automáticas não centralizam uma caixa em linha comum, e margens verticais automáticas no fluxo normal de blocos resultam em zero.
text-align: center faz outra tarefa: centraliza o conteúdo em linha dentro de um bloco. Uma caixa de parágrafo centralizada ainda pode ter texto alinhado à esquerda; um parágrafo de largura total pode ter texto centralizado sem se tornar uma caixa centralizada mais estreita.
Reconheça o colapso de margens verticais
No fluxo normal de blocos, margens superiores e inferiores adjacentes podem entrar em colapso. Duas margens positivas se tornam a maior delas. Um título com margem inferior de 24px seguido de um parágrafo com margem superior de 16px tem um espaço de 24px, não 40px. Margens horizontais não entram em colapso.
Com margens positivas e negativas, combine a maior positiva com a mais negativa: 20px e −8px resultam em 12px. Se todas forem negativas, prevalece a mais negativa. Uma caixa vazia sem conteúdo, altura, borda ou preenchimento interno que separe suas margens pode combinar suas próprias margens superior e inferior.
A margem superior de um primeiro filho também pode entrar em colapso através de um elemento pai sem borda, preenchimento interno ou conteúdo anterior que as separe. O espaço então aparece fora do fundo do elemento pai. Adicione preenchimento interno ou uma borda ao elemento pai, ou remova a margem superior do filho. Condições semelhantes permitem que a margem inferior de um último filho entre em colapso; uma altura ou altura mínima no elemento pai pode impedir esse caso inferior.
Caixas de bloco em linha não têm colapso de margens, assim como itens flexíveis ou de grade e caixas flutuantes ou posicionadas de forma absoluta. Um padrão simples de espaçamento de texto define margens superiores como zero e usa margens inferiores, com preenchimento interno para o espaço dentro de contêineres.
Principais conclusões
- Caixas em linha comuns ignoram largura e altura definidas; caixas de bloco em linha as aceitam.
- Margens horizontais automáticas centralizam um bloco mais estreito;
text-aligncentraliza seu conteúdo em linha. - Margens verticais positivas adjacentes de blocos podem entrar em colapso e resultar no maior valor.
- O preenchimento interno do elemento pai pode separar a margem de um primeiro filho da margem do elemento pai.
display: noneremove o espaço;visibility: hiddeno preserva.
6Estilize textos legíveis e superfícies finalizadas
Fontes, espaçamento entre linhas e estados dos links influenciam o conforto com que um leitor usa uma página. Fundos, bordas e sombras distinguem suas caixas sem alterar seu significado. Crie estilos de texto com alternativas, mantenha o conteúdo essencial no HTML e escolha uma decoração que ajude o conteúdo. As mesmas regras de caixa e cascata continuam valendo: uma propriedade abreviada pode redefinir o peso de uma fonte, uma borda pode acrescentar largura e um contorno de foco pode mostrar um estado sem deslocar nada.
6.1 Listas de fontes alternativas e fontes web
A escolha de uma fonte é uma preferência com um plano alternativo. Dispositivos têm fontes instaladas diferentes, e uma fonte baixada pode chegar depois do texto. Uma lista de fontes alternativas mantém a página legível e preserva um estilo adequado.
Crie uma lista de fontes
body {
font-family: "Helvetica Neue", Arial, sans-serif;
font-size: 1rem;
}
O navegador tenta os nomes de família em ordem e usa uma fonte disponível. Coloque nomes que contêm espaços entre aspas. Deixe famílias genéricas sem aspas: "sans-serif" solicita uma fonte com esse nome exato; sans-serif solicita ao navegador uma fonte genérica adequada.
As opções genéricas incluem serif, sans-serif, monospace, cursive, fantasy e system-ui. A última usa a fonte da interface do sistema. Fontes frequentemente chamadas de seguras para a web, como Arial, Georgia e Verdana, são comuns, mas sua presença não é garantida. Uma alternativa genérica ainda deve ficar no final.
font-size aceita medidas de comprimento, porcentagens e palavras-chave de tamanho. Com uma raiz de 16px, 1rem resulta em 16px e 2.5rem resulta em 40px. Tamanhos relativos podem acompanhar as configurações do leitor.
Defina peso, estilo e propriedade abreviada com cuidado
font-weight: normal equivale a 400; bold equivale a 700. Valores como 300 e 600 solicitam outros pesos quando a fonte os oferece. Se um peso solicitado estiver ausente, o navegador escolhe um disponível ou pode simular o negrito. Com apenas 400 e 700 carregados, solicitar 300 usa 400. bolder e lighter são relativos ao elemento pai.
font-style: italic solicita uma versão em itálico; normal remove esse estilo. A propriedade abreviada font precisa de tamanho e família:
blockquote {
font: italic 700 1.125rem/1.6 Georgia, serif;
}
Estilo, variante e peso opcionais vêm antes do tamanho. Uma barra associa a altura da linha ao tamanho, e a família vem por último. Omitir o tamanho ou a família invalida a propriedade abreviada. Outras configurações de fonte omitidas são redefinidas: font: 1rem Arial, sans-serif; redefine um peso anterior em negrito para normal.
Carregue um arquivo de fonte
@font-face {
font-family: "Inter";
src: url("fonts/inter-regular.woff2") format("woff2");
font-weight: 400;
font-style: normal;
font-display: swap;
}
body { font-family: "Inter", Arial, sans-serif; }
@font-face atribui um nome de família CSS a um arquivo. Use esse nome declarado na lista, não o nome do arquivo. Caminhos relativos de arquivos partem da localização da folha de estilo. WOFF2 é um formato compactado aceito pelos navegadores atuais.
Fontes estáticas geralmente precisam de arquivos e regras separados para cada peso e estilo. Fontes variáveis podem conter uma faixa de pesos em um único arquivo. Carregue os arquivos que o design realmente usa. font-display: swap exibe uma fonte alternativa imediatamente e a substitui quando a fonte web fica disponível.
Um serviço de fontes pode fornecer um link HTML e a declaração da família; hospedar a fonte por conta própria evita uma requisição a um servidor de terceiros. Verifique se a licença da fonte permite o uso em sites. Se a fonte parecer errada, inspecione a fonte renderizada e a requisição do arquivo. Um nome de família CSS escrito incorretamente faz o navegador usar uma alternativa sem aviso, então texto legível por si só não mostra que a fonte desejada foi carregada.
Principais conclusões
- Escreva uma lista de fontes com uma alternativa genérica sem aspas.
- O peso da fonte depende das versões ou faixas realmente disponíveis.
- A propriedade abreviada
fontexige tamanho e família e redefine configurações omitidas. @font-facedefine um nome de família e o arquivo que a fornece.font-display: swapmantém o texto visível em uma fonte alternativa enquanto uma fonte web carrega.
6.2 Espaçamento entre linhas, listas e estados de links
A estilização do texto precisa continuar funcionando quando o tamanho, o conteúdo e o método de entrada mudam. Comece pelo espaçamento entre linhas e por larguras legíveis; depois adicione detalhes de listas e links que indiquem aos leitores como o conteúdo funciona.
Faça a altura da linha acompanhar cada tamanho de fonte
Use uma altura de linha sem unidade, como line-height: 1.5. Com texto de corpo de 16px, ela cria linhas de 24px. Os filhos herdam o número, então um título de 32px recebe linhas de 48px. Já um valor de 1.5em ou 150% no elemento pai é computado nele como 24px, e um filho pode herdar essa altura de linha fixa de 24px mesmo quando seu próprio texto é maior. O padrão normal depende da fonte e costuma ser cerca de 1,2.
body { font: 1.125rem/1.6 Georgia, serif; color: #222222; }
h1 { font: 700 2.25rem/1.2 Arial, sans-serif; }
p { max-width: 65ch; }
Com uma raiz de 16px, o corpo do texto tem 18px em linhas de 28,8px; o título tem 36px em linhas de 43,2px. O limite do parágrafo evita linhas muito longas em uma tela larga.
text-align posiciona conteúdo em linha dentro de um bloco. Os valores incluem left, right, center, justify, start e end; start/end seguem a direção da escrita. Ele não move o próprio bloco. A justificação em colunas estreitas pode criar espaços grandes entre palavras.
Altere a apresentação sem reescrever o texto
text-transform pode exibir palavras em maiúsculas, minúsculas ou com iniciais maiúsculas sem alterar o texto HTML. letter-spacing, word-spacing e text-indent controlam tipos diferentes de espaço. text-shadow: 1px 1px 2px rgb(0 0 0 / 0.5); fornece deslocamento horizontal, deslocamento vertical, desfoque e cor.
text-decoration adiciona sublinhados, linhas acima ou linhas através do texto. Também pode definir estilo e cor, como em underline wavy crimson. A espessura e o afastamento do sublinhado ajustam a linha. Leitores esperam que texto sublinhado seja um link, então reserve essa indicação para esse fim.
Estilize listas sem deixar recuos acidentais
list-style-type escolhe marcadores como disc, square, decimal ou lower-alpha. list-style-position: outside mantém marcadores fora do bloco de texto; inside os coloca na primeira linha, de modo que as linhas seguintes podem começar abaixo do marcador. list-style-image fornece um marcador de imagem, e li::marker pode colorir apenas o marcador.
Para uma lista de navegação simples, use .menu { list-style: none; margin: 0; padding: 0; }. Remover apenas os marcadores mantém o preenchimento interno padrão no lado inicial da lista. list-style: square inside é uma propriedade abreviada que combina configurações de marcador.
Mantenha links visíveis durante o uso
Ordene regras de estado com a mesma especificidade como link, visited, focus, hover, active. Um link pode estar visitado e com o ponteiro sobre ele; a ordem no código-fonte decide entre suas declarações de cor concorrentes. :active significa durante a ativação, não a página atual.
Mantenha links reconhecíveis por mais do que apenas a cor, geralmente com um sublinhado no corpo do texto. Dê ao foco do teclado um indicador claro:
a:focus-visible {
outline: 3px solid #f2a900;
outline-offset: 2px;
}
Não remova o contorno de foco a menos que outro estilo de foco visível o substitua. Um contorno não ocupa espaço no modelo de caixa, então essa indicação não desloca o texto ao redor.
Principais conclusões
- Uma altura de linha sem unidade passa um multiplicador que acompanha o tamanho da fonte de cada filho.
text-alignmove conteúdo em linha dentro de um bloco, não o próprio bloco.- A transformação de maiúsculas e minúsculas altera a aparência sem alterar o texto HTML.
- Remover marcadores de lista não remove o preenchimento interno padrão da lista.
- Estados de links podem se sobrepor; mantenha o link reconhecível e o foco do teclado visível.
- Contornos mostram o foco sem alterar as dimensões da caixa.
6.3 Imagens de fundo, dimensionamento e camadas
Um fundo fica atrás do conteúdo de uma caixa. Sua cor preenche o conteúdo e o preenchimento interno e se estende sob a borda; a margem permanece transparente. Uma imagem é desenhada sobre a cor de fundo, então uma cor pode fornecer uma superfície confiável enquanto a imagem carrega.
Resolva o caminho a partir da folha de estilo
.hero {
background-color: #1a2b3c;
background-image: url("../images/hero.jpg");
}
Se o CSS estiver em css/styles.css e a imagem estiver na pasta images no nível principal do site, .. sai de css antes de entrar em images. Uma URL de imagem CSS parte do arquivo CSS, diferentemente do link da folha de estilo, que parte do arquivo HTML. Verifique a requisição da imagem se uma regra válida exibir apenas sua cor alternativa.
Fundos são decoração. Um leitor de tela não os anuncia como imagens. Coloque uma imagem informativa no HTML com texto alternativo significativo. Uma cor alternativa próxima do tom principal da imagem também ajuda o texto a permanecer legível se a imagem demorar a carregar ou estiver ausente.
Controle repetição, escala e posição
Inicialmente, imagens se repetem em seu tamanho natural. no-repeat usa uma cópia; repeat-x cria uma linha e repeat-y, uma coluna. space distribui repetições inteiras com espaços, enquanto round as ajusta para caber um número inteiro.
| Tamanho | Resultado |
|---|---|
cover | Preenche toda a caixa, preservando as proporções; pode haver recorte |
contain | Ajusta a imagem inteira, preservando as proporções; podem sobrar espaços |
200px 100px | Define ambas as dimensões explicitamente |
50% auto | Define a largura relativa e preserva a proporção da imagem |
Para uma caixa de 800px por 400px e uma imagem quadrada de 1000px, cover dimensiona a imagem para um quadrado de 800px, deixando 400px da altura da imagem fora da caixa. Contain a dimensiona para um quadrado de 400px; com no-repeat, 400px da largura da caixa permanecem descobertos. Definir apenas contain não desativa a repetição.
A posição inicial é o canto superior esquerdo. background-position: center centraliza uma imagem; right 20px bottom 10px a desloca a partir dessas bordas. O valor horizontal vem primeiro. Center junto com cover mantém o centro visível quando o recorte é necessário.
Gere e sobreponha imagens
Um gradiente é uma imagem, então coloque-o em background-image:
background-image: linear-gradient(to right, #1e90ff, #8a2be2);
A primeira cor fica à esquerda e a segunda à direita. Ângulos e pontos de cor posicionados dão mais controle; radial-gradient(circle, white, steelblue) se espalha para fora a partir do centro. Um gradiente em background-color é inválido.
Separe várias imagens com vírgulas; a primeira fica por cima. Um gradiente preto translúcido listado antes de uma foto pode escurecer a imagem sem tornar o texto transparente.
Use a propriedade abreviada de forma intencional
background: url("hero.jpg") center / cover no-repeat #1a2b3c; combina imagem, posição, tamanho, repetição e cor. O tamanho vem depois da posição, após uma barra. Apenas a última camada pode ter uma cor. Configurações de fundo omitidas são redefinidas, então um background: white; posterior remove uma imagem anterior.
background-attachment usa inicialmente scroll, movendo-se com o elemento enquanto a página rola. fixed mantém o fundo preso à área de visualização. Teste a caixa e o texto reais depois de adicionar decoração; o dimensionamento e o recorte não devem esconder informações necessárias aos leitores.
Principais conclusões
- Caminhos de imagens CSS são resolvidos a partir da localização da folha de estilo.
coverpreenche e pode recortar;containajusta a imagem inteira e pode deixar espaços.- Imagens de fundo se repetem, a menos que a repetição seja alterada.
- Gradientes são imagens, e a primeira imagem de fundo é desenhada por cima.
- A propriedade abreviada background usa uma barra entre posição e tamanho e redefine configurações omitidas.
- Coloque imagens informativas no HTML; fundos servem como decoração.
6.4 Bordas, cantos arredondados, contornos e sombras
Uma borda faz parte do modelo de caixa. Um contorno ou uma sombra é desenhado ao redor da caixa sem reservar espaço adicional. Escolher entre eles altera tanto a aparência quanto o comportamento de dimensionamento de um estilo.
Dê um estilo à borda
.note {
border: 1px solid #cccccc;
border-left: 4px solid crimson;
padding-left: 12px;
}
A propriedade abreviada define largura, estilo e cor; essas partes podem aparecer em qualquer ordem. O estilo de borda é inicialmente none, então definir apenas largura e cor não produz uma borda visível. Os estilos incluem solid, dashed, dotted, double, groove, ridge, inset e outset, além de none e hidden.
Se a largura for omitida, usa-se medium, geralmente 3px nos navegadores atuais. Se a cor for omitida, usa-se currentColor, acompanhando o texto do elemento. Propriedades abreviadas de lado, como border-top, e propriedades individuais, como border-left-color, permitem adicionar uma exceção depois de uma borda geral. Por exemplo, border-top: none remove apenas a borda superior depois de uma declaração de borda nos quatro lados.
No dimensionamento content-box, uma borda de 2px em cada lado acrescenta 4px à largura e à altura. Aumentar a largura da borda quando o ponteiro passa sobre o elemento pode, portanto, deslocar o conteúdo próximo. Mantenha a largura da borda estável e altere sua cor, ou use um contorno para uma indicação que não ocupe espaço. No dimensionamento border-box, uma borda mais espessa usa mais do interior da caixa declarada.
Arredonde cantos em uma ordem previsível
border-radius: 8px arredonda todos os cantos mesmo quando a própria borda está invisível. Com quatro valores, a ordem é superior esquerdo, superior direito, inferior direito, inferior esquerdo. Dois valores se aplicam a pares de cantos opostos: o primeiro ao superior esquerdo/inferior direito, o segundo ao superior direito/inferior esquerdo.
border-radius: 50% torna uma caixa quadrada circular e uma retangular elíptica. Seu próprio fundo é recortado nessa borda arredondada. O raio em si não recorta conteúdo filho que transborda; essa é uma decisão separada de transbordamento. O raio não aumenta as dimensões medidas da caixa.
Adicione uma linha de foco ou profundidade
.link:focus-visible {
outline: 3px solid navy;
outline-offset: 2px;
}
Um contorno é desenhado fora da borda e não ocupa espaço no layout. Seu afastamento cria um espaço a partir da borda. É uma indicação de foco útil porque pode aparecer sem mover caixas vizinhas.
box-shadow: 0 2px 6px rgb(0 0 0 / 0.2); fornece um deslocamento horizontal de zero, um deslocamento de 2px para baixo, desfoque de 6px e uma cor preta translúcida. Um valor de expansão opcional vem depois do desfoque. inset desenha a sombra dentro; valores separados por vírgulas adicionam várias sombras. Sombras seguem cantos arredondados e não acrescentam espaço ao modelo de caixa.
Verifique um cartão finalizado
Um cartão com width: 280px; padding: 16px; border: 1px solid #dddddd; tem 314px de largura no dimensionamento content-box. Adicione duas vezes 16px e duas vezes 1px a 280px. No dimensionamento border-box, ele continua com 280px, deixando 246px para o conteúdo. Um raio de canto de 12px e uma sombra suave não alteram nenhum dos cálculos. Eles alteram a borda desenhada, não as dimensões usadas para posicionar outras caixas.
Principais conclusões
- Uma borda visível precisa de um estilo como
solid. - Bordas participam do dimensionamento da caixa; contornos e sombras não reservam espaço adicional no layout.
- Raios de canto seguem no sentido horário a partir do canto superior esquerdo, e formas mais curtas agrupam cantos em pares.
- Um raio de 50% torna um quadrado circular e um retângulo elíptico.
- Uma sombra da caixa lista deslocamentos horizontal e vertical, depois desfoque e expansão opcionais e, por fim, a cor.
Exercícios resolvidos de CSS
1Faça uma folha de estilo funcionar e inspecione-a
10 passos
- 1IntroduçãoDe um HTML com significado a uma página estilizada
Um título e um parágrafo já têm estilos fornecidos pelo navegador. Você dará a eles uma fonte e uma cor escolhidas e depois acompanhará o resultado até o CSS.
A primeira tarefa é criar uma conexão confiável entre arquivos. Depois disso, uma regra precisa corresponder ao elemento, conter uma declaração válida e prevalecer para a propriedade relevante. Trate essas etapas como verificações separadas quando a página não mudar.
- 2ExemploVincule um arquivo externo
Suponha que
index.htmlesteja ao lado de uma pasta chamadacss, que contémstyles.css. Adicione isto dentro doheaddo HTML:<link rel="stylesheet" href="css/styles.css">O caminho parte do arquivo HTML e entra na pasta CSS. Salvar regras nesse arquivo externo permite que outras páginas se vinculem ao mesmo design. Um caminho escrito incorretamente pode deixar o HTML legível enquanto nenhum desses estilos do autor é carregado.
- 3ExplicaçãoEscreva e leia uma regra
Coloque isto na folha de estilo vinculada:
p { color: navy; font-size: 18px; }pseleciona parágrafos. As chaves contêm duas declarações, cada uma associando uma propriedade a um valor. Os pontos e vírgulas separam as declarações. Recarregue a página: um parágrafo correspondente recebe texto azul-marinho e tamanho de fonte de 18px, a menos que uma declaração de prioridade maior altere uma dessas propriedades. - 4DesafioCorrija um valor inválido
Uma regra diz
p { font-size: 18 px; color: teal; }. Preveja o efeito e corrija a declaração de tamanho.---reveal---
A cor verde-azulada pode ser aplicada, mas a declaração de tamanho é inválida porque o número e a unidade de uma medida de comprimento devem estar juntos. Altere-a para
font-size: 18px;. O navegador ignora a declaração inválida, não o bloco inteiro, então uma cor que funciona não prova que o valor de tamanho foi aceito. - 5Ideia-chaveObserve o que uma propriedade abreviada limpa
Estas declarações não mantêm a foto:
background-image: url("sky.jpg"); background: lightblue;A propriedade abreviada redefine propriedades de fundo que omite, incluindo a imagem. Escreva primeiro uma propriedade abreviada geral e depois a exceção individual quando ambas devem ser mantidas. Isso explica uma alteração aparentemente válida que desaparece mesmo quando o caminho e o seletor estão corretos.
- 6ConexãoMantenha padrões úteis do navegador
Títulos grandes, espaços entre parágrafos e marcadores de lista já estão presentes por causa da folha de estilo do agente de usuário. Suas regras modificam esse ponto de partida.
body { margin: 0; }remove um espaço padrão específico. Redefinir todas as margens e preenchimentos internos também remove espaçamentos úteis entre parágrafos e recuos de listas. Escolha o nível de título HTML pelo significado e depois altere seu tamanho de fonte; escolher um nível de título menor apenas pela aparência altera a estrutura do documento. - 7DicaInspecione uma propriedade antes de fazer suposições
Clique com o botão direito no parágrafo e escolha Inspecionar. Procure sua regra em Estilos. Uma regra ausente sugere um problema de correspondência ou carregamento; um aviso sugere CSS inválido; uma declaração riscada perdeu na cascata.
Computado mostra os valores resultantes e o diagrama de caixa. Teste uma alteração ali e depois salve-a em sua folha de estilo. Uma alteração feita apenas na inspeção é temporária e desaparece quando o navegador recarrega os arquivos salvos.
- 8DesafioExplique um recuo de lista que permanece
Uma lista de navegação tem
list-style: none, mas seus itens continuam recuados. A regra é válida e não está riscada. O que você deve inspecionar e alterar?---reveal---
Inspecione o preenchimento interno da lista. Remover marcadores não remove seu preenchimento interno padrão no lado inicial. Redefina esse preenchimento, geralmente com
padding: 0, para remover o recuo; adicione espaçamento intencional depois, se o design precisar. A configuração do marcador e o espaçamento da caixa são propriedades separadas. - 9DesafioAcompanhe a alteração que falhou
Uma página ainda mostra o estilo padrão dos parágrafos. O painel Rede informa uma requisição com falha para
styles.css, enquanto o arquivo real écss/styles.css. O que você deve corrigir primeiro e como deve verificar o resultado?---reveal---
Corrija o link da folha de estilo no HTML para
css/styles.css. Recarregue, confirme que a requisição foi bem-sucedida e depois inspecione o parágrafo para encontrar sua regra correspondente. Aumentar a especificidade do seletor não ajuda enquanto a folha de estilo que o contém não está carregando. - 10RecapitulaçãoUm caminho confiável para depuração
Comece com uma declaração de tipo de documento HTML válida e uma folha de estilo vinculada corretamente. Uma regra precisa então de um seletor correspondente e de valores de propriedade válidos. Propriedades abreviadas podem redefinir propriedades individuais anteriores mesmo quando todas as declarações são válidas.
Use Rede para verificar o carregamento, Estilos para correspondência e prioridade e Computado para dimensões finais. Salve os testes bem-sucedidos no arquivo CSS para que sejam mantidos ao recarregar a página. Os padrões do navegador continuam fazendo parte da explicação sempre que suas regras não alteram uma propriedade.
2Leia seletores em relação à árvore HTML
12 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDescreva a correspondência desejada
- 2ExemploReutilize uma classe em vários elementos
- 3DesafioUm espaço muda o alvo
- 4DicaCompartilhe regras sem exigir aninhamento
- 5ExplicaçãoSelecione atributos e estados atuais
- 6ExemploConte irmãos, não apenas parágrafos
- 7DesafioEscolha um marcador sem substituir o texto
- 8ExplicaçãoEncontre filhos diretos em uma lista aninhada
- 9ExemploAcompanhe as duas relações entre irmãos
- 10DesafioObserve se o elemento pai é o mesmo
- 11DesafioCombine localização e estado
- 12RecapitulaçãoLeia o seletor como um teste de correspondência
3Acompanhe um conflito da prioridade à herança
13 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoUm elemento pode ter várias declarações que prevalecem
- 2ExplicaçãoFiltre antes de comparar
- 3ExemploResolva uma cor em linha
- 4Ideia-chaveUse camadas antes de seletores mais fortes
- 5DesafioNomeie a etapa decisiva
- 6ExemploConte as partes do seletor por coluna
- 7ExplicaçãoTrate seletores funcionais
- 8DesafioCompare sem somar colunas
- 9ConexãoDeixe o texto herdar e as caixas permanecerem separadas
- 10ExplicaçãoEscolha a redefinição desejada
- 11DesafioSepare um filho do seletor de seu elemento pai
- 12DesafioAcompanhe a decisão completa
- 13RecapitulaçãoDê a cada decisão sua própria função
4Escolha uma cor e calcule um tamanho relativo
10 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoLeia a referência por trás do valor
- 2ExemploDecodifique três canais de cor
- 3Ideia-chaveMantenha texto opaco sobre um preenchimento translúcido
- 4DesafioVerifique o limiar correto
- 5ExemploCalcule o tamanho do texto antes do espaçamento
- 6ConexãoEvite crescimento repetido em texto aninhado
- 7ExplicaçãoDê às porcentagens a referência correta
- 8DesafioAplique duas referências diferentes
- 9DesafioRelacione tamanho de fonte e contraste
- 10RecapitulaçãoEscolha o que o valor deve acompanhar
5Meça um cartão e explique seus espaços
11 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoComece pelo conteúdo e avance para fora
- 2ExplicaçãoNomeie as quatro camadas
- 3ExemploCalcule um cartão content-box
- 4ExemploAltere o que a largura inclui
- 5DesafioCorrija um transbordamento de largura total
- 6ConexãoFaça um link aceitar dimensões
- 7ExemploDivida o espaço horizontal restante
- 8Ideia-chaveCombine margens verticais
- 9DesafioPreveja um espaço com sinais diferentes
- 10DesafioRecalcule o cartão centralizado
- 11RecapitulaçãoMeça a camada que causa o problema
6Crie texto legível e um cartão finalizado
15 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDê uma finalidade a cada escolha visual
- 2ExplicaçãoEscolha uma lista de fontes alternativas confiável
- 3ExemploCarregue uma versão de fonte e mantenha o texto visível
- 4DesafioIdentifique uma redefinição da propriedade abreviada font
- 5ExemploMantenha o espaçamento entre linhas proporcional
- 6DicaMantenha menus e links compreensíveis
- 7DesafioSepare o bloco de seu conteúdo
- 8ExemploAcompanhe um caminho de fundo
- 9ExemploDimensione uma foto quadrada em uma caixa larga
- 10Ideia-chaveSobreponha uma tonalidade a uma foto
- 11DesafioPreserve a fotografia inteira
- 12ExplicaçãoDesenhe uma borda sem mover os elementos vizinhos
- 13DesafioArredonde a caixa e mantenha a medida
- 14DesafioFinalize um cartão interativo estável
- 15RecapitulaçãoRelacione a decoração às regras subjacentes
Questões de CSS
Conjunto 1: Leia regras e preveja resultados simples10 Questões de Prática
Questão 1 de 10
section tem font-size: 20px; line-height: 1.4;. Seu filho h2 tem font-size: 1.5em e nenhuma declaração de altura de linha. Quais são o tamanho da fonte e a altura da linha do título?Mostrar respostaOcultar resposta
Questão 2 de 10
class="panel featured". Qual seletor exige ambas as palavras de classe nesse mesmo elemento?Mostrar respostaOcultar resposta
Questão 3 de 10
h2 e depois dois elementos p. O que article p:first-child seleciona?Mostrar respostaOcultar resposta
:first-child verifica se o parágrafo é o primeiro elemento filho de seu elemento pai. O título ocupa essa posição, então nenhum dos parágrafos corresponde. Selecionar o primeiro parágrafo confundiria primeiro filho com primeiro do tipo; p:first-of-type expressaria essa outra solicitação neste artigo.Questão 4 de 10
.badge { color: teal; } seguida de .badge { color: maroon; }. Qual cor prevalece?Mostrar respostaOcultar resposta
Questão 5 de 10
.panel > a:hover?Mostrar respostaOcultar resposta
a acrescenta uma à coluna TIPO. O combinador de filho não acrescenta nada, então o resultado é 0-2-1. Contar o combinador como outro tipo resultaria incorretamente em 0-2-2; símbolos de relação não têm peso de especificidade.Questão 6 de 10
#4bd?Mostrar respostaOcultar resposta
#44bbdd. Acrescentar zeros para formar #40b0d0 altera os valores dos canais, criando uma cor diferente em vez de expandir a forma abreviada.Questão 7 de 10
width: 240px; padding: 12px; border: 3px solid; margin: 8px;. Qual é a largura de sua caixa até a borda?Mostrar respostaOcultar resposta
Questão 8 de 10
Mostrar respostaOcultar resposta
sans-serif sem aspas continua disponível quando as fontes nomeadas estão ausentes. Colocar essa família genérica entre aspas a transforma em um nome literal de fonte. A lista pode então perder a alternativa de categoria pretendida, embora a declaração ainda seja interpretada.Questão 9 de 10
color: 18px; padding: 12px;. O que acontece com essas declarações?Mostrar respostaOcultar resposta
18px é uma medida de comprimento, então não é um valor válido para color; o navegador ignora essa declaração. O valor do preenchimento interno é válido e continua sendo aplicado. Um valor inválido não invalida todas as declarações no mesmo bloco, por isso rejeitar ambas descartaria um estilo que funciona.Questão 10 de 10
Mostrar respostaOcultar resposta
Conjunto 2: Aplique seletores, espaçamento e decoração10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
style="color: coral;" e corresponde a .notice { color: indigo !important; } no CSS do autor. Qual cor é usada?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
font-size: 1.5em; padding: 0.5em;. Quanto preenchimento interno é definido em cada lado?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
width: 180px não afeta seu tamanho. Qual valor de display o mantém em nível de linha e permite essa largura?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
width: 260px; padding: 18px; border: 2px solid;. Qual é a largura de sua área de conteúdo?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
background-color: linear-gradient(white, navy);. Por que o gradiente não é mostrado?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
border-width: 4px; border-color: teal; e nenhuma outra declaração de borda. Por que nenhuma borda fica visível?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
@layer base, widgets;. Base contém #info { color: teal; }; widgets contém .card { color: maroon; }. Uma regra fora de camadas, p { color: navy; }, também corresponde a <p id="info" class="card">. Qual cor prevalece?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
/site/pages/team.html; a folha de estilo é /site/css/theme.css. Qual href relativo alcança a folha de estilo?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
section contém um h3, um p, um aside e depois outro p. O que h3 ~ p seleciona dentro dessa seção?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
#article { color: olive; }, e seu parágrafo filho corresponde a p { color: purple; }. Qual cor o parágrafo usa?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 3: Acompanhe valores em estruturas reais de páginas10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
.alert.urgent não corresponde a <p class="alert"><span class="urgent">Update</span></p>. Qual seletor seleciona o span urgente apenas quando ele está dentro de um alerta?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
href="manual.PDF". Qual seletor corresponde a um final PDF independentemente de maiúsculas ou minúsculas?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
div class="tools" contém um ul direto com o link A dentro de um li, além de uma section que contém outro ul com o link B. O ponteiro está sobre ambos os links. A que .tools > ul a:hover corresponde?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
#menu a e .menu a.selected. Ambas correspondem a um link. Qual seletor tem maior especificidade?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
div { display: initial; }. Qual valor de display a div recebe dessa declaração?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
background-color: rgb(0 0 0 / 0.5); color: white; sobre uma foto. Uma pessoa desenvolvedora substitui o fundo com alfa por preto opaco e adiciona opacity: 0.5 à legenda. O que muda?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
padding-top: 10% é resolvido em seu filho?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
background-size: contain; background-position: center;?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 4: Resolva estilos concorrentes e caixas que mudam10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
list-style: none;, mas seus itens ainda estão recuados. Qual regra adicional remove o recuo padrão?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
h2, p..lead, blockquote { color: teal; } não altera nenhum desses elementos. O que explica o resultado?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
section contém <h2>News</h2><aside><p>A</p></aside><p>B</p><p>C</p>. Qual texto é selecionado por h2 + p e por h2 ~ p, respectivamente?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
@layer foundations, details;. Foundations tem .flag { color: teal !important; }; details tem #notice { color: purple !important; }; uma regra fora de camadas tem p { color: navy !important; }. Todas correspondem a um parágrafo. Qual cor prevalece?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
width: 100%; padding: 0 15px; em uma área de conteúdo de 480px de largura, sem bordas ou margens. Qual é a largura de sua caixa até a borda?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
width: 320px; padding: 18px; border: 2px solid; com dimensionamento content-box. Ela deve continuar com 360px de largura depois de mudar para border-box e aumentar o preenchimento interno para 24px. Quais são a largura declarada e a largura do conteúdo resultantes?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
font-weight: 700; font-style: italic; e depois font: 1.25rem/1.4 Arial, sans-serif;. Quais peso e estilo são aplicados após a propriedade abreviada?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 5: Diagnostique e explique combinações desconhecidas10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
width: 160px é válido e não está riscado, mas o span continua tendo apenas a largura de seu texto. O que explica isso?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
li:nth-child(3n+2)?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
<section id="main"> corresponde a :where(#main) a { color: teal; }, :is(#spare, section) a { color: purple; } e depois .chosen:hover { color: navy; }. Ele tem a classe chosen e o ponteiro está sobre ele. Qual cor prevalece?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
color: maroon; background-color: beige;. Seu filho tem color: unset; background-color: unset; e nenhum outro estilo relevante. Quais são os valores de cor e fundo do próprio filho?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
width: calc(100% - 4rem); padding: 1em; border: 2px solid; font-size: 1.5rem;. Qual é a largura do conteúdo do filho?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
width: 320px; margin: 0 auto; text-align: center;. Quais margens horizontais e alinhamento de texto resultam?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
@font-face { font-family: "Lumen Sans"; src: url("fonts/lumen-regular.woff2") format("woff2"); }. Qual nome uma lista de fontes deve usar para solicitar essa versão?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
a:hover { color: teal; } e depois a:visited { color: purple; }. O ponteiro está sobre um link visitado. Qual alteração torna sua cor verde-azulada enquanto o ponteiro está sobre ele, preservando a cor roxa de visitado quando não está?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
/site/index.html vincula /site/css/main.css. Esse CSS usa background-image: url("images/banner.jpg");, mas a imagem está em /site/images/banner.jpg. Uma regra posterior também define background: navy;. Qual correção mantém o azul-marinho atrás da imagem?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
border-radius: 50%. Qual forma arredondada seu fundo assume?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Travou em uma questão sua? Ajuda com Tarefas
Termos-Chave
A
Afastamento do contorno
Alfa
Alinhamento do texto
Altura da linha
Á
Área de conteúdo
B
Borda
C
Caixa de bloco
Caixa de bloco em linha
Caixa em linha
width: 200px enquanto ele permanece em linha.Camada de cascata
Camada de fundo
Cascata
Colapso de margens
Combinador de irmão adjacente
+, seleciona um elemento correspondente imediatamente depois de outro quando ambos compartilham o mesmo elemento pai.h2 + p alcança um parágrafo de abertura, mas deixa de corresponder quando um aside aparece entre eles.Combinador de irmãos subsequentes
~, seleciona irmãos posteriores correspondentes de um elemento, permitindo outros irmãos entre eles.h2 ~ p pode alcançar dois parágrafos separados por um aside quando todos compartilham o elemento pai do título.Conteúdo gerado
::after precisa de um valor de content; instruções essenciais permanecem no HTML.Contorno
Cor atual
currentColor representa a própria cor do texto do elemento quando outra propriedade de cor precisa de um valor correspondente.currentColor muda com a cor do texto quando uma regra de hover atualiza apenas color.Cor hexadecimal
#3ac resulta em #33aacc porque cada dígito se torna um par repetido para seu próprio canal.Cor HSL
Cor RGB
rgb().rgb(30 144 255) fornece as mesmas quantidades de canais que o valor hexadecimal de seis dígitos #1e90ff.CSS
D
Declaração
color: navy;, a declaração define a cor do texto, e o ponto e vírgula a separa da próxima configuração.Declaração importante
!important, que lhe dá prioridade sobre declarações normais da mesma origem.p.Decoração do texto
Descendente
nav a alcança um link de navegação mesmo quando uma lista e um item de lista ficam entre ele e o nav.Dimensionamento da caixa
E
Especificidade
Estado de foco visível
a:focus-visible antes de ativá-lo.Estado do link
F
Família genérica de fontes
sans-serif entre aspas transforma-o em um nome literal de fonte e remove sua função de alternativa genérica da lista.Filho
.menu > li deixa de fora itens cujo elemento pai é uma lista aninhada separada dentro do menu.Folha de estilo
css/styles.css permite que uma página carregue seus estilos do arquivo na pasta vizinha.Folha de estilo do agente de usuário
Fonte variável
Fonte web
Função calc()
calc() combina valores CSS compatíveis em uma expressão, permitindo que uma medida de comprimento misture quantidades relativas e absolutas.calc(100% - 40px) subtrai uma quantidade fixa de uma largura relativa ao contêiner, com espaços ao redor do sinal de menos.G
Gradiente
H
Herança
I
Imagem de fundo
Irmão
L
Lista de fontes alternativas
sans-serif sem aspas ainda fornece uma fonte adequada em um dispositivo sem as fontes nomeadas.Lista de seletores
h1, h2, h3 pode dar aos três níveis de título uma família de fontes sem exigir aninhamento.M
Marcador de lista
::marker.Margem
Margem automática
Modo de padrões
<!DOCTYPE html> no início evita o comportamento antigo que pode afetar uma página no modo de compatibilidade.O
Ordem no código-fonte
Origem do estilo
P
Painel Estilos
Palavra-chave inherit
inherit atribui explicitamente a uma propriedade o valor computado do elemento pai, mesmo quando essa propriedade normalmente não é herdada.font: inherit em controles pode substituir a fonte atribuída pelo navegador pela fonte do texto ao redor.Palavra-chave initial
initial seleciona o valor inicial de uma propriedade na especificação CSS, independentemente da regra padrão do elemento HTML.display: initial a uma div resulta em exibição inline, embora o navegador normalmente a torne block.Palavra-chave revert
revert reverte uma propriedade para antes da origem de estilo atual, revelando um valor aplicável de uma origem inferior.display: revert pode restaurar a exibição block normalmente atribuída pelo navegador a uma div.Palavra-chave revert-layer
revert-layer reverte o valor de uma propriedade para antes da camada de cascata atual, permitindo que uma fonte de prioridade inferior o forneça.Palavra-chave unset
unset segue a herança normal para uma propriedade herdada e usa o valor inicial para uma propriedade não herdada.unset em color pode preservar a cor do texto do elemento pai, enquanto usá-lo em margin remove uma margem local.Pixel CSS
Porcentagem
Posição da imagem de fundo
Preenchimento interno
Propriedade abreviada
background: white; pode remover uma foto atribuída anteriormente por background-image.Pseudoclasse
:checked pode selecionar uma caixa de seleção cujo estado marcado atual não é representado por uma classe.Pseudoclasse estrutural
p:first-child.Pseudoelemento
li::marker pode colorir marcadores de lista enquanto mantém a cor existente do texto do item.R
Raio de arredondamento da borda
Razão de contraste
Redefinição de estilos
Regra @font-face
@font-face atribui um nome de família CSS e características de versão a um recurso de fonte que pode ser usado em uma lista de fontes alternativas.S
Seletor composto
p.note alcança um parágrafo com a classe note, enquanto p .note solicita um descendente.Seletor de atributo
a[href$=".pdf" i] pode estilizar links de documentos mesmo quando a extensão do arquivo está em maiúsculas.Seletor de classe
.notice corresponde tanto a um aviso simples quanto a um elemento com class="card notice".Seletor de especificidade zero
:where() também remove o peso de seus argumentos.:where(#main) p continua fácil de sobrescrever porque apenas o parágrafo contribui com um ponto de tipo.Seletor de ID
#site-header pode ser mais difícil de sobrescrever depois do que um que usa uma classe reutilizável de cabeçalho.Seletor de tipo
p pode estabelecer o espaçamento dos parágrafos em toda a página sem atribuir uma classe a cada um.Seletor universal
*, corresponde a todos os elementos, mas contribui com especificidade zero, sendo útil em padrões abrangentes e redefinições de estilos.* pode redefinir margens, enquanto um seletor de classe pode fornecer espaçamento depois, com maior especificidade.Sombra da caixa
T
Tamanho da imagem de fundo
Transbordamento
overflow: auto pode permitir a rolagem de sua linha longa sem tornar a página inteira mais larga.Transformação de maiúsculas e minúsculas
Tripla ID-CLASSE-TIPO
a[href]:hover tem a tripla 0-2-1, com o atributo e hover contados como CLASSE.U
Unidade ch
ch é uma medida de comprimento relativa à fonte, baseada na largura de avanço do caractere zero, frequentemente usada para limitar a largura de colunas de texto.max-width: 65ch acompanha o tamanho da fonte sem prometer exatamente 65 letras por linha.Unidade em
em é uma medida de comprimento relativa à fonte que usa o tamanho da fonte do elemento pai para font-size e o tamanho da fonte do próprio elemento nas demais propriedades.2em passa a ser 40px em vez de acompanhar novamente o elemento pai.Unidade relativa à área de visualização
vw usando a largura e vh usando a altura como referência.10vh é 80px quando a altura da área de visualização é 800 pixels CSS, mesmo dentro de um contêiner mais baixo.Unidade rem
rem é uma medida de comprimento relativa ao tamanho da fonte do elemento raiz, fornecendo uma referência compartilhada entre elementos aninhados na página.1.25rem mantêm o mesmo tamanho de texto quando compartilham um tamanho de raiz inalterado.V
Valor computado
em se torna pixels, enquanto uma largura em porcentagem depende do layout.Sobre esta aula
Crie seus próprios Materiais de Estudo
Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.