赞
踩
方便个人学习复习使用。引用博客均有标注链接。
HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成。
HTTP响应报文由状态行,响应头部,空行,响应数据4个部分组成。
协议头 | 说明 |
---|---|
Accept | 可接受的响应内容类型(Content-Types)。 |
Accept-Charset | 可接受的字符集 |
Accept-Encoding | 可接受的响应内容的编码方式。 |
Accept-Language | 可接受的响应内容语言列表。 |
Accept-Datetime | 可接受的按照时间来表示的响应内容版本 |
Authorization | 用于表示HTTP协议中需要认证资源的认证信息 |
Cache-Control | 用来指定当前的请求/回复中的,是否使用缓存机制。 |
Connection | 客户端(浏览器)想要优先使用的连接类型 |
Cookie | 由之前服务器通过Set-Cookie(见下文)设置的一个HTTP协议Cookie |
Content-Length | 以8进制表示的请求体的长度 |
Content-MD5 | 请求体的内容的二进制 MD5 散列值(数字签名),以 Base64 编码的结果 |
Content-Type | 请求体的MIME类型 (用于POST和PUT请求中) |
Date | 发送该消息的日期和时间(以RFC 7231中定义的"HTTP日期"格式来发送) |
Expect | 表示客户端要求服务器做出特定的行为 |
From | 发起此请求的用户的邮件地址 |
Host | 表示服务器的域名以及服务器所监听的端口号。如果所请求的端口是对应的服务的标准端口(80),则端口号可以省略。 |
If-Match | 仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要用于像 PUT 这样的方法中,仅当从用户上次更新某个资源后,该资源未被修改的情况下,才更新该资源。 |
If-Modified-Since | 允许在对应的资源未被修改的情况下返回304未修改 |
If-None-Match | 允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified ),参考 超文本传输协议 的实体标记 |
If-Range | 如果该实体未被修改过,则向返回所缺少的那一个或多个部分。否则,返回整个新的实体 |
If-Unmodified-Since | 仅当该实体自某个特定时间以来未被修改的情况下,才发送回应。 |
Max-Forwards | 限制该消息可被代理及网关转发的次数。 |
Origin | 发起一个针对跨域资源共享的请求(该请求要求服务器在响应中加入一个Access-Control-Allow-Origin的消息头,表示访问控制所允许的来源)。 |
Pragma | 与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生。 |
Proxy-Authorization | 用于向代理进行认证的认证信息。 |
Range | 表示请求某个实体的一部分,字节偏移以0开始。 |
Referer | 表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。Referer其实是Referrer这个单词,但RFC制作标准时给拼错了,后来也就将错就错使用Referer了。 |
TE | 浏览器预期接受的传输时的编码方式:可使用回应协议头Transfer-Encoding中的值(还可以使用"trailers"表示数据传输时的分块方式)用来表示浏览器希望在最后一个大小为0的块之后还接收到一些额外的字段。 |
User-Agent | 浏览器的身份标识字符串 |
Upgrade | 要求服务器升级到一个高版本协议。 |
Via | 告诉服务器,这个请求是由哪些代理发出的。 |
Warning | 一个一般性的警告,表示在实体内容体中可能存在错误。 |
200 OK 请求成功。一般用于GET与POST请求 201 Created 已创建。成功请求并创建了新的资源 202 Accepted 已接受。已经接受请求,但未处理完成 203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 206 Partial Content 部分内容。服务器成功处理了部分GET请求 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 303 See Other 查看其它地址。与301类似。使用GET和POST请求查看 304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 305 Use Proxy 使用代理。所请求的资源必须通过代理访问 306 Unused 已经被废弃的HTTP状态码 307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向 400 Bad Request 客户端请求的语法错误,服务器无法理解 401 Unauthorized 请求要求用户的身份认证 402 Payment Required 保留,将来使用 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 500 Internal Server Error 服务器内部错误,无法完成请求 501 Not Implemented 服务器不支持请求的功能,无法完成请求 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
(1)400状态码:请求无效
产生原因:
解决方法:
(2)401状态码:当前请求需要用户验证
(3)403状态码:服务器已经得到请求,但是拒绝执行
https的SSL加密是在传输层实现的。
客户端在使用HTTPS方式与Web服务器通信时的步骤:
(1)客户使用https url访问服务器,则要求web 服务器建立ssl链接。
(2)web服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),返回或者说传输给客户端。
(3)客户端和web服务器端开始协商SSL链接的安全等级,也就是加密等级。
(4)客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
(5)web服务器通过自己的私钥解密出会话密钥。
(6)web服务器通过会话密钥加密与客户端之间的通信。
优点
(1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
缺点
(1)https握手阶段比较费时,会使页面加载时间延长50%,增加10%~20%的耗电。
(2)https缓存不如http高效,会增加数据开销。
(3)SSL证书也需要钱,功能越强大的证书费用越高。
(4)SSL证书需要绑定IP,不能再同一个ip上绑定多个域名,ipv4资源支持不了这种消耗。
http2.0是基于1999年发布的http1.0之后的首次更新。
(1)提升访问速度(可以对于,请求资源所需时间更少,访问速度更快,相比http1.0)
(2)允许多路复用:多路复用允许同时通过单一的HTTP/2连接发送多重请求-响应信息。改善了:在http1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(连接数量),超过限制会被阻塞。
(3)二进制分帧:HTTP2.0会将所有的传输信息分割为更小的信息或者帧,并对他们进行二进制编码
(4)首部压缩
(5)服务器端推送
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非响应报文包含了正确CORS响应头。
跨域资源共享标准( cross-origin sharing standard )允许在下列场景中使用跨域 HTTP 请求:
(1)前文提到的由 XMLHttpRequest 或 Fetch 发起的跨域 HTTP 请求。
(2)Web 字体 (CSS 中通过 @font-face 使用跨域字体资源), 因此,网站就可以发布 TrueType 字体资源,并只允许已授权网站进行跨站调用。
(3)WebGL 贴图
(4)使用 drawImage 将 Images/video 画面绘制到 canvas
(1)首先客户端发出请求连接即SYN=1 ACK=0到服务器,并进入SYN_SENT状态,等待服务器确认。
(2)服务器收到SYN包后进行回复确认,同时发送SYN=1,ACK=1,seq=y,ack=x+1,此时服务器进入SYN_RCVD状态。
(3)客户端收到服务端发过来的SYN+ACK包,向服务器发送确认ACK=1,seq=x+1,ack=y+1,然后客户端和服务器进入ESTABLISHED状态,TCP连接建立成功。
因为服务器端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文,其中ACK报文用来应答,SYN报文用来同步。但关闭连接时,当服务器端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端已收到它发送的FIN报文。只有等服务器端所有报文都发完了,服务器端才能发送FIN报文,不能一起发送。
因为TCP有个半关闭状态,假设客户端和服务器端要释放连接,那么客户端发送一个释放连接报文给服务器端,服务器端收到后发送确认,此时客户端补发数据,但是服务器端如果发数据,客户端还是要接受,然后服务器端发确认,所以是4次。
①慢开始
②拥塞避免
③快速重传
④快速恢复
总结
毅江:从输入URL到页面加载的全过程
小火柴的蓝色理想:从输入URL到页面加载的全过程
(1)解析HTML文件,创建DOM树。
(2)自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。
(3)解析CSS。
优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式
(4)将CSS和DOM合并,构建render树。
(5)布局和绘制render树,重绘(repaint)和重排(reflow)。
简书oWSQo:浏览器渲染原理与过程
(1)存储大小限制不同
(2)数据的有效期不同
(3)与服务器的交互
(4)作用域不同
字段 | 说明 |
---|---|
name | cookie的名称 |
value | cookie的值 |
domain | 可以访问此cookie的域名 |
path | 可以访问此cookie的页面路径 |
expires/Max-Age | cookie的超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和session一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。 |
Size | cookie的大小 |
http | cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。 |
secure | 设置是否只能通过https来传递此条cookie |
encodeURI()
(1)cookie限制
(1)通过WebSocket或者SharedWorker把客户端和服务器端建立socket连接,从而实现通信
(2)localStorage、cookies等本地存储方法。
Location对象包含当前页面与url相关的信息。
Location对象的8个属性:
href:声明了当前显示文档的完整的URL。
protocol:声明URL的协议部分,包括后缀的冒号,例如http。
host:声明当前URL的主机名和端口号(是hostname和port的合集),例如www.baidu.com:80。
hostname:声明当前URL的主机名,例如www.baidu.com
port:声明当前URL的端口部分,例如80。
pathname:声明当前URL的路径部分,例如news/index.aspx
search:声明当前URL的查询部分,例如?id=1&name=localhost。
hash:声明当前URL的锚的部分,例如#top,指定在文档中的锚记的名称。
如果改变了文档的location.href,那么浏览器会载入新的页面。
如果改变了location.hash,那么页面会跳转到新的锚点,但此时页面不会重载。
location对象的两个方法:
reload():可以重载当前文档。
replace():可以装载一个新文档而无须为其创建一个新的历史记录。即在浏览器的历史列表中,新文档将替换当前文档。
∴通过将url字符串信息赋值给窗口的location属性来装载新文档可以实现返回浏览。
(服务器与客户端跨源通信的常用方法)
JSONP的基本思想:网页通过添加一个<script>
元素,向服务器请求 JSON 数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。
首先,网页动态插入<script>
元素,由它向跨源网址发出请求。
接着,服务器收到这个请求以后,会将数据放在回调函数的参数位置返回。
最大特点就是简单适用,老式浏览器全部支持,服务端改造非常小。
JSONP包括回调函数和数据两个部分。
回调函数:当响应到来时要放在当前页面被调用的函数。
数据:传入回调函数中的JSON数据,即回调函数的参数。
JSONP的缺点:
①安全问题(请求代码中可能存在安全隐患)
②要确定JSONP请求是否失败并不容易
腾讯云社区木二:Nginx跨域配置
在Server域中配置Nginx:
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers Origin,X-Requested-With,Content-Type,Accept,x-language;
add_header Access-Control-Allow-Methods POST,GET,OPTIONSZ,PUT,DELETE;
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers","Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By",' 3.2.1')
if(req.method=="OPTIONS") res.send(200);
else next();
});
(1)CDN缓存更方便
(2)突破浏览器并发限制
(3)节约cookie带宽
(4)节约主域名的连接数,优化页面响应速度
(5)防止不必要的安全问题
浏览器 | 内核 | 备注 |
---|---|---|
IE | Trident | Window10 发布后,IE 将其内置浏览器命名为 Edge,Edge 最显著的特点就是新内核 EdgeHTML。 |
Mozilla FireFox | Gecko | Gecko 的特点是代码完全公开,因此,其可开发程度很高,但是这几年没落了,缺点:打开速度慢、升级频繁。 |
chrome | Chromium/Blink | 在 Chromium 项目中研发 Blink 渲染引擎(即浏览器核心),内置于 Chrome 浏览器之中。Blink 其实是 WebKit 的分支。大部分国产浏览器最新版都采用Blink内核,进行二次开发。 |
Safari | Webkit | |
Opera | Blink | 最新的Opera已经跟随chrome用blink内核。 |
注意: | ||
(1)360和搜狗这些分极速模式和兼容模式的浏览器,极速模式用的是Webkit内核,兼容模式用的Trident内核. | ||
(2) iPhone 和 iPad 等苹果 iOS 平台主要是 WebKit,Android 4.4 之前的 Android 系统浏览器内核是 WebKit,Android4.4 系统浏览器切换到了Chromium,内核是 Webkit 的分支 Blink,Windows Phone 8 系统浏览器内核是 Trident。 |
(1)减少HTTP请求,特别是vue在请求http时,要将请求放在父组件中,不然每个子组件都去请求一遍就很浪费性能。
(2)使用内容发布网络(CDN)
(3)添加本地缓存
(4)使用缓存,在vue中可以使用keep-alive,这样重复访问一个页面时就不会重新去请求,而是从缓存中取出来直接使用。
(5)压缩资源文件
(6)将CSS样式表放在顶部,把javascript放在底部(浏览器的运行机制决定)或异步
(7)避免使用CSS表达式
(8)减少DNS查询
(9)使用外部javascript和CSS
(10)避免重定向
(11)图片lazyLoad
优化工具:
(1)真实用户浏览页面分析:OneAPM Browser Insight(统计分析网站流量,定位网站性能瓶颈)
(2)页面结构分析工具: PageSpeed(google官方的页面载入速度检测工具)
(1)盒模型
(2)
(3)
body{
text-align:center
};
#content{
text-align:left
}
(4)兼容模式下Table中的字体属性不能继承上层的设置,white-space:pre会失效,设置图片的padding会失效。
meta标签提供了 HTML 文档的元数据。元数据不会显示在客户端,但是会被浏览器解析。元数据通常以 名称/值 对出现。
META元素通常用于指定网页的描述,关键词,文件的最后修改时间,作者及其他元数据。
元数据可以被使用浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 Web 服务调用。
注意:
①meta 标签中的元数据无法使用其他的元相关标签表示,例如:base标签、link标签,script标签、style标签或title标签。
②如果没有提供 name 属性,那么名称/值对中的名称会采用 http-equiv 属性的值。
③HTML5 不支持 scheme 属性,但新的charset属性定义文档的字符编码。
meta的作用:
①meta数据是供机器解读的,告诉机器如何解析这个页面;
②可添加服务器发送到浏览器的http头部内容;
常用的meta标签
(1)charset 声明文档使用的字符编码,解决乱码问题。
<meta charset="UTF-8">
或者
<meta http-equiv="content-type" content="text/html;charset=utf-8">
(2)百度禁止转码
<meta http-equiv="Cache-Control" content="no-siteapp" />
(3)SEO优化
IT刘磊:SEO优化篇–meta用法
<title>your title</title> <!-- 搜索引擎搜索关键字 --> <meta name="keywords" content="your keywords"> <!-- 搜索引擎网站内容描述 --> <meta name="description" content="your description"> <!-- 网页作者 --> <meta name="author" content="author,email address"> <!-- 搜索引擎爬虫的索引方式 content的参数有: all 此页面与继续通过此网页的链接索引 等价于index或follow,content的默认值。 follow 继续通过此网页的链接索引其他网页 index 索引此网页 none 忽略此网页 等价于noindex或nofollow noindex 不索引此网页 nofollow 不继续通过此网页链接索引其他页面 --> <meta name="robots" content="index,follow">
(4)viewport 主要影响移动端布局
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<!--
content的参数有:
width:控制viewport的大小
height:和width相对应,指定高度
initial-scale:初始缩放比例,即当页面第一次load时缩放比例
maxinum-scale:允许用户缩放最大比例
mininum-scale:允许用户缩放到最小比例
user-scalable:用户是否可手动缩放
-->
相同点:都是外部引用CSS的方式
区别:
(1)link是xhtml标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS;
(2)link引用CSS时,页面载入时同时加载,@import需要在页面完全加载以后加载,而且@import被引用的CSS会等到引用它的CSS文件被加载完才加载;
(3)link是xhtml标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持;
(4)link支持使用JS控制去改变样式(JS插入操作DOM),而@import不支持;
(5)link方式的样式的权重高于@import的权重;
(6)import在html使用时需<style type="text/css">
标签;
(1)行内元素
特点:
①行内元素一般无法设置width和height属性(替换元素除外)。
②行内元素设置margin和padding属性时,只有margin-left、margin-right、padding-left和padding-right有效。
③行内元素前后不会换行,多个行内元素会排成一行,直到排满一行。
常见的行内元素有:a、br、em、i、img、input、span等。
(2)块级元素
特点:
①默认独占一行,左右两边都没有元素。
②可以设置宽高,在不设置宽度的情况下,默认为父元素的宽度一致。
常见的块级元素有:div、dl、h1-h6、hr、ol、p、table、ul等。
(3)替换元素
定义:替换元素是浏览器根据元素的标签和属性来决定元素的具体显示内容。
特点:
①替换元素本身没有内容,是“空元素”。
②替换元素有内在尺寸,有width和height属性。
③替换元素的margin和padding属性有效。
常见的替换元素有:img、input、textarea等。
(4)非替换元素
定义:将内容直接告诉浏览器,将其显示出来。
常见的非替换元素为p标签。
可继承与不可继承的样式属性:
不可继承的:display、margin、border、padding、background、height、min-height、max- height、width、min-width、max-width、overflow、position、left、right、top、 bottom、z-index、float、clear、table-layout、vertical-align、page-break-after、 page-bread-before和unicode-bidi。
所有元素可继承:visibility和cursor。
内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction。
块状元素可继承:text-indent和text-align。
列表元素可继承:list-style、list-style-type、list-style-position、list-style-image。
表格元素可继承:border-collapse。
(5)空元素
在只用标签时单从显示效果来看,i和em标签包围的文字都是以斜体显示的,b和strong标签包围的文字都是会加粗显示。具体效果见下图。
<b>
:规定粗体文本。
<i>
:显示斜体的文本效果。
<em>
:把文本定义为强调的内容。
<strong>
:把文本定义为语气更强烈的强调的内容。
弄清两个概念–物理元素和逻辑元素
物理元素:告诉浏览器应该以什么样的格式显示文字,
逻辑元素:告诉浏览器这些文本有什么样的重要性。
<b>
和<strong>
的区别:
<b>
属于物理标签,只是让文本达成显示文本为粗体的效果。<strong>
属于逻辑标签,强调的是该标签在文档中的文档逻辑而不是通过一个命令来告诉浏览器如何显示文本,并且<strong>
的显示样式可以改变,可通过其他方式来进行强调显示(加粗只是<strong>
的默认样式)。<i>
和<em>
的区别:
<i>
属于物理标签,斜体<em>
属于逻辑标签,强调<em>
和<strong>
的区别:
<em>
表示对文本定义为强调的内容<strong>
表示更为重要的强调,语气上更强烈,强调程度strong大于em。对于搜索引擎来说<strong>
和<em>
比<b>
和<i>
重要,所以这两者通常都被<strong>
和<em>
所代替了。
readyonlyhe disabled的作用是使用户不能更改表单域中的内容,但是二者还是有着一些区别的:
(1)readyonly只针对<input type="text/password">
和<textarea>
有效,而disabled对于所有的表单元素有效,包括select,radio,checkbox,button等。
(2)在表单元素使用了disabled后,我们将表单以POST或者GET的方式提交的话,这个元素的值不会被传递出去,而readonly会将该值传递出去。
<input type="text"> //文本框 <input type="password"> //密码框 <input type="submit"> //提交按钮 <input type="checkbox"> //复选框 <input type="radio"> //单选框 <input type="reset"> //重置按钮 <input type="image"> //图片按钮 <input type="hidden"> //隐藏域 <input type="button"> //按钮 <input type="file"> //浏览文件 <!-- 公共属性: Name=""; Value=""; Size=""; -->
(1)太深的嵌套,比如table>tr>td>h3, 会导致搜索引擎读取困难,而且,最直接的损失就是大大增加了冗余代码量
(2)灵活性差,比如要将tr设置border等属性是不行的,得通过td
(3)代码臃肿,当在table中套用table的时候,阅读代码会显得异常混乱
(4)混乱的colspan与rowspan用来布局时,频繁使用他们会造成整个文档顺序混乱
(5)不够语义
(1)改版时更方便
(2)只要改CSS文件
(3)页面加载速度更快、结构化清晰、页面显示简洁
(4)表现与结构相分离
(5)易于优化(seo)搜索引擎更友好,排名更容易靠前
优点:
(1)解决加载缓慢的第三方内容如图标和广告等的加载问题
(2)iframe无刷新文件上传
(3)iframe跨域通信
缺点:
(1)iframe会阻塞主页面的onload事件
(2)无法被一些搜索引擎索引到
(3)页面会增加服务器的http请求
(4)会产生很多页面,不容易管理
因为浏览器页面渲染的时候是从上至下的,而table和iframe这两种元素会改变这样渲染机制,他们是要等待自己元素内的内容加载才整体渲染。用户体验会很不友好。
Web安全色:
红 绿 蓝 明暗程度
2位 2位 2位 2位
2^8=256种颜色,其中保留色:40种,Web安全色:6红6绿6蓝=216种。用十六进制表示颜色就只能从00,33,66,99,CC,FF这6组值来进行组合。0,3,6,9,C,F这些数值才能组成Web安全色。
为什么要语义化?
重点:H5新特性
header:
通常被放置在页面或者页面中某个区块元素的顶部,包含整个页面或者区块的标题、简介等信息,起到引导与导航的作用。
nav:
表示页面的导航,可以通过导航连接到网站的其他页面,或者当前页面的其它部分。
aside:
所包含的内容不是页面的主要内容、具有独立性,是对页面的补充。(侧边栏)
footer:
一般被放置在页面或者页面中某个区块的底部,包含版权信息、联系方式等信息。
article:
表示包含于一个文档、页面、应用程序或网站中的一段独立的内容,可以被独立的发布或者重新使用文章标记标签。
section:
是一个主题性的内容分组,通常用于对页面进行分块或者对文章等进行分段。
定义日期或时间,或者两者。
details: 用于描述文档或文档某个部分的细节。
summary:标签包含details元素的标题。
dialog:定义对话框,比如提示框。
input的type | 描述 |
---|---|
color | 选取颜色 |
date | 从日期选择器选择一个日期 |
datetime | 选择一个日期(UTC)时间 |
包含email地址的输入域 | |
month | 选择一个月份 |
number | 数值的输入域 |
range | 一定范围内数字值的输入域 |
search | 用于搜索域 |
tel | 定义输入电话号码字段 |
time | 选择一个时间 |
url | URL地址的输入域 |
week | 选择周和年 |
表单元素 | 描述 |
---|---|
datalist | 元素规定输入域的选项列表,使用 input 元素的 list 属性与 datalist 元素的 id 绑定 |
keygen | 提供一种验证用户的可靠方法,标签规定用于表单的密钥对生成器字段 |
output | 用于不同类型的输出,比如计算或脚本输出 |
keygen 元素的作用是提供一种验证用户的可靠方法。
keygen 元素是密钥对生成器(key-pair generator)。当提交表单时,会生成两个键,一个是私钥,一个公钥。
私钥(private key)存储于客户端,公钥(public key)则被发送到服务器。公钥可用于之后验证用户的客户端证书(client certificate)。
目前,浏览器对此元素的糟糕的支持度不足以使其成为一种有用的安全标准。
Required:自动check内容
autofocus:自动获取焦点(页眉一打开就获取到焦点,而不是将光标移动到上面才获取到)
placeholder:默认显示内容
通过JavaScript来绘制,使用id来寻找canvas元素(document.getElementById(“”)),再创建context对象(getContext(“2d”)),绘制图形,fillStyle 方法将其染色,fillRect 方法规定了形状、位置和尺寸。
SVG 指可伸缩矢量图形 。
SVG 用于定义用于网络的基于矢量的图形。
SVG 使用 XML 格式定义图形。
SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失。
SVG 是万维网联盟的标准。
与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:
①SVG 图像可通过文本编辑器来创建和修改
②SVG 图像可被搜索、索引、脚本化或压缩
③SVG 是可伸缩的
④SVG 图像可在任何的分辨率下被高质量地打印
⑤SVG 可在图像质量不下降的情况下被放大
Canvas | SVG | |
---|---|---|
是否依赖分辨率 | 是 | 否 |
是否支持事件处理器 | 否 | 是 |
渲染 | 弱的文本渲染能力 | 最适合带有大型渲染区域的应用程序(比如谷歌地图),复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快) |
保存图像 | 能够以 .png 或 .jpg 格式保存结果图像 | |
是否适合游戏应用 | 最适合图像密集型的游戏,其中的许多对象会被频繁重绘 | 否 |
getCurrentPosition():获得用户的位置
getCurrentPosition() 方法的第二个参数用于处理错误。
①Permission denied - 用户不允许地理定位
②Position unavailable - 无法获取当前位置
③Timeout - 操作超时
showPosition() :获得并显示经度和纬度
Geolocation 对象
watchPosition() - 返回用户的当前位置,并继续返回用户移动时的更新位置(就像汽车上的 GPS)。
clearWatch() - 停止 watchPosition() 方法。
(1)元素可拖放,draggable设置为true;
(2)元素拖动
ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。dataTransfer.setData() 方法设置被拖数据的数据类型和值。
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}
(3)拖放位置:ondragover()
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式,调用ondragover 事件的event.preventDefault() 方法。
调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)。
通过 dataTransfer.getData(“Text”) 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
参见本文1.4.5.1 cookie sessionStorage localStorage部分。
weixin_39863747:
HTML5 WebSocket 简介和实战演练
CSS盒模型本质是一个盒子,封装周围的HTML元素,包括边距、边框、填充和实际内容。
标准盒模型:
box-sizing: content-box;
width=content
盒子宽度= margin(左右)+ padding(左右)+ border(左右)+ width
IE盒模型(怪异盒模型):
box-sizing: border-box
width = border(左右) + padding(左右) + border(左右)
盒子宽度= margin(左右) + width
简书寿木:BFC相关介绍链接
BFC是块格式化上下文。
浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。
BFC的特性与作用:
①内部的box会在垂直方向一个接一个放置
②box垂直方向的距离由margin决定,同一个BFC相邻两个margin会重叠
③每个box的margin-left会触碰到容器的border-left,即使浮动也如此
④不会发生margin穿透
⑤形成BFC的区域不会与float重叠(可阻止浮动元素造成的环绕现象)
⑥计算BFC高度时浮动元素也参与计算(BFC确切包含浮动的子元素)
⑦原来浮动元素脱离文档流,但与BFC会计算其高度
BFC应用:
①实现自适应两栏布局
②解决父元素高度塌陷
③解决垂直方向兄弟元素的margin重叠
(1)额外标签法:在要清除的浮动元素的末尾添加一个空标签。
.clear{
clear:both;
}
<div class="block1"></div>
<div class="clear"></div>
/*
如<div class="clear"></div>,并在CSS中赋予.clear{clear:both;}属性即可清理浮动。亦可使用<br class="clear" />或<hr class="clear" />来进行清理。*/
(2)父级添加overflow属性方法:可以通过触发BFC的方式,实现清楚浮动效果。给父级加overflow为hidden或者auto或者scroll都可。另外在 IE6 中还需要触发 hasLayout ,例如为父元素设置容器宽高或设置 zoom:1。
在添加overflow属性后,浮动元素又回到了容器层,把容器高度撑起,达到了清理浮动的效果。
(3)使用after伪元素清除浮动:
结合:after 伪元素(注意这不是伪类,而是伪元素,代表一个元素之后最近的元素)和 IEhack ,可以完美兼容当前主流的各大浏览器,这里的 IEhack 指的是触发 hasLayout。
给浮动元素的容器添加一个clearfix的class,然后给这个class添加一个:after伪元素实现元素末尾添加一个看不见的块元素(Block element)清理浮动。
.clearfix:after {
content: "";
visibility: hidden;
display: block;
clear: both;
height: 0;
}
.clearfix {
*zoom: 1; /* IE6、7 专有 */
}
(4)使用before和after双伪元素清除浮动:
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1; /* 由于IE6-7不支持:after,使用zoom: 1触发hasLayout */
}
(5)使用邻接元素处理:
什么都不做,给浮动元素后面的元素添加clear属性。
(6)给浮动的元素的容器添加浮动
给浮动元素的容器也添加上浮动属性即可清除内部浮动,但是这样会使其整体浮动,影响布局,不推荐使用。
值 | 描述 |
---|---|
absolute(绝对定位) | 绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于<html> 。 absolute 定位使元素的位置与文档流无关,因此不占据空间。 absolute 定位的元素和其他元素重叠。 |
fixed(固定定位) | 元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动。Fixed定位使元素的位置与文档流无关,因此不占据空间。 Fixed定位的元素和其他元素重叠。 |
relative(相对定位) | 如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。 在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。 |
static(默认定位) | 默认值。没有定位,元素出现在正常的流中(忽略top, bottom, left, right 或者 z-index 声明)。 |
sticky(粘性定位) | 元素先按照普通文档流定位,然后相对于该元素在流中的flow root(BFC)和 containing block(最近的块级祖先元素)定位。而后,元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。 |
inherit | 规定应该从父元素继承position 属性的值。 |
听风是风:Flex布局
Flex布局是弹性布局,设为Flex布局后,子元素的float、clear、vertical-align属性失效。采用Flex布局的元素为Flex容器。
Flex容器的属性:
①flex-direction:决定主轴的方向(即项目的排序方向)。
flex-direction: row | row-reverse | column | column-reverse
②flex-wrap:默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
flex-wrap: nowrap | wrap | wrap-reverse
③flex-flow:flex-flow属性是flex-direction属性和flex-wrap属性的简写形式。
flex-flow: <flex-direction>
|| <flex-wrap>
④justify-content:定义了项目在主轴上的对齐方式。
justify-content: flex-start | flex-end | center | space-between | space-around
⑤align-items:定义项目在交叉轴上如何对齐。
align-items: flex-start | flex-end | center | baseline | stretch
⑥align-content:定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
align-content: flex-start | flex-end | center | space-between | space-around | stretch
Flex项目的属性:
①order:定义项目的排列顺序。数值越小,排列越靠前,默认为0。
②flex-grow:
③flex-shrink:
④flex-basis:定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
⑤flex:是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
⑥align-self:允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
重排/回流(reflow):当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。每个页面至少需要一次回流,就是在页面第一次加载的时候。
重绘(repaint)是指一个元素外观的改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。
重绘和重排的关系:在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘。
重排必定会引发重绘,但重绘不一定会引发重排。
imooc网小白师兄:前端性能优化:细说浏览器渲染的重排与重绘
id 选择器,class 选择器,标签选择器,伪元素选择器,伪类选择器等
同一元素引用了多个样式时,排在后面的样式属性的优先级高;
样式选择器的类型不同时,优先级顺序为:id 选择器 > class 选择器 > 标签选择器;
标签之间存在层级包含关系时,后代元素会继承祖先元素的样式。如果后代元素定义了与祖先元素相同的样式,则祖先元素的相同的样式属性会被覆盖。继承的样式的优先级比较低,至少比标签选择器的优先级低;
带有!important 标记的样式属性的优先级最高;
样式表的来源不同时,优先级顺序为:内联样式> 内部样式 > 外部样式 > 浏览器用户自定义样式 > 浏览器默认样式
伪类:与类一样能够定义样式,但却不是真正意义的类。
HTML中如何实现样式:浏览器会在后台向这些伪类增加和删除元素。
animation属性 | 描述 |
---|---|
animation-name | 动画名称。和@keyframes名称一致。 |
animation-duration | 动画持续时间。 |
animation-delay | 动画延迟时间。 |
animation-timing-function | 动画运动轨迹。 |
animation-iteration-count | 动画运动次数,infinite无限循环。 |
animation-direction | 动画方向。alternate先正向再反向。 |
transition属性 | 描述 |
---|---|
transition-property | 指定要过渡的CSS属性 |
transition-duration | 指定完成过渡要花费的时间 |
transition-delay | 指定过渡开始出现的延迟时间 |
transition-timing-function | 指定过渡函数 |
transition-timing-function有以下几种: | |
值 | 描述 |
– | – |
linear | 匀速 |
ease | 相当于匀速,但是开始和结束慢速,中间快速 |
ease-in | 减速 |
ease-out | 加速 |
ease-in-out | 开始和结束是慢速 |
cubic-bezier(n,n,n,n) | 贝塞尔曲线 |
CSS hack是针对不同浏览器写不同的CSS code的过程。
#test { width: 500px; height: 500px; background-color: red; /*firefox*/ background-color: orange\9; /*all IE*/ :root #test { background-color: yellow\9; /*IE9*/ }; background-color: green; /*IE8*/ +backgorund-color: AquaMarine;/*IE7*/ _background-color: blue; /*IE6*/ @media all and (min-width: 0px) } { #test { background-color: purple; } } /*opera*/ @media screen and (-webkit-min-device-pixel-ratio:0) { #test { background-color: black; } } /*chrome and safari*/
多个相邻(兄弟或者父子关系)普通流的块元素垂直方向marigin会重叠
折叠的结果为:
①两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
②两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
③两个外边距一正一负时,折叠结果是两者的相加的和。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>自适应布局实现正方形</title> <style> *{ margin: 0; padding: 0; } div{ margin: 10px; } .box1{ width: 50%; height: 50vw; border: 1px solid #FFA500; } .box2{ width: 50%; height: 0px; /* 设置height为0 ,避免盒子被内容撑开多余的高度 */ padding-bottom: 50%; /* 把盒子的高撑开,width设置同样的固定的宽度或者百分比 ,百分比相对的是父元素盒子的宽度 */ border: 1px solid #800080; position: relative; overflow: hidden; } .box3{ width: 50%; border: 1px solid seagreen; overflow: hidden; position: relative; } .box3::after{ content: ''; display: block; margin-top: 100%;/* margin 百分比相对父元素宽度计算 */ } .box3 > .content { position: absolute; } .box4{ width: 50%; border: 1px solid cornflowerblue; overflow: hidden; position: relative; } .box4::after{ content: ''; display: block; padding-top: 100%; } .box4 > .content { position: absolute; } </style> </head> <body> <div class="box1">这是一个自适应正方形(使用vw实现)<br> 方法一:CSS3 vw单位 <br> vw是相对于视口的宽度。视口被均分为100单位的vw。1vw = 1% viewport width。</div> <div class="box2"><p>这是一个自适应正方形(设置盒子的padding-bottom样式实现)<br> 由于margin, padding 的百分比数值是相对父元素的宽度计算的,只需将元素垂直方向的一个padding值设定为与width相同的百分比就可以制作出自适应正方形了。<br> 但要注意,仅仅设置padding-bottom是不够的,若向容器添加内容,内容会占据一定高度,为了解决这个问题,需要设置height: 0。 </p></div> <div class="box3"> <div class="content">这是一个自适应正方形(利用伪元素的 margin-top 撑开容器实现) max-width属性失效的原因是:max-width属性只限制于width,也就是只会对元素的 content width起作用。<br> 解决方法是:用一个子元素撑开content部分的高度,从而使max-height属性生效。<br> 首先需要设置伪元素,其内容为空,margin-top设置为100%。<br> 但要注意,若使用垂直方向上的margin撑开父元素,仅仅设置伪元素是不够的,这涉及到margin collapse外边距合并的概念,由于容器与伪元素在垂直方向发生了外边距合并,所以撑开父元素高度并没有出现,解决方法是在父元素上触发BFC:设置overflow:hidden。 </div> </div> <div class="box4"> <div class="content">这是一个自适应正方形(利用伪元素的 padding-top 撑开容器实现)<br> 若使用垂直方向上的padding撑开父元素,则不需要触发BFC。 </div> </div> </body> </html>
$()
函数是 jQuery() 函数的别称,$()
函数用于将任何对象包裹成 jQuery 对象,被允许调用定义在 jQuery 对象上的多个不同方法。可以将一个选择器字符串传入$()
函数,它会返回一个包含所有匹配的 DOM 元素数组的 jQuery 对象。
jQuery转DOM对象:
(1)jQuery是一个数组对象,可以通过[index]的得到相应的DOM对象。
(2)可以通过get[index]去得到相应的DOM对象。
DOM转jQuery对象:
$(DOM对象)
(1)bind(type,[data],fn)为每个匹配元素的特定事件绑定事件处理函数
$("a").bind("click",function() {
alert("ok");
});
(2)live(type,[data],fn)给所有匹配的元素附加一个事件处理函数,即使这个元素是以后添加进来的
$("a").live("click",function() {
alert("ok");
});
(3)delegate(selector,[type],[data],fn)指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些时间发生时运行的函数
$("container").delegate("a","click",function() {
alert("ok");
})
(4)on(event,[selector],[data],fn)在选择元素上绑定一个或多个事件的事件处理函数
区别:
(1).bind()是直接绑定在元素上
(2).live()则是通过冒泡的方式来绑定到元素上。更合适列表类型的,绑定到document DOM节点上。和.bind()的优势是支持动态数据。
(3).delegate()是更精确的小范围使用事件代理,性能优于.live()
(4).on()是最新的1.9版本整合了之前的三种方式的新事件绑定机制。
jQuery为开发插件提供了两个方法:
(1)jQuery.extend():用来扩展jQuery对象本身
(2)jQuery.fn.extend():用来扩展jQuery实例
this执行init构造函数自身,其实就是jQuery实例对象,返回this是为了实现jQuery的链式操作。
jQuery和zepto的关联:
jQuery和zepto的区别:
monkeyfly007:jQuery中attr()与prop()的区别
detach()和remove()都是用来移除一个DOM元素。
区别:
(1)find()和children()方法的区别:
①children及find方法都用是用来获得element的子elements的,两者都不会返回 text node,就像大多数的jQuery方法一样。
②children方法获得的仅仅是元素一下级的子元素,即:immediate children。
③find方法获得所有下级元素,即:descendants of these elements in the DOM tree
④children方法的参数selector 是可选的(optionally),用来过滤子元素,但find方法的参数selector方法是必选的。
⑤find方法事实上可以通过使用 jQuery( selector, context )来实现:英语如是说:Selector context is implemented with the .find() method; therefore, $(‘li.item-ii’).find(‘li’) is equivalent to $(‘li’, ‘li.item-ii’).
(2)find()和filter()方法的区别:
find()会在div元素内 寻找 class为rain 的元素。
而filter()则是筛选div的class为rain的元素。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。