Ajouter un saut de ligne à :: après ou :: avant le contenu du pseudo-élément


131

Je n'ai pas accès au HTML ou au PHP d'une page et ne peux éditer que via CSS. J'ai fait des modifications sur un site et l' ajout de texte via le ::afterou ::beforepseudo-éléments et ont trouvé que la fuite Unicode doit être utilisé pour des choses comme un espace avant ou après le contenu ajouté.

Comment ajouter plusieurs lignes dans la contentpropriété?

Dans l'exemple, l'élément de ligne de rupture HTML sert uniquement à visualiser ce que je souhaite réaliser:

#headerAgentInfoDetailsPhone::after
{
 content: 'Office: XXXXX <br /> Mobile: YYYYY ';
}

CSS n'est pas pour ajouter ou modifier du contenu, c'est pour contrôler l'affichage du contenu
souligné le

14
@SamithaHewawasam Bien que je sois d'accord avec votre déclaration, il semble que l'affiche se soit trouvée dans une situation où elle ne peut pas modifier le code HTML. Pour les petits ajouts de contenu simples, je peux voir pourquoi cela serait utile / nécessaire.
Dryden Long



3
Je dirais également que les sauts de ligne sont beaucoup plus liés au format qu'au contenu. La seule façon de "voir" un saut de ligne est d'observer un changement de format dans le contenu.
Isochronous

Réponses:


251

La contentpropriété indique:

Les auteurs peuvent inclure des retours à la ligne dans le contenu généré en écrivant la séquence d'échappement "\ A" dans l'une des chaînes après la propriété 'content'. Ce saut de ligne inséré est toujours soumis à la propriété 'white-space'. Voir "Chaînes" et "Caractères et casse" pour plus d'informations sur la séquence d'échappement "\ A".

Vous pouvez donc utiliser:

#headerAgentInfoDetailsPhone:after {
  content:"Office: XXXXX \A Mobile: YYYYY ";
  white-space: pre; /* or pre-wrap */
}

http://jsfiddle.net/XkNxs/

Cependant, lors de l'échappement de chaînes arbitraires, il est conseillé d'utiliser à la \00000aplace de \A, car tout nombre ou [a-f]caractère suivi de la nouvelle ligne peut donner des résultats imprévisibles :

function addTextToStyle(id, text) {
  return `#${id}::after { content: "${text.replace(/"/g, '\\"').replace(/\n/g, '\\00000a')} }"`;
}

28
Pendant un moment, j'ai pensé "pourquoi \Aet pas \n" - puis je me suis souvenu que la nouvelle ligne était 0x0A:)
Camilo Martin

J'ai essayé cela avec une requête sur les médias imprimés, cela ne fonctionne pas. est-ce un bug ou est-ce le comportement par défaut? Sans médias imprimés, cela fonctionne.
harryfeng

1
Merci d'avoir mentionné pre-wrap! J'avais des problèmes pour #headerAgentInfoDetailsPhone ne plus m'envelopper dans les navigateurs Web du moteur Blink comme Chrome. Firefox n'est pas sensible à la white-space: pre;propagation de la propriété vers l'élément.
Serge Stroobandt

28

Bel article expliquant les bases (ne couvre cependant pas les sauts de ligne).

Un tas de choses incroyables que des pseudo éléments peuvent faire

Si vous avez besoin d'avoir deux éléments en ligne où l'un entre dans la ligne suivante dans un autre élément, vous pouvez le faire en ajoutant un pseudo-élément: after with content: '\ A' et white-space: pre

HTML

<h3>
    <span class="label">This is the main label</span>
    <span class="secondary-label">secondary label</span>
</h3>

CSS

.label:after {
    content: '\A';
    white-space: pre;
}

11

Je devais avoir de nouvelles lignes dans une info-bulle. J'ai dû ajouter ce CSS sur mon: après:

.tooltip:after {
  width: 500px;
  white-space: pre;
  word-wrap: break-word;
}

Le word-wrap semble nécessaire.

De plus, le \ A ne fonctionnait pas au milieu du texte à afficher, pour forcer une nouvelle ligne.

 &#13;&#10; 

travaillé. J'ai alors pu obtenir une telle info-bulle:

entrez la description de l'image ici


8

Vous pouvez essayer ceci

#headerAgentInfoDetailsPhone
{
    white-space:pre
}
#headerAgentInfoDetailsPhone:after {
    content:"Office: XXXXX \A Mobile: YYYYY ";
}

Js Fiddle


7

Pour les personnes qui chercheront "Comment modifier dynamiquement le contenu d'un pseudo élément en ajoutant un nouveau signe de ligne", voici la réponse

Caractères HTML comme &#13;&#10; ne fonctionneront pas en les ajoutant au code HTML à l'aide de JavaScript, car ces caractères sont modifiés lors du rendu du document

Au lieu de cela, vous devez trouver une représentation unicode de ces caractères qui sont U + 000D et U + 000A afin que nous puissions faire quelque chose comme

var el = document.querySelector('div');
var string = el.getAttribute('text').replace(/, /, '\u000D\u000A');
el.setAttribute('text', string);
div:before{
   content: attr(text);
   white-space: pre;
}
<div text='I want to break it in javascript, after comma sign'></div> 

J'espère que cela fera gagner du temps à quelqu'un, bonne chance :)


2

Ajouter un saut de ligne ::afterou un ::beforepseudo-élément au contenu

.yourclass:before {
    content: 'text here first \A  text here second';
    white-space: pre;
}


0
<p>Break sentence after the comma,<span class="mbr"> </span>in case of mobile version.</p>
<p>Break sentence after the comma,<span class="dbr"> </span>in case of desktop version.</p>

Les classes .mbr et .dbr peuvent simuler un comportement de saut de ligne en utilisant CSS display: table . Utile si vous voulez remplacer du vrai <br />.

Découvrez cette démo Codepen: https://codepen.io/Marko36/pen/RBweYY ,
et cet article sur l'utilisation du site réactif: Sauts de ligne réactifs: simuler <br /> à des points d'arrêt donnés .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.