2016-01-13 61 views
8

我最近遇到了一个奇怪的错误,其中选择器在缩小后停止工作(使用csswring 3.0.7)。问题中的选择符与数据属性包含连字符的元素匹配。它在开发过程中工作,但在所有测试过的浏览器(Chrome,Firefox,IE11,Edge)上都没有生产。属性选择器中的未加引号的连字符

查看缩小样式表后,我发现选择器已从[data-attr*="-"]转换为[data-attr*=-]。行情已被删除,并被浏览器拒绝。

事情是,我找不到任何来源,说一个连字符需要引号。很明显,缩小作者作者已经找到了我拥有的相同来源。

This page详细说明了规范的相关部分。

因此,在CSS有效的不带引号的属性值是文本的任何字符串不是空字符串,包括转义字符和/或字符完全匹配/[-_\u00A0-\u10FFFF]/的,并且不以数字或两个连字符开始或连字符后跟数字。

在这种情况下,单个连字符似乎完全有效。

Here is a jsfiddle测试不同的场景。只有当试图匹配一个单一的,不加引号的连字符时,选择器才会失败。

我错过了什么吗?这不应该是一个有效的选择器吗?

+0

@Jonathan Lam:在重读它时,它似乎是一个真正的问题。显然,这些选择器是由缩小器制作的。如果它们在源代码中被引用,并且引号被缩小机器剥离...看起来OP只能获得新的缩小机器。 – BoltClock

+0

更改缩小器。 YUI压缩机是我测试过的最好的。 http://yui.github.io/yuicompressor/ || http://refresh-sf.com/在最后一个URL(http:// refresh-sf。/我测试你的线,它保留报价。 –

回答

5

下面是来自CSS2.1规范本身的文章所引用的精确文本:

在CSS中,标识符(包括元素名称,类别,并在选择的ID)只能包含字符[a-zA-Z0-9]和ISO 10646字符U + 00A0及更高,加上连字符( - )和下划线(_);他们不能以数字,两个连字符或连字符后跟数字开头。

正如你所看到的,这似乎并不涉及单个连字符的情况。

然而,在section 4.1.1看语法,我们发现下面的标记化的ident:

[-]?{nmstart}{nmchar}* 

{nmstart}[_a-z]|{nonascii}|{escape}代表,是在强制性的ident。前面的连字符是可选的,但由于连字号未出现在{nmstart}中,这意味着单个连字符不是有效的CSS标识符。

因此,选择器[data-attr*=-]确实无效,并且必须引用单个连字符才能将其视为字符串。

+0

感谢您发布此信息。我已经相应地更新了我的write-up +工具(在OP的问题中提到)。顺便说一下,这也解释了为什么空字符串不是有效的标识符。 –

+0

@Mathias:酷!感谢您的跟进:) – BoltClock

相关问题