(wrong string) 當 val 裡有空白時應(wrong string) 釋為任一皆可的提案 (原: 一些意见和proposal)

多谢Kenny。

我觉得:any确实是一个更加一般的解决方案,不像我的提案只适用于很少的case。

不过对于:any我有一个疑问,那就是specificity怎么计算?比如只算一个伪类?否则是展开成若干条?如果是展开的话,我觉得还不如引入SCSS/LESS那样的嵌套语法,它们更强大,不像:any受限必须是simple
selector。

相比较而言,我的提案只适用很少的case,但是好处是也不需要考虑上述的问题,影响面很小。而且我的提案虽然改变了定义,但是在实践中是向前兼容的,因为之前不会有人写[rel~="a
b c"]的规则。

最后,你提到 rel="a b" 和 rel~="a b" 不协调的问题,我之前确实没想到过。不过这就是个折中,我个人觉得好用比好看更重要。

同样的问题还出现在 lang|="zh-CN"上。我之前写过,按照BCP47(http://www.ietf.org/rfc/bcp/bcp47.txt
),现在表示中国大陆简体中文的完整语言tag应该是这样的:cnm-Hans-CN,历史上跟他等价的写法(就author的用意来说)有:
zh-cnm-Hans-CN
zh-Hans-CN
zh-CN

在实践当中,为了匹配所有这些tag,就得写所有四个选择器,再与其他selector一组合就会非常复杂。

对此,我之前也在邮件列表中提出一个提案,就是 |= 选择器和 lang() 伪类选择器,如果字符串里有“*”的话,就改用 BCP47 中定义的
Extended Filtering 算法(而不是原本的Basic Filtering算法)。

这样就可以用以下选择器表示中国大陆简体中文:
:lang(*-Hans-CN), :lang(zh-CN)
第一个*-Hans-CN是标准写法,第二个zh-CN则兼容了以前的tag。

假如我们只想选简体中文,可以是:
:lang(*-Hans), :lang(zh-CN), :lang(zh-SG)
后两者是兼容以前的tag。zh-SG表示新加坡和马来西亚的简体中文(按说马来西亚应该是zh-MY,不过好像没在网路上见到过)。

除了采用Extended Filtering算法,另一个可行方案,其实也是和 ~= 的方案一样,允许列出多个,如:
[hreflang|="zh-Hant zh-TW zh-HK zh-MO"]

或者可以两者皆用,如:
:lang(*-Hant zh-HK zh-TW zh-MO)
匹配所有繁体中文


以上。


2011/3/12 Kang-Hao (Kenny) Lu <kennyluck@w3.org>

> 大家好
>
>
> @是之前 Hax 的一些提案 →
> http://lists.w3.org/Archives/Public/public-html-ig-zh/2010Sep/0012 的第三項
>
> (歡迎大家一起來考古 :p)
>
> (10/09/08 3:02), John Hax wrote:
> > [恕刪]
> >
> > 三、CSS3 selector [att~=val] 的问题
> >
> > [attr~=val]是attr为空格分隔的词中包含val。按照现在的规定Val本身不能含
> > 空格,如果含空格是不可能match的。
> >
> > 建议修改这个行为,如果val包含空格,则表示attr的词列表中包含任意一个val
> > 中空格分隔的词
>
> 雖然不太看好,總是試著送出去試試。[1]
>
> [1] http://lists.w3.org/Archives/Public/www-style/2011Mar/thread#msg215
>
> >
> > nav a[rel~="prev"]::before, nav a[rel~="next"]::before, nav
> > a[rel~="first"]::before, nav a[rel="last"]::before, nav
> > a[rel~="up"]::before {
> >   border-radius: 4px;
> >   background: url(nav-link-bg.png)
> > }
> >
> > 注意到这个selector序列会非常冗长(复杂的情况下会更长到不可思议),而且
> > 不幸的,很容易写错而且很难看出来(各位能看出来我哪里写 错了吗?)
>
> 找很久找到了 :)  不公佈留給其他人試試看 xd
>
> > 这时候如果支持前述定义,就可大大简化了:
> >
> > nav a[rel~="prev next first last up"]::before {
> >   border-radius: 4px;
> >   background: url(nav-link-bg.png)
> > }
> > nav a[rel~="prev next first last up"][rel~="external"]::before {
> >   background: url(external-nav-link-bg.png)
> > }
>
> 其實現在 Mozilla 有@個 :any 的提案[2](還沒有寫成 W3C 文檔)是個很一般
> 的解決用「,」的樣式過長問題的提案,你的第二個樣式可以寫成:
>
> nav a:any([rel~="prev"], [rel~="next"], [rel~="first"],
>               [rel~="last"], [rel~="up"])[rel~="external"] { color: red }
>
> (做了一個 demo[3] 給大家玩玩看)
> 雖然是縮短一點,不過看起來的確是很難看。不過同樣是解決樣式重複的問題,我
> 覺得最後不會兩個提案都用。另外就是你的提案會讓 [rel~="a b"] 跟 [rel="a
> b"] 走不同的 codepath,有種不協調的感覺。看看之後會怎麼樣吧。
>
> [2] https://developer.mozilla.org/en/CSS/%3A-moz-any
> [3] (需要FF4b) http://www.w3.org/People/kennyluck/Test/any-selector-attr
>
> 此致
> Kenny, HTML5 中文興趣小組W3C連絡人
> 推特: http://twitter.com/kanghaolu
> 噗浪: http://www.plurk.com/kennyluck
> 新浪微博: http://t.sina.com.cn/1950042164 (還不是很有東西)
>
>
>
>

Received on Saturday, 12 March 2011 09:43:46 UTC