[英]Chrome and CSS attribute selector
我有以下HTML代码,我想用css格式化一种无法更改的数据格式(来自xml)。
我必须为具有不同属性值的元素提供不同的样式。 我想使用CSS属性选择器。
body {
background-color: black
}
s {
text-decoration: none
}
f {
color: black;
text-decoration: none;
display: block;
}
f[type=h2] {
color: green
}
f[type=p] {
color: blue
}
f[type=speech] {
color: yellow
}
f[type=other] {
color: gray
}
<b>
<s>
<f type="h2">Title</f>
<f type="p">Paragraph</f>
<f type="speech">Dialgoue</f>
<f type="other" br="true">Other</f>
<f type="p">Paragraph</f>
<f type="p">Paragraph</f>
</s>
</b>
在Firefox中,页面按照我的预期呈现( h2
为绿色, p
为蓝色, speech
为yelllow,其他为灰色)。 在chrome中,一切都是绿色的。
如何在Chrome中获取Firefox结果?
更改attr名称将对您有所帮助,而且我不知道为什么
<f custom="p">Paragraph</f>
<f custom="speech">Dialgoue</f>
<f custom="other" br="true">Other</f>
<f custom="p">Paragraph</f>
<f custom="p">Paragraph</f>
<style type="text/css">
f[custom=h2] {
color: green;
}
f[custom=p] {
color: blue;
}
f[custom=speech] {
color: yellow;
}
f[custom=other] {
color: gray;
}
</style>
您的HTML无效。 如果通过验证器运行它,则会发出错误,因为它不喜欢命名的嵌入式XML标记。
当HTML5解析器遇到不熟悉的标记时,它会假定这样的标记是生成定义良好的HTML5的错误尝试。 因此,它应用了纠错策略,这些策略导致DOM表示与XML解析器可能产生的DOM完全不同。 特别地,开放元件可能过早地结束并且可以打开附加元件。
实际结果是,HTML5文档中的“裸”XML岛将无法可靠地生成任何类似于人们对随后检查XML岛所期望的DOM。
所以Chrome完全有权在这里搞砸,因为从技术上讲,你首先要做到这一点。 值得注意的是(在我的Chrome浏览器中) 所有元素都是绿色的 ( http://jsfiddle.net/qJMWg/ ) - 这表明由于某些原因它们所有的东西都嵌套在一个大的<f type="h2">
元素。 这是值得注意的,因为HTML确实包含<b>
和<s>
标记,因此<f>
是它遇到的第一个无效标记。
如果我们更改f\\[type=h2\\]
规则 ( http://jsfiddle.net/qJMWg/1/ ) 的样式,它会影响所有内容 - 这与Chrome不正确地解释此XML结构的想法是一致的。 对于Chrome的CSS引擎(尽管开发人员工具告诉我们),这看起来像这样:
<b>
<s>
<f type="h2">Title</f>
<f type="p">Paragraph</f>
<f type="speech">Dialgoue</f>
<f type="other" br="true">Other</f>
<f type="p">Paragraph</f>
<f type="p">Paragraph</f>
</s>
</b>
由于某些未知原因,Chrome对HTML标记非常严格,因此CSS规则在上述浏览器中无法正常工作。
但是有一个建议,为什么不改变XML的样式呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.