- From: Kang-Hao (Kenny) Lu <kennyluck@w3.org>
- Date: Fri, 15 Jun 2012 11:47:38 +0800
- To: W3C HTML5 中文興趣小組 <public-html-ig-zh@w3.org>
我想熟悉 CSS 的人都知道 CSS 選擇器的這項規則[1]: # 使用者代理必須遵守下面的解析錯誤處理規則: # ... # # * 含有不合法選擇器的選擇器列表不合法 # # 不合法的選擇器不代表任何東西。 舉例來說,瀏覽器一定會丟棄 ":-webkit-any(foo, bar), :-moz-any(foo, bar)",因為最多只認識其中一個,不認識就不合法。 如同[1]也提到的,有人建議這個東西更改成媒體查詢式的錯誤處理:用逗點分 隔,有錯誤的部份丟棄(同等於視其為 ":not(*)",)。其實很多人都支持這個思 路,但是主要就是兼容問題 — 有很多網站利用這個規則寫瀏覽器特定的樣式,改 這個規則會破壞很多網站[2]。 我最近突然想到說,是不是可以把這個錯誤處理限制在 ":matches()" 裡,讓 :matches(:-moz-any-link, :webkit-any-link) 之類的可以用。(雖然 ":-moz-any-link, :-webkit-any-link" 還是老樣子不行。) 這裡可能有兩個問題: 1. 基本上不早點把 ":matches()" 的前輟拿掉沒什麼意義。 最近的趨勢似乎是前輟會越來越少,有可能當 ":matches()" 本身前輟拿掉的時 候,已經沒有其它前輟了。不過我還是很好其這種錯誤處理在*跟前輟無關*的用途 上有沒有用,像是優雅退化之類的,比如說: :matches(:any-link, :link) 不過這個例子看起來很沒有用,所以有點好奇有沒有真的有用的東西,可能要從 selectors4 裡找一些新的偽類來研究看看。 2. ":matches()" 現階段不能在裡面放偽類[3]。 # 批配偽類無法表示偽元素 ― 偽元素在 :matches() 裡不合法。 所以 :matches(::-moz-selection, ::-webkit-selection) 之類的原先[2]的提議裡面提到的一個使用情節,不能用。我覺得「批配偽類中不 能用偽元素」這個問題應該是有辦法解決的,就是要完整定義 :matches(::selection)::before 之類的東西要怎麼處理就好,要再多想想。 各位認為如何? ps. 目前 selectors4 翻了 10%,老樣子,推薦加入翻譯的章節都放在討論頁了。 [1] http://www.w3.org/html/ig/zh/wiki/selectors4#invalid [2] http://lists.w3.org/Archives/Public/www-style/2010Nov/0500 [3] http://www.w3.org/html/ig/zh/wiki/selectors4#matches 以上 Kenny
Received on Friday, 15 June 2012 03:48:07 UTC