- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563358 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174230
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
HTML 知识点(未完)6 i8 j& Z3 C$ V1 q1 R
) m9 I3 E# `* F% J7 lHTML 知识点% \) p1 X1 Z4 Q; x* G
: `4 |% s5 x5 D三列布局- (高度已知,左右宽度固定,中间自适应)3 `& A# G: _$ I5 F, o0 T) s8 W
6 ]3 m: }* G+ @# d. F& w4 w9 a
布局方案 优点 缺点
; S! i, h1 v7 {( @2 p浮动 兼容性好 脱离文档流,需清除浮动 R9 D4 i$ L- w B$ {
绝对定位 比较快捷。 因为其本身脱离了文档流,导致了其子元素都脱离了文档流,使用性较差。3 i* B2 Y: H& h( I+ \3 G
flex布局 目前是比较完美的方案。 只兼容到ie9。
7 i& N9 [" W' f表格布局 兼容性好,当需要兼容ie8时可以用表格布局。 多栏布局时,某栏高度增加,会使其他栏高度一起增加。
. V. p# c2 K# m' E+ [网格布局 新技术,代码量少
9 X" M! v, O/ g- k# o" x7 a<!-- 网格布局 -->
: k6 Q$ y) _% l<body>
H" M$ G0 b( N) w <section class="layout grid">
+ R) _0 _+ B) K) h" t1 A <style media="screen">
1 O* B. ^. s- o' c n .layout.grid .left-right-center{
' k- i, U# s) J, G/ s, l: z2 m8 d display: grid;
. U4 C1 X* N2 U. s width: 100%;
3 b+ R( d& M# j4 c grid-template-rows: 100px; // 设置行高. f; m# w) n$ K
grid-template-columns: 300px auto 300px; // 设置每列的宽度2 @# S |. X2 v8 Y
& v F6 h/ r# y </style>
+ K" J) `+ H- L/ o7 X: \; q/ |9 u <article class="left-right-center">
+ z. u) N. G# |) Q <div class="left"></div>
' ]/ r3 n Q3 r9 M <div class="center"></div>, t4 L' u: T# V( }$ A5 t ^/ x
<div class="right"></div>. i) y' I$ y1 Q0 N
</article> V2 P- n; q6 c8 y; W! J* Q4 L
</section>
) q8 A- n% Z3 r7 J6 t</body>! M& G2 \ K! o; H
. D; W) [0 q' l% h" Lcss盒模型/ [' s1 {. C _ c! ?" M( r6 t m
0 w* U Q [/ F j) L/ E% eCSS盒模型的认识1 ^0 l. O4 z; H) {6 ]. H, T5 w' A
# R) f+ a$ _$ }css属性: content padding border margin! p+ i! T& F3 W# a& t$ _7 X# C/ {
& z: ~" Z/ P) C O两种模型:IE盒模型(怪异盒模型)和 标准盒模型
8 i$ R& U3 y: V. v) W
" q8 m) t) {3 T% m9 T/ L- t2 h两种模型的区别:计算高度和宽度的不同
3 G5 L- x; y( i2 C1 `5 g {: h4 @ \2 F" o
两种模型如何设置:box-sizing: content-box(标准盒模型); box-sizing: border-box(IE盒模型)
3 S d5 C: W$ E8 l$ B2 C, r. B$ I# w( R X8 y/ W( }
JS如何设置获取盒模型对应的宽和高
& D" T8 I3 j( y: {4 J
7 r: I* B+ p# V9 Y9 G; t5 c" R* {获取方式 优缺点
, k5 u+ I0 b$ i: `: T0 D" r7 u1 Ydom.style.width/height 只能获取内联样式设置的宽和高
& V3 X4 r# P5 e5 V5 n1 H8 h" e, Ddom.current style.width 获取浏览器渲染后的宽和高,只支持ie
" ~( \' k: H8 gwindow.getcomputedstyle(dom).width 兼容性更好
3 R/ F5 `4 n+ b" [dom.getboundingclentreact().width 适用于取元素的绝对位置。能取到 left top width height 四个属性 。// 获取浏览器渲染后的宽和高一般用于获取元素绝对位置 g1 @/ z" \7 Q* d
实例题 (根据盒模型解释边距重叠)子元素边距成了父元素边距8 e0 H" _6 Y- v
+ q1 ]% B: e q& B- O; o) V/ M; s块级元素包含了子块级元素,子元素是100像素4 x6 x- E& c' t" Y4 P1 e
子元素与父元素上边距是10像素# M* Z' M8 W: d! h
父元素是110px还是100px (100px, 设置了overflow:hidden就成了110px)8 b1 N5 C' c q% q m* {
另一种兄弟块级元素-: I u5 {, e* D" ~! ~; g7 E& s' ^5 o" c
# ?8 W" B; `+ m n# z S
挨着每个都有上边距或每个都有下边距。-* k8 s8 [! _3 B- u' \, q0 p
该重叠的原则就是取最大值$ M1 E* {9 p4 q9 A7 K8 K
空元素的边距-取margin-top和margin-bottom的最大值
5 ?8 \. t( T0 e- c% P解决方案:
$ z) q; R1 B1 J: D% q) v* {) q" d: d/ A. C. S+ E6 F/ \
父元素创建成一个BFC (无论父子,兄弟情况)7 h! U' l5 O9 v& }! ^. s. D X, r
, S" Y) D. _ t8 T
4. BFC (边距重叠解决方案)
. \6 z4 P% ]; C: E k6 B& M, c6 j e3 Y4 T. _
BFC(边距重叠解决方案)
, N" ?( T, H) G7 T: S: a) |& D* h% r" f. r9 _1 Y
1、BFC的基本概念: 块级格式化上下文;
" l& S, z7 n8 b$ V2 v. Z/ V- l. T- |" D+ v' M7 R0 w# y: L7 @$ k
2、BFC的原理:BFC的渲染规则。: i! K& d3 o- T& E9 e, e& E H
2 i5 w# t4 h2 Z+ @! @2 _& ]& x. z①:在BFC这个元素的垂直方向的边距会发生重叠。(同一个BFC下外边距会发生重叠)" ?5 _0 b- U6 c! _! L- A0 J0 `
8 K+ S! W K5 A. ]" O②:BFC的区域不会与浮动元素的box重叠。(清除浮动)
; T- E5 U* M$ h& W( a, j/ g' `6 j
③:BFC在页面上是一个独立的容器,外面的元素不会影响里面的元素,里面的元素也不会影响外面的元素。
+ @# \( s/ L V3 f5 i3 n6 _9 _
- R8 f+ r+ | A, x2 B( p( b( i④:计算BFC高度时,浮动元素也会参与计算; Y1 C* E3 U) D2 z
( X4 j& M+ k- a8 q
3、如何创建BFC F, O5 v, F2 C; [
0 n, d2 \+ K2 i0 e/ f( ?/ y3 u5 [①:float不为none。
W+ G' p) ^3 V# I3 ?7 G9 @
$ [$ e& R' w* Z$ h+ N6 j ^②:position不为static或者relative。. C, P2 [. v' U; k
0 K" h% I; l" W! u; W③:display为inline-block或者是table相关的。6 Z1 l! A9 @* P. B& v
# y G' i" P4 D7 K" z6 m
④:overflow不为visible。) O+ ~) O8 c: B0 [
& a: E; w# X) R J
⑤ : body 根元素
) b3 G( R5 @( n4 Y* g, L9 A/ j
* L; c, D/ J# {& k! G6 n" h应用场景: - Z" k1 F- K7 [# Z+ l4 z
左右布局时,float . k. J" g' c8 y7 Y( Y
相邻div使用margin产生边距重叠1 }* L1 _9 l9 r, x
dom事件
y6 K* [; T8 n' z H& n& l, C* a* d! w1 p T
基本概念: DOM事件的级别
" q# y( c1 ?8 t
; X7 l* X% l% o' H9 P9 r x0 C2 w# zDOM0: element.οnclick=function()' M/ B5 g# u. v# x
$ o# [# E2 c& nDOM2: element.addEventListener(‘click’, function(){}, false)
* M' P6 n0 l: v! w0 I1 l. H t8 N+ ?% a5 l' E0 ?- ?4 R' @0 f3 C: p+ K5 \/ i
DOM3: element.addEventListener(‘keyup’, function(){}, false)
5 l1 W: H1 J: @1 p' A, K5 @
: A4 \& i, d/ eDOM事件模型4 m4 z4 x: C- L; Z! p9 g! M4 [+ H$ A
}; H1 K4 ~7 \' o( }, z. m* H6 S
event.target 2. event.currentTarget, J7 r! _1 i; _( a+ u
event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素: f& x, E' j! ^: H7 m; F) ?
DOM事件流
/ w$ r) s2 Q- I* B, I* t4 F: \, I9 L+ ^% [
事件流 -->《捕获》 2. 目标阶段 3. 冒泡2 {/ s/ w' P6 U& p( G
描述DOM事件捕获的具体流程( I+ I- n9 P. _- e
. z2 |& C0 [! a0 rwindow 2. document 3. html 4. body 5. 按html结构 6. 目标元素5 |2 u/ D* n* w# S
Event对象的常见应用
! X# m8 G/ D. X, s. f( m1 y* E# U& J) J/ Y, [' D: |/ k
e.preventDefault() 2. e.stopPropagation() 3. e.stopImmediatePropagation() 4. e.currentTarget() 5. e.target()
% c% P8 ^1 S, }自定义事件3 F: X# l6 f6 |- Y0 @
" s; R. ~* a8 g) j3 i W
var eve = new Event('custome');
9 B5 J! K: A0 Uev.addEventListener('custome', function() {
7 w$ ]* i, D$ m7 s: i console.log('custome');) w( o6 } m4 Z$ R7 u L. w e
});& e& l, e1 x( `8 m
ev.dispatchEvent(eve);
9 r+ S" {( l. _+ k# Q1
% W7 b& \0 i6 n3 H( U. z& C5 R2
5 f" w0 z; _* d& C3# d$ r* A* U" o- A
4
$ j# _# s& x7 ^59 d+ s. j y# b
http协议
2 x8 m. k* k& g4 }' A1 \
8 L$ j8 l/ d( y* @" uHTTP协议的主要特点
4 z9 T8 m) p6 c3 q4 P7 t+ z V9 x) v2 A7 f6 W
简单快速(资源的URI是固定的,输入URI)、灵活(头部分有不同数据类型,一个http协议不同传输)、* F% E; U( z+ {3 u5 w
: ]( p, B# r" d" R2 t' s9 S
无连接(连接一次就断掉)+ m9 X$ B( P$ D* e9 _
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
5 m ^ ~; t( V' ?& r1 z无状态(两次连接身份)/ u& a0 `& v4 @+ \8 c
是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传; d7 N) T" D5 M6 {7 G6 I1 V6 r8 d1 E& p
HTTP报文的组成部分
}. p. Y2 a5 m9 C
& x" z: |) F: j. t请求报文) c ?6 U8 I( k! ~7 A9 G# I6 o+ V
) ]1 B/ F- n3 K" d. j! M
请求行 请求头 空行 请求体
( l% H: T0 Q! w/ T+ {/ u- x( r; j$ X% v5 e. Y7 n+ J
响应报文$ P. }+ F- V+ @6 u, k. v
) D; ]7 i7 O# c; ^状态行 响应头 空行 响应体
* Q! C+ {* N! R) {* X- ]
0 E) y# B1 R# eHTTP方法
, S3 @; Q, c. k* Q* [( m+ c+ v! y% y( K; t2 {* ]
方法名 方法作用 注意3 N) w9 O; m% I2 c# A+ \
GET 获取资源 8 s7 h. {5 w+ ^5 f7 K
POST 传输资源
0 t( x8 F+ @1 n# e: k* @PUT 更新资源 3 K; \3 @! M3 z' Q) t8 \
DELETE 删除资源 0 h! f, R1 X% \! x7 S) a+ |3 n
HEAD 获得报文首部
9 F# e& v( G+ J# OPOST和GET的区别
% ?) `4 N( F7 U+ r6 c' `
; Q9 a- j3 P0 Zget post
: a" X; G/ \ l4 X7 G在浏览器回退时是无害的 会再次提交请求0 [* T& N; w7 ]( w7 f1 f, Q
产生的URL地址可以被收藏 post不可以
9 f# {: q/ E7 l0 b' E0 }. E请求会被浏览器主动缓存 不会,除非手动设置! b0 k( }/ a; Q( A/ q0 H ?
只能进行url编码 支持多种编码方式5 ^- T3 H6 K2 `) U/ h3 G
请求参数会被完整保留在浏览器历史记录里 参数不会被保留, M2 h6 X$ L- o; P- N5 {
请求在URL中传送的参数是有长度限制的 没有限制6 g7 r/ j+ L; s: R: m m
对参数的数据类型,get只接受ASCII字符 没有限制& {3 b% P9 T0 D0 e0 i3 x, k
更不安全,因为参数直接暴露在URL上,所以不能咏柳传递敏感信息 没暴露0 L2 S( t. N5 d0 U
参数通过URL传递 放在Request body中# k$ y: i b: m, b% |9 Z4 v
HTTP状态码
; x0 q: f# q/ H Z$ g/ V+ U+ X8 `% C: I6 n$ A
状态码 意义: P9 U% u; F# ]6 ^: }' ?" o
1xx 指示信息 - 表示请求已接收,继续处理。3 R* \' h9 K# o: g
2xx 成功 - 表示请求已被成功接收。
7 {7 L% c4 j8 k8 Z9 J3xx 重定向 - 要完成请求必须进行更进一步的操作。- Z. {! }! i6 x" a
4xx 客户端错误 - 请求有语法错误或请求无法实现。2 e) v% ^( x( a. |% y; y- Z
5xx 服务器错误 - 服务器未能实现合法的请求。/ F$ H) r% {% D& z9 h9 V7 r9 v# V( n
状态码 意义- } y. G6 d0 c( ?& D( l
200 OK 客户端请求成功1 ^" H: B f( N# V6 ]
206 Parital Content 客户发送了一个带有Range头的GET请求,服务器完成了它 u" u1 G6 r/ k
301 Moved Permanently 所请求的页面已经转移至新的url
. x* e- ]8 f# s+ q; D7 Y! P5 m* U% g% e302 Found 所请求的也么已经临时转移至新的url
( j% T2 b( c+ f8 s304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用
( Q* P1 l) `! p400 Bad Request 客户端请求有语法错误,不能被服务器所理解* V8 x. V7 t7 K' @ ?2 ~
401 Unanthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
: n# }7 ~# T/ c* g% G403 Forbidden 对被请求页面的访问被禁止
' m7 e4 w. u/ h# c+ E7 L. B+ X404 Not Found 请求资源不存在
: ?" H8 M) {! b+ ?8 ]0 M500 Internal Server Error 服务器发生不可预期的错误原来缓冲的文档还可以继续使用2 J. Z0 u# C N+ ~4 O8 c
503 Server Unavaliable 请求未完成, 服务器临时过载或当机,一段时间后可能恢复正常
b; {" F1 X0 L$ X- [ U) ~什么是持久连接
8 c, @) Q) F0 p8 e( {( W0 E
6 U3 j0 q$ M A7 JHTTP协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时, 每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议)
" j/ c5 ~& P! C7 w9 N+ C3 k
4 O8 U3 ]+ h- N* i当使用Keep-Alive模式(又称持久连接、连接重用)时, Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。, c- w) n, T2 ^ \- W( R% Z- h
! l5 F& l5 }" x( m2 G9 m使用了持久连接0 r# j$ Q. ]: \. {. h3 f( Y
7 L" ?8 K9 S6 |5 c6 C请求1->响应1->请求2->响应2->请求3->响应30 f a9 ^9 H Y% s
2 u/ W* |# Z& C- [变成了
% r, m) C2 R0 r( U A
& \$ A* [. W$ o- \ d请求1->请求2->请求3->响应1->响应2->响应3
5 _; h! n0 f: M/ V9 h6 S5 s7 i; m
什么是管线化* H @/ x5 a4 b- j* ^9 E- I
& }# }/ F3 r0 \6 a6 c( n7 u- O
管线化通过持久连接完成,仅http/1.1 支持此技术
& p0 Q& D/ D6 i, C. ?- H只有get和head请求可以进行管线化,而post则有所限制
6 f6 ^* c3 K I! V# m2 \% o" \! ~初次创建连接不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议% p/ Y7 U- i6 R
…
0 G& [& S0 T! ]' _. r) e安全
}2 n4 R- e& L+ p& n$ }( D: j. H
CSRF, {5 a2 _/ E: O2 q) u
基本概念和缩写9 V7 M2 S0 ^; N4 E2 ?' b
CSRF, 通常称为跨站请求伪造,英文名Cross-site request forgery 缩写CSRF。/ D( ^' z" M; R% @. L, h# |
攻击原理* m' C; }. V) G7 j: e
访问网站B时,网站B引诱点击链接,用户浏览器携带的cookie就被网站B的某些代码访问了。0 h, _0 v4 K" L: U9 c5 V
这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
6 V4 X" B6 g8 v7 WXSS& z0 u7 _' E: O8 b, L, T N
基本概念和缩写: E2 j& Q' Z& ]; B5 p& [0 Q
XSS, 跨站脚本攻击, 英文名Cross Site Scripting 缩写XSS。
$ R R0 R7 Z5 W4 f5 {" S攻击原理0 [9 V1 ]2 z K9 [2 }7 N; q
输出脚本code
% i: v) F; ]* U6 h: R跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
+ ^( |/ o0 J* E0 \+ ]! `xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。6 O4 }2 V3 D5 ]0 D& {0 D1 _; G
渲染机制类; y7 f* v0 Y6 D7 q* \# N2 Y/ [
9 | s! c, q% I5 |3 k7 S& d
什么是DOCTYPE及作用6 K1 {% Z, s7 E4 S; K
9 v/ i: X P8 Y& C( L
DTD (document type definition, 文档类型定义)是一系列的语法规则,用来定义XML或HTML的文件类型。
; ?: B1 d) H! a) c, O作用:浏览器会使用它来判断文档类型, 决定使用何种协议来解析,以及切换浏览器模式。
6 A3 k* {( c! F! H+ j4 f% r0 A$ T% O( mDOCTYPE是用来声明文档类型和DTD规范的,9 L* a6 |2 [8 w
作用:一个主要的用途便是文件的合法性验证。如果文件代码不合法, 那么浏览器解析时便会出一些差错。$ x. W' q* Y% I4 g1 v8 t: p5 m
HTML5的DOCTYPE:
$ w7 @) T# n, I- n& [4 [6 F' J5 l4 a' B% o
HTML4有严格模式和传统模式
% a9 ~$ C; M- e0 b. ~+ a6 }' P
8 B! c J" L6 z# @: \6 q浏览器渲染过程8 K3 c" [2 |6 g6 ~# s/ J
1 b; K* a# B8 } l0 }9 X一些概念
; a! {7 s4 @9 S+ M. j. a# \. @) h/ J7 d8 x# p0 V. P
名称 概念! c/ O( n; ~ a3 f/ G
DOM Tree 浏览器将HTML解析成树形的数据结构。
, ]' _3 \# e& ~$ rCSS Rule Tree 浏览器将CSS解析成树形的数据结构。+ @1 a% W; z' ?/ P5 u3 D
Render Tree DOM和CSSOM合并后生成Render Tree。$ y% q8 @) w4 G( O/ Q3 A% I% t
layout 有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。, F' ~) u* P) j
painting 按照算出来的规则,通过显卡,把内容画到屏幕上。% D2 F, L- D& n, r5 o8 I; h
1。当用户输入一个URL,浏览器就会发送一个请求,请求URL对应的资源1 Z9 G' b/ V5 p% b8 g: K) l
2。HTML解析器会将这个文件解析,构建成一棵DOM树
/ p0 m) F, y3 |3。构建DOM树时,遇到JS和CSS元素,HTML解析器就将控制权转让给JS或者CSS解析器8 `- E/ t2 |9 |0 M, X8 E
4。JS或者CSS解析器解析完这个元素时候,HTML又继续解析下个元素,直到整棵DOM树构建完成6 m! d% }0 ] s+ J$ \9 P( I! A
5。DOM树构建完之后,浏览器把DOM树中的一些不可视元素去掉,然后与CSSOM合成一棵render树/ X( S1 f! s* g8 A9 ?$ M/ \5 `
6。接着浏览器根据这棵render树,计算出各个节点(元素)在屏幕的位置。这个过程叫做layout,输出的是一棵layout树
0 k. N U& m! n6 t8 S& C; q7。最后浏览器根据这棵layout树,将页面渲染到屏幕上去0 b9 G* v6 @+ v1 u( \
1
$ L- ~- E4 _' r: \. w, @- K4 |2
& E. f4 G2 e: }& o8 a33 J J/ r6 [; {! x4 _1 C2 l
4
7 a8 q) X; [: I% m* I5" L+ T9 I/ n9 ?9 A7 n* V( u: j
6
7 y8 R9 M6 p+ M) J: }7
# ^! Y: K' e1 W4 m% q+ l( I: f重排Reflow
6 m- h$ P8 `2 g' p; d2 Q4 [! y( Z7 {8 Q1 a6 [9 @/ @
定义:当浏览器发现某个部分发生了变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫 reflow。+ Z5 ]7 N+ F* t9 H
触发Reflow:
p3 h4 A( J" h0 F, W' E当你增加、删除、修改dom节点时,会导致Reflow或Repaint
1 ?; X+ p% B% D# _6 ^& a& o当你移动DOM的位置,或是搞个动画的时候
- k6 Z! z& S7 `& C! `; e! o, ^当你修改CSS样式的时候
/ { ]# s1 E! a0 r当你Resize窗口的时候(移动端没有这个问题),或是滚动的时候3 H; ^( O; ]. x2 [. p" ?8 p
当你修改网页的默认字体时4 I% M! K0 u' Z8 |
重绘Repaint$ \) V3 N5 j4 C% n2 ?$ Z; R3 t7 R
4 T% Y2 m+ ~, j1 K
定义: 改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。
1 J, u% b0 I* V$ p% C, y3 J
1 E9 S% W( L3 y* v; U. R触发Repaint:
6 O# j" `+ ]6 L2 J
5 I! U# |, M7 x6 A) QDOM改动
; K7 M) G+ C# G1 R+ p! @* Y4 c6 hCSS改动3 p+ L! R* @. ~2 }
————————————————
8 Y2 [0 M# @4 @7 g* u版权声明:本文为CSDN博主「ton365」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
9 F5 i! |4 Z6 I$ M0 z D. d7 o/ N原文链接:https://blog.csdn.net/u012015672/article/details/1059312916 x; t7 P, p- Y" a0 D2 r
# H" d. ~4 [% `2 `2 d
: R: z ]/ ~5 L( n& `6 ^
|
zan
|