Додати перерив рядка до :: after або :: перед вмістом псевдоелементів


131

Я не маю доступу до HTML або PHP для сторінки і можу редагувати лише через CSS. Я робив зміни на сайті і додавав текст через ::afterабо ::beforeпсевдоелементи і виявив, що Escod Unicode слід використовувати для таких речей, як пробіл до або після доданого вмісту.

Як додати кілька рядків у contentвласність?

Наприклад, елемент рядка HTML перерив - це лише для наочності того, що я хотів би досягти:

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

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

14
@SamithaHewawasam Хоча я згоден з вашим твердженням, схоже, що плакат опинився в ситуації, коли вони не можуть редагувати HTML. Для невеликих, простих доповнень до вмісту я бачу, чому це було б корисно / необхідно.
Dryden Long



3
Я також зауважу, що розриви рядків набагато більше пов'язані з форматом, ніж з вмістом. Єдиний спосіб "бачити" розрив рядка - це спостерігати за зміною формату вмісту.
Ізохронний

Відповіді:


251

У contentвласності держави:

Автори можуть включати нові рядки в створений вміст, записуючи послідовність "\ A" в одну з рядків після властивості "content". Цей вставлений розрив рядка все ще підпадає під властивість "white-space". Див. "Строки" та "Символи та регістр" для отримання додаткової інформації про послідовність втечі "\ 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 Engine, як-от Chrome. Firefox не сприйнятливий до white-space: pre;властивості, що поширюється назад до елемента.
Серж Стротобандт

28

Хороша стаття, що пояснює основи (однак не охоплює розриви рядків).

Цілий букет дивовижних псевдоелементів елементів може зробити

Якщо вам потрібно мати два вбудовані елементи, коли один переходить у наступний рядок у межах іншого елемента, ви можете досягти цього, додавши псевдоелемент: after з вмістом: '\ 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, оскільки ці символи змінені під час відображення документа

Натомість вам потрібно знайти представлення унікоду цих символів, які є 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.