聊聊css属性值的计算过程

首先一点要明确的是浏览器渲染某一个元素之前,它的每一个css属性值必须都要有确定的值,否则是没法渲染的

那么我们今天要讲的就是浏览器是怎么一步步的 把每一个属性值都确定下来的。

首先我们把最主要的四个步骤简单列出来,之后再一一讲解

  1. 确定声明值
  2. 解决层叠冲突
  3. 继承
  4. 默认值

这是一个元素所有的css属性(总共大概有小几百个,这里就不一一列举了):

/* 这时所有的值都是没有确定的 */
{
    color:?
    background-color:?
    text-align:?
    font-size:?
    font-weight:?
    display:?
    其他CSS属性:?
}

假设用户写了如下样式:

.red {
    color:red;
    font-size:40px;
}
h1 {
    font-size:26px;
}
div h1.red {
    font-size:3em;
    font-size:30px;
}

这是浏览器默认样式表:

h1 {
    display: block; 
    font-size: 2em; 
    font-weight: bold;
}

接下来我们来看看浏览器是如何根据这四个步骤将这几百个属性值全都确定下来的

1. 确定声明值

这一步就是说将没有样式冲突的属性先确定下来

那么这一步完了之后,我们可以确定如下属性:

    display: block;
    color:red;
    font-weight: bold;

{
    color:red;
    background-color:?
    text-align:?
    font-size:?
    font-weight: bold;
    display:block;
    其他CSS属性:?
}

2. 解决层叠冲突

这一步就开始要解决冲突了,即对样式表中有冲突的声明使用层叠规则,确定css属性值

那么层叠规则又是什么呢?

  1. 重要性
  2. 特殊性
  3. 源次序

首先这个重要性的意思就是:

 !important > 用户样式表 > 浏览器默认样式表

这里我们可以看到,color属性是有冲突的。由于样式表中没有!important 标明,所以我们继续往后看(如果哪一个地方标明了,则直接就能确定该值了,但如果有多个地方标明,则还需要进行后面的比较),由于用户样式表 > 浏览器默认样式表,所以浏览器默认样式表中的样式就被淘汰了。然后就进入到了权重的计算,

这里我们可以直接看出

div h1.red {
    font-size:3em;
    font-size:30px;
}

这个选择器的权重是最高的,但是这里写了两个font-size,那么就需要比较源次序了,这里的意思就是后面的会覆盖前面的,那么最终的值就确定为30px

这一步,我们最后确定了如下css样式的属性值:

{
    color:red;
    background-color: ?
    text-align: ?
    font-size:30px;
    font-weight:bold;
    display:block;
    其他CSS属性:...
}

3. 继承

到了这一步尽管确定了一些没有冲突的,有冲突的属性值,但是还是有一些属性的值没有确定,因为有一些属性用户样式表和浏览器默认样式表中都没有进行声明。所以这一步,对仍然没有值的属性,若可以继承,则继承父元素的值

css可以继承的属性:

1.字体系列属性

font:组合字体

font-family:规定元素的字体系列

font-weight:设置字体的粗细

font-size:设置字体的尺寸

font-style:定义字体的风格

2、文本系列属性

text-indent:文本缩进

text-align:文本水平对齐

line-height:行高

word-spacing:增加或减少单词间的空白(即字间隔)

letter-spacing:增加或减少字符间的空白(字符间距)

text-transform:控制文本大小写

direction:规定文本的书写方向

color:文本颜色

3、元素可见性:visibility

4、表格布局属性:
caption-side、border-collapse、border-spacing、empty-cells、table-layout

5、列表属性:
list-style-type、list-style-image、list-style-position、list-style

6、光标属性:cursor

根据以上信息可以确定,text-algin属性是可以继承的,假设h1标签的父元素的text-algin的值为center,则h1的text-algin的值也为center。

至此,我们最后确定了如下css样式的属性值:

{
    color:red;
    background-color: ?
    text-align: center;
    font-size:30px;
    font-weight:bold;
    display:block;
    其他CSS属性:...
}

4. 默认值

到了这一步,对仍然没有值的属性,使用默认值

background-color的默认值为transparent,至此我们就将所有的属性值确定了下来。

{
    color:red;
    background-color: transparent;
    text-align: center;
    font-size:30px;
    font-weight:bold;
    display:block;
    其他CSS属性:...
}

两个特殊的css属性

最后,说一下两个特殊的css属性:

  • inherit。强制(手动)继承,将父元素的值取出应用到该元素(不管这个属性值是否可以继承)。
  • initial。初始值,将该元素的属性变为默认值。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容