Ajout d'entités HTML à l'aide de contenu CSS

1013

Comment utilisez-vous la propriété CSS content pour ajouter des entités HTML ?

Utiliser quelque chose comme ça imprime simplement  à l'écran au lieu de l'espace insécable:

.breadcrumbs a:before {
    content: ' ';
}
nickf
la source
5
Dans un sens différent, l'ajout de contenu à l'aide de CSS viole la séparation des préoccupations, CSS est destiné uniquement aux définitions de style. Il est préférable d'éviter du point de vue de l'accessibilité, car la désactivation de CSS visse tout le balisage. Cependant, il est agréable d'ajouter des images en utilisant cette technique.
questzen
95
Ça dépend. Dans ce cas, c'est à des fins de présentation. Il "violerait" SoC pour mettre ">" dans le html
math
2
Juste une question, pensez-vous que ce serait mieux en tant que liste ordonnée? Je veux dire, c'est une liste avec une commande n'est-ce pas?
alex
3
@questzen - Je pense qu'il est parfaitement acceptable (et bon) d'utiliser CSS :afterpour définir, par exemple, l'indicateur de tri asc / desc sur une colonne triée.
Josh M.
9
J'ai remarqué que les gens sont devenus fous du principe SoC. Mon Dieu, quel type de contenu est un signe ">" pour vous?! Aies pitié! c'est juste une icône dans ce contexte, un widget, une puce, vous l'appelez. Pour moi, le contenu est quelque chose que j'aimerais pouvoir rechercher.
user776686

Réponses:

1063

Vous devez utiliser l'unicode échappé:

Comme

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

Plus d'informations sur: http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/

mathieu
la source
57
Les zéros non significatifs sont superflus, voir CSS 2.1: 4.3.7 Chaînes . '>\a0'suffit.
PointedEars
18
@dlamblin De plus, pour éviter que les caractères ne soient interprétés de manière fiable dans le cadre de la séquence d'échappement , ajoutez un espace blanc standard: '>\a0 bc's'affiche > bc.
PointedEars
18
Mon outil amp-what.com/#q=%3E propose un mode "CSS". Choisissez "css" en bas de la page. Selon la référence CSS ci-dessus, ceux-ci doivent être séparés par des espaces lorsqu'ils sont ambigus.
ndp
@mathieu Pouvez-vous plutôt utiliser 'contenu' pour ajouter une image? Je me demande juste
weia design
1
@Adam, non, si vous voulez ajouter une image, utilisez "background-image" et affichez: inline-block; et largeur: 123px; hauteur: 123px; (utilisez la largeur / hauteur exacte)
Nathan JB
177

CSS n'est pas HTML.  est une référence de caractère nommée en HTML; équivalent à la référence de caractère numérique décimal  . 160 est le point de code décimal du NO-BREAK SPACEcaractère en Unicode (ou UCS-2 ; voir la spécification HTML 4.01 ). La représentation hexadécimale de ce point de code est U + 00A0 (160 = 10 × 16 1 + 0 × 16 0 ). Vous le trouverez dans les tableaux de codes Unicode et la base de données de caractères .

En CSS, vous devez utiliser une séquence d'échappement Unicode pour ces caractères, qui est basée sur la valeur hexadécimale du point de code d'un caractère. Vous devez donc écrire

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

Cela fonctionne tant que la séquence d'échappement arrive en dernier dans une valeur de chaîne. Si les caractères suivent, il y a deux façons d'éviter une mauvaise interprétation:

a) (mentionné par d'autres) Utilisez exactement six chiffres hexadécimaux pour la séquence d'échappement:

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

b) Ajoutez un caractère d'espace blanc (par exemple, espace) après la séquence d'échappement:

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

(Puisque fest un chiffre hexadécimal, \a0fcela signifierait autrement GURMUKHI LETTER EEici, ou ਏ si vous avez une police appropriée.)

L'espace blanc délimitant sera ignoré, et cela sera affiché  foo, où l'espace affiché ici serait un NO-BREAK SPACEcaractère.

L'approche en espace blanc ( '\a0 foo') présente les avantages suivants par rapport à l'approche à six chiffres ( '\0000a0foo'):

  • il est plus facile à taper , car les zéros non significatifs ne sont pas nécessaires et les chiffres n'ont pas besoin d'être comptés;
  • il est plus facile à lire , car il y a un espace blanc entre la séquence d'échappement et le texte suivant, et les chiffres n'ont pas besoin d'être comptés;
  • il nécessite moins d'espace , car les zéros non significatifs ne sont pas nécessaires;
  • il est compatible vers le haut , car Unicode prenant en charge les points de code au-delà de U + 10FFFF nécessiterait à l'avenir une modification de la spécification CSS.

Ainsi, pour afficher un espace après un caractère d'échappement, utilisez deux espaces dans la feuille de style -

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

- ou le rendre explicite:

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

Voir CSS 2.1, section "4.1.3 Caractères et casse" pour plus de détails.

Oreilles pointues
la source
+1 pour l'astuce "afficher un espace après un caractère échappé", mais il faut mentionner que l'ajout d'un nbsp puis d'un espace défait le but du nbsp;)
TWiStErRob
@TWiStErRob Non, une combinaison d'un caractère espace insécable suivi d'un caractère espace insécable (ou vice versa) affichera un espace sur la largeur de deux caractères espace, tandis que deux ou plusieurs caractères espace textuels afficheront uniquement un espace de la largeur d' un caractère d'espace lorsque l'analyseur du moteur de disposition réduit les espaces de rupture consécutifs (y compris les sauts de ligne) en un seul caractère d'espace, sauf indication contraire de la white-spacepropriété CSS .
PointedEars
oui, je connais l'effondrement, mais le point de nbsp est qu'il est incassable, les caractères des mots sont également incassables par défaut, donc ajouter un espace de coupure à côté d'un non cassant n'a aucun sens, le résultat final sera rupture. Je parle pour white-space: normal.
TWiStErRob
@TWiStErRob Veuillez lire ma réponse plus attentivement. C'est un exemple pour «afficher [ing] un espace après un caractère échappé». Le code d'origine avait un NO-BREAK SPACEcaractère, j'ai donc utilisé la séquence d'échappement pour cela. Vous pouvez choisir n'importe quelle autre séquence d'échappement; si nécessaire, vous pouvez également le déclarer white-space: nowrap.
PointedEars
81

Mise à jour : PointedEars mentionne que le remplacement correct  dans toutes les situations css
'\a0 'impliquerait que l'espace est un terminateur de la chaîne hexadécimale et est absorbé par la séquence d'échappement. Il a en outre souligné cette description faisant autorité qui semble être une bonne solution au problème que j'ai décrit et résolu ci-dessous.

Ce que vous devez faire est d'utiliser l'unicode échappé. Malgré ce qu'on vous a dit, ce \00a0n'est pas un substitut parfait pour  CSS; alors essayez:

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

Utilisant spécifiquement \0000a0as  . Si vous essayez, comme suggéré par mathieu et millikin:

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

Il prend le B dans les caractères d'échappement hexadécimaux. La même chose se produit avec 0-9a-fA-F.

dlamblin
la source
6
Vous avez juste besoin de mettre un espace après la séquence d'échappement, comme indiqué: '\a0 Break'. '\0000a0Break'n'est pas fiable.
PointedEars
@PointedEars Intéressant, alors cet espace est un terminateur et n'est pas inclus dans la chaîne?
dlamblin
2
Voir CSS 2.1, section "4.1.3 Caractères et casse" . Ce qui montre également que votre approche DEVRAIT être fiable selon CSS 2.1. Mais je trouve l'approche des espaces blancs plus propre (compatible vers le haut) et ayant une empreinte plus petite.
PointedEars
47

En CSS, vous devez utiliser une séquence d'échappement Unicode à la place des entités HTML. Ceci est basé sur la valeur hexadécimale d'un caractère.

J'ai trouvé que la façon la plus simple de convertir un symbole en son équivalent hexadécimal est, comme de ▾ ( ▾) à, \25BEd'utiliser la calculatrice Microsoft =)

Oui. Activez le mode programmeurs, activez le système décimal, entrez 9662, puis passez en hexadécimal et vous obtiendrez 25BE. Ensuite, ajoutez simplement une barre oblique inverse \au début.

netgoblin
la source
4
Bien que totalement utile, il ne répond pas vraiment à la question, donc ce serait mieux comme commentaire à la question.
dlamblin
1
Petite flèche noire pointant vers la droite (▸ \25B8 ▸ ▸) ftw. Voir aussi en.wikipedia.org/wiki/Geometric_Shapes pour en savoir plus.
Joel Purra
2Joel Purra, lisez le Wiki plus de temps. vous vous êtes trompé de symboles.
netgoblin
@netgoblin: comment ça? Il se trouve que j'aime une petite flèche noire pointant vers la droite.
Joel Purra
1
J'utilise ce graphemica.com où vous pouvez obtenir le décimal, l'hexadécimal et ainsi de suite
Mike
34

Utilisez le code hexadécimal pour un espace insécable. Quelque chose comme ça:

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

Il existe un moyen de coller un nbsp- ouvrez CharMap et copiez le caractère 160 . Cependant, dans ce cas, je l'espérerais probablement avec un rembourrage, comme ceci:

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

display:inline-blockCependant, vous devrez peut-être définir le fil d'Ariane ou quelque chose.

Oser
la source
4
Au lieu de coller le nbsp, je m'en tenir à l'utilisation d'une entité, de sorte qu'il soit clair pour les futurs responsables qu'il est différent d'un espace.
nickf
2
d'un autre côté, vous ne faites pas le fil d'Ariane comme ils sont censés l'être, c'est-à-dire que le symbole> doit être aligné avec le fil d'Ariane, et pas seulement un style visuel. au moins si vous voulez que Google voie votre fil d'Ariane et les répertorie sous votre liste dans le moteur de recherche.
Dementic
10

Par exemple :

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

Exemple: Si vous voulez sélectionner votre personnage, j'ai sélectionné "& # 8620" "& # x21ac" (Nous utilisons des valeurs HEX )

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

Résultat: ↬

C'est ça :)

Ferhat KOÇER
la source
j'ai utilisé du contenu: '\ 10095'; . Mais la sortie ne s'affiche pas. au lieu de l'icône, il montre un rectangle.
kapil
0

Je sais que c'est un assez vieux post, mais si l'espacement est tout ce que vous recherchez, pourquoi pas simplement:

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

J'ai déjà utilisé cette méthode auparavant. Il enveloppe parfaitement les autres lignes avec ">" à ses côtés lors de mes tests.

brian-welch
la source
-2

Voici deux façons:

  • En HTML:

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

Cela se traduira par ⛱

  • En CSS:

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

avec du code HTML <div class="ics"></div>

Cela se traduit également par ⛱

Tarandeep Singh
la source
La bonne réponse est .ics :: before {content: '\ 9969';}
Marco Scarnatto