css - CSS 选择器 `:enabled` 与 `not(:disabled)` 有区别吗

标签 css css-selectors browser-support

使用 CSS3 选择器 :enablednot(:disabled) 在行为或浏览器支持方面是否存在差异?

我希望它们在功能上是相同的,因为它们都是 CSS3 选择器,所以浏览器支持也应该是相同的。

最佳答案

是的,有区别 — :not(:disabled) 可以匹配 既不是 :enabled 也不是 的元素:禁用。这些是启用/禁用语义根本不适用的元素,例如 divpul 等。

spec证实这一点:

What constitutes an enabled state, a disabled state, and a user interface element is language-dependent. In a typical document most elements will be neither :enabled nor :disabled.

有趣的是,对于 :checked 却不是这样——没有相应的 :unchecked 伪类,尽管并非所有元素都已检查/未经检查的语义。请参阅我对 this question 的回答.

如果您使用类型选择器(例如 inputselecttextarea)或类选择器来限定这些伪类,您可能不必担心这一点。不过,使用 :enabled:not(:disabled) 更有意义。

浏览器对大多数 3 级伪类的支持确实是相同的——没有已知的浏览器只支持 :enabled:disabled。然而,根据 MDN,它看起来像 Opera 9.0 和 Safari 3.1 don't support :not() , 尽管他们确实支持 :enabled:disabled ,以及一些其他功能,如子字符串匹配属性选择器和通用兄弟组合器 ~ 在 IE7 中受支持,但存在一些问题,在 IE8 中稍微好一点。

关于css - CSS 选择器 `:enabled` 与 `not(:disabled)` 有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32862070/

相关文章:

javascript - 检查浏览器对特定 Mime 类型的支持?

css - Safari CSS 断字 : keep-all; is not working

html - 输入元素溢出到 div 之外

css - 根据 Rails 中的当前页面更改 CSS?

javascript - 我如何在 React js 中获得多个选择选项?

css - 选择器,子项而不是颜色跨度父项和子项

Css 未应用于表类

javascript - 哪个 JavaScript 框架可以搜索 CSS 样式表规则并编辑它们的属性?

html - 为什么第一个 child /最后一个 child 不适用于 blockquote

javascript - TypeScript 中的 null 合并运算符 (??) 是否比 JavaScript 的浏览器支持更多?