断舍离,永远去做你余生最重要的那件事

首页前端开发正文

CSS选择器权重的计算只针对指定样式(当前元素),并不能用于继承样式

朱绪2017-05-252567CSS

在CSS中,选择器权重的计算只针对指定样式(当前元素),并不可以用于继承样式。

我们来看一个“权重计算”的例子就知道了:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
    #outer p{
        /*权重=100+1=101*/
        color: red;
    }
    #outer .inner{
        /*权重=100+10=110*/
        color: green;
    }
    #outer p strong{
        /*权重=100+1+1=102*/
        color: blue;
    }
    #outer p span strong{
        /*权重=100+1+1=103*/
        color: purple;
    }
</style>
</head>
<body>
    <div id="outer">
        <p class="inner">
            <span><strong>朱绪博客</strong></span>
        </p>
    </div>
</body>
</html>

在浏览器上预览效果,朱绪博客这几个字的颜色是purple(紫色)。

咦?为什么是紫色呢?

咦

明明”#outer .inner{}“的权重是最高的,文本颜色应该为green才对呀!

有的小伙伴之所以会出现这种疑问,原因在于没有真正理解”指定样式冲突“是怎么一回事。

指定样式冲突,就是指”当前元素“的样式发生冲突。

这个例子中,我们所针对的当前元素其实是strong,而#outer .inner{}针对的元素是p(strong的祖先元素),而不是strong。

准确来讲,倘若当前元素是strong,那么“#outer .inner{}”和“#outer p”都属于继承样式。

在继承样式中,我们是不可以用选择器权重这一套东西来计算的。