Добавить разрыв строки к содержимому псевдоэлемента :: after или :: before


131

У меня нет доступа к HTML или PHP для страницы, и я могу редактировать только через CSS. Я вносил изменения на сайт и добавлял текст с помощью псевдоэлементов ::afterили ::beforeи обнаружил, что escape-Unicode следует использовать для таких вещей, как пробел до или после добавленного содержимого.

Как добавить несколько строк в contentсобственность?

В примере элемент строки разрыва HTML предназначен только для визуализации того, чего я хотел бы достичь:

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

CSS не предназначен для добавления или редактирования содержимого, он предназначен для управления отображением содержимого
подчеркивание

14
@SamithaHewawasam Хотя я согласен с вашим утверждением, похоже, что постеры оказались в ситуации, когда они не могут редактировать HTML. Я понимаю, почему это было бы полезно / необходимо для небольших и простых добавлений контента.
Драйден Лонг



3
Я бы также сказал, что разрывы строк гораздо больше связаны с форматом, чем с контентом. Единственный способ "увидеть" разрыв строки - это наблюдать за изменением формата содержимого.
Изохронный

Ответы:


251

В contentсобственности указано:

Авторы могут включать новые строки в сгенерированный контент, записывая escape-последовательность «\ A» в одну из строк после свойства «content». На этот вставленный разрыв строки по- прежнему распространяется свойство "пробел". См. Разделы «Строки» и «Символы и регистр» для получения дополнительной информации о escape-последовательности «\ A».

Итак, вы можете использовать:

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

http://jsfiddle.net/XkNxs/

Однако при экранировании произвольных строк рекомендуется использовать \00000aвместо \A, поскольку любое число или [a-f]символ, за которым следует новая строка, может дать непредсказуемые результаты :

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

28
На мгновение я подумал «почему, \Aа нет \n» - потом я вспомнил, что новая строка - это 0x0A:)
Камило Мартин

Я пробовал это с запросом печатных СМИ, это не работает. это ошибка или это поведение по умолчанию? Без печатных СМИ это работает.
harryfeng

1
Спасибо за упоминание pre-wrap! У меня возникли проблемы с тем, что я больше #headerAgentInfoDetailsPhone не оборачивал веб-браузеры движка Blink, такие как Chrome. Firefox не восприимчив к тому, что white-space: pre;свойство распространяется обратно на элемент.
Serge

28

Хорошая статья, объясняющая основы (однако, не касается разрывов строк).

Целая куча удивительных вещей, которые могут делать псевдоэлементы

Если вам нужно иметь два встроенных элемента, один из которых переходит в следующую строку в другом элементе, вы можете добиться этого, добавив псевдоэлемент: after с content: '\ A' и 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

Мне нужно было добавить новые строки во всплывающей подсказке. Мне пришлось добавить этот CSS на свой: after:

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

Перенос слов кажется необходимым.

Кроме того, \ A не работал в середине отображаемого текста, чтобы принудительно ввести новую строку.

 &#13;&#10; 

работал. Затем я смог получить такую ​​подсказку:

введите описание изображения здесь


8

Вы можете попробовать это

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

Js Fiddle


7

Для людей, которые будут искать «Как динамически изменять содержимое псевдоэлемента, добавляя знак новой строки», вот ответ

Такие символы HTML, как &#13;&#10;не будут работать, добавляя их в HTML с помощью JavaScript, потому что эти символы меняются при рендеринге документа.

Вместо этого вам нужно найти Unicode-представление этих символов, которые являются U + 000D и U + 000A, чтобы мы могли сделать что-то вроде

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> 

Надеюсь, это сэкономит кому-то время, удачи :)


2

Добавить разрыв строки в контент ::afterили ::beforeпсевдоэлемент

.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>

.Mbr и .dbr классы могут имитировать поведение разрыва строки с помощью CSS дисплея: таблицы . Полезно, если вы хотите заменить настоящий <br />.

Проверьте это демы Codepen: https://codepen.io/Marko36/pen/RBweYY ,
и этот пост ответственного использования сайта: Отзывчивые разрывы строк: симулировать <br /> при заданных контрольных точках .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.