CSS的历史与工作原理

1. 浏览器的发展与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年为止,第三版还未完备。
2. 浏览器是如何渲染页面和加载页面
为什么有些网站打开的时候会加载会很慢,而且是整个页面同时显示的,而有些网站是从顶到下逐步显示出来的?要搞懂这个可以先从下面这个常规流程开始:
浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。
在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完)。
如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载。
并且在下载后进行解析,解析过程中,停止页面所有往下元素的下载。
样式表在下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染。
JS、CSS中如有重定义,后定义函数将覆盖前定义函数。
这里关键的是第2-5这三点。渲染效率与下面三点有关:
css选择器的查询定位效率
浏览器的渲染模式和算法
要进行渲染内容的大小
3. 什么是CSS以及CSS的优点
什么是CascadingStyleSheets(层叠样式表)?CSS是CascadingStyleSheets(层叠样式表)的简称。CSS 语言是一种标记语言,它不需要编译,可以直接由浏览器解释执行(属于浏览器解释型语言)。在标准网页设计中CSS负责网页内容 (XHTML)的表现。CSS文件也可以说是一个文本文件,它包含了一些CSS标记,CSS文件必须使用css为文件名后缀。可以通过简单的更改 CSS文件,改变网页的整体表现形式,可以减少我们的工作量,所以她是每一个网页设计人员的必修课。CSS是由W3C的CSS工作组产生和维护的。
采用CSS+DIV进行网页重构相对与传统的TABLE网页布局而具有以下3个显著优势:
表现和内容相分离将设计部分剥离出来放在一个独立样式文件中,HTML文件中只存放文本信息。这样的页面对搜索引擎更加友好。
提高页面浏览速度对于同一个页面视觉效果,采用CSS+DIV重构的页面容量要比TABLE编码的页面文件容量小得多,前者一般只有后者的1/2大小。浏览器就不用去编译大量冗长的标签。
易于维护和改版你只要简单的修改几个CSS文件就可以重新设计整个网站的页面。
4. 浏览器对CSS的匹配原理
浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找。比如之前说的DIV#divBoxpspan.red{color:red;},浏览器的查找顺序如下:先查找html中所有class=’red’的span元素,找到后,再查找其父辈元素中是否有p元素,再判断p的父元素中是否有id为 divBox的div元素,如果都存在则CSS匹配上。
浏览器从右到左进行查找的好处是为了尽早过滤掉一些无关的样式规则和元素。firefox称这种查找方式为keyselector(关键字查询),所谓的关键字就是样式规则中最后(最右边)的规则,上面的key就是span.red。
5. 优化你的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代替层级关系。一般写法:#divBoxullia{display:block;},更好写法:.block{display:block;}
5. 在css渲染效率中id和class的效率是基本相当的。class最在第一次载入中被缓存,在层叠中会有更加好的效果,在根部元素采用id会具有更加好(id有微妙的速度优势)。

转载于:https://www.cnblogs.com/lechie/archive/2012/03/12/2391686.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java类可选,java – 是否有类可选,但非可选的类?

它是方便的声明函数映射值和消费它们,如果它们存在。在你有几个强制对象和几个可选的情况下,我发现自己包装在Optional.of(mandatoryObject)中的其他人,所以我可以使用相同的表达式,而不必向后写。Food vegetables Food.someVege…

数据库字符串处理函数

在数据库操作中,经常要进行字符串的拼接和替换等操作。下面总结归纳如下: 示例数据表people如下: 1 sql server数据库中的sql语句可以直接用 号进行字符串的拼接。举例如下: select Name ‘ ’ gentle as message from people …

[zz]Apache Thrift学习小记

参考: http://incubator.apache.org/thrift/ http://wiki.apache.org/thrift/FrontPage http://jnb.ociweb.com/jnb/jnbJun2009.html非常好的入门教程 http://developers.facebook.com/thrift/thrift-20070401.pdfthrift开发者写的论文 http://wiki.apache.org/thri…

php引用python出现502,【已解决】python执行出错:HTTPError: HTTP Error 502: Bad Gateway

【已解决】python执行出错:HTTPError: HTTP Error 502: Bad Gateway【背景】某此脚本执行,出现错误:LINE 1687 : ERROR Unknown Error !Traceback (most recent call last):File “E:WebServerWordPressto_wphi-baidu-mover_v2hi-baidu-mo…

can't load apple.laf.AquaLookAndFeel (Ant in Eclipse can't find it

转载自:http://lists.apple.com/archives/java-dev/2004/Oct/msg00529.html Re: "cant load apple.laf.AquaLookAndFeel" (Ant in Eclipse cant find it) Subject: Re: "cant load apple.laf.AquaLookAndFeel" (Ant in Eclipse cant find it)Fr…

php中的会话控制器,php – codeigniter检查每个控制器中的用户会话

另一个选项是创建基本控制器。将函数放在基本控制器中,然后继承。要在CodeIgniter中实现这一点,请在应用程序的libraries文件夹中创建一个名为MY_Controller.php的文件。class MY_Controller extends Controller{public function __construct(){parent::…

EXT.NET高效开发(一)——概述

之前就有想法说说这方面,直到看到我上一篇博客《EXT.NET复杂布局(一)——工作台》的回复: 小龙3:ext.net 比使用傳統的webform控件开发时间多多少? 我就决定提前写这一系列了。小龙3应该感到荣幸。嘿嘿。 相…

php 类的注释标准,php标准注释

文件头部模板/***这是一个什么文件**此文件程序用来做什么的(详细说明,可选。)。* author richard* version $Id$* since 1.0*/函数头部注释/*** some_func* 函数的含义说明** access public* param mixed $arg1 参数一的说明* param mixed $arg2 参数二的说明* par…

前端学习(417):京东制作页面25中间部分的准备工作

引入index.css作为中部样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Comp…

前端学习(418):京东制作页面26中间模块划分

index.css /* 中间模块 */ .grid{height: 480px;} .grid-coll1{width: 190px;height: 100%;background-color: pink;} .grid-coll2{width: 790px;height: 100%;background-color: skyblue;margin-left:10px;} .grid-coll3{width: 190px;height: 100%;background-color:purple;…

Linux下,安装配置Weblogic

Linux下&#xff0c;安装配置Weblogic2009-03-20 15:03一、安装配置JDK //如果应用不需要高版本的JDK的话&#xff0c;可以不单独安装JDK 1. 安装JDK # chmod ax jdk-1_5_0_15-linux-i586.bin # ./jdk-1_5_0_15-linux-i586.bin # mv jdk1.5.0_15 /usr/local/jdk //JDK安…

php_self nginx,nginx中的PATH_INFO为什么会影响$_SERVIER['PHP_SELF']

发现问题&#xff1a;使用ThinkPHP3.2.2在nginx部署网站&#xff0c;设置URL_MODEL2&#xff0c;使用U方法在本地生成的链接形如:/public/index但是在部署在nginx上却出现了问题 其中的URL生成了./public/index通过追寻ThinkPHP源码在ThinkPHP.php文件中发现了如下代码:if(IS_C…

前端学习(419):京东制作页面27左侧分类上

index.css /* 中间模块 */ .grid{height: 480px;} .grid-coll1{width: 190px;height: 100%;background-color: pink;} .grid-coll1 ul{padding: 20px 0;} .grid-coll1 ul li{padding-left: 12px;}.grid-coll2{width: 790px;height: 100%;background-color: skyblue;margin-lef…

java 树结构递归设计,java实现递归树形结构

数据结构递归树,数据结构递归算法,数据结构递归,数据结构递归运算,考研数据结构考递归,数据结构递归回溯,js递归树形数据结构,数据结构分治,递归变非递归用什么数据结构......通过函数递归调用来实现树形结构数据遍历的方法,其中递归函数体实现了打印指定结点的子结点功能。本方…

解析IP地址与MAC地址

一、IP地址  对于IP地址&#xff0c;相信大家都很熟悉&#xff0c;即指使用TCP/IP协议指定给主机的32位地址。IP地址由用点分隔开的4个8八位组构成&#xff0c;如192.168.0.1就是一个IP地址&#xff0c;这种写法叫点分十进制格式。IP地址由网络地址和主机地址两部分组成&…

梯度算法的matlab程序,基于MATLAB的梯度法源代码

话不多说&#xff0c;直接上干货。这是基于MATLAB的源代码&#xff0c;目标函数我选择了一个二维函数&#xff0c;根据自己需求&#xff0c;更改目标函数&#xff0c;初始迭代点以及收敛精度第一部分&#xff1a;目标函数 根据自己需求&#xff0c;更改目标函数&#xff01;&…

UNP Chapter 22 - 信号驱动I/O

22.1. 概述 信号驱动是指当某个描述字上发生了某个事件时&#xff0c;让内核通知进程。 这里描述的信号驱动不是真正的异步I/O。 第15章描述的非阻塞I/O同样不是异步I/O。在非阻塞I/O中&#xff0c;启动I/O操作后内核并不像真正的异步I/O那样立即返回&#xff0c;它只有在进程非…

break在matlab中的用法,求助这个算法运行的时候说错误: BREAK只能在FOR或WHile使用...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼[filenamel,pathname,filterindex]uigetfile(*.*,选择图像,请选择图像)I imread(num2str(filenamel));disp(请选择添加噪声类型);disp(椒盐噪声 --1);disp(高斯噪声 --2);disp(泊松噪声 --3);disp(斑点噪声 --4);Ainput(请输入选项…

matlab双重差分模型,MATLAB中ARMA模型预测差分问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这是我MATLAB预测风速的程序&#xff0c;程序不是我自己写的&#xff0c;我也是拿来参考自己的毕业作业的.每条程序旁的中文是我自己的理解&#xff0c;我也不知道对不对。程序1Xload(C:\Users\asus\Desktop\1-3.txt); 这是我的历史…

[转]AS语言基础

┏━━━━━━━━━━━━━━━━━━┓ ┃ 第一部分&#xff1a;ActionScript 3 语言基础 ┃ ┗━━━━━━━━━━━━━━━━━━┛ 第2章 ActionScript 3 语言基本元素 2.1.2 数据类型概述 简单数据类型 Boolean(布尔)、int(有符整型)、Number(浮点)、String(字符…