使用CSS插入文字


207

我对CSS相对较新,并且已使用它来更改文本的样式和格式。

我现在想用它来插入文本,如下所示:

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

我希望我能表现为:

乔的任务:协调所有条目

也就是说,仅由于属于“所有者Joe”类,我希望Joe's Task:显示文本。

我可以用下面的代码来做到这一点:

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

但这对于指定类和文本来说似乎是多余的。

有可能做我想要的吗?

编辑 一个想法是尝试将其设置为ListItem <li>,其中“项目符号”是文本“ Joe's Task”。我看到了有关如何设置各种项目符号样式甚至项目符号图像的示例。列表项目符号可以使用一小段文字吗?


1
<li>的主意不是一个好习惯。如果您确实要这样做,请改用模板语言。
加里

1
听起来就像在使用CSS3:before或:after伪元素,您实际上只是将冗余转移到CSS领域(因为您需要为OwnerJoe,OwnerJane等添加CSS语句)
Matt Beckman

2
@马特·贝克曼:我很好。我可以为每个用户轻松定义CSS块。在我看来,在HTML中一遍又一遍地重复。
abelenky 2010年

1
我觉得对于更广泛的读者来说,更实际地使用它可能是想 label.required:before {content: "* ";}在必填字段前面加一个星号。
帕特里克

Answers:


317

它是,但是需要具有CSS2功能的浏览器(所有主要浏览器,IE8 +)。

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

但我宁愿为此使用Javascript。使用jQuery:

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

4
冒号后应有空格。
系统暂停

7
初步测试表明内容属性运行良好。恭喜其他人说无法解决时找到答案。:)
abelenky 2010年

8
要覆盖较旧的IE,您可以有条件地包含code.google.com/p/ie7-js,这将使您的CSS在所有浏览器中都保持不变。它是接近标准的jQuery的替代品。
系统暂停

14
为什么您宁愿建议使用Javascript?
Rikki 2013年

有意思的:似乎与一个或两个冒号,例如,工作.OwnerJoe:before.OwnerJoe::before
肯尼迪先生

40

每个人似乎都喜欢使用jQuery的答案有一个主要缺陷,那就是它不可扩展(至少在编写时如此)。我认为Martin Hansen有正确的想法,那就是使用HTML5 data-*属性。您甚至可以正确使用撇号:

的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的一个有趣的副作用是content属性提供的文本是不可选择的,这可能是可取的,也可能是不希望的……。–
Jeff

如果文本是页面布局的一部分,而不是内容的一部分,则CSS可能是正确的选择。例如,如果您希望所有页面的页面标题都是柠檬绿色背景上的紫色字样的“ Hello World”,那么这很有意义。更改页面标题所需要做的只是编辑一个CSS文件。如果您使用HTML格式的文本,则需要对网站上的每个页面进行编辑,并且可能还会对Web应用程序进行更改。
casgage'2

28

还要检查CSS content属性的attr()函数。它将元素的给定属性输出为文本节点。像这样使用它:

<div class="Owner Joe" />

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

甚至使用新的HTML5自定义数据属性:

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

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

2
那是一个更好的主意-我讨厌创建一个CSS类来显示内容的主意。它最终可能会基于sql查询动态生成css。我将选择器替换为div[data-employeename]:before
约翰尼

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.