使用;attr();论IE中的CSS伪元素
我正在对我的使用;attr();论IE中的CSS伪元素,css,internet-explorer-9,pseudo-element,Css,Internet Explorer 9,Pseudo Element,我正在对我的H4元素使用伪元素:after,并为内容属性提供一个attr('class'): <h4 class="category-label">This is a new event</h4> 将产生预期的结果——在大多数浏览器Safari 5+中,对带有类的H4元素使用适当的标签,对没有class属性的H4元素不使用任何标签 但是在IE9中,没有class属性的H4元素仍然会创建块伪元素,导致没有文本的空白灰色框,这不是预期的行为。在下图中,只有第一个块包含具有c
H4
元素使用伪元素:after
,并为内容属性提供一个attr('class')
:
<h4 class="category-label">This is a new event</h4>
将产生预期的结果——在大多数浏览器Safari 5+中,对带有类的H4
元素使用适当的标签,对没有class
属性的H4
元素不使用任何标签
但是在IE9中,没有class
属性的H4
元素仍然会创建块伪元素,导致没有文本的空白灰色框,这不是预期的行为。在下图中,只有第一个块包含具有class
属性的H4
,值为“panel”;第二和第三个块中的其他H4
元素没有任何class
属性:
有没有办法确保IE9不会为缺少引用内容属性的父元素显示伪内容?不包含内容的伪元素不应呈现…仅使用
h4[class]:after
因此,该样式将仅应用于具有已定义类的元素,我怀疑您是否可以在不使用javascript设置其显示的情况下“确保”它。可能发生的情况是浏览器之间的差异,即按照您的预期运行的浏览器忽略了:在和IE9将内容视为空内容后,请注意:'
,您不应该引用类
这个词。正确的语法是attr(class)
,而不是attr('class')
。完全正确-抱歉。我的实际代码没有被引用。而且,这是预期的行为,所以它不是IE9错误。这种情况也发生在其他支持生成内容的浏览器中(请参阅)。我会解释原因,但我必须写一个完整的答案…啊-我检查了Chrome和FF上的小提琴,你是对的。与IE9的行为相同。看起来我是在iOS和Safari 5+上测试的,如果缺少属性,它就不会呈现内容。这是一次出人意料的旅行!我将在这里插入相关规范。不太热衷于添加一个解释行为的答案,但实际上并没有回答您的问题:|在这里查看attr()
的描述:然后阅读本节:JavaScript也不能处理CSS生成的内容:/n不直接,但编写CSS规则是可以的(不可否认,这将是一个可怕的处理方法),特别是考虑到法布里齐奥优雅的解决方案。这非常有效——非常感谢。我的替代方案也会是类似的,比如h4:not():after
,但我怀疑这是否有效。@atwixtor:嗯,你不能使用:not()
指定具有属性的元素。(您可以使用它来指定没有属性的元素,例如h4:not([class]):在
之后,但当然是相反的方式…):即使与CSS3选择器一起使用的属性是一个类,也不行?我的直觉是,我会将所有H4元素作为目标,而没有类或ID。@atwixtor::not()
应该使用另一个简单的选择器作为括号中的参数。另外,由于属性是DOM元素的单个组件,因此不能真正选择没有属性的元素。
h4[class]:after