为什么我们需要转义CSS?
Why we need to escape CSS?
鉴于我从 here 中选取的以下示例:
CSS.escape(".foo#bar") // "\.foo\#bar"
CSS.escape("()[]{}") // "\(\)\[\]\{\}"
因为 .foo#bar
是一个有效的 CSS 选择器表达式。为什么我们需要在某些字符前附加\
?假设我想编写自己的程序来执行转义 CSS 文件中所有 values/expressions 的相同任务,那么我应该如何进行?
PS:我一直对转义感到困惑,在转义某些输入时我应该怎么想?
只有当这些字符串包含您希望按字面意义对待的特殊符号时,才对这些字符串进行转义。如果您期望用户输入的是有效的 CSS 选择器,则不应转义任何内容。
.foo#bar
是一个有效的 CSS 选择器,但它的含义与 \.foo\#bar
完全不同。前者匹配具有相应 class 和 ID 的元素,例如<div class=foo id=bar>
在 HTML 中。后者匹配元素名称为“.foo#bar”的元素,在假设的标记语言中可以表示为 <.foo#bar>
(显然这不是合法的 HTML 或 XML 语法,但你明白了。
鉴于我从 here 中选取的以下示例:
CSS.escape(".foo#bar") // "\.foo\#bar"
CSS.escape("()[]{}") // "\(\)\[\]\{\}"
因为 .foo#bar
是一个有效的 CSS 选择器表达式。为什么我们需要在某些字符前附加\
?假设我想编写自己的程序来执行转义 CSS 文件中所有 values/expressions 的相同任务,那么我应该如何进行?
PS:我一直对转义感到困惑,在转义某些输入时我应该怎么想?
只有当这些字符串包含您希望按字面意义对待的特殊符号时,才对这些字符串进行转义。如果您期望用户输入的是有效的 CSS 选择器,则不应转义任何内容。
.foo#bar
是一个有效的 CSS 选择器,但它的含义与 \.foo\#bar
完全不同。前者匹配具有相应 class 和 ID 的元素,例如<div class=foo id=bar>
在 HTML 中。后者匹配元素名称为“.foo#bar”的元素,在假设的标记语言中可以表示为 <.foo#bar>
(显然这不是合法的 HTML 或 XML 语法,但你明白了。