Curso de CSS / Estilos de parágrafos e listas

O CSS controla o alinhamento de parágrafos, recuo, espaçamento entre linhas e margens sem alterar o significado do texto. Para listas, o estilo e a posição do marcador afetam a aparência dos itens que ocupam várias linhas, enquanto o HTML ainda fornece a estrutura e ordenação da lista.

Separe o espaçamento entre linhas do espaçamento entre parágrafos

.article p {
  line-height: 1.65;
  margin-block: 0 1.2em;
}

Ao aumentar line-height, como explicado em Fontes, tamanho do texto e altura de linha, o espaçamento das linhas no mesmo parágrafo se torna maior. Aumentar margin-block aumenta o espaço externo entre a caixa do parágrafo e o conteúdo seguinte. Usar os dois de forma intercambiável pode parecer adequado em parágrafos curtos, mas pode resultar em espaçamento excessivo entre linhas em parágrafos longos.

margin-block: 0 1.2em define a margem inicial do bloco como zero e a margem final do bloco como 1.2em. Neste exemplo de escrita horizontal, essas são a parte superior e inferior. A escrita vertical altera as direções físicas. Aqui, em usa o próprio tamanho de fonte do parágrafo. Veja MDN: margin block.

Os navegadores fornecem margens padrão para parágrafos e listas. Substitua-as deliberadamente para diferenciar esses padrões do seu próprio espaçamento. As margens verticais adjacentes de blocos podem se colapsar em vez de se somar. Este exemplo define a margem inicial do parágrafo para zero e controla o espaçamento com sua margem final. Para mais detalhes, veja O Modelo de Caixa CSS: Conteúdo, Preenchimento, Borda e Margem.

Compare o alinhamento de texto e a indentação da primeira linha

.article p { text-align: start; }

.article .intro { text-indent: 1.5em; }

text-align determina o alinhamento do texto dentro de uma linha. start é o início do fluxo de texto e está à esquerda em um documento básico da esquerda para a direita. Esta não é uma propriedade que move toda a caixa de parágrafo para o centro da tela. Descrições longas centralizadas têm diferentes posições iniciais para cada linha, então escolha primeiro um alinhamento fácil de ler para o corpo do texto.

text-indent: 1.5em indenta o início da primeira linha, não cada linha. O exemplo inclui class="intro" no primeiro parágrafo de todo o exemplo para que você possa observá-lo em ação. Se você quiser indentar um parágrafo inteiro, será necessário revisar outras configurações, como padding. Altere o alinhamento, a indentação e as margens, e compare quais partes se movem.

Posicione marcadores de lista e texto em várias linhas

Use ol para processos ordenados e ul para itens onde a ordem não é importante. Alterar a forma do número para um ponto no CSS não muda a estrutura HTML original. Escolha primeiro o significado do conteúdo e depois ajuste o método de exibição.

Propriedade O que controla O que observar em entradas longas
list-style-type Tipos de símbolos de exibição, como pontos e números Você consegue entender o significado da ordem?
list-style-position: outside Exibir símbolo fora da caixa de conteúdo A segunda linha corresponde ao início da primeira linha?
list-style-position: inside Incluir símbolo na primeira linha A segunda linha vai até o fim do símbolo?
padding-inline-start Espaçamento interno no início do fluxo de texto O símbolo está cortado ou não está preso ao texto?

Com outside, os marcadores de lista ficam fora da caixa de conteúdo, então reserve espaço no início em linha da lista. Neste exemplo da esquerda para a direita, padding-inline-start: 1.6em fornece preenchimento à esquerda. Com inside, o marcador ocupa espaço na primeira linha; as linhas subsequentes podem se estender abaixo de sua posição. Compare itens com textos suficientemente longos para ocupar várias linhas.

Remover os marcadores da lista também exige uma verificação de acessibilidade. O Safari pode omitir uma lista com list-style: none da árvore de acessibilidade quando ela está fora de nav. Considere role="list" quando for necessário manter a semântica da lista. O exemplo completo desta lição mantém seus marcadores. Veja MDN: estilo de lista.

Separe o espaçamento dos itens do espaçamento entre linhas

.article li + li { margin-block-start: 0.45em; }

li + li seleciona o li que vem imediatamente após outro li. Não cria espaço extra antes do primeiro item, apenas entre o segundo e os itens subsequentes. Partes dentro de um item que se estendem por várias linhas são controladas pela altura da linha herdada da lista. Se você apenas aumentar o espaçamento entre itens porque o conteúdo é denso, as frases dentro do item ainda podem parecer estreitas.

Execute o exemplo completo de parágrafo e lista

Salve o código abaixo como UTF-8 em paragraphs.html e abra-o. Como mantivemos as frases em ambas as listas iguais, só podemos compará-las onde aparecem. O recuo da primeira linha e as listas ordenadas também são verificados no mesmo arquivo.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Comparing paragraphs and lists</title>
  <style>
    body { margin: 24px; font-family: sans-serif; color: #333; }
    .article { max-width: 65ch; }
    .article p { line-height: 1.65; margin-block: 0 1.2em; text-align: start; }
    .article .intro { text-indent: 1.5em; }
    .article ul, .article ol { padding-inline-start: 1.6em; margin-block: 0 1.2em; line-height: 1.65; }
    .article li + li { margin-block-start: 0.45em; }
    .outside { list-style-position: outside; }
    .inside { list-style-position: inside; }
    ol { list-style-type: decimal; }
  </style>
</head>
<body>
  <main class="article">
    <h1>Small Garden visitor guide</h1>
    <p class="intro">If this is your first visit, check the signs first. This paragraph has a first-line indent. When the text wraps, the remaining lines return to the normal paragraph edge.</p>
    <p>Use line-height for spacing between lines and margin for spacing between paragraphs. Narrow the window and check readability as the text wraps onto more lines.</p>
    <h2>outside list</h2>
    <ul class="outside">
      <li>Check the soil before watering. Wipe up water spilled outside the pot so that other visitors do not slip.</li>
      <li>Read the labels and signs, then follow the path. Compare how the second line of a wrapped list item aligns with its first line.</li>
    </ul>
    <h2>inside list</h2>
    <ul class="inside">
      <li>Check the soil before watering. Wipe up water spilled outside the pot so that other visitors do not slip.</li>
      <li>Read the labels and signs, then follow the path. Compare how the second line of a wrapped list item aligns with its first line.</li>
    </ul>
    <h2>Preparation in order</h2>
    <ol><li>Read the notice.</li><li>Prepare a watering can.</li><li>Put tools back after use.</li></ol>
  </main>
</body>
</html>

Teste cada alteração de espaçamento

  1. Reduza a largura da janela para que os itens da lista ocupem mais de uma linha. Com outside, compare o início das linhas de texto; com inside, observe se a segunda linha se estende sob a posição do marcador.
  2. Altere text-indent em .intro para 0. Verifique se a posição inicial apenas da primeira linha do primeiro parágrafo mudou e restaure 1.5em.
  3. Altere o segundo valor de margin-block do parágrafo de 1.2em para 0. Certifique-se de que o espaço entre parágrafos seja reduzido, mantendo o espaçamento de linha dentro do parágrafo. Em seguida, altere apenas o line-height para 1.2 para distinguir a diferença e depois retorne ao valor original.
  4. Compare alterando 0.45em de li + li para 0 e 1em. Certifique-se de que o espaçamento entre linhas dentro do item e o espaço antes do primeiro item não diferem.

Se um símbolo estiver truncado, verifique o preenchimento da lista e o transbordamento dos elementos externos. Se apenas alguns parágrafos estiverem espaçados de forma diferente, verifique o seletor e os estilos padrão do navegador. 65ch em todo o exemplo é o comprimento máximo baseado na largura do número 0 e não é um valor fixo para o número de caracteres.