css渲染页面

CSS是CascadingStyleSheets(层叠样式表)的简称,CSS语言是一种标记语言,它不需要编译,可以直接由浏览器解释执行(属于浏览器解释型语言)。

为什么有些网站打开的时候会加载会很慢,而且是整个页面同时显示的,而有些网站是从顶到下逐步显示出来的?

  1. 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。
  2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完)。
  3. 如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载。
  4. 并且在下载后进行解析,解析过程中,停止页面所有往下元素的下载。
  5. 样式表在下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染。
  6. JS、CSS中如有重定义,后定义函数将覆盖前定义函数。
渲染效率与下面三点有关:
  1. css选择器的查询定位效率
  2. 浏览器的渲染模式和算法
  3. 要进行渲染内容的大小

采用CSS+DIV进行网页重构相对与传统的TABLE网页布局而具有以下3个显著优势:

  1. 表现和内容相分离将设计部分剥离出来放在一个独立样式文件中,HTML文件中只存放文本信息。这样的页面对搜索引擎更加友好。
  2. 提高页面浏览速度对于同一个页面视觉效果,采用CSS+DIV重构的页面容量要比TABLE编码的页面文件容量小得多,前者一般只有后者的1/2大小。浏览器就不用去编译大量冗长的标签。
  3. 易于维护和改版你只要简单的修改几个CSS文件就可以重新设计整个网站的页面。

浏览器对CSS的匹配原理

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

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

cssz选择器

通配符 类选择器标签选择器 

后代  子 相邻  

伪类 id选择器 属性选择器 

!important  内联 id 

        1. 标签名选择器     div { color:Red;}         即页面中的各个标签名的css样式
        2.类选择器          .divClass {color:Red;}       即定义的每个标签的class 中的css样式
        3.ID选择器         #myDiv  {color:Red;}        即页面中的标签的id
        4.后代选择器(类选择器的后代选择器)  .divClass  span { color:Red;}   即多个选择器以空格的格式分隔 命名找到准确的标签
        5.群组选择器   div,span,img {color:Red}    即具有相同样式的标签分组显示

1.最高优先级是 (直接在标签中的设置样式,假设级别为1000)<div style="color:Red;"></div>
        2.次优先级是(ID选择器 ,假设级别为100)   #myDiv{color:Red;}
        3.其次优先级是(类选择器,假设级别为10) .divClass{color:Red;}
        4.最后优先级是 (标签选择器,假设级别是 1)  div{color:Red;}
        5.那么后代选择器的优先级就可以计算了啊
        比如 .divClass  span { color:Red;}   优先级别就是:10+1=11
        总结:对于在什么情况下使用什么样的选择器,原则有三点:
       一选择可以准确的找到要控制的标签;二使用最合理的优先级的选择器;三还要是html和css看起来简洁美观可读性强。
通常: 1.最常用的选择器是类选择器
         2.li  td dd 等经常大量连续出现并且样式相同或相似的情况下,一般选用类选择器和标签选择器结合的后代选择器 例:.XX li/td/dd {}
         3.极少的情况下会用ID选择器。

层叠优先级是:
浏览器缺省 < 外部样式表 < 内部样式表 < 内联样式
 
其中样式表又有:
类选择器 < 类派生选择器 < ID选择器 < ID派生选择器
 
派生选择器以前叫上下文选择器,所以完整的层叠优先级是:

浏览器缺省 < 外部样式表 < 外部样式表类选择器 < 外部样式表类派生选择器 < 外部样式表ID选择器 < 外部样式表ID派生选择器 < 内部样式表 < 内部样式表类选择器 < 内部样式表类派生选择器 < 内部样式表ID选择器 < 内部样式表ID派生选择器 < 内联样式...共12个优先级

<html>
<head>
    <title></title>
    <style type="text/css">
        div { color: #00FF00 } /* 绿色 */
        .a1 { color: #0000FF } /* 蓝色 */
        .a1 div { color: #00FFFF } /* 青色 */
        .a2 { color: #FF0000 } /* 红色 */
        #a2 { color: #FFFF00 } /* 黄色 */
        #a2 div { color: #FF00FF } /* 紫色 */
    </style>
</head>
<body>
  <div>我是绿色,内部样式表优先于浏览器缺省</div>
  <div class="a2">我是红色,类选择器优先于内部样式表</div>
  <div class="a2" id="a2">我是黄色,ID选择器优先于类选择器</div>
  <div class="a1">
      <span>我是蓝色,类选择器优先于内部样式表</span>
      <div>我是青色,类派生选择器优先于类选择器</div>
      <div class="a2">我还是青色,类派生选择器优先于所有类选择器</div>
      <div id="a2">
          <span>我是黄色,ID选择器优先于类派生选择器</span>
          <div>我是紫色,ID派生选择器优先于类派生选择器</div>
          <div class="a1">我还是紫色,ID派生选择器优先于所有类选择器</div>
          <div class="a1" id="a1">我还是紫色,ID派生选择器优先于所有ID选择器</div>
          <div class="a1" id="a1" style="color:#000000;">我是黑色,内联样式驾到闲杂人等退下</div>
      </div>
  </div>
</body>

</html>



其Class定义了多个并以空格分开,一个元素同时应用多个class,后定义的优先(即近者优先),加上!important者最优先!


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<style type="text/css">
.a2 {
font-size: 18pt;
color: #0000FF!important;
}
.a1 {
font-size: 9pt;
color: #FF0000;
}
</style>
</head>
<body>
<br />
<span class="a1">a1</span><br />
<span class="a2">a2</span><br />
<span class="a2 a1">a2 a1</span><br />
<span class="a1 a2">a1 a2</span><br />
</body>
</html>

简洁、高效的css,所谓高效就是让浏览器查找更少的元素标签来确定匹配的style元素。
      1.不要再ID选择器前使用标签名
        解释:ID选择是唯一的,加上标签名相当于画蛇添足了,没必要。
      2.不要在类选择器前使用标签名
      解释:如果没有相同的名字出现就是没必要,但是如果存在多个相同名字的类选择器则有必要添加标签名防止混淆如(p.colclass{color:red;} 和 span.colclass{color:red;}
      3.尽量少使用层级关系;
         #divclass p.colclass{color:red;}改为  .colclass{color:red;}

      4.使用类选择器代替层级关系(如上)


元素(block element)

  * address - 地址
  * blockquote - 块引用
  * center - 举中对齐块
  * dir - 目录列表
  * div - 常用块级容易,也是css layout的主要标签
  * dl - 定义列表
  * fieldset - form控制组
  * form - 交互表单
  * h1 - 大标题
  * h2 - 副标题
  * h3 - 3级标题
  * h4 - 4级标题
  * h5 - 5级标题
  * h6 - 6级标题
  * hr - 水平分隔线
  * isindex - input prompt
  * menu - 菜单列表
  * noframes - frames可选内容,(对于不支持frame的浏览器显示此区块内容
  * noscript - 可选脚本内容(对于不支持script的浏览器显示此内容)
  * ol - 排序表单
  * p - 段落
  * pre - 格式化文本
  * table - 表格
  * ul - 非排序列表

内联元素(inline element)

  * a - 锚点
  * abbr - 缩写
  * acronym - 首字
  * b - 粗体(不推荐)
  * bdo - bidi override
  * big - 大字体
  * br - 换行
  * cite - 引用
  * code - 计算机代码(在引用源码的时候需要)
  * dfn - 定义字段
  * em - 强调
  * font - 字体设定(不推荐)
  * i - 斜体
  * img - 图片
  * input - 输入框
  * kbd - 定义键盘文本
  * label - 表格标签
  * q - 短引用
  * s - 中划线(不推荐)
  * samp - 定义范例计算机代码
  * select - 项目选择
  * small - 小字体文本
  * span - 常用内联容器,定义文本内区块
  * strike - 中划线
  * strong - 粗体强调
  * sub - 下标
  * sup - 上标
  * textarea - 多行文本输入框
  * tt - 电传文本
  * u - 下划线
  * var - 定义变量

可变元素

  可变元素为根据上下文语境决定该元素为块元素或者内联元素。
  * applet - java applet
  * button - 按钮
  * del - 删除文本
  * iframe - inline frame
  * ins - 插入的文本
  * map - 图片区块(map)
  * object - object对象
  * script - 客户端脚本


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值