css权重:
css权重:是指样式的优先级,有两条或多条样式作用于一个元素, 多条样式比较,权重高的那条样式对元素起作用,权重相同的,后写的样式会覆盖前面写的样式
权重需要计算
权重计算(层叠):
声明冲突 :同一个样式,多次用到同一个元素
除了浏览器默认的样式和自己写的样式有冲突 例如:a标签,有默认的样式,自己又写的样式,就造成了声明冲突,重复的样式,只保留一个
像这样,浏览器遇到声明冲突了,它就要去解决冲突,有的时候还要专门写成声明冲突 例如:一排导航,只有一个选中,就要给其中一个加样式,去覆盖之前的样式
- 浏览器遇到重复样式怎么去处理的,如何去覆盖 就是 层叠的过程(权重计算)
层叠:浏览器解决声明冲突(重复样式)的过程,浏览器会自动处理重复样式过程,权重计算过程
- 选择器的权重:
1,!important Infinity(正无穷大) 2,行间样式 1000 3,id 100 4,class | 属性 | 伪类 10 5,标签选择器 伪元素 1 6,通配符 0
- 权重计算:
通过选择器权重,计算出4位数,数值越大权重越高, 计算过程不是十进制,是256进制 千位:内联样式, 记1,否则记0 百位:选择器中所有id的数量,记1,否则记0 十位:class,属性,伪类, 记1,否则记0 各位:元素(标签),伪元素 , 记1,否则记0
同一排的选择器,权重相加是它的权重,权重相同,代码书写靠后的胜出
/*0102*/
#only div a{ color:red;}
/*0002*/
div a{ color:green;}
/*0102*/
#only a::after{ content: "*"; color:purple;}
/*0201*/
#only #only2 a{ color: orange;}
/*0022*/
.box div a:hover{ color:blue;}
/*0012*/
.box div a{ color:#ccc;}
<div id="only" class="box">
<div id="only2">
<a href="#">我是a标签</a>
</div>
</div>
.box a{
color: #999;
}
div.box a{
color: red;
}
div a{
color: blueviolet;
}
a{
color: green;
}
<p class="box">
<a href="#">算我吧</a>
</p>
css重置样式表
覆盖浏览器默认样式 很多浏览器默认样式是不同的,为了让其显示一样,要覆盖默认样式
项目中都是先引入一个覆盖浏览器样式的css 公共的样式 再引入自己写的样式 网上有很多重置样式表:normalize.css,reset.css,meyer.css 这几个文件没有什么大的区别,有细微差别,手动改一下就行了
继承:子元素会继承父元素的某些属性
通常子元素或者子孙元素会继承父元素或者祖父元素的某些css属性 并不是所有的属性都会被继承:通常和文字相关的属性都可以被继承,查看mdn官网 背景色不会被继承,不设置的背景色是透明的
查看控制台样式继承: 浏览器控制台inherited form body | div.box 此样式继承自body,div.box
div{
color: red;
text-align:center;
}
<div>
<p>1000</p>
<span>2000</span>
</div>
- 真实项目中,我们一般把字体类型,字体大写在body中,其他所有的元素都继承body的字体,不用再一个个的设置了
div{
color: red;
}
<div>
<a href="#">算我吧</a>
<p>1000</p>
</div>
属性值的计算过程
页面渲染的过程的细节 浏览器渲染每个元素的前提条件:该元素的所有css属性必须有值
一个元素,从所有属性都没有值,到所有的属性都有值,这个计算过程,叫做属性值计算过程 一个元素的所有的css属性都要有值才行,浏览器才会知道如何去渲染这个元素 少一个都不行,就算我们什么都没有写,浏览器也会去计算这个元素的css属性 再计算body的属性,再计算body中元素的属性...都计算完成后才会去渲染
控制台 Elements ->Computed 选中Show all 会显示当前元素的所有css属性
从无属性值到每个属性都有值的计算过程 怎么来计算呢?有4个步骤: 1,确定声明值 声明值 参考样式表中没有冲突的声明,直接拿出来作为css属性值,第2步以后就不再就进行了 user agent stylesheet的样式属于声明的属性值
2,层叠冲突,对样式表有冲突的使用层叠规则(权重计算)
3,使用继承 对仍然没有值的熟悉,若可以继承,则继承父元素的值
到了这里,能继承的去继承父元素属性,层叠冲突也解决了,声明的值也有了 但是还有一些属性没有值,怎么办呢?
4,使用默认值 对仍没有值的属性,使用默认值(浏览器的默认值) 每个属性都有自己的默认值,例如:背景色默认是透明色,一个p标签没有设置宽高,但也有宽高的默认值
经过了4个步骤为止,所有的属性值都确定好了, 浏览器才会去渲染
特殊的两个css取值: 1,inherit:手动(继承)继承,将父元素的值取出来应用到该元素 2,initial:使用浏览器默认值,浏览器给的什么值,就显示什么值 例如背景色是透明色,设置了div背景色是红的,其中一个想要用透明色,就可以直接使用默认值 background: initial; 使用的是浏览器默认的透明色
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!