html元素的css属性值计算过程简述

到底一个html元素的css属性要经历什么过程才会呈现在页面上


一个页面中渲染出来的每个html元素都具有成千上百个css属性值,并且每个css属性都必须是有值的,即使可能有的来自开发者在css文件中的定义,有的是浏览器默认样式,而有的又是继承其父级元素。下面简单讲一下属性值的计算过程:

css属性计算过程

首先要说一下,css的渲染式逐个进行的,并非整体渲染,所以要根据html的树形结构依次展开,虽然这一点和本文的内容关联性不大,这里还是赘述一下,进行了解。
那么,我们就阐述每一个元素渲染过程中的属性计算过程:

第一步:确定声明值

查看css样式表中没有冲突的声明,作为css的属性值。

本文中以下例为示范:

<style>
		div{
			text-align: center;
		}
        h1{
        	background-color: seagreen;
            color: blue;
            font-size: 20px;
        }
        h1.red{
            color: red;
        }
</style>
<div>
	<h1 class='red'>
       	 一级标题
	</h1>
</div>

上述的一段简单代码中,开发者定义了部分h1标签的样式,但实际上h1元素被定义的样式不止只有开发者定义的样式,还会有h1元素自带的浏览器默认样式如下:

<style>
<!--  浏览器默认样式  -->
	h1{
		display: block;
		font-size: 2em;
		font-weight: blod;
	}
</style>

在以上的一系列样式表中,可以看出h1元素的background-color、display、font-weight属性是没有冲突,故这三个属性声明值被确定,而h1其他属性在这一阶段的值仍是?。

第二步:层叠冲突

在这一步中,对样式表内有冲突的声明使用层叠规则,确定CSS属性值。

<style>
		div{
			text-align: center;
		}
        h1{
        	background-color: seagreen;
            color: blue;
            font-size: 20px;
        }
        h1.red{
            color: red;
        }
</style>
<div>
	<h1 class='red'>
       	 一级标题
	</h1>
</div>
<style>
<!--  浏览器默认样式  -->
	h1{
		display: block;
		font-size: 2em;
		font-weight: blod;
	}
</style>

在示例中,h1的部分属性声明中存在冲突,这里就需要通过比较重要性、特殊性以及源次序的规则(由于比较的规则内容与本文主题无关,这里不做介绍),将最终的属性值确定下来,经对比,样式表权重排序为:h1.red>h1>浏览器默认样式表,故由高到低确定了h1的color、font-size属性。
此时,h1元素除了第一、二步中的个别属性值已确定以为,其余值还都是?。
注意:如果这里有属性值为inherit,那么就根据父级元素的这一属性确定属性值。(继承行为)

第三步:使用继承

对仍然没有值的属性,若可以继承,则继承父元素的值。

<style>
		div{
			text-align: center;
		}
        h1{
        	background-color: seagreen;
            color: blue;
            font-size: 20px;
        }
        h1.red{
            color: red;
        }
</style>
<div>
	<h1 class='red'>
       	 一级标题
	</h1>
</div>
<style>
<!--  浏览器默认样式  -->
	h1{
		display: block;
		font-size: 2em;
		font-weight: blod;
	}
</style>

示例中,h1的 text-align 属性值会继承父元素div的值。这里顺便提一下,只有部分属性可以实现继承,例如和文本有关的属性。

第四步:使用默认值

对仍然没有值的属性,使用默认值。以确保每一个css最终都有值,这样才可以将一个元素渲染在页面上。

元素的很多属性值其实在一、二、三步中其实都没有被确定,故最终大多数元素还是在这一步中被确定。下图为例:
在这里插入图片描述
到这里,一个元素的属性值计算过程就结束了。

以上内容纯属个人学习的过程,仍处于学习阶段,有不足之处还请指出交流,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值