Adicionando entidades HTML usando conteúdo CSS

1013

Como você usa a propriedade CSS content para adicionar entidades HTML ?

Usar algo assim apenas imprime  na tela em vez do espaço ininterrupto:

.breadcrumbs a:before {
    content: ' ';
}
nickf
fonte
5
Em um sentido diferente, a adição de conteúdo usando CSS viola a separação de preocupações; o CSS é destinado apenas a definições de estilo. É preferível evitar do ponto de vista da acessibilidade, pois a desativação do CSS estraga toda a marca. No entanto, é bom adicionar imagens usando essa técnica.
questzen 10/10/08
95
Depende. Nesse caso, é para fins de apresentação. Seria "violar" o SoC para colocar ">" no html
mathieu
2
Apenas uma pergunta, você acha que seria melhor uma lista ordenada? Quero dizer, é uma lista com um pedido, não é?
alex
3
@questzen - Eu acho que é perfeitamente aceitável (e de boa forma) usar CSS :afterpara definir, por exemplo, o indicador de classificação asc / desc em uma coluna classificada.
Josh M.
9
Notei que as pessoas enlouqueceram com o princípio do SoC. Céus, que tipo de conteúdo é um sinal de ">" para você ?! Tenha piedade! é apenas um ícone neste contexto, um widget, um marcador, o nome dele. Para mim, conteúdo é algo que eu gostaria de ser pesquisável.
User776686

Respostas:

1063

Você precisa usar o unicode de escape:

Gostar

.breadcrumbs a:before {
    content: '\0000a0';
}

Mais informações em: http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/

mathieu
fonte
57
Os zeros à esquerda são supérfluos, consulte CSS 2.1: 4.3.7 Strings . '>\a0'é suficiente.
PointedEars
18
@dlamblin Além disso, para evitar que os caracteres sejam interpretados como parte da sequência de escape de maneira confiável , adicione espaço em branco padrão: '>\a0 bc'é exibido > bc.
PointedEars
18
Minha ferramenta amp-what.com/#q=%3E fornece um modo "CSS". Escolha "css" na parte inferior da página. De acordo com a referência CSS acima, eles precisam ser delimitados por espaço quando são ambíguos.
ndp
@mathieu Você pode usar o 'conteúdo' para acrescentar uma imagem? Apenas pensando
weia design
1
@ Adam, não, se você quiser acrescentar uma imagem, use "background-image" e exiba: inline-block; e largura: 123px; altura: 123px; (utilização exacta largura / altura)
Nathan JB
177

CSS não é HTML.  é uma referência de caractere nomeado em HTML; equivalente à referência decimal de caracteres numéricos  . 160 é o ponto de código decimal do NO-BREAK SPACEcaractere em Unicode (ou UCS-2 ; consulte a especificação HTML 4.01 ). A representação hexadecimal desse ponto de código é U + 00A0 (160 = 10 × 16 1 + 0 × 16 0 ). Você encontrará isso nos gráficos de códigos Unicode e no banco de dados de caracteres .

No CSS, você precisa usar uma sequência de escape Unicode para esses caracteres, com base no valor hexadecimal do ponto de código de um caractere. Então você precisa escrever

.breadcrumbs a:before {
  content: '\a0';
}

Isso funciona desde que a sequência de escape seja a última em um valor de sequência. Se os caracteres seguirem, há duas maneiras de evitar erros de interpretação:

a) (mencionado por outros) Use exatamente seis dígitos hexadecimais para a sequência de escape:

.breadcrumbs a:before {
  content: '\0000a0foo';
}

b) Adicione um caractere de espaço em branco (por exemplo, espaço) após a sequência de escape:

.breadcrumbs a:before {
  content: '\a0 foo';
}

(Como fé um dígito hexadecimal, de \a0foutra forma significaria GURMUKHI LETTER EEaqui ou ਏ se você tiver uma fonte adequada.)

O espaço em branco delimitador será ignorado, e isso será exibido  foo, onde o espaço exibido aqui seria um NO-BREAK SPACEcaractere.

A abordagem de espaço em branco ( '\a0 foo') possui as seguintes vantagens sobre a abordagem de seis dígitos ( '\0000a0foo'):

  • é mais fácil digitar , porque os zeros à esquerda não são necessários e os dígitos não precisam ser contados;
  • é mais fácil de ler , porque há espaço em branco entre a sequência de escape e o texto a seguir, e os dígitos não precisam ser contados;
  • que requer menos espaço , porque zeros à esquerda não são necessárias;
  • é compatível com versões anteriores , porque o Unicode que suporta pontos de código além de U + 10FFFF no futuro exigiria uma modificação da Especificação CSS.

Portanto, para exibir um espaço após um caractere de escape, use dois espaços na folha de estilo -

.breadcrumbs a:before {
  content: '\a0  foo';
}

- ou torne explícito:

.breadcrumbs a:before {
  content: '\a0\20 foo';
}

Veja CSS 2.1, seção "4.1.3 Caracteres e maiúsculas" para detalhes.

Orelhas pontudas
fonte
+1 para o "para exibir um espaço após um caractere de escape" truque, mas tenho que mencionar que a adição de um nbsp e depois uma espécie de espaço de derrota a finalidade do nbsp;)
TWiStErRob
@TWiStErRob Não, uma combinação de um caractere de espaço sem quebra seguido por um caractere de espaço com quebra (ou vice-versa) exibirá uma lacuna na largura de dois caracteres de espaço, enquanto dois ou mais caracteres de espaço literal exibirão apenas uma lacuna de a largura de um caractere de espaço como analisador do mecanismo de layout reduz o espaço em branco consecutivo (incluindo nova linha) em um caractere de espaço, a menos que a white-spacepropriedade CSS declare o contrário.
PointedEars 23/01
sim, eu sei sobre o colapso, mas o ponto do nbsp é que não é quebra, os caracteres da palavra também não são quebra por padrão, portanto, adicionar um espaço de quebra ao lado de um não quebra não faz sentido, o resultado final será quebra. Eu estou falando para white-space: normal.
TWiStErRob
@TWiStErRob Leia minha resposta com mais cuidado. É um exemplo de “exibição de um espaço após um caractere de escape”. O código original tinha um NO-BREAK SPACEcaractere, então usei a sequência de escape para ele. Você pode escolher qualquer outra sequência de escape; se necessário, você também pode declarar white-space: nowrap.
PointedEars 25/01
81

Atualização : PointedEars menciona que o substituto correto  em todas as situações css
'\a0 'implicaria que o espaço é um terminador da cadeia hexadecimal e é absorvido pela sequência de escape. Ele ressaltou ainda essa descrição autorizada, que soa como uma boa solução para o problema que descrevi e corrigi abaixo.

O que você precisa fazer é usar o unicode escapado. Apesar do que lhe foi dito, \00a0não é um substituto perfeito para o  CSS; então tente:

content:'>\a0 ';          /* or */
content:'>\0000a0';       /* because you'll find: */
content:'No\a0 Break';    /* and */
content:'No\0000a0Break'; /* becomes No Break as opposed to below */

Especificamente usando \0000a0como  . Se você tentar, conforme sugerido por mathieu e millikin:

content:'No\00a0Break'   /* becomes No਋reak */

Leva o B para os caracteres hexadecimais com escape. O mesmo ocorre com 0-9a-fA-F.

dlamblin
fonte
6
Você só precisa colocar um espaço após a seqüência de escape, conforme especificado: '\a0 Break'. não'\0000a0Break' é confiável.
PointedEars
@PointedEars Interessante, então esse espaço é um terminador e não é incluído na string?
dlamblin
2
Veja CSS 2.1, seção "4.1.3 Caracteres e maiúsculas e minúsculas" . O que também mostra que sua abordagem DEVE ser confiável de acordo com o CSS 2.1. Mas acho que a abordagem de espaço em branco é mais limpa (compatível com versões anteriores) e tem uma área ocupada menor.
PointedEars
47

No CSS, você precisa usar uma sequência de escape Unicode no lugar de Entidades HTML. Isso é baseado no valor hexadecimal de um caractere.

Eu descobri que a maneira mais fácil de converter símbolo em seu equivalente hexadecimal é, como de ▾ ( ▾) \25BEpara, usando a calculadora da Microsoft =)

Sim. Ative o modo de programadores, ligue o sistema decimal, entre 9662e depois mude para hexadecimal e você obterá 25BE. Em seguida, basta adicionar uma barra invertida \no início.

netgoblin
fonte
4
Embora totalmente útil, ele realmente não responde à pergunta, portanto seria melhor como um comentário para a pergunta.
precisa saber é o seguinte
1
Seta pequena preta apontando para a direita (▸ \25B8 ▸ ▸) ftw. Além disso, consulte en.wikipedia.org/wiki/Geometric_Shapes para obter mais informações.
Joel Purra
2Joel Purra, leia a Wiki em mais tempo. você confundiu os símbolos.
Netgoblin 18/10/12
@netgoblin: como assim? Por acaso, gosto de uma pequena seta preta apontando para a direita.
Joel Purra
1
Eu uso este graphemica.com, onde você pode obter o decimal, hexadecimal e assim por diante #
Mike
34

Use o código hexadecimal para um espaço sem quebra. Algo assim:

.breadcrumbs a:before {
    content: '>\00a0';
}
John Millikin
fonte
17

Existe uma maneira de colar um nbspCharMap aberto e copiar o caractere 160 . No entanto, nesse caso, eu provavelmente colocaria espaço no preenchimento, assim:

.breadcrumbs a:before { content: '>'; padding-right: .5em; }

Você pode precisar definir a farinha de rosca display:inline-blockou algo assim.

Ousar
fonte
4
Em vez de colar o nbsp, eu continuaria usando uma entidade, para que fique claro para os futuros mantenedores que é diferente de um espaço.
nickf
2
por outro lado, você não faz migalhas de pão como deveriam, ou seja: o símbolo deve estar alinhado com a migalha de pão, e não apenas um estilo visual. pelo menos se você quiser que o Google veja suas migalhas de pão e liste-as sob sua listagem no mecanismo de pesquisa.
Dementic
10

Por exemplo :

http://character-code.com/arrows-html-codes.php

Exemplo: Se você deseja selecionar seu personagem, eu selecionei "& # 8620" "& # x21ac" (usamos valores HEX )

.breadcrumbs a:before {
    content: '\0021ac';
}

Resultado: ↬

É isso aí :)

Ferhat KOÇER
fonte
usei o conteúdo: '\ 10095'; . Mas a saída não está aparecendo. em vez do ícone, está mostrando um retângulo.
kapil
0

Eu sei que este é um post bastante antigo, mas se o espaçamento for todo o seu depois, por que não simplesmente:

.breadcrumbs a::before {
    content: '>';
    margin-left: 8px;
    margin-right: 8px;
}

Eu já usei esse método antes. Ele envolve perfeitamente outras linhas com ">" ao lado nos meus testes.

Brian Welch
fonte
-2

Aqui estão duas maneiras:

  • Em HTML:

    <div class="ics">&#9969;</div>

Isso resultará em ⛱

  • Em Css:

    .ics::before {content: "\9969;"}

com código HTML <div class="ics"></div>

Isso também resulta em ⛱

Tarandeep Singh
fonte
A resposta correta é .ics :: before {content: '\ 9969';}
Marco Scarnatto