首页 > 其他分享 >CSS书写顺序及其原因

CSS书写顺序及其原因

时间:2022-11-08 04:22:06浏览次数:59  
标签:顺序 浏览器 render 样式 书写 CSS 解析 css

记得刚开始学习前端的时候,每次写css样式都是用到什么就在样式表后添加什么,完全没有考虑到样式属性的书写顺序对网页加载代码的影响。后来逐渐才知道正确的样式顺序不仅易于查看,并且也属于css样式优化的一种方式。那么是怎么个顺序呢?

(1)定位属性:position display float left top right bottom overflow clear z-index

(2)自身属性:width height padding border margin background

(3)文字样式:font-family font-size font-style font-weight font-varient color

(4)文本属性:text-align vertical-align text-wrap text-transform text-indent text-decoration letter-spacing word-spacing white-space text-overflow

(5)css3中新增属性:content box-shadow border-radius transform……

按照上述1 2 3 4 5的顺序进行书写。

目的:减少浏览器reflow(回流),提升浏览器渲染dom的性能

原理:浏览器的渲染流程为——

①解析html构建dom树,解析css构建css树:将html解析成树形的数据结构,将css解析成树形的数据结构

②构建render树:DOM树和CSS树合并之后形成的render树。

③布局render树:有了render树,浏览器已经知道那些网页中有哪些节点,各个节点的css定义和以及它们的从属关系,从而计算出每个节点在屏幕中的位置。

④绘制render树:按照计算出来的规则,通过显卡把内容画在屏幕上。

css样式解析到显示至浏览器屏幕上就发生在②③④步骤,可见浏览器并不是一获取到css样式就立马开始解析而是根据css样式的书写顺序将之按照dom树的结构分布render样式,完成第②步,然后开始遍历每个树结点的css样式进行解析,此时的css样式的遍历顺序完全是按照之前的书写顺序。在解析过程中,一旦浏览器发现某个元素的定位变化影响布局,则需要倒回去重新渲染正如按照这样的书写书序:

width: 100px;

height: 100px;

background-color: red ;

position: absolute;

当浏览器解析到position的时候突然发现该元素是绝对定位元素需要脱离文档流,而之前却是按照普通元素进行解析的,所以不得不重新渲染,解除该元素在文档中所占位置,然而由于该元素的占位发生变化,其他元素也可能会受到它回流的影响而重新排位。最终导致③步骤花费的时间太久而影响到④步骤的显示,影响了用户体验。

所以规范的的css书写顺序对于文档渲染来说一定是事半功倍的!

扩展:还有一个会影响浏览器渲染性能的词汇“repaint(重绘)”

repaint(重绘):改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。

注意:

a.render树的结构不等同于DOM树的结构,一些设置display:none的节点不会被放在render树中,但会在dom树中。

b.有些情况,比如修改了元素的样式,浏览器并不会理科reflow或repaint,而是把这些操作积攒一批,然后做一次reflow,这也叫做异步reflow.但在有些情况下,比如改变窗口,改变页面默认的字体等,对于这些情况,浏览器会马上进行reflow.

c.为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。

此文部分是参考博客园

https://mp.weixin.qq.com/s?__biz=MzA3NTIwOTYxMw==&mid=2447522046&idx=1&sn=754ba20d30a93bb754013d59d001ef44&chksm=8b62961cbc151f0abb932aa218e00ddc512e0f9179e3e83b6f4af87ccd8dd6e679fa75b9aba8&mpshare=1&scene=23&srcid=0120TWyG73R2Ur6y1e2McZWc#rd

文章内容进行编写的。
————————————————
版权声明:本文为CSDN博主「QPQ_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36060786/article/details/79311244

标签:顺序,浏览器,render,样式,书写,CSS,解析,css
From: https://www.cnblogs.com/sherlock-V/p/16868042.html

相关文章

  • 前端学习-CSS-01-CSS基础认知
    学习时间:2022.11.06CSS基础认知CSS初识<!--01-CSS初识.html--><!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-C......
  • 前端学习-CSS-02-基础选择器
    学习时间:2022.11.07基础选择器标签选择器标签选择器就是以标签名命名的选择器标签选择器将所有该标签内容都生效CSS效果<!--01-标签选择器.html--><!DOCTYPEhtm......
  • day27 CSS浮动、溢出 & js基本语法
    接day26CSS=>CSS定位overflow属性值描述示例visible默认值,内容不会被修剪,会呈现在元素框之外hidden内容会被修剪,并且其余内容是不可见的overflow:hidd......
  • vue2.0引入css文件后报错
    vue2.0的main.js中引入css文件后报错。报错示例:UncaughtError:Moduleparsefailed:/Users/**/Desktop/vue2/node_modules/.1.0.0-rc.5@element-ui/lib/theme-default/i......
  • 将数组按照指定的顺序排序处理
    转载:https://blog.csdn.net/yang_shibiao/article/details/1249681391.数据准备建表语句:   createtabletemp(       provincestring,       city......
  • 日常常用css样式大全,超出隐藏,不换行,省略号,两行超出隐藏,不换行,省略号,CSS中划线(删除
    文字去掉默认抛边line-height:1;超出隐藏,不换行,省略号overflow:hidden;  //超出的文本隐藏text-overflow:ellipsis;  //溢出用省略号显示white-space:nowrap;......
  • 【每日一练】26—CSS实现响应式卡片悬停效果
    今天练习的这个小项目,是一个产品卡片式的介绍说明,像我们在一些个人简历产品说明里或者产品说明里会经常使用这样的内容设计,然后再配上合适的图片即可。例如,我们在个人简历上......
  • 【每日一练】19—CSS 实现撕纸的效果
    写在前面今天我们来练习一个CSS实现的撕纸效果,这个效果,也会在一些设计网站上经常看到,但是这个用PS可以直接做成一张图片,但是,今天我们用CSS通过两张图片就实现了,这样做的好处......
  • 【每日一练】20—CSS实现文字动画效果
    写在前面今天来到了我们的第20个小项目的练习,距离我们100个小项目的练习,我们已经完成了五分之一了,剩下的五分之四,我们一起加油练习。今天练习的这个小项目是一个CSS实现的文......
  • 【每日一练】21—CSS实现炫酷动画背景
    今天分享的这个小练习,我们在视频号上分享过,具体效果请看下面的视频:因为在视频号的后台,有小伙伴留言说,想要这个案例的源码,所以,今天就把这个源码也分享出来了,有兴趣的小伙伴可......