忽略 Firefox 中特定于 Webkit 的 CSS 选择器

我正在开发一个 jQuery 主题,其中包含尽可能多的表单元素的样式.最初它是为 Webkit (Chrome) 开发的.现在我想让它也适用于 Firefox.

I'm working on a jQuery theme which includes styling for as many form elements as possible. Initially it was developed for Webkit (Chrome). Now I want to make it work with Firefox as well.

问题是;Firefox 在某些特定于 Webkit 的语法方面存在问题.

Problem is; Firefox has problems with some Webkit-specific syntax.

例如:

input[type="range"]::-webkit-slider-thumb,
input[type=radio],
input[type=checkbox] {
    -webkit-appearance: none !important;
    -moz-appearance: none;
    width: 1.2em;
    height: 1.2em;
    border: 1px solid black;
    background: #666666 url(images/ui-bg_highlight-soft_50_666666_1x100.png) 50% 50% repeat-x;
}

问题在于 input[type="range"]::-webkit-slider-thumb, 位.删除它,Firefox 就可以正常工作了.它还对其他语法如 ::-webkit-file-upload-button::selection 和所有其他使用 ::-webkit- 的东西执行此操作... 标签.它可以识别自己的 ::-moz-... 标签,例如 ::-moz-selection 就好了.

The problem is the input[type="range"]::-webkit-slider-thumb, bit. Remove it and Firefox works fine. It also does this for other syntax like ::-webkit-file-upload-button, ::selection and all other things using the ::-webkit-... labels. It recognizes it's own ::-moz-... labels, like ::-moz-selection just fine though.

Webkit 似乎只是忽略了 ::-moz- 标签.

Webkit seems to just ignore the ::-moz- labels.

有没有什么方便的方法让 Firefox 忽略 ::-webkit-... 标签或以其他方式处理这个问题,而不必维护每个 CSS 块的多个副本?

Is there any convenient way to make Firefox ignore the ::-webkit-... labels or otherwise deal with this problem without having to maintain multiple copies of every CSS block?

使用最新版本的 Chrome 和 Firefox.

Using freshly updated versions of Chrome and Firefox.

推荐答案

不幸的是,不复制声明块是不可能的,因为 CSS 规范规定浏览器在遇到 CSS 规则中无法识别的选择器时必须这样做:

Unfortunately, it's not possible without duplicating the declaration blocks, as the CSS spec stipulates that browsers must behave this way when encountering unrecognized selectors in CSS rules:

选择器包含(但不包括)第一个左花括号 ({) 之前的所有内容.选择器总是与 {} 块一起使用.当用户代理无法解析选择器(即,它不是有效的 CSS3)时,它必须 忽略 {} 块.

The selector consists of everything up to (but not including) the first left curly brace ({). A selector always goes together with a {}-block. When a user agent can't parse the selector (i.e., it is not valid CSS3), it must ignore the {}-block as well.

在这种情况下,一个供应商的浏览器无法识别另一个供应商的前缀,因此它必须忽略该规则.

In this case, it's one vendor's browser being unable to recognize another vendor's prefixes, so it has to ignore the rule.

相关文章