使用 CSS 内容添加 HTML 实体

Adding HTML entities using CSS content

提问人:nickf 提问时间:10/10/2008 最后编辑:Alexander van Oostenrijknickf 更新时间:5/10/2023 访问量:499611

问:

如何使用 CSS 属性添加 HTML 实体?content

使用这样的东西只是打印到屏幕上,而不是不间断的空格: 

.breadcrumbs a:before {
  content: ' ';
}
HTML 实体 css 内容

评论

8赞 questzen 10/10/2008
从另一个意义上说,使用 CSS 添加内容违反了关注点的分离,CSS 仅用于样式定义。从可访问性的角度来看,最好避免,因为禁用 CSS 会搞砸整个标记。但是,使用这种技术添加图像是很好的。
106赞 mathieu 10/10/2008
这要视情况而定。在本例中,它用于演示目的。将“>”放在 html 中会“违反”SoC
3赞 alex 3/20/2009
只是一个问题,你认为作为有序列表会更好吗?我的意思是,这是一个带有订单的列表,不是吗?
4赞 Josh M. 4/29/2014
@questzen - 我认为使用 CSS 在排序列上设置 asc/desc 排序指示符是完全可以接受的(也是很好的形式)。:after
16赞 user776686 5/9/2014
我注意到人们对 SoC 原理感到疯狂。天啊,对你来说,“>”标志是什么样的内容?!怜悯吧!在这种情况下,它只是一个图标,一个小部件,一个项目符号,你可以说出来。对我来说,内容是我希望可以搜索的东西。

答:

36赞 John Millikin 10/10/2008 #1

将十六进制代码用于不间断空格。像这样的东西:

.breadcrumbs a:before {
  content: '>\00a0';
}
1174赞 mathieu 10/10/2008 #2

您必须使用转义的 unicode :

喜欢

.breadcrumbs a:before {
  content: '\0000a0';
}

评论

69赞 PointedEars 12/22/2011
前导零是多余的,参见 CSS 2.1:4.3.7 字符串。 够。'>\a0'
22赞 PointedEars 12/22/2011
@dlamblin 此外,为了避免字符被可靠地解释为转义序列的一部分,请添加标准空格:显示。'>\a0 bc'> bc
23赞 ndp 2/22/2013
我的工具 amp-what.com/#q=%3E 提供了“CSS”模式。选择页面底部的“css”。根据上面的 CSS 参考,当它们不明确时,需要用空格分隔。
1赞 weia design 7/11/2013
@mathieu 您可以使用“内容”来代替附加图像吗?只是想知道
2赞 Nathan J.B. 10/10/2013
@Adam,不,如果你想附加一个图像,请使用 “background-image” 和 display:inline-block;宽度:123px;高度:123px;(使用确切的宽度/高度)
84赞 dlamblin 9/12/2009 #3

更新:PointedEars 提到,在所有 css 情况下
,正确的替身意味着空格是十六进制字符串的终止符,并被转义序列吸收。他进一步指出了这种权威性的描述,这听起来像是我在下面描述和修复的问题的一个很好的解决方案。
 '\a0 '

您需要做的是使用转义的 unicode。尽管你被告知在CSS中不是一个完美的替身;所以试试:\00a0 

content:'>\a0 ';          /* or */
content:'>\0000a0';       /* because you'll find: */
content:'No\a0 Break';    /* and */
content:'No\0000a0Break'; /* becomes No Break as opposed to below */

具体用作 . 如果您尝试,正如 mathieu 和 millikin 所建议的那样:\0000a0 

content:'No\00a0Break'   /* becomes No਋reak */

它将 B 带入十六进制转义字符。0-9a-fA-F 也会发生同样的情况。

评论

8赞 PointedEars 12/22/2011
您只需要在转义序列后放置一个空格,如指定的那样: . 不可靠'\a0 Break''\0000a0Break'
0赞 dlamblin 1/3/2012
@PointedEars 有趣的是,那么这个空格是一个终结符,不会包含在字符串中?
2赞 PointedEars 1/3/2012
参见 CSS 2.1 的“4.1.3 字符和大小写”一节。这也表明,根据 CSS 2.1,您的方法应该是可靠的。但是我发现空白方法更干净(向上兼容)并且占用空间更小。
18赞 Dare 12/5/2009 #4

有一种方法可以粘贴一个 - 打开 CharMap 并复制字符 160。但是,在这种情况下,我可能会用填充将其隔开,如下所示:nbsp

.breadcrumbs a:before { content: '>'; padding-right: .5em; }

不过,您可能需要设置面包屑或其他东西。display:inline-block

评论

4赞 nickf 12/6/2009
我不会粘贴 nbsp,而是坚持使用实体,以便未来的维护者清楚地知道它与空间不同。
2赞 Rafael Herscovici 1/26/2012
另一方面,你没有按照它们应该做的样子,即:>符号应该与面包屑内联,而不仅仅是视觉样式。至少如果你想让谷歌看到你的面包屑,并在搜索引擎中将它们列在你所在的列表下。
54赞 netgoblin 12/16/2011 #5

在 CSS 中,您需要使用 Unicode 转义序列来代替 HTML 实体。这是基于字符的十六进制值。

我发现将符号转换为十六进制等价物的最简单方法是,例如从 ▾ () 到 是使用 Microsoft 计算器 =)▾\25BE

是的。启用程序员模式,打开十进制系统,输入 ,然后切换到十六进制,你会得到 .然后只需在开头添加一个反斜杠即可。966225BE\

评论

6赞 dlamblin 1/4/2012
虽然完全有用,但它并没有真正回答问题,所以这作为对问题的评论会更好。
1赞 Joel Purra 4/23/2012
黑色向右小箭头 (▸ ) ftw。另请参阅 en.wikipedia.org/wiki/Geometric_Shapes 了解更多信息。\25B8▸▸
0赞 netgoblin 10/18/2012
2乔尔·普拉(Joel Purra),请花更多时间阅读维基。你弄错了符号。
0赞 Joel Purra 4/14/2013
@netgoblin:怎么会这样?我只是碰巧喜欢黑色的右指向小箭头。
1赞 Mike 10/29/2018
我使用这个 graphemica.com,您可以在其中获取十进制、十六进制等
199赞 PointedEars 12/22/2011 #6

CSS 不是 HTML。 是 HTML 中的命名字符引用;等效于十进制数字字符引用。160 是 Unicode(或 UCS-2;请参阅 HTML 4.01 规范)中字符的十进制码位。该码位的十六进制表示形式为 U+00A0 (160 = 10 × 161 + 0 × 160)。您可以在 Unicode 代码表字符数据库中找到它。  NO-BREAK SPACE

在 CSS 中,您需要对此类字符使用 Unicode 转义序列,该序列基于字符码位的十六进制值。所以你需要写

.breadcrumbs a:before {
  content: '\a0';
}

只要转义序列在字符串值中排在最后,这就会起作用。如果字符跟随,有两种方法可以避免误解:

a) (其他人提到)对转义序列正好使用六个十六进制数字:

.breadcrumbs a:before {
  content: '\0000a0foo';
}

b) 在转义序列后添加一个空格(例如空格)字符:

.breadcrumbs a:before {
  content: '\a0 foo';
}

(由于是十六进制数字,否则将意味着这里,或者如果您有合适的字体,则为 ਏ。f\a0fGURMUKHI LETTER EE

分隔空格将被忽略,这将被显示,其中此处显示的空间将是一个字符。 fooNO-BREAK SPACE

与六位数方法()相比,空格方法()具有以下优点:'\a0 foo''\0000a0foo'

  • 打字更容易,因为不需要前导零,数字也不需要计算;
  • 更容易阅读,因为转义序列和后面的文本之间有空格,数字不需要计算;
  • 需要更少的空间,因为不需要前导零;
  • 它是向上兼容的,因为将来支持 U+10FFFF 以上的 Unicode 代码点将需要修改 CSS 规范。

因此,要在转义字符后显示空格,请在样式表中使用两个空格 –

.breadcrumbs a:before {
  content: '\a0  foo';
}

– 或明确表示:

.breadcrumbs a:before {
  content: '\a0\20 foo';
}

有关详细信息,请参见 CSS 2.1 的“4.1.3 字符和大小写”部分

评论

0赞 TWiStErRob 12/28/2017
+1 用于“在转义字符后显示空格”的技巧,但不得不提的是,添加一个 nbsp,然后添加一个空格有点违背了 nbsp 的目的;)
0赞 PointedEars 1/23/2018
@TWiStErRob 否,一个不换行空格字符后跟一个换行空格字符(反之亦然)的组合将显示两个空格字符的宽度,而两个或多个逐字空格字符将只显示一个空格字符宽度的空格,因为布局引擎的解析器将连续的换行符(包括换行符)折叠成一个空格字符,除非 white-space CSS 属性否则声明。
0赞 TWiStErRob 1/23/2018
是的,我知道折叠,但 nbsp 的重点是它是不中断的,默认情况下单词字符也是不中断的,所以在不中断的空格旁边添加一个中断空格是没有意义的,最终结果将是中断。我说的是.white-space: normal
0赞 PointedEars 1/25/2018
@TWiStErRob 请仔细阅读我的回答。这是“在转义字符后显示空格”的示例。原始代码有一个字符,所以我使用了转义序列。您可以选择任何其他转义序列;如果需要,您也可以声明 。NO-BREAK SPACEwhite-space: nowrap
17赞 Ferhat KOÇER 5/7/2015 #7

例如:

http://character-code.com/arrows-html-codes.php

示例:如果要选择您的角色,我选择了“&#8620”“&#x21ac”(我们使用十六进制值)

.breadcrumbs a:before {
  content: '\0021ac';
}

结果: ↬

就是这样:)

评论

0赞 kapil 12/4/2017
我使用了content:'\10095';但输出未显示。它显示的不是图标,而是矩形。
0赞 Tarandeep Singh 10/6/2016 #8

这里有两种方法:

  • 在 HTML 中:

    <div class="ics">&#9969;</div>

这将导致 ⛱

  • 在 Css 中:

    .ics::before {content: "\9969;"}

使用 HTML 代码<div class="ics"></div>

这也导致 ⛱

评论

0赞 Marco Scarnatto 1/9/2018
正确答案是.ics::在{内容:'\9969';} 之前
1赞 Ryan Harlich 2/12/2021
对于 HTML,您不需要 div class = ics。您可以简单地执行 &#<number>;。另外,请注意它是否是十六进制数,在这种情况下,您想要 &#x< 十六进制数>;w3schools.com/html/html_symbols.asp
1赞 brian-welch 11/4/2017 #9

我知道这是一个相当古老的帖子,但如果间距是你所追求的,为什么不简单地:

.breadcrumbs a::before {
  content: '>';
  margin-left: 8px;
  margin-right: 8px;
}

我以前用过这种方法。在我的测试中,它对其他带有“>”的线条完全可以换行。

0赞 Julian Knight 1/1/2023 #10

只是为了让这里的答案更完整一些。如果您使用的是 ,那么与其使用 unicode 转义符,不如使用 HTML 实体。例如,用于生成换行符。content: attr(aria-label);&#10;