CSS中奇怪的反斜杠和行为

Fabregashi

我遇到了一段这样的CSS代码:

p {
  color: white;
}
\p {
  background: green;
}
\* {
  background: #bcc;
}
body \2a {
  background: red;
}
.recover {
  background: #6ea;
  color: black;
}
div {
  border: 2px solid blue;
}
ul,
li,
a {
  background: none;
}
<p>This should have a green background</p>
<div>This should have no background color</div>
<p class="recover">CSS has recovered</p>

在Firefox和Internet Explorer 10中,结果如HTML中所述。但是在Chrome浏览器中则完全不同。

在此示例中,反斜杠的用法是什么?

隐藏的爱好

在这种情况下,斜杠用于转义字符。

body \2abody *\2a的编码版本一样有效*W3C指出(为清楚起见,添加了粗体):

在CSS中,标识符(包括选择器中的元素名称,类和ID)只能包含字符[a-zA-Z0-9]和ISO 10646字符U + 00A0及更高版本,以及连字符(-)和下划线( _); 它们不能以数字,两个连字符或连字符后跟数字开头。标识符还可以包含转义字符和任何ISO 10646字符作为数字代码(请参阅下一项)。例如,标识符“ B&W?” 可以写为“ B \&W \?” 或“ B \ 26 W \ 3F”。

字符和大小写(https://www.w3.org/TR/CSS2/syndata.html#characters

下表显示2a了*的十六进制代码:

Unicode代码点字符UTF-8(十六进制)名称
U + 002A * 2a星号

UTF-8编码表和Unicode字符(http://www.utf8-chartable.de/

\*并且\p是由W3C(粗体添加为了清楚)中提到逸出字符的另一种方法:

其次,它取消了特殊CSS字符的含义。任何字符(十六进制数字,换行符,回车符或换页符除外)都可以使用反斜杠转义以删除其特殊含义。例如,“ \”“是一个由双引号引起来的字符串。样式表预处理器不得从样式表中删除这些反斜杠,因为这会改变样式表的含义。

字符和大小写(https://www.w3.org/TR/CSS2/syndata.html#characters

p不是十六进制数字(它们是数字0-9和字母AF),因此将其视为\p标准规则。如果是该规则,\a则它将被忽略,因为a是十六进制数字,而\s将不被接受(请参见下面的\a\s中的片段)。

Firefox在类标识符中接受转义字符(请参见.B\26 W\3F下面的代码片段),但似乎将其作为通用选择器(*忽略了,这就是为什么不应用样式的原因。Chrome和Firefox都会忽略转义的相邻选择器(+)。

这就是在Chrome中导致以下原因的原因:

  • 所述background-colour<p>This should have a green background</p>red作为body *具有等于特异性p但之后它被放置在样式表中
  • background-colour<div>This should have no background color</div>red,因为它相匹配的规则,也没有人来覆盖background-colour该元素的
  • background-colourhtmlbody等要#bcc作为\*规则被匹配

很难说出哪个是正确的行为,看起来该规范的解释方式略有不同。

至于为什么使用这些规则,唯一可行的解​​释是作者试图针对具有特定样式的特定浏览器。

p {
  color: white;
}
\p {
  background: green;
}
\* {
  background: #bcc;
}
body \2a {
  background: red;
}
.recover {
  background: #6ea;
  color: black;
}
.recover:after {
  content: '\2a';
  display: block;
}
div {
  border: 2px solid blue;
}
.B\26 W\3F {
  background: black;
  color: white;
}
.B\26 W\3F \2b div {
  background: purple;
  color: white;
}
\a {
  border: 2px solid blue;
}
\s {
  border: 2px solid blue;
}
<p>This should have a green background</p>
<div>This should have no background color</div>
<p class="recover">CSS has recovered</p>
<p class="B&W?">Encoded test</p>
<div>Encoded adjacent test</div>
<a href="#">Hexadecimal digit</a>
<s>Non hexadecimal digit</s>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有人可以解释命令替换中反斜杠的奇怪行为吗?

来自分类Dev

PHP从URL中删除奇怪的反斜杠

来自分类Dev

CSS中内容和反斜杠的含义是什么

来自分类Dev

HTML和CSS中奇怪的按钮不需要行为

来自分类Dev

删除R中的反斜杠和反斜杠序列

来自分类Dev

ltrim()中带有正斜杠的奇怪行为

来自分类Dev

CSS 奇怪的行为:溢出和左边距

来自分类Dev

CSS填充速记声明中的反斜杠

来自分类Dev

Java和Windows中的反斜杠与正斜杠

来自分类Dev

PHP和mysql中的反斜杠

来自分类Dev

R中的gsub和反斜杠

来自分类Dev

ML中的toString和反斜杠

来自分类Dev

带有双反斜杠的节点中看似奇怪的JSON.parse行为

来自分类Dev

了解反斜杠行为(Windows)

来自分类Dev

vim 中的 setpos 和 getpos 奇怪的行为

来自分类Dev

bash 和 .bashrc 中的奇怪行为

来自分类Dev

.NET 中奇怪的委托和操作行为

来自分类Dev

vue.js 在直接 css/样式更改和从数组中删除项目时的奇怪行为

来自分类Dev

Perl脚本的奇怪行为(附加斜杠)

来自分类Dev

makefile中带反斜杠的多行配方和不带反斜杠的多行配方之间的区别

来自分类Dev

CSS奇怪的悬停行为

来自分类Dev

CSS Margins奇怪的行为

来自分类Dev

||奇怪的Ruby行为 和 &&

来自分类Dev

加入和的奇怪行为

来自分类Dev

OpenXml 和奇怪的行为

来自分类Dev

Powershell中的反斜杠

来自分类Dev

CSS从左到右和从右到左渐变渐变的奇怪行为

来自分类Dev

Silex和Twig CSS缓存问题-奇怪的行为

来自分类Dev

防止斜杠(/)和反斜杠(\)的属性?