CSS伪类选择器的权重问题!

在网上看的各种帖子,伪类选择器和类选择器的权重都是10,但实测却不是这样的

    <style type="text/css">
        .container div{
            width: 100px;
            height: 100px;
        }

        .container:nth-child(1) div{
            background: blue;
        }

        .container div:nth-child(1){
            background: red;
        }
    </style>

    <body>
        <div class="container">
            <div></div>
        </div>
    </body>

上边的代码,.container:nth-child(1) div.container div:nth-child(1)的权重应该是一样的,我的判断依据是,交换这两个样式的顺序,div的颜色会变。但是,上边一个 伪类选择器+标签,权重应该为11,另一个是 类选择器+伪类选择器,权重应该为20。请问到底是怎样的?

另一组测试如下:

    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
        }

        div:nth-child(1){
            background: blue;
        }

        .demo{
            background: red;
        }
    </style>

    <body>
        <div class="demo"></div>
    </body>

在这里,变动div:nth-child(1).demo的顺序,div一直都是蓝色,是否说明伪类选择器权重大于类选择器?

被这两组测试搞晕了,望大神解释,测试浏览器是chrome 69

阅读 5.8k
4 个回答

:hover :link 之类的才是伪类选择器,类选择器和伪类选择器权重一样。
a:hover 这是一个复合选择器,权重叠加后比类选择器大。

我觉得div:nth-child(1)的权重应该是1+10
而.demo的权重是10

.container:nth-child(1) div 的权重是10+10+1
.container div:nth-child(1) 的权重是 10+1+10

上面的一组测试,两个选择器的权重为

0 0 2 1
0 0 2 1

下面一组测试的权重为

0 0 1 1
0 0 1 0

再举个例子,11个类选择器和1个id选择器的权重分别为

0 1 0 0
0 0 11 0

css权重网上大部分的教程都是错的(id选择器权重100,类选择器权重10,搞得好像11个类选择比1个id选择器权重大一样),建议去看文档

新手上路,请多包涵

1,id选择器的权重是100,类选择器器的权重是10
2,CSS里面的进制并不是10进制,而是256进制,所以10个类选择器并不等于一个id选择器

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题