我应该使用CSS:禁用伪类还是属性select器还是一个意见问题?

我正在尝试设置禁用的input样式。 我可以用:

.myInput[disabled] { } 

要么

 .myInput:disabled { } 

属性select器是现代CSS3方式还是前进方向? 我曾经使用伪类,但我不能find任何信息,是否他们是旧的方式,将不被支持,或者他们是否平等,你可以使用任何你最喜欢的。

我不需要支持旧的浏览器(这是一个Intranet应用程序),所以它是:

  • 属性更新更好
  • 伪类仍然是要走的路
  • 无论你最喜欢哪一个
  • 有一个技术上的理由使用一个在另一个

属性select器是现代CSS3方式还是前进方向?

  • 属性更新更好

没有; 实际上,自CSS2以来,属性select器就已经存在了,而且自HTML 4以来, disabled属性本身就已经存在了。 据我所知,在select器3中引入了:disabled伪类,这使得伪类更新。

  • 有一个技术上的理由使用一个在另一个

是的,在一定程度上。

使用属性select器,您依赖的知识是您正在devise的文档使用disabled属性来指示禁用的字段。 从理论上讲,如果你的样式不是HTML,禁用的字段可能不会使用disabled属性来表示,例如它可能被enabled="false"或类似的东西。 甚至将来的HTML版本都会引入新的元素,这些元素使用不同的属性来表示启用/禁用状态; 那些元素将不匹配[disabled]属性select器。

:disabled伪类将select器从您正在处理的文档中分离出来。 该规范只是指出,它的目标是被禁用的元素,而不pipe元素是被启用还是禁用,都不是由文档语言定义的 :

什么构成启用状态,禁用状态和用户界面元素是语言相关的。 在一个典型的文档中,大多数元素都不是:enabled也不是:disabled

换句话说,当你使用伪类时,UA根据你正在devise的文档自动计算出匹配的元素,所以你不必告诉它如何。

就DOM而言,我相信在DOM元素上设置disabled属性也会修改HTML元素的disabled属性,这意味着两个select器与DOM操作之间没有区别。 我不确定这是否依赖于浏览器,但是在所有主stream浏览器的最新版本中都有一个小提示:

 // The following statement removes the disabled attribute from the first input document.querySelector('input:first-child').disabled = false; 

你最有可能是HTML样式,所以这些都不会对你造成任何影响,但是如果浏览器的兼容性不是问题,我会select:enabled:disabled :not([disabled])[disabled]只是因为伪类携带属性select器没有的语义。 我是这样的纯粹主义者。

事实certificate,Internet Explorer 10和11在某些元素上无法识别:disabled伪类,只能使用属性select器语法正常工作。

 #test1:disabled { color: graytext; } #test2[disabled] { color: graytext; } 
 <form> <fieldset id="test1" disabled>:disabled</fieldset> <fieldset id="test2" disabled>[disabled]</fieldset> </form>