Використання CSS для вставки тексту


207

Я відносно новачок у CSS і використовував його для зміни стилю та форматування тексту.

Тепер я хотів би використовувати його для вставки тексту, як показано нижче:

<span class="OwnerJoe">reconcile all entries</span>

Я сподіваюся, що зможу показати, що:

Завдання Джо: узгодити всі записи

Тобто, просто завдяки класу "Власник Джо", я хочу, щоб текст Joe's Task:відображався.

Я міг би це зробити з таким кодом:

<span class="OwnerJoe">Joe's Task:</span> reconcile all entries.

Але це видається надзвичайно зайвим як для визначення класу, так і для тексту.

Чи можна робити те, що я шукаю?

EDIT Одна ідея - спробувати встановити його як ListItem, <li>де "куля" - це текст "Завдання Джо". Я бачу приклади того, як встановлювати різні кулі і навіть зображення для куль. Чи можна використовувати невеликий блок тексту для списку-кулі?


1
ідея <li> не є хорошою практикою. Якщо ви дійсно хочете цього, загляньте на мову шаблонів.
Гері

1
Здається, як використовувати CSS3: до або після псевдоелементів, ви дійсно просто будете переміщувати надмірність на землю CSS (тому що вам потрібно буде додати CSS-заяву для OwnerJoe, OwnerJane тощо)
Метт Бекман

2
@ Матт Бекман: ​​Зі мною це нормально. Я можу легко визначити блоки CSS для кожного мого користувача. Повторення його знову і знову в HTML видається в моєму випадку надмірним.
абеленький

1
Я відчуваю, що більш практичним використанням цього для широкої аудиторії було б як- label.required:before {content: "* ";}небудь додати зірочку перед необхідними полями, можливо.
Патрік

Відповіді:


317

Він є, але потрібен браузер, що підтримує CSS2 (усі основні браузери, IE8 +).

.OwnerJoe:before {
  content: "Joe's Task:";
}

Але я б скоріше рекомендував використовувати для цього Javascript. За допомогою jQuery:

$('.OwnerJoe').each(function() {
  $(this).before($('<span>').text("Joe's Task: "));
});

4
Повинно бути пробіл після товстої кишки.
система ПАУЗА

7
Початкові тести показують, що властивість вмісту працює добре. Вітаю, як знайти відповідь, коли всі інші кажуть, що цього не можна зробити. :)
abelenky

8
Щоб охопити старіші IE, ви можете умовно включити code.google.com/p/ie7-js, що дозволить вашій CSS залишатися однаковою для всіх браузерів. Це альтернатива jQuery, яка ближче до стандартів.
система ПАУЗА

15
Чому ви краще рекомендуєте використовувати Javascript?
Rikki

Цікаво: здається, працює з одним або двома колонами, наприклад, .OwnerJoe:beforeі.OwnerJoe::before
містер Кеннеді

40

Відповідь, що використовує jQuery, який, як видається, всім подобається, має головний недолік, який не є масштабованим (принаймні, як написано). Я думаю, що у Мартіна Хансена є правильна ідея - використовувати data-*атрибути HTML5 . І ви навіть можете правильно використати апостроф:

html:

<div class="task" data-task-owner="Joe">mop kitchen</div>
<div class="task" data-task-owner="Charles" data-apos="1">vacuum hallway</div>

css:

div.task:before { content: attr(data-task-owner)"'s task - " ; }
div.task[data-apos]:before { content: attr(data-task-owner)"' task - " ; }

вихід:

Joe's task - mop kitchen
Charles' task - vacuum hallway

19
Цікавим побічним ефектом від використання вмісту css на відміну від jQuery є те, що текст, наданий атрибутом контенту, не вибирається, що може бути або не бажано ....
Jeff

Якщо текст є частиною макета сторінки, а не частиною вмісту, можливо, CSS - це правильне місце для нього. Наприклад, якби ви хотіли, щоб у вашій сторінці на всіх сторінках були слова "Hello World" фіолетовим кольором на липово-зеленому тлі, це мало б сенс. Все, що знадобиться для зміни заголовка сторінки - це редагування одного файлу CSS. Якщо у вас є текст у HTML, він би змінив кожну окрему сторінку на вашому веб-сайті, а можливо, змінив і ваші веб-сторінки.
каса

28

Також перевірте функцію attr () атрибута вмісту CSS. Він виводить заданий атрибут елемента як текстовий вузол. Використовуйте його так:

<div class="Owner Joe" />

div:before {
  content: attr(class);
}

Або навіть з новими спеціальними атрибутами даних HTML5:

<div data-employeename="Owner Joe" />

div:before {
  content: attr(data-employeename);
}

2
Це набагато краща ідея - я ненавиджу ідею створення класу css для відображення вмісту. Це може в кінцевому підсумку генерувати css динамічно на основі запиту sql. Я би замінив селектора на div[data-employeename]:before.
Johnny5

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.