2016-01-13 22 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

相關問題