`
dcj3sjt126com
  • 浏览: 1871087 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CSS渲染原理

web 
阅读更多

 

从事Web前端开发的人都与CSS打交道很多,有的人也许不知道css是怎么去工作的,写出来的css浏览器是怎么样去解析的呢?当这个成为我们提高css水平的一个瓶颈时,是否应该多了解一下呢?

 

       一、浏览器的发展与CSS     

 

       网页浏览器主要通过HTTP协议连接网页服务器而取得网页,HTTP容许网页浏览器送交资料到网页服务器并且获取网页。目前最常用的 HTTP 是 HTTP/1.1,这个协议在RFC2616中被完整定义。HTTP/1.1 有其一套Internet Explorer并不完全支援的 标准,然而 许多其他当代的网页浏览器则完全支援这些标准。网页的位置以URL(统一资源定位符)指示,此乃网页的地址;以http:开首的便是 通过 HTTP协议登陆。很多浏览器同时支援其他类型的URL及协议,例如ftp:是FTP(档案传送协议)、gopher:是Gopher及https: 是 HTTPS(以SSL加密的HTTP)。   

  

       早期的网页浏览器只支援简易版本的HTML。专属软件的浏览器的迅速发展导致非标准的HTML代码的产生。但随着HTML的成长,为了满足设计师的要求,HTML获得了很多显示功能。随着这些功能的增加外来定义样式的语言越来越没有意义了。   

   

       1994年哈坤·利提出了CSS的最初建议。伯特·波斯(BertBos)当时正在设计一个叫做Argo的浏览器,他们决定一起合作设计CSS。 当时已经有过一些样式表语言的建议了,但CSS是第一个含有“层叠”的主意的。在CSS中,一个文件的样式可以从其他的样式表中继承下来。读者在有 些 地方可以使用他自己更喜欢的样式,在其他地方则继承,或“层叠”作者的样式,这种层叠的方式使作者和读者都可以灵活地加入自己的设计,混合各人的爱好。      

 

       1997年初,W3C内组织了专门管CSS的工作组,其负责人是克里斯·里雷。这个工作组开始讨论第一版中没有涉及到的问题,其结 果是1998年5月出版的第二版要求。到2007年为止,第三版还未完备。

 

       二、浏览器是如何渲染页面和加载页面     

 

       为什么有些网站打开的时候会加载会很慢,而且是整个页面同时显示的,而有些网站是从顶到下逐步显示出来的?要搞懂这个可以先从下面这个常规流程开始:    
       1. 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。     
       2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完)。    
       3. 如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载。     
       4. 并且在下载后进行解析,解析过程中,停止页面所有往下元素的下载。    
       5. 样式表在下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染。     

       6. JS、CSS中如有重定义,后定义函数将覆盖前定义函数。

 

       这里关键的是第2-5这三点。渲染效率与下面三点有关:     
       1. css选择器的查询定位效率     
       2. 浏览器的渲染模式和算法    

       3. 要进行渲染内容的大小

 

       三、什么是CSS以及CSS的优点   

 

       什么是Cascading Style Sheets(层叠样式表)
         -CSS是Cascading Style Sheets(层叠样式表)的简称.
         -CSS 语言是一种标记语言,它不需要编译,可以直接由浏览器解释执行(属于浏览器解释型语言).*在标准网页设计中CSS负责网页内容 (XHTML)的表现.
         -CSS文件也可以说是一个文本文件,它包含了一些CSS标记,CSS文件必须使用css为文件名后缀.
         -可以通过简单的更改CSS文件,改变网页的整体表现形式,可以减少我们的工作量,所以她是每一个网页设计人员的必修课.

         -CSS是由W3C的CSS工作组产生和维护的。 

   

       采用CSS+DIV进行网页重构相对与传统的TABLE网页布局而具有以下3个显著优势:   
       1. 表现和内容相分离将设计部分剥离出来放在一个独立样式文件中,HTML文件中只存放文本信息。这样的页面对搜索引擎更加友好。    
       2. 提高页面浏览速度对于同一个页面视觉效果,采用CSS+DIV重构的页面容量要比TABLE编码的页面文件容量小得多,前者一般只有后者的1/2大小。浏览器就不用去编译大量冗长的标签。    

       3. 易于维护和改版你只要简单的修改几个CSS文件就可以重新设计整个网站的页面。

 

       四、浏览器对CSS的匹配原理    

  

       浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找。比如之前说的DIV#divBox p span.red{color:red;},浏览器 的查找顺序如下:先查找html中所有class=’red’的span元素,找到后,再查找其父辈元素中是否有p元素,再判断p的父元素中是否有id为 divBox的div元素,如果都存在则CSS匹配上。

 

       浏览器从右到左进行查找的好处是为了尽早过滤掉一些无关的样式规则和元素。firefox称这种查 找方式为keyselector(关键字查询),所谓的关键字就是样式规则中最后(最右边)的规则,上面的key就是span.red。

 

       五、优化你的CSS    

 

       所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,下面列出一些我们常见的写CSS犯一些低效错误:

 

       1、不要在ID选择器前使用标签名
         一般写法:DIV#divBox
         更好写法:#divBox

         解释:因为ID选择器是唯一的,加上div反而增加不必要的CSS匹配。

 

       2、不要在class选择器前使用标签名
         一般写法:span.red
         更好写法:.red 
         解释:同第一条,但如果你定义了多个.red,而且在不同的元素下是样式不一样,则不能去掉,比如你css文件中定义如下: 
         p.red{color:red;}

         span.red{color:#ff00ff}

       如果是这样定义的就不要去掉,去掉后就会混淆,不过建议最好不要这样写

 

       3、尽量少使用层级关系    
         一般写法:#divBoxp.red{color:red;}    

         更好写法:.red{..}

 

       4、使用class代替层级关系   
         一般写法:#divBox ul li a{display:block;}    

         更好写法:.block{display:block;}

 

       5、在css渲染效率中id和class的效率是基本相当的      
       class最在第一次载入中被缓存,在层叠中会有更加好的效果,在根部元素采用id会具有更加好(id有微妙的速度优势)。 
分享到:
评论

相关推荐

    css教程 css_源代码

    理解CSS渲染原理,避免使用影响性能的特性(如`!important`、过度使用ID选择器),正确使用层叠和继承,减少网络请求(如使用CSS Sprites、合并CSS文件)等都是提升CSS性能的关键。 综上所述,这个"css教程 css_源...

    css经典学习笔记.zip

    同时,理解CSS渲染原理,避免阻塞页面首屏渲染也很关键。 综上所述,《CSS经典学习笔记》旨在提供一个全面的CSS学习路径,无论你是初学者还是有经验的开发者,都能从中受益,提升你的CSS技能和网页设计能力。通过...

    5日精通CSS层叠样式表

    10. **CSS性能优化**:了解CSS渲染原理,避免阻塞渲染的关键CSS,合理组织CSS代码,使用适当的CSS选择器,都是提高网页性能的重要策略。 综上所述,《5日精通CSS层叠样式表》将带领你全面掌握CSS的精髓,无论你是...

    div css 超级讲义电子书

    7. **优化与性能**:理解CSS渲染原理,避免使用影响性能的样式,如过多的嵌套选择器、使用`!important`、不恰当的JavaScript操作样式等。合理组织CSS代码,考虑预处理器(如Sass、Less)的使用,以及对CSS进行压缩和...

    页面渲染原理及页面优化

    页面渲染原理是指浏览器如何将 HTML、CSS、JavaScript 等文件加载和解析到浏览器中,并将其呈现给用户的过程。这个过程非常复杂,涉及到浏览器的内核、渲染引擎、解析算法等多方面的技术。为了更好地优化页面加载...

    页面渲染原理剖析.pdf

    页面渲染原理剖析 页面渲染原理剖析是指浏览器将 HTML、XML 文档及图片等内容渲染到屏幕上所涉及的技术过程。该过程是前端开发人员必须了解的重要知识点,因为它直接影响页面的性能和用户体验。 渲染引擎是浏览器...

    CSSBox:纯Java HTML / CSS渲染引擎-开源

    **CSSBox:深入理解纯Java HTML/CSS渲染引擎** CSSBox是一个完全由Java语言实现的(X)HTML/CSS渲染引擎。它的核心功能是解析HTML和CSS代码,并将其转化为可视化的网页布局,同时提供对渲染后页面的详细信息,便于...

    CSS3渲染Checkbox实现3D开关切换按钮

    利用checkbox结合CSS3来实现一个3D开关切换按钮,该CSS3按钮一共有4款不同的样式风格,有电器开关样式...该CSS3按钮的实现原理很简单,原型是一个checkbox,然后利用CSS3属性来渲染checkbox,从而实现3D按钮的效果。

    java笔试题算法-CSSBox:纯JavaHTML/CSS渲染引擎

    CSSBox CSSBox 是一个用纯 Java 编写的 (X)HTML/CSS 渲染引擎。 其主要目的是提供有关呈现的页面内容和布局的完整且可进一步处理的信息。 但是,它也可用于浏览 Java Swing 应用程序中呈现的文档。 渲染引擎的输入是...

    用于切换CSS功能的devtools扩展以后开发人员查看页面应用在浏览器中的渲染方式

    描述中提到的“以后开发人员查看页面/应用在浏览器中的渲染方式”,意味着这个扩展帮助开发者在多种CSS渲染模式下查看和分析他们的项目。它可能包含了对各种CSS3新特性,如Flexbox、Grid布局、动画、过渡、以及旧版...

    浏览器的渲染:过程与原理 1

    本文主要探讨了浏览器渲染页面的原理,特别是关键渲染路径以及CSS和JavaScript如何影响这个过程。 关键渲染路径是浏览器呈现网页时必须执行的一系列步骤,其目标是尽快显示与用户当前操作直接相关的页面内容。这个...

    cssBox包 java

    5. **教育与研究**:教学和研究CSS布局或渲染机制时,CSSBox作为一个可编程的工具,可以让学生和研究人员直观地理解CSS的工作原理。 总之,CSSBox是Java环境中处理CSS和HTML的强大工具,它的解析、渲染和操作功能为...

    cssbox-4.11源码及jar包

    1. **浏览器开发**:CSSBox的解析和布局功能对于构建自定义浏览器或者浏览器插件非常有用,可以帮助开发者理解和控制CSS渲染流程。 2. **PDF生成**:由于CSSBox能够准确地处理CSS和布局,所以常用于将HTML文档转换...

    css界面 css secret

    10. **CSS性能优化**:讨论如何编写高效的CSS代码,减少渲染阻塞,提高网页加载速度和性能。 通过阅读《CSS揭秘》,开发者不仅可以掌握更多的CSS技巧,还能培养出解决问题的创新思维,提升自己的CSS设计能力。这...

    reset.css & normalize.css 下载

    这两者都是CSS预处理工具,旨在消除浏览器之间的样式差异,确保网页在所有浏览器中具有更一致的渲染效果。 **一、reset.css** reset.css,由Eric Meyer发起,是一种广泛使用的CSS重置方法。它的主要目标是将所有...

    PIE.js使IE6,7,8支持部分常用CSS3渲染

    PIE.js 是一个JavaScript库,专为解决老版本Internet Explorer(IE6、7、8)不支持CSS3的一些关键渲染特性而设计。在那个时代,这些浏览器的市场份额仍然相当大,开发者们需要找到一种方法来实现跨浏览器的兼容性。...

    动态加载Css 浏览器判断

    动态加载CSS的基本原理是利用JavaScript来异步请求CSS资源,而不是在HTML文档中直接通过`<link>`标签引入。这样做的好处在于,我们可以在需要时才加载特定的CSS,例如,当用户滚动到某个部分或执行特定操作时。这样...

    将AE制作的动画导出为CSS代码

    在实际开发中,理解CSS动画的工作原理和性能优化策略至关重要。这包括合理利用硬件加速、避免过度绘制、优化渲染树等。通过将AE的创意设计与CSS的实用性相结合,可以为网页创造出引人入胜的动态用户体验。

    CSS学习手册,CSS学习

    - **减少重绘与回流**:理解浏览器渲染原理,避免不必要的计算,提升页面性能。 - **CSS Sprites**:通过合并多个小图像到一张大图,减少HTTP请求,提高页面加载速度。 8. **浏览器兼容性** - **vendor prefixes...

    css精粹(经典的css,有源码)

    理解盒模型的工作原理,能够精确控制元素的大小和位置。 三、布局技术 1. 流动布局(Block Layout):默认情况下,块级元素在垂直方向上堆叠。通过display属性,可以调整元素的显示方式,实现灵活布局。 2. 行内...

Global site tag (gtag.js) - Google Analytics