为啥在使用 unicode 时我不能在 :before :after 内容之后使用空格

Posted

技术标签:

【中文标题】为啥在使用 unicode 时我不能在 :before :after 内容之后使用空格【英文标题】:Why I can not use space after on :before :after content when using unicode为什么在使用 unicode 时我不能在 :before :after 内容之后使用空格 【发布时间】:2017-04-13 09:16:15 【问题描述】:

我只是想知道为什么在 CSS 中使用 unicode 我不能把 space after unicode :

这是我的测试:

div font-size:50px;
div:before, div:after color:green;
.a:before content: 'text-before \2022 ';
.b:before content: 'text-before • ';
.c:after content: ' \2022 text-after';
.d:after content: ' • text-after';
<div class="a">A-Hello</div>
<div class="b">B-Hello</div>
<div class="c">C-Hello</div>
<div class="d">D-Hello</div>

所以你会看到BD 使用非unicode 被允许在char 之后添加空格。但是当使用 unicode(AC)时,空格消失了。

.x:before content: '\2022 ';
&lt;div class="x"&gt;Hello&lt;/div&gt;

所以问题是:为什么以及如何在 uncicode 之后添加真正的空格字符(当我们按键盘上的空格键时)?(不使用边距填充)

【问题讨论】:

您使用转义斜杠应用 unicode 保持转义,因此“普通”键盘“空格”不再适用于该字符串。 【参考方案1】:

空间被用作转义序列的一部分,以防止其他十六进制字符被误解为转义序列的一部分。来自spec:

如果 [0-9a-fA-F] 范围内的字符跟在 16 进制数后面,则需要明确数字的结尾。有两种方法可以做到这一点:

    带有空格(或其他空白字符):“\26 B”(“&B”)。在这种情况下,用户代理应将“CR/LF”对 (U+000D/U+000A) 视为单个空白字符。 通过提供正好 6 个十六进制数字:“\000026B”(“&B”)

例如,空格有助于区分字符串 '\2022 ff' 和字符串 '\2022ff',这意味着完全不同的东西(我什至不确定它是否代表实际字符)。

要在特殊字符后添加一个空格,请添加另一个空格字符:

.x:before content: '\2022  ';
&lt;div class="x"&gt;Hello&lt;/div&gt;

【讨论】:

【参考方案2】:

您可以在点之前或之后添加一个 unicode 空格 '\00a0',如下所示:

div font-size:50px;
div:before, div:after color:green;
.a:before content: 'tex-before \2022 \00a0';
.b:before content: 'text-before • ';
.c:after content: ' \2022 \00a0 text-after';
.d:after content: ' • text-after';
<div class="a">A-Hello</div>
<div class="b">B-Hello</div>
<div class="c">C-Hello</div>
<div class="d">D-Hello</div>

【讨论】:

以上是关于为啥在使用 unicode 时我不能在 :before :after 内容之后使用空格的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用 multipart/form-data 时不能正确发送带有 Unicode 的 POST 名称?

为啥在分配大量内存时我的线程化 .Net 应用程序不能线性扩展?

为啥当值为假时我不能传递过滤数据(它是布尔值)

为啥在异步事件循环运行时我无法捕获 SIGINT?

为啥有换行符时我的 PL/SQL 过程不能编译?

为啥我的AE打不了字啊