E[att="val"] { sRules } 选择具有 att 属性且属性值等于 val 的 E 元素
E[att~="val"] { sRules } 选择具有 att 属性且属性值中有 val 的 E 元素
E[att^="val"] { sRules } 选择具有 att 属性且属性值为以 val 开头的 E 元素
E[att$="val"] { sRules } 选择具有 att 属性且属性值为以 val 结尾的 E 元素
E[att*="val"] { sRules } 选择具有 att 属性且属性值字符串包含 val 的 E 元素
E[att|="val"] { sRules } 选择具有 att 属性且属性值为以 val 开头并用连接符 "-" 分隔的字符串的 E 元素,如果属性值仅为 val ,也将被选择
分析 DOM 树和 CSS 规则,整合成一棵 Render Tree,最终用来进行绘图渲染。(display: none; 的元素会被 Render Tree 无视)
根据 Render Tree 进行 Layout、Painting,最终 Display
在建立 Render Tree 的过程中(WebKit 中的「Attachment」过程),浏览器就要为每个 DOM Tree 中的元素根据 CSS 的解析结果(Style Rules)来确定生成怎样的 renderer。对于每个 DOM 元素,必须在所有 Style Rules 中找到符合的 selector 并将对应的规则进行合并。选择器的「解析」实际是在这里执行的,在遍历 DOM Tree 时,从 Style Rules 中去寻找对应的 selector。
因为所有样式规则可能数量很大,而且绝大多数不会匹配到当前的 DOM 元素,所以有一个快速的方法来判断「这个 selector 不匹配当前元素」就是极其重要的。
Web 前端分享 第二期
(一)那些重要却总被忽视的 HTML 招式
1. DOCTYPE 声明
我们经常会遇到不同的 DOCTYPE 声明方式,Eg:
HTML 5:
HTML 4.01 Strict:
HTML 4.01 Transitional:
...
什么是 DOCTYPE 声明?它影响什么?
DOCTYPE 告知浏览器当前的 HTML (或 XML) 文档是哪一个版本,它是一条声明, 而不是一个标签; 也可以把它叫做 "文档类型声明", 或简称为 "DTD(document type declaration)".
不同文档类型对应的识别标签范围不同,详见: HTML 元素和有效的 DTD
DOCTYPE 也会影响浏览器渲染模式(Q: 混杂模式, A: 近标准模式, S: 标准模式),应设置成
<!DOCTYPE html>
,确保 IE8+ / Opera9+ / Firefox10+ / Chrome10+ / Safari10+ 为标准模式,另外此时 IE6、IE7 会解析为近标准模式2. 元数据
元数据是描述数据的数据,使用 元素 来为文档添加元数据。
<meta>
包含name
和content
属性:name
指定 meta 元素类型; 说明该元素包含了什么类型的信息。content
指定元数据内容Eg:
指定文档字符编码:
设定视口属性:
渲染内核设置,使用 meta 标签来强制 IE8 使用最新的内核渲染页面,避免 IE8 使用“兼容性视图”功能:
引导360浏览器(双核)使用 webkit 内核渲染网页:
网页 TDK 设置:
浏览器辅助功能开关:
3. 块级元素和内联元素
<a>
或者强调元素<em>
和<strong>
嵌套规则:
<p>
里面4. IE Hack
Eg:
5. 特殊字符的实体引用
常用:
<
>
"
'
&
 
 
©
HTML特殊字符编码对照表
(二)CSS 基础
1. CSS 规则
CSS 属性速查
2. 不同种类的 CSS 选择器
简单选择器
简单选择器基于元素的类型(或其 class 或 id)直接匹配文档的一个或多个元素
属性选择器
E[att] { sRules }
选择具有att
属性的E
元素,Eg:E[att="val"] { sRules }
选择具有att
属性且属性值等于val
的E
元素E[att~="val"] { sRules }
选择具有att
属性且属性值中有val
的E
元素E[att^="val"] { sRules }
选择具有att
属性且属性值为以val
开头的E
元素E[att$="val"] { sRules }
选择具有att
属性且属性值为以val
结尾的E
元素E[att*="val"] { sRules }
选择具有att
属性且属性值字符串包含val
的E
元素E[att|="val"] { sRules }
选择具有att
属性且属性值为以val
开头并用连接符 "-" 分隔的字符串的E
元素,如果属性值仅为val
,也将被选择伪类
一个 CSS 伪类是一个以冒号(:)作为前缀的关键字,当你希望样式在特定状态下才被呈现到指定的元素时,你可以往元素的选择器后面加上对应的伪类
Eg:
伪元素
就像 pseudo classes (伪类)一样, 伪元素添加到选择器,但不是描述特殊状态,它们允许您为元素的某些部分设置样式。 例如,
::first-line
伪元素只定位由选择器指定的元素的第一行::after
::before
::first-letter
::first-line
::selection
Eg.清除浮动:
关系选择器
注意 IE 兼容性:
IE8 支持 兄弟选择符(E~F) 和属性选择符: E[att^="val"]、E[att$="val"]、E[att*="val"]
IE8 不支持 E:root、E:nth-child(n)、E:nth-last-child(n)、E:nth-of-type(n)、E:nth-last-of-type(n)、E:last-child、E:first-of-type、E:last-of-type、E:only-child、E:only-of-type、E:empty、E:target、E:enabled、E:disabled、E:checked、E:not(s)
以上 CSS3 选择器 IE9+ 均支持,兼容性参考
3. 盒模型
概念
在写 CSS 时你会发现大部分都是关于盒模型的——设置它们的尺寸,颜色,位置等等。CSS 布局就是基于盒模型的。每个占据页面空间的块级元素都有相似的属性:
margin -> border -> padding -> content
盒子的大小:content + padding + border
2种盒模型
盒模型分为2种,IE8+ 浏览器通过
box-sizing
来设置:box-sizing: content-box
,width/height
= content 区域box-sizing: border-box
,width/height
= content + padding + border定位
position
有4个值:类比一下:static(活人),relative(没火华的尸体),absolute(灵魂出窍),fixed(阴魂不散)
z-index
设置对象的层叠顺序,适用于定义了
position
为非static
的元素4. 浏览器渲染过程
display: none;
的元素会被 Render Tree 无视)在建立 Render Tree 的过程中(WebKit 中的「Attachment」过程),浏览器就要为每个 DOM Tree 中的元素根据 CSS 的解析结果(Style Rules)来确定生成怎样的 renderer。对于每个 DOM 元素,必须在所有 Style Rules 中找到符合的 selector 并将对应的规则进行合并。选择器的「解析」实际是在这里执行的,在遍历 DOM Tree 时,从 Style Rules 中去寻找对应的 selector。
因为所有样式规则可能数量很大,而且绝大多数不会匹配到当前的 DOM 元素,所以有一个快速的方法来判断「这个 selector 不匹配当前元素」就是极其重要的。
比较正向解析与逆向解析:「div div p em」
5. 如何实现响应式布局?
一个网站能够兼容多个终端显示,而不是为每个终端做一个特定的版本。这个概念是为解决移动互联网浏览而诞生的。
媒体查询 Media Queries
通过不同的媒体类型和条件定义样式表规则。
媒体查询可以获取哪些值?
Eg:
注:IE8 不支持 Media Query
(三)重新认识 JavaScript
1. 被人误解最深的编程语言
Js 是一种面向对象的动态语言,它包含类型、运算符、标准内置对象和方法
2. 类型检测
JS 中的数据类型
三种比较操作:
===
==
,存在隐式转换隐式转换 Eg:
附:非严格相等判断表
类型检测
附:jQuery 和 lodash 都在用的类型检测模块
3. 认识 DOM
DOM(Document Object Model),文档对象模型,定义访问和处理 HTML 文档的标准方法。DOM 将 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)
上面代码对应的节点树结构:
DOM 节点包括:元素节点、文本节点、属性节点
附:DOM 事件标准
4. Ajax 与 XMLHttpRequest
三步:
同步与异步
XMLHttpRequest
XMLHttpRequest API - MDN
创建 XHR 对象
发送 HTTP 请求
open(method, url, async)
规定 HTTP 请求的方式、地址、是否异步send(string)
将请求发送到服务器XHR 获取响应
通过监听 XHR 对象的 readyState 属性变化来判断服务器响应情况:
0:请求未初始化,open 未调用 1:服务器连接已经建立,open 已调用 2:请求已接收,也就是接收到头信息了 3:请求处理中,也就是接收到响应主体了 4:请求已完成,响应已就绪
(四)模块模式
ES5 没有内建的模块机制,ES6 通过 export 和 import 关键字来声明模块,另外 CommonJS 也有一套模块声明规则。
模块模式包括:
Eg.直播/回放公有模块:
Eg. 调用公有模块
(五)应用层/组件层 分层开发