Adicione um espaço (“”) após um elemento usando: after


274

Quero adicionar um espaço em branco após algum conteúdo, no entanto, content: " ";isso não parece funcionar.

Este é o meu código:

h2:after {
    content: " ";
}

... o que não funciona, no entanto:

h2:after {
    content: "-";
}

O que estou fazendo de errado?


2
Eu não entendo o resultado esperado. Você está tentando adicionar paddingusando content. Parece que seria impossível dizer se o espaço foi adicionado.
— Fncomp 29/03

2
É uma pergunta estranha, você deve usar preenchimento para adicionar espaço, sem conteúdo: depois , talvez você não saiba a diferença entre display: inline e display: block?
— Littlemad

Estou tentando adicionar preenchimento via conteúdo.
— Bradley.ayers 29/03

2
Descobri que adicionar um espaço usando esse método também era útil quando overflow: hiddenum elemento de bloco cortava os últimos pixels do último caractere do texto em itálico. O preenchimento não ajudaria neste caso.
— Joe Waller

3
O preenchimento não ajuda se você deseja sublinhar seu espaço usando text-decoration: underline;qualquer um.
— Dmitry_romanov 4/14

Respostas:


142

Explicação

Vale a pena notar que seu código insere um espaço

h2::after {
  content: " ";
}

No entanto, é imediatamente removido.

Nas caixas embutidas anônimas ,

O conteúdo do espaço em branco que seria recolhido posteriormente de acordo com a propriedade 'espaço em branco' não gera caixas inline anônimas.

E do modelo de processamento 'espaço em branco' ,

Se um espaço (U + 0020) no final de uma linha tiver 'espaço em branco' definido como 'normal', 'nowrap' ou 'pré-linha', ele também será removido.

Solução

Portanto, se você não deseja que o espaço seja removido, defina white-spacecomo preou pre-wrap.

h2 {
  text-decoration: underline;
}
h2.space::after {
  content: " ";
  white-space: pre;
}
<h2>I don't have space:</h2>
<h2 class="space">I have space:</h2>

Não use espaços sem quebra (U + 00a0). Eles devem impedir quebras de linha entre as palavras. Eles não devem ser usados ​​como espaço não recolhível, que não seria semântico.


3
Parece que white-spacenão há suporte no iE11 nem no Edge (consulte caniuse.com/#search=white-space ). é, portanto, a resposta do usuário bradley.ayers melhor? (Eu não sei, existem outros aspectos como semântica ou comportamento de quebra de linha)
— Chimos

561

Acontece que ele precisa ser especificado via unicode de escape. Esta pergunta está relacionada e contém a resposta.

A solução:

h2:after {
    content: "\00a0";
}

64
Não vale nada, pois isso adicionará um espaço NON-BREAKING. Se você deseja um espaço normal, precisa de "\ 0020" em vez de "\ 00A0".
— Offlein

4
Também vale a pena notar que adicionar um espaço normal não fará nada. Se você não tiver espaço em branco entre o texto neste e o elemento anterior, isso não adicionará um. Um espaço normal entrará em colapso.
— Md

2
@Offlein, adicione `\ 0020` como uma resposta separada, porque algumas fontes, por exemplo, Font Awesome não permitirão \00A0exibir um espaço, e se você quiser um espaço entre os elementos em vez de antes ou depois de não poder usar o preenchimento
— Mousey

Como você adiciona espaço depois de algo que já está no conteúdo?
— vsync

2
@ FrançoisDupont, você tem um recurso que descreve essa alteração?
— Isherwood

9

Eu precisava disso em vez de usar preenchimento porque usei contêineres de bloco embutido para exibir uma série de eventos individuais em uma linha do tempo do fluxo de trabalho. O último evento na linha do tempo não precisou de seta após ele.

Terminou com algo como:

.transaction-tile:after {
  content: "\f105";
}

.transaction-tile:last-child:after {
  content: "\00a0";
}

Usado fontawesome para o personagem gt (chevron). Por qualquer motivo "conteúdo: nenhum;" estava produzindo problemas de alinhamento no último bloco.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.