WebKitにおける::-moz-selectionと::selection

間違えて同じルールセットに::-moz-selection::selection並べて書いていた。これ不明なセレクターになってエラーになる……と思って直したんだけど、Safari 5やChrome 17(と19)ではエラーにならず素通しされてた(Firefox 11やInternet Explorer 9、Opera 11ではエラーになって無視される)。どうもこれだけ(か擬似要素すべて)が特別扱いされているかバグっているのかのどちらかな感じ。

Demo: ::-moz-selection and ::selection on WebKit

::-moz-selection,
::selection {
  color:  #000;
  background-color: #ff0;
}

みたいにベンダー拡張プリフィックス付きの::selectionセレクターをまとめて書いてもSafari 5とChrome 17は通ってしまう。他のブラウザーは::-moz-selection::selectionのどちらかが不明なセレクターのため、エラーとしてルールセット全体が無視される。

::selectionとかそもそもWeb標準に今はないじゃん……とかそういう話や問題ではなくて(まぁないんだけど)、不明なセレクターの解釈がCSS2.1の仕様にそぐわないものになっているという話。Developer Toolsで覗くとちょっと変な感じになっていた。

*::-moz-selection,
::selection {
  color:  #fff;
  background-color: #589;
}

全称セレクターのアスタリスク(*)が補完されて解釈されていて、ココらへんにバグか特別扱いがありそう。試しにアスタリスクを消して選択してみようとしたらクラッシュ再現率100%でひどい……。もうちょっと詰めたらChromiumのIssuesに書きたいけど、仕様でこうこうこうだから今の便利な状態を修正して不便にしろみたいなめんどくさい人の感じになりそうで躊躇う……。