Jquery 为什么使用类选择器的内部样式表会被外部样式表覆盖?

Jquery 为什么使用类选择器的内部样式表会被外部样式表覆盖?,jquery,css,class,iframe,Jquery,Css,Class,Iframe,我有一个外部样式表,它有标签规则,使整个项目中的表单看起来更好。它们如下 label { display:block; font-weight:bold; margin:7px 0; } /* For testing purposes, I also added the following. label { color:gold; } 我在iframe上使用了一个内部样式表(尽管我在标准ColdFusion页面上进行了测试,结果是相同的问题),该样式表对带有错误类的标签具有以下规则 label

我有一个外部样式表,它有标签规则,使整个项目中的表单看起来更好。它们如下

label { display:block; font-weight:bold; margin:7px 0; }
/* For testing purposes, I also added the following.
label { color:gold; }
我在iframe上使用了一个内部样式表(尽管我在标准ColdFusion页面上进行了测试,结果是相同的问题),该样式表对带有错误类的标签具有以下规则

label.error { display:inline; 
              color:red; 
              float:none; 
              padding-left:.5em; 
              vertical-align:top; }

这些标签当前通过jQuery的验证插件(位于)的display:none属性隐藏。表单字段未正确验证时,将显示标签。显示标签时,除“显示”属性外,上述所有规则均正常工作

正如您在顶部帖子中所看到的,问题不在于label.error是否覆盖了已经创建的规则,正如我第一次怀疑的那样,这可能是问题所在

我一点也不知道为什么display属性不能正确设置,但是如果有人能帮助我,那就太棒了

谢谢

沮丧的开发者


编辑:这个问题是由我的老板解决的,他告诉我我的CSS需要更细粒度。我从父样式表中获取了确切的标签选择器,并向其中添加了类选择器,然后根据需要更改和添加了规则。如果您有兴趣了解更多信息,请在CSS继承上查找文档。

我认为这可能与jQuery显示方法(淡入淡出、显示等)有关,该方法重新应用display:block以使元素再次显示。因为jQuery有自己的方式使事物可见。您可能需要做的是不要使用例如
.show()
,而是使用
.css({display:'inline'})用于使元素再次可见

为了确保我所说的是否属实,请在firebug中的脚本显示后检查应用于label元素的css


如果设置JSFIDLE或发送一些链接或代码示例,社区可以更好地确定问题的原因

我的第一个想法是jQuery验证插件正在设置元素的显示属性,从而覆盖css规则


如果您附加
!重要信息
在css文件中显示规则的末尾,您应该能够解决这个问题。这是一个非常糟糕的解决方案,IMO,您可能应该考虑使用jQuery.validate的不同方法,而不是反对它,但这取决于您:)

!重要的是一种用于用户样式表的方法,以便禁用/视力受损的用户可以覆盖他们无法读取的样式。在任何情况下使用此属性都是非常糟糕的做法,因为对CSS继承缺乏了解,或者根本不想找出问题的原因。这看起来不是CSS问题。您使用display:none显式重写。如果不显示:无开始,它们是否正确显示?如果是这样,那是javascript的问题,而不是css的问题。我没有使用css属性display:none。显示:jquery验证插件中不会自动放置任何标签,我相信每个标签上都有“error”类。我还没有真正阅读插件源代码,所以对此我不是很肯定,但我没有明确使用display:none anywhere。“jQuery的验证插件当前使用display:none属性隐藏了这些标签”