- From: John Hax <johnhax@gmail.com>
- Date: Sat, 12 Mar 2011 17:43:11 +0800
- To: "Kang-Hao (Kenny) Lu" <kennyluck@w3.org>
- Cc: (wrong string) 樂會ML <public-html-ig-zh@w3.org>
- Message-ID: <AANLkTik7+UjU6k-pPCDen04BjqdXnOaCtMVo1FHoGFqz@mail.gmail.com>
多谢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