CSS的样式层叠规则与权重计算方法

CSS的样式层叠规则

在CSS的样式表中,如果同一个容器、标签或元素有多个样式表,在层叠权重相同的情况下,靠下的样式会覆盖靠上的样式,当权重不同的时候,浏览器就会显示权重较大的一个的样式。

权重计算方法

可以进行计算权重的元素包括:
继承 或者 通配符(*)<元素选择器<类选择器,伪类选择器<ID选择器<行内样式style=""<!important 重要的
选择器权重如下:
在这里插入图片描述
计算方法:权重叠加过程中不存在进位原则,即不论多少个0001相加都不会变成0010或其他的权重。

h1 {
	color: red; /*因为h1是元素选择器,所以权重为0001*/
}

h1 h2 {  /*(h1 h2指的是在h1标签下面的h2标签)*/
	color: blue; /*因为h1和h2都是元素选择器,所以权重为0001+0001=0002*/
}

h1,h2 { /*(h1,h2指的是h1和h2标签,与是否具有包含关系无关)*/
	color: black; 
	/*因为h1和h2都是元素选择器,但是他们之间的逗号(,)相当于将他们分成两个内容一样的样式表,即h1{color: black; }和h2{color: black; }所以这里的两个样式表的权重都是0001*/
}

h1.green { /*(h1.green指的是具有类名为green的h1标签)*/
	color: green; /*因为指的是具有类名为green的h1标签,所以权重是由h1标签和.green属性一起组成,即 0001+0010=0011*/
}

h1#orange { /*(h1#orange指的是具有id属性且属性值为orange的h1标签)*/
	color: orange; /*h1是元素选择器,#orange是ID选择器,与上面h1.green处理相似,所以权重是 0001+0100=0101*/
}

a:link {
	color: yellow;/*a是元素选择器,:link是伪类选择器,与上面h1.green处理相似,所以权重是 0001+0010=0011*/
}

在以上列出的样式中,将同一个元素的多个样式拿出来进行比较,权重相同的时候取写在下面的样式,权重不同的时候取权重大的样式。
即:
属于h1元素的样式有:1、3、4、5,因为这四个样式的权重不一样
所以:
当h1元素中不包含class和id的时候样式为:3的样式,因为3靠近下方。
当h1元素中包含class不包含id的时候样式为:4的样式。
当h1元素中不包含class包含id的时候样式为:5的样式。
当h1元素中包含class包含id的时候样式为:5的样式,因为样式5的权重大于样式4的权重。

属于h2元素的样式有:2、3,因为2和3的权重不相同,所以取权重大的样式,即取权重为0002的样式2,所以所有的不包含class和id属性的h2元素的样式为color: blue;

当h1元素存在一个class属性并且属性值为green时,因为h1.green的权重大于h1标签的权重,所以h1.green的样式会覆盖前面h1标签的样式,即color: green; 会覆盖color: black; 故具有class为green的h1标签的样式为color: green;
同理,当一个h1标签存在一个id属性,并且属性值为orange的时候,因为h1#orange的权重值大于h1标签,大于h1.green,所以会覆盖h1以及h1.green的样式,故具有id为orange的h1标签的样式为color: orange;

当一个a标签有一个link伪类的时候,即a:link 时,链接未被点击前具有样式color: yellow;

权重测试代码(着重于测试p.hello的权重值大小,由下可知权重为0011):

//css代码:
<style>
        p { /*0001*/
            color: hotpink;
        }

        .hello { /* 0010 */
            color: red;
        }

        p.hello { /* 0011 */
            color: green;
        }


        /* h1 .hello {  /* 0011 */
            color: blue;
        }  */


        div h1 .hello { /* 0012 */
            color: yellow;
        }
    </style>
// html代码:
<body>
    <div class="happy">
        <h1 class="nihao">
            <p class="hello">你好</p>
            <p>世界</p>
        </h1>
    </div>
</body>

或者将css代码替换为如下代码:(测试过程只需要将他们两个的位置调换即可测出p.hello权重大小为0011 )

		p.hello {
            color: green;
        }
        
        h1 .hello { /* 0011 */
            color: blue;
        } 

更多权重练习:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值