2 @, ?6 L) i/ l1 M②:BFC的区域不会与浮动元素的box重叠。(清除浮动)8 e0 Q; a, X! X4 L
- e3 R5 Y$ U: k, ~, B7 z, `③:BFC在页面上是一个独立的容器,外面的元素不会影响里面的元素,里面的元素也不会影响外面的元素。 ; b8 s& J7 A e! X/ ~/ r3 O- r9 u' n9 ? 2 a8 `- i6 U/ h0 E④:计算BFC高度时,浮动元素也会参与计算 T% o- Q9 N- }, R. E
% F4 v6 n2 T* B4 N
3、如何创建BFC6 d- T' g9 u; ^! `; u
$ ?5 A- D. D# P
①:float不为none。 1 e" P; x# F# o, `( F& B5 u, m7 L v$ G( L% H2 i
②:position不为static或者relative。 # K, w+ F' ]' U8 ?4 ?5 L+ J) }8 Z * e/ i* R* L3 t1 s③:display为inline-block或者是table相关的。 3 [- q5 ^9 G3 Z4 g9 L" b# }) o7 H. ~ " k7 @% C' y( \( _8 o- Q2 _2 Y9 s④:overflow不为visible。 ( r1 W: x- g! j. t1 t- p# S0 L9 r( L" n% V; h" e3 f! s- K9 D
⑤ : body 根元素 9 W- P @. y1 C" p- S6 I. j3 ^0 ?$ Y$ e+ F1 p+ |' N
应用场景: " R/ i% ^3 j( U$ D* u. p: V9 z: Q
左右布局时,float $ {- F/ V! B6 O1 C; d# N( }
相邻div使用margin产生边距重叠 , x3 V6 A R- u. p7 D' l5 E% Adom事件 ; a! o, T" x; n' Y* O; Y 3 _2 u0 A! v9 a0 W9 L! Z8 ?" |8 a基本概念: DOM事件的级别$ ]$ P! U: M" h
7 l. r1 G0 J* A& a3 k+ s5 pDOM0: element.οnclick=function(), G' p! f7 r2 p
; j5 S' p1 P# |8 N% mDOM2: element.addEventListener(‘click’, function(){}, false) 0 B, ?, j+ m" T1 ~5 e $ ?2 P( q6 x: S3 s3 O* `DOM3: element.addEventListener(‘keyup’, function(){}, false) / Z) w+ E, x q0 o" _( o! o, d. Z: j2 U1 p
DOM事件模型5 ], I7 W6 Q3 w2 E) Q" h
* s. o4 T. w# \$ Oevent.target 2. event.currentTarget/ _) F7 b; y3 Y c2 }; p
event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素 9 v5 b* K4 E2 U- G: ^9 PDOM事件流; f0 i" M$ l' r G/ K X+ Z ?6 ]6 R n) K
# J. f3 J( p I: P/ ?" I; ^- T事件流 -->《捕获》 2. 目标阶段 3. 冒泡 7 ^0 u1 Q* E0 N, y! M! R. j; O描述DOM事件捕获的具体流程$ L% {! R! w* J0 T0 t6 n" s E) Z
# ]3 J" O3 _" D# `, A4 Hwindow 2. document 3. html 4. body 5. 按html结构 6. 目标元素# T1 u: D6 O9 C0 s* n3 ]
Event对象的常见应用 " z* _; M7 a2 G- w. { - i* d+ X/ O2 |) N8 T# X6 ee.preventDefault() 2. e.stopPropagation() 3. e.stopImmediatePropagation() 4. e.currentTarget() 5. e.target() ! m( t. s- |$ B$ C自定义事件 , s+ V4 {7 S: i7 r, f7 `% c5 a" P' j+ _' ]9 U1 o% i8 n
var eve = new Event('custome'); ; G5 w8 I% G3 Xev.addEventListener('custome', function() { 9 n: _3 D+ i+ C console.log('custome'); 3 U2 x) _: y+ J1 \$ N4 } c; A) s}); ; Q- K7 a% N: T6 ~9 K) w+ oev.dispatchEvent(eve);' G: M" M) ^' O* T
1 " v- p$ S6 [: `4 ~+ |2* [& c0 O: v2 a7 t
3 % G0 K" k7 r5 Q" b/ q ?0 E4. U8 f% C7 W% d4 ~( l1 c1 j
5: \5 ], ]+ [/ o9 J: ~3 u1 L' ^
http协议 ) \- S! ~2 }0 d; X1 u. F4 s/ U# Y( M* S1 I6 @6 ~/ }
HTTP协议的主要特点 q) y* _) c+ U. ^
1 r) V8 P0 x, n
简单快速(资源的URI是固定的,输入URI)、灵活(头部分有不同数据类型,一个http协议不同传输)、 , ?- G4 q0 W+ v5 e6 a* X 9 E: e' N) A: Q0 t3 h! K1 m' ^无连接(连接一次就断掉) # P' m+ ?" c9 X1 R- u" W无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。' B* H+ u* \1 }; r- ~# @$ F
无状态(两次连接身份)) P( G; h" \1 Q) ~8 }
是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传 7 L$ R7 h$ {2 g. U P. f; yHTTP报文的组成部分% W; X7 V+ \; @* \0 ~9 I+ h
6 T0 f& _8 ~/ i3 C请求报文3 h5 C5 Q5 o( ~$ r2 {, N3 M
* }% D9 W5 s/ r
请求行 请求头 空行 请求体 v) P9 t H1 ~3 E* U0 V' e6 J4 M8 j6 D! b9 n9 w. {) n: S
响应报文 ; _6 {% p3 [' n/ Y& `7 z5 h0 M ! S t& g$ G: L1 U$ a. X. Q+ I2 J- p- s状态行 响应头 空行 响应体% k! v4 }, u4 ?" i3 G
7 }, X- x4 a3 V K3 v5 m6 m) ?HTTP方法 Q: Z$ h# n1 A: S2 E
5 q7 s3 R& Z8 l8 d Q& m) G+ q. x
方法名 方法作用 注意" I: q% _* u7 H# d/ q
GET 获取资源 : `$ D% h& d# @; d" k: a: A0 A
POST 传输资源 ) s$ W& U! g& O, Y) n5 A5 \
PUT 更新资源 0 V5 ]- a4 T; S
DELETE 删除资源 % a; F% R$ a/ MHEAD 获得报文首部 " l. L% b M! \+ R4 W' s
POST和GET的区别+ N# L' r6 R( i4 K+ t5 E; G4 D- o
0 c9 l) e j" r% @# W
get post 9 L9 [+ m. N. _$ {9 W* V6 P% Z2 x在浏览器回退时是无害的 会再次提交请求 8 o# I @ N' c产生的URL地址可以被收藏 post不可以 5 V2 d3 `) v4 \) v$ H" b* s请求会被浏览器主动缓存 不会,除非手动设置' W/ p- }, F( `8 d: w
只能进行url编码 支持多种编码方式 0 k5 |. f3 H1 f4 }( [/ g4 Q请求参数会被完整保留在浏览器历史记录里 参数不会被保留* [1 @, s# e) }3 S# Y1 M
请求在URL中传送的参数是有长度限制的 没有限制 s% E. F* R* g对参数的数据类型,get只接受ASCII字符 没有限制4 r5 f* {! u( m% z" N
更不安全,因为参数直接暴露在URL上,所以不能咏柳传递敏感信息 没暴露# \* ^, |* h# z9 P- b
参数通过URL传递 放在Request body中) v b4 m" y D: L3 R
HTTP状态码 9 K5 d3 y( W# _ - x3 f& S& T' ^6 p1 X状态码 意义7 m0 M! E8 G q) f
1xx 指示信息 - 表示请求已接收,继续处理。/ E+ k9 t0 ~( d
2xx 成功 - 表示请求已被成功接收。 7 C* r$ G4 j5 L% g# K3xx 重定向 - 要完成请求必须进行更进一步的操作。/ E5 t3 a5 j$ v( a; C" K+ V
4xx 客户端错误 - 请求有语法错误或请求无法实现。3 K5 A& ]' {2 A: e5 z: y
5xx 服务器错误 - 服务器未能实现合法的请求。* a" B% A: W; t2 q' v8 P, a
状态码 意义" G) a9 N6 j; V' ?+ x; J4 v& @% G
200 OK 客户端请求成功; M. [4 s& B# d0 h) Z/ N
206 Parital Content 客户发送了一个带有Range头的GET请求,服务器完成了它 $ U9 {9 m! O6 I3 S+ L0 [% p301 Moved Permanently 所请求的页面已经转移至新的url% [! y3 S6 u& P# s5 Q3 d' p2 X
302 Found 所请求的也么已经临时转移至新的url5 Y" j6 X0 K# g+ I5 K
304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用 0 `$ O) S) w. X: \: c400 Bad Request 客户端请求有语法错误,不能被服务器所理解. N H& O, g- J! {# q" T+ U
401 Unanthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 ' B5 V u: d/ }2 F403 Forbidden 对被请求页面的访问被禁止/ L5 Y, ^, R( |
404 Not Found 请求资源不存在 y1 d6 y! q8 |( r% [9 M) s6 b
500 Internal Server Error 服务器发生不可预期的错误原来缓冲的文档还可以继续使用 5 U' s% Y6 |# R: @- p2 }0 X' `503 Server Unavaliable 请求未完成, 服务器临时过载或当机,一段时间后可能恢复正常 5 s6 B5 M# V# e. k) b& U什么是持久连接 7 f' R. ~: G8 ?7 H , r) x, T/ O; x. u2 Z4 z# z5 O! @HTTP协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时, 每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议) - K$ p+ T: ]9 {- P: I6 a! [, F* x1 I$ W6 V* h# o$ N E& C
当使用Keep-Alive模式(又称持久连接、连接重用)时, Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。! j1 K0 U' ^. @" V, @4 n6 Y6 W
2 N9 W8 \& g x, C使用了持久连接 ( ^: F) q: E5 ^9 P8 Q' K+ A, O5 m# E0 Y( O3 N U8 p0 G* D, ^
请求1->响应1->请求2->响应2->请求3->响应3& A. R6 `1 T" Z4 H
1 r8 l0 D( W* L
变成了 % f$ I+ b& u+ @# w! r; ~: e2 C" L! z0 X5 l7 ]' C/ q, N( e
请求1->请求2->请求3->响应1->响应2->响应3* t5 T1 h# K1 ~: ]
; H9 N! {* e( r* c' W
什么是管线化 - B% x( P1 ^: K3 t9 s. |2 j/ e9 C" K2 ~
管线化通过持久连接完成,仅http/1.1 支持此技术) y+ w8 W" D! e
只有get和head请求可以进行管线化,而post则有所限制 2 b9 A4 a/ A- v( S `初次创建连接不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议1 f: o0 S/ b$ i
… + n1 ~& g) T8 E/ j( z8 X. O+ C- C安全 8 Z; A4 M1 K9 u+ k; w9 k8 Q; A8 G3 }+ B
CSRF" s( w, o5 R# t6 K4 g0 H8 Q9 L
基本概念和缩写 9 x, E$ p# Y6 ^' v/ V! ~& w! }CSRF, 通常称为跨站请求伪造,英文名Cross-site request forgery 缩写CSRF。% B& J" a* L2 o: B9 f7 f8 H x
攻击原理8 @3 ]$ q0 ]' B* ?% @$ p
访问网站B时,网站B引诱点击链接,用户浏览器携带的cookie就被网站B的某些代码访问了。 5 h2 M1 |2 o' S9 C+ Z- ?这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。 7 P o* I! ]( h( z yXSS5 P1 H m- b- J; b( Y. z
基本概念和缩写 4 h; \% M& M# a+ |4 ?XSS, 跨站脚本攻击, 英文名Cross Site Scripting 缩写XSS。) L; S9 L7 x% j2 g; [: k
攻击原理 ! x! |7 [# D8 f' i1 {7 j1 f* O输出脚本code( I0 n7 Z( U1 {3 L8 H E6 X
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 4 O1 Y6 T! e& [$ P( K n/ Dxss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。 - a! ?/ }4 r$ t v; [渲染机制类 2 |! W. D" o/ v: U) C4 S/ T. |2 e9 _4 C- ^; T0 a- t5 H
什么是DOCTYPE及作用 ) ]' M( s, V1 j8 N$ c8 T# V2 s F6 r2 q7 N* \$ W
DTD (document type definition, 文档类型定义)是一系列的语法规则,用来定义XML或HTML的文件类型。 7 w$ _& x, L% {! ?# y$ x作用:浏览器会使用它来判断文档类型, 决定使用何种协议来解析,以及切换浏览器模式。1 q8 e& }& F: G9 n0 Y
DOCTYPE是用来声明文档类型和DTD规范的,$ R# l. H( R% u* U6 C& N+ i
作用:一个主要的用途便是文件的合法性验证。如果文件代码不合法, 那么浏览器解析时便会出一些差错。 # k9 b4 z( q- R+ T! M3 c+ H5 _HTML5的DOCTYPE: h0 p% c, C( H6 W6 R - L7 b5 ]& U, w: w: G* ?, ^HTML4有严格模式和传统模式 - P2 N$ `4 E- L' E; U ' b, E6 |+ [& k( x# L; Y- S浏览器渲染过程) ]# w9 ?+ R+ K- H2 c3 j" K( \. y
, ?4 X4 G; D5 [0 t% w9 _一些概念 F! E5 R$ I0 L
) o5 x% |1 z: F% o+ k7 a m# B
名称 概念 9 I1 n( @5 X4 e) p+ \; z# ^DOM Tree 浏览器将HTML解析成树形的数据结构。3 c J3 D' c4 a& T7 B; o. T$ f4 ]
CSS Rule Tree 浏览器将CSS解析成树形的数据结构。 7 A# n2 @4 ^* e* X3 Q0 vRender Tree DOM和CSSOM合并后生成Render Tree。% [* P& ^8 _% y
layout 有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。3 v( L! Z- O) k& F, L
painting 按照算出来的规则,通过显卡,把内容画到屏幕上。 6 L% U0 U) H! l8 m1。当用户输入一个URL,浏览器就会发送一个请求,请求URL对应的资源 3 j1 |/ r2 F: q$ ]; R! x2。HTML解析器会将这个文件解析,构建成一棵DOM树 & R: g, }& i# E6 u9 r9 u8 @- w: n3。构建DOM树时,遇到JS和CSS元素,HTML解析器就将控制权转让给JS或者CSS解析器: Q! W+ ~6 v: ~ P7 |! \
4。JS或者CSS解析器解析完这个元素时候,HTML又继续解析下个元素,直到整棵DOM树构建完成( m( T4 C7 C/ z
5。DOM树构建完之后,浏览器把DOM树中的一些不可视元素去掉,然后与CSSOM合成一棵render树 9 _# ?+ V. I& y/ P6。接着浏览器根据这棵render树,计算出各个节点(元素)在屏幕的位置。这个过程叫做layout,输出的是一棵layout树1 L$ z- `2 Q: a
7。最后浏览器根据这棵layout树,将页面渲染到屏幕上去$ u: \2 ?4 W. F- k3 }* F: I
1 : @; Z6 R, _! ^* `2$ r' c2 n7 H! h5 B& z% w0 \
3' b- w7 P. E& ?$ C6 N6 I6 r
4 6 z% K, R$ w7 T! C9 g2 e+ d58 P. C: x# M3 P6 w$ C4 g6 \2 {# \
6' q# \" R+ P' H# O/ f; k
76 [5 k7 H, j2 Z$ p
重排Reflow , E* }7 K- a3 T1 `/ _* T: `1 N5 C
定义:当浏览器发现某个部分发生了变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫 reflow。 9 r# n- l) n) n% b7 U0 v触发Reflow:" v. i- @0 b; [
当你增加、删除、修改dom节点时,会导致Reflow或Repaint 3 u0 b5 E3 c" |$ V B* {当你移动DOM的位置,或是搞个动画的时候- O1 v- z- Q7 C- w
当你修改CSS样式的时候 ) ~( U6 P. p! u8 i1 Y3 N3 @当你Resize窗口的时候(移动端没有这个问题),或是滚动的时候( t% c" P. X4 }! q9 J
当你修改网页的默认字体时 }, O$ _0 b% ~重绘Repaint: G2 f% U' d+ ?& a' d
2 f# N0 K5 F- J) U* y定义: 改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。& h5 @$ \' @ J7 \* c
) C' A$ R. f7 ]( B0 q& t
触发Repaint: 8 }% z* g- x7 J& v' E: o( Y* l' n6 V2 D
DOM改动4 C; b( H2 K$ w
CSS改动 6 ?0 f' E% ?1 G% @+ x- g! ^———————————————— ! r1 b1 W; M% S6 F版权声明:本文为CSDN博主「ton365」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 7 S9 ]6 c: \8 Q/ }' @, ~原文链接:https://blog.csdn.net/u012015672/article/details/105931291) P6 L, e5 ^. k. g5 Y* T) m
4 R% T" V( G- ?' k/ y