【问题标题】:Adding HTML entities using CSS content使用 CSS 内容添加 HTML 实体
【发布时间】:2023-04-01 13:02:02
【问题描述】:

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

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

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

【问题讨论】:

  • 在另一种意义上,使用 CSS 添加内容违反了关注点分离,CSS 仅用于样式定义。从可访问性的角度来看,最好避免,因为禁用 CSS 会破坏整个标记。但是,使用这种技术添加图像非常好。
  • 视情况而定。在这种情况下,它是出于演示目的。将“>”放在 html 中会“违反”SoC
  • 只是一个问题,你认为作为一个有序列表会更好吗?我的意思是,这是一个有顺序的列表,不是吗?
  • @questzen - 我认为使用 CSS :after 来设置例如排序列上的 asc/desc 排序指示符是完全可以接受的(也是很好的形式)。
  • 我注意到人们已经对 SoC 原理发疯了。天哪,你的“>”标志是什么内容?!怜悯!在这种情况下,它只是一个图标,一个小部件,一个子弹,你可以命名它。对我而言,内容是我希望可搜索的内容。

标签: html css html-entities css-content


【解决方案1】:

你必须使用转义的 unicode:

喜欢

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

更多信息:http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/

【讨论】:

  • 前导零是多余的,请参阅CSS 2.1: 4.3.7 Strings'>\a0' 就够了。
  • @dlamblin 此外,为了避免字符被可靠地 解释为转义序列的一部分,请添加标准空格:'>\a0 bc' 显示为> bc
  • 我的工具amp-what.com/#q=%3E 提供了“CSS”模式。选择页面底部的“css”。根据上面的 CSS 参考,当它们不明确时需要用空格分隔。
  • @mathieu 你能用“内容”来代替图片吗?只是想知道
  • @Adam,不,如果要附加图像,请使用“background-image”和 display:inline-block;和宽度:123px;高度:123px; (使用精确的宽度/高度)
【解决方案2】:

CSS 不是 HTML。   是在 HTML 中命名的 character reference;相当于十进制数字字符引用 。 160 是Unicode(或UCS-2;参见HTML 4.01 Specification)中NO-BREAK SPACE 字符的十进制代码点。该代码点的十六进制表示为 U+00A0 (160 = 10 × 161 + 0 × 160)。您会在 Unicode Code ChartsCharacter Database 中找到它。

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

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

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

a)(其他人提到)使用六位十六进制数字作为转义序列:

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

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

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

(由于f 是一个十六进制数字,\a0f 在此处的其他意思是 GURMUKHI LETTER EE,或者如果您有合适的字体,则为 ਏ。)

分隔的空白将被忽略,这将显示为 foo,此处显示的空格将是NO-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, section "4.1.3 Characters and case"

【讨论】:

  • +1 用于“在转义字符后显示一个空格”技巧,但必须提到添加一个 nbsp,然后添加一个空格会破坏 nbsp 的目的;)
  • @TWiStErRob 不,非换行空格字符后跟换行空格字符(反之亦然)的组合将显示大约 两个 空格宽度的间隙字符,而两个或多个 verbatim 空格字符将仅显示 一个 空格字符宽度的间隙,因为布局引擎的解析器会折叠连续的中断空格(包括换行符)一个空格字符,除非white-space CSS property 另有声明。
  • 是的,我知道折叠,但 nbsp 的重点是它是不间断的,默认情况下单词字符也是不间断的,所以在不间断的旁边添加一个断空格可以没有意义,最终的结果将是打破。我说的是white-space: normal
  • @TWiStErRob 请仔细阅读我的回答。这是“在转义字符后显示[ing]空格”的示例。原始代码有一个NO-BREAK SPACE 字符,所以我使用了转义序列。您可以选择任何其他转义序列;如果需要,您也可以声明white-space: nowrap
【解决方案3】:

更新:PointedEars 提到,在所有 css 情况下,  的正确代表是
'\a0 ',这意味着该空格是十六进制字符串的终止符并被转义序列。他进一步指出了这个authoritative description,这听起来是解决我在下面描述和修复的问题的好方法。

您需要做的是使用转义的 unicode。尽管有人告诉你 \00a0 并不是 CSS 中   的完美替代品;所以试试:

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

具体使用\0000a0 作为 。 如果您按照 mathieu 和 millikin 的建议尝试:

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

它将 B 转换为十六进制转义字符。 0-9a-fA-F 也是如此。

【讨论】:

  • 您只需要在转义序列后放置一个空格,指定为:'\a0 Break''\0000a0Break'可靠。
  • @PointedEars 有意思,那么这个空格是终结符,不会被包含在字符串中?
  • CSS 2.1, section "4.1.3 Characters and case"。这也表明你的方法应该是可靠的每个 CSS 2.1。但我发现空白方法更干净(向上兼容)并且占用空间更小。
【解决方案4】:

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

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

是的。打开程序员模式,打开十进制,输入9662,然后切换到十六进制,你会得到25BE。然后只需在开头添加一个反斜杠\

【讨论】:

  • 虽然完全有用,但它并不能真正回答问题,因此作为对问题的评论会更好。
  • 黑色右向小箭头 (▸ \25B8 ▸ ▸) ftw。另外,请参阅en.wikipedia.org/wiki/Geometric_Shapes 了解更多信息。
  • 2Joel Purra,花更多时间阅读 Wiki。你弄错了符号。
  • @netgoblin:怎么会这样?我只是碰巧喜欢黑色的右向小箭头。
  • 我用这个graphemica.com 可以得到十进制、十六进制等等
【解决方案5】:

使用十六进制代码作为不间断空格。像这样的:

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

【讨论】:

    【解决方案6】:

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

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

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

    【讨论】:

    • 我不会粘贴 nbsp,而是坚持使用实体,以便未来的维护者清楚它与空间不同。
    • 另一方面,您不会按照应有的方式使用面包屑,即:> 符号应该与面包屑内联,而不仅仅是视觉样式。至少如果您希望 google 看到您的面包屑并将它们列在您在搜索引擎中的列表下。
    • 正确的粘贴通缉角色对我有用。谢谢
    【解决方案7】:

    例如:

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

    示例:如果你想选择你的角色,我选择了“↬”“↬”(我们使用HEX值)

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

    结果:↬

    就是这样:)

    【讨论】:

    • 我使用了内容:'\10095'; .但是输出没有显示。它显示的是矩形而不是图标。
    【解决方案8】:

    我知道这是一篇很老的帖子,但如果间距是你的全部追求,为什么不简单:

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

    我以前用过这种方法。在我的测试中,它可以完美地包裹在其他行中,并带有“>”。

    【讨论】:

      【解决方案9】:

      这里有两种方法:

      • 在 HTML 中:

        <div class="ics">⛱</div>

      这将导致 ⛱

      • 在 CSS 中:

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

      带有HTML代码<div class="ics"></div>

      这也会导致 ⛱

      【讨论】:

      • 正确答案是 .ics::before {content: '\9969';}
      • 对于 HTML,您不需要 div class= ics。你可以简单地做 ;。另外,请注意它是否是十六进制数字,在这种情况下您需要 ; w3schools.com/html/html_symbols.asp
      猜你喜欢
      • 2013-10-08
      • 1970-01-01
      • 2014-05-18
      • 2014-08-30
      • 2017-12-15
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2015-07-12
      相关资源
      最近更新 更多