要实际确定css样式是继承还是设置在元素本身上,您必须实现浏览器应用的确切规则,以确定元素上特定样式的使用值。
CSS选择器可能并不总是遵循父子关系,这可能简化了事情。考虑一下这个CSS。
body {
color: red;
}
div + div {
color: red;
}
以及以下HTML:
<body>
<div>first</div>
<div>second</div>
</body>
无论first
和second
西港岛线显示为红色,然而,第一个div是红色的,因为它继承父它。第二个div是红色的,因为div + div
CSS规则适用于它,这更 具体 。看一下父级,我们会看到它具有相同的颜色,但这不是第二个div从中获取它的地方。
浏览器除了getComputedStyle
界面之外,不公开任何内部计算。
一个简单但 有缺陷的 解决方案是遍历样式表中的每个选择器,并检查给定元素是否满足选择器。如果是,则 样式直接应用于元素。假设您想浏览第一个样式表中的每个样式,
var myElement = $('..');
var rules = document.styleSheets[0].cssRules;
for(var i = 0; i < rules.length; i++) {
if (myElement.is(rules[i].selectorText)) {
console.log('style was directly applied to the element');
}
}