- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564691 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174630
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
HTML 知识点(未完)
/ s5 d3 P! K' r. i2 @' h# [4 f9 L# x, t) p6 x& R- W
HTML 知识点
/ ] r, ^& y& v; M: ]4 Y* R% m0 [6 f3 W
三列布局- (高度已知,左右宽度固定,中间自适应)
* _: @! ^. d @* b% W; a6 S" }
8 R6 G: G+ k- g% N* J布局方案 优点 缺点/ ^2 E% B+ c& A5 H6 j1 b
浮动 兼容性好 脱离文档流,需清除浮动
6 _# s; F% ~" m绝对定位 比较快捷。 因为其本身脱离了文档流,导致了其子元素都脱离了文档流,使用性较差。, q8 G ]2 @. g f5 \ H+ |% ]
flex布局 目前是比较完美的方案。 只兼容到ie9。/ `# u2 l* b$ G
表格布局 兼容性好,当需要兼容ie8时可以用表格布局。 多栏布局时,某栏高度增加,会使其他栏高度一起增加。
w0 M# @+ I0 _ A# Z3 `网格布局 新技术,代码量少
- S2 @ V0 ?' G* Z3 ?: B: I<!-- 网格布局 -->
0 b1 h9 m: V+ S4 W& t# R<body>7 F- G% m$ _- ^4 C
<section class="layout grid">
! N; `9 x! k G <style media="screen">' r. k* ^* A7 x q: {
.layout.grid .left-right-center{
* f1 X& m# G5 N8 E ]% W+ s6 v7 Z display: grid;7 y, u$ {) J H. x& K5 Q$ {
width: 100%;
! k0 t* K/ d0 |; Q grid-template-rows: 100px; // 设置行高
$ I0 n8 U. ]% o grid-template-columns: 300px auto 300px; // 设置每列的宽度: b/ p, U( l* g8 E8 V2 n
. }, N: _# k, O R
</style>! d4 f6 w$ c0 V+ T: j' K
<article class="left-right-center">
' Z3 F) G, i) d9 b <div class="left"></div>8 b8 s4 G& W: u/ S6 T0 e& F
<div class="center"></div>
: z' E8 Z! o) u$ `4 G. \7 \ <div class="right"></div>( z3 ^7 O# V. ]9 U" V
</article>
; U1 u& j- B, i/ U/ n </section>5 X4 K2 m$ M: n" N0 l
</body>
. @; k) D8 q# J+ [3 C) v- M' \/ T5 Y6 K- r& ]5 O- W
css盒模型0 _; s2 i4 E! T2 b& @; k9 l4 w
2 h1 [, [* i$ n6 ]2 aCSS盒模型的认识4 r9 M1 o1 b8 _/ j
2 p i6 F$ L0 ?4 L
css属性: content padding border margin
2 K8 s0 f% y+ C' _- N" J% E
# z, w" o- b' q1 V% V1 H4 {: J两种模型:IE盒模型(怪异盒模型)和 标准盒模型
0 k2 F* H: q9 s J1 [
3 i: K5 m5 f l两种模型的区别:计算高度和宽度的不同
$ ^" g5 j( J; m" m% g* z3 }( t
2 W. p+ r9 u* W1 t" ?两种模型如何设置:box-sizing: content-box(标准盒模型); box-sizing: border-box(IE盒模型)
) k( R1 H3 A$ i
K' B! x# |( ]JS如何设置获取盒模型对应的宽和高
; m# c; n% ~3 s- R t
8 y. y4 P' k1 }; t$ d! w获取方式 优缺点$ n! D' B7 k& q: s2 k
dom.style.width/height 只能获取内联样式设置的宽和高
. d t. q+ I1 ~- W0 ]$ ^ adom.current style.width 获取浏览器渲染后的宽和高,只支持ie. W4 P1 k! D' @4 N) \" A4 Q# o
window.getcomputedstyle(dom).width 兼容性更好* T3 [7 u5 }9 E- A. h6 y: o
dom.getboundingclentreact().width 适用于取元素的绝对位置。能取到 left top width height 四个属性 。// 获取浏览器渲染后的宽和高一般用于获取元素绝对位置/ n1 E8 o3 ^) a8 r' @7 F. K
实例题 (根据盒模型解释边距重叠)子元素边距成了父元素边距
g( h; I% v+ W) ^8 x+ B1 F' @( V% A# e/ M
块级元素包含了子块级元素,子元素是100像素( i' v* R2 O& ?% Q
子元素与父元素上边距是10像素
" |5 c/ k# K; k: n* B; k父元素是110px还是100px (100px, 设置了overflow:hidden就成了110px)( S8 H) O+ }6 _$ M
另一种兄弟块级元素-$ x- Z6 Z2 p% {3 p
5 t Q! `% i- o挨着每个都有上边距或每个都有下边距。-5 l4 J0 f( z# V" j0 l) Q
该重叠的原则就是取最大值- O8 g; Q! x, e# M- a% }# J2 H
空元素的边距-取margin-top和margin-bottom的最大值3 X( ?; x. W/ N1 M8 l* f
解决方案:; }4 h' J" G5 a4 X3 W
" e y) y& V1 Y% Z3 M) [
父元素创建成一个BFC (无论父子,兄弟情况)
4 R& X; O% x/ M! {1 I$ x0 _, y2 y; J7 u) O' f+ _8 e- D
4. BFC (边距重叠解决方案)
' z7 E3 @$ a. K. u: |
, {/ l# [' B/ X2 ~" z1 `BFC(边距重叠解决方案)
( u" V; E" \4 b& V2 a6 T3 d: R+ p+ [; p+ x
1、BFC的基本概念: 块级格式化上下文;
1 t# a- ]) _) N& w W! p# Y* I. p* Q+ h3 I9 f! h
2、BFC的原理:BFC的渲染规则。
# W" f1 L) W( X* S T2 b
) h: z7 t' H7 {6 O6 `- B/ N3 H①:在BFC这个元素的垂直方向的边距会发生重叠。(同一个BFC下外边距会发生重叠)
) c0 k$ Q8 k& W: [* K7 B' W7 w. x* y5 j1 l; W& h9 z
②:BFC的区域不会与浮动元素的box重叠。(清除浮动)
U% A, [, i# h" K$ ~
! R0 E9 s. w: g" p- f; {; Z5 V! N③:BFC在页面上是一个独立的容器,外面的元素不会影响里面的元素,里面的元素也不会影响外面的元素。
* z1 F* q6 |8 L7 m' I. K5 P0 p' ^3 j& p, a2 k6 U1 K8 @- j2 j, k
④:计算BFC高度时,浮动元素也会参与计算! D& ?% Z& H8 Q% [9 ]; i. y
" G2 e0 \+ T0 |$ U% n; `) E9 P3、如何创建BFC& B4 I% V6 p7 v q) P8 e5 z1 D
6 B' h6 F3 V6 }! ?
①:float不为none。
- {+ G0 o8 R4 w0 |+ e2 n' k% s
! g& W7 C" `" F* ^; a②:position不为static或者relative。
" U* K9 w# c6 e2 v
4 ^. P1 S* |5 [2 X: H, k8 S/ b③:display为inline-block或者是table相关的。# f6 W3 g6 `* [6 x5 C2 p# q
* J% B t; }, `+ O④:overflow不为visible。
5 A% [8 S9 n$ v9 j
. u: l7 C$ N) X) q+ ?⑤ : body 根元素
: H: N! J( T A& t4 G l( A2 y3 Q9 I# q# D0 l0 H t
应用场景: 6 w* e$ y, {& z3 T9 _7 i5 w' L
左右布局时,float 4 B& |3 m- g( O3 r! S3 l2 a
相邻div使用margin产生边距重叠
- @2 X6 _# z; Idom事件
: Z$ ~8 u& Q) E- h* |1 X6 Q5 d |. N1 c' E0 H, y/ E
基本概念: DOM事件的级别, r# |4 O$ S, c6 @) D
4 u- x( e4 g* V, M- h' V/ T. l. P
DOM0: element.οnclick=function()
$ V. s1 U* z2 Z
3 e+ J+ c/ ]) e, m. n% sDOM2: element.addEventListener(‘click’, function(){}, false) n6 B9 l0 }) t( v( {; D
! ]1 x/ Z7 I7 S+ y# k
DOM3: element.addEventListener(‘keyup’, function(){}, false)
2 `+ d. @7 W# C% G. k6 E% Y! y6 e+ T _/ l
DOM事件模型
5 d9 a; O0 B+ \) ^6 [' p# D! x E; c
event.target 2. event.currentTarget
; D( d b; Q5 Q7 h% @event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素
k# |6 Y$ k" o/ u7 ~7 o* dDOM事件流: u$ ]. [ o% j0 l
" A! C( a- T \0 q) J% x7 v; j) L
事件流 -->《捕获》 2. 目标阶段 3. 冒泡
9 z( C9 N4 ?- C2 D7 ]描述DOM事件捕获的具体流程
: l- R! x0 T* b! I% O+ W, c5 ~
5 A+ L+ C: Z9 ]- t6 L( c5 swindow 2. document 3. html 4. body 5. 按html结构 6. 目标元素
/ u( T8 k" X. j6 ], Y: i& NEvent对象的常见应用! A) u T+ c3 f; T
, J c M9 F% o: \& O
e.preventDefault() 2. e.stopPropagation() 3. e.stopImmediatePropagation() 4. e.currentTarget() 5. e.target()$ t' I' W k) f
自定义事件
% A: O- p) J. r9 o v4 @
# T# R# ?4 I7 ?) k8 ^& }0 Lvar eve = new Event('custome');
& j, D3 ^6 w! R6 Xev.addEventListener('custome', function() {+ A* }5 S& H1 L |/ N M5 G
console.log('custome');4 @0 h s& b" i C# g: W. @$ \
});5 D1 Z+ d9 k8 s. i9 J5 `; M$ T
ev.dispatchEvent(eve);
& M% N( l4 f; C f15 g: M6 t/ _3 m0 [0 ~
2/ x6 G3 N% }1 A# ~
3* o0 I& M1 u1 p1 o
4
7 l3 D3 n0 e/ c* D# N0 r* c/ _5# f3 n. S1 v6 E& U! [( G
http协议& C/ U s# |$ r$ M) h+ g
' i; c/ k% H+ F7 j# ]HTTP协议的主要特点
( e4 @( ?" ]) v; m. P
" ~2 p j4 z) |8 @7 \简单快速(资源的URI是固定的,输入URI)、灵活(头部分有不同数据类型,一个http协议不同传输)、
z. Y* j+ N$ ~: A: i
9 W3 ^8 h9 K: ^( V. R9 O2 s无连接(连接一次就断掉). e$ Z2 s, {9 h
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。. j5 }; z( q J" }* _* q
无状态(两次连接身份)% e& \( L l& u+ c$ c; }+ s& B
是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传1 `4 s5 f# O% I9 C7 _* U
HTTP报文的组成部分# I- l. _" t* A
+ S5 r' e# t- b7 M! ?3 L请求报文+ H! L7 I* w# p2 {0 d
2 } X3 @; B6 _. F7 B请求行 请求头 空行 请求体
: k9 H0 ]9 G: Y' E) s! c \1 {7 Z( j0 f+ k. a+ E2 u+ D# ]( m( T
响应报文
: }; K; p4 T2 P1 ]- V8 k1 [/ a* `, c
状态行 响应头 空行 响应体/ U7 _) r1 G) F
3 b5 X1 o8 A& _2 T8 qHTTP方法
3 B7 l8 N# Z. n; o+ v6 [, K$ O9 r/ ~7 g
方法名 方法作用 注意) z! V3 x. X% W6 @6 r* m
GET 获取资源
, t( {0 e' f- P% B/ gPOST 传输资源 ( t' [0 c7 p6 V% e- U
PUT 更新资源
$ @ g% s4 `+ R0 k# Q1 s, N5 U; g# zDELETE 删除资源
% W) x- @( Q: G# g! yHEAD 获得报文首部 2 k+ c7 m8 q* F. A$ u( ~. }! e
POST和GET的区别
4 g" h7 s7 m5 [; {
6 T1 U9 O7 `: z3 D- k* zget post
, e2 O: ?+ a5 w4 L7 z在浏览器回退时是无害的 会再次提交请求" v4 ^8 J. d) W$ W
产生的URL地址可以被收藏 post不可以
, b+ M8 c( A5 }7 X9 }# Q请求会被浏览器主动缓存 不会,除非手动设置, m |1 U {' t3 b
只能进行url编码 支持多种编码方式) w$ @* y- i, h! }
请求参数会被完整保留在浏览器历史记录里 参数不会被保留
/ }3 E: z6 w6 j% j$ E请求在URL中传送的参数是有长度限制的 没有限制$ e7 L( x/ \. N
对参数的数据类型,get只接受ASCII字符 没有限制
& T: h( E4 l$ q: @) ]# U更不安全,因为参数直接暴露在URL上,所以不能咏柳传递敏感信息 没暴露9 ?7 ^, |: A" l, s( ~! J( K$ p
参数通过URL传递 放在Request body中
( X% j4 q) H7 s! P% qHTTP状态码
7 H9 \) D5 w- G9 n6 }% F' @. ` G8 {/ |
状态码 意义
* h% _# p" e. `. D1 `! X1xx 指示信息 - 表示请求已接收,继续处理。7 h' H9 ?- _0 }3 Y4 @2 Y$ l
2xx 成功 - 表示请求已被成功接收。- N9 c1 x5 B) V+ z4 A6 X+ V2 D2 h( L5 o
3xx 重定向 - 要完成请求必须进行更进一步的操作。) ?8 r, U% x+ U; J
4xx 客户端错误 - 请求有语法错误或请求无法实现。
" b7 h8 I# S- S& j3 g' a! X; i5xx 服务器错误 - 服务器未能实现合法的请求。7 }! @% X5 r, _* T6 |
状态码 意义 g& l4 u7 M- U/ ]; y
200 OK 客户端请求成功0 ?, g) G7 {+ f M$ Q
206 Parital Content 客户发送了一个带有Range头的GET请求,服务器完成了它, u4 E7 T1 R& N' v" `6 F4 E6 e
301 Moved Permanently 所请求的页面已经转移至新的url
6 v( o1 {0 A& v302 Found 所请求的也么已经临时转移至新的url
2 @" M' m# i+ t8 A; R+ j304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用
4 G) t6 }" q, _" ~! E400 Bad Request 客户端请求有语法错误,不能被服务器所理解/ l" D5 j, c, f- R o7 E7 F
401 Unanthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用4 U9 s9 r4 |2 D% t/ Z; r O
403 Forbidden 对被请求页面的访问被禁止5 P" i% m+ b8 O
404 Not Found 请求资源不存在4 d2 @6 v5 ]3 N% a) X# `- r* T3 G4 f
500 Internal Server Error 服务器发生不可预期的错误原来缓冲的文档还可以继续使用# j2 [ b5 X6 A8 t
503 Server Unavaliable 请求未完成, 服务器临时过载或当机,一段时间后可能恢复正常
6 V/ B: v& T/ m" m5 M7 Y什么是持久连接
0 G4 L+ O$ `/ H' j" }, W& M, Y! d5 C8 x* }1 V" g- R
HTTP协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时, 每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议)
1 p# A7 Y2 l0 Y4 |7 h
* [( c# Y* a8 z4 @4 R! P当使用Keep-Alive模式(又称持久连接、连接重用)时, Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
2 s( N, U- T: k) L6 P S0 P7 L; M) b6 h7 a- R# F
使用了持久连接
7 S, W$ ^: r9 Z: ~. b! W: d+ Z7 [; {6 u- W$ k5 H# }* K( j! b
请求1->响应1->请求2->响应2->请求3->响应3
0 B: @5 B1 C& M" S6 t3 P; v8 i7 Q5 ^3 h0 h
变成了+ ~( ]6 k( D& ~
/ E7 G% `; D# J& K$ n% Z! L( ]请求1->请求2->请求3->响应1->响应2->响应3& K8 U3 V$ u" w. {8 l3 A& g& c
7 f( D: _( Y3 o- e
什么是管线化
7 h% w, ]5 c% U' m# F
9 z$ [/ m+ s, v* x& y7 w! S* |管线化通过持久连接完成,仅http/1.1 支持此技术
& ^, ]& a0 ]9 U3 ?1 C只有get和head请求可以进行管线化,而post则有所限制/ @, [" I; I' e: `" a! J
初次创建连接不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议7 Q! S3 Q( N# k. E
…
1 s/ T1 J/ H8 ]- e: a* \安全( p! ^/ H9 y% H: n8 u2 q: q0 H2 k- j z
# z5 W2 \1 ?9 J& I8 [6 n3 C6 eCSRF( `3 N- I4 W5 E6 H- p
基本概念和缩写
; G- ~5 X; i5 nCSRF, 通常称为跨站请求伪造,英文名Cross-site request forgery 缩写CSRF。
1 W) G7 z7 B4 Q+ u! k攻击原理
7 O6 c! x- n7 J' ?- T! I5 B访问网站B时,网站B引诱点击链接,用户浏览器携带的cookie就被网站B的某些代码访问了。
$ I; F4 r. b, v0 `' ^: V这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
/ t' P+ C4 h d' WXSS
$ G: P( j6 s0 T% O5 w+ y- i% `基本概念和缩写8 N7 Z; x3 X* t0 l0 r, ~% s
XSS, 跨站脚本攻击, 英文名Cross Site Scripting 缩写XSS。
3 \1 ^& w5 z( Q攻击原理
; ~. c, J; k# M; t( Y7 q. S/ P, a输出脚本code0 r- ?( j' G+ p* v9 z
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 ]# c6 ~9 s+ a$ M! p( ]7 [% ]
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。, C( ^; R8 {# j
渲染机制类, W0 _1 i' S+ F) M4 K+ `
" j, t+ m' A& n) f
什么是DOCTYPE及作用2 P+ k/ |& L8 [1 V! Y; U
5 H! o8 R8 s$ @$ x) NDTD (document type definition, 文档类型定义)是一系列的语法规则,用来定义XML或HTML的文件类型。* V1 ~# B3 E, f) O+ b9 F. p" S
作用:浏览器会使用它来判断文档类型, 决定使用何种协议来解析,以及切换浏览器模式。% e$ K0 L& f1 i- l4 |
DOCTYPE是用来声明文档类型和DTD规范的,1 {% z+ b9 p: b" K9 k- |5 t, n% _3 H
作用:一个主要的用途便是文件的合法性验证。如果文件代码不合法, 那么浏览器解析时便会出一些差错。 i6 q0 R5 j0 i# T$ s% Z
HTML5的DOCTYPE:% g) U, ]' p/ q F+ f
6 R. w, ?4 r, z9 eHTML4有严格模式和传统模式. S5 B6 n( q5 h E
2 c4 k9 U: ?$ u: n5 s
浏览器渲染过程
* Z7 p, U! F6 b+ W8 M$ t1 a0 G1 h3 D: D/ d$ @
一些概念/ g4 E. x1 ?' z; g( J1 q! [0 X
e6 u: u+ H/ Y7 s( Q: v
名称 概念8 z" C' ?8 d6 g1 d; g
DOM Tree 浏览器将HTML解析成树形的数据结构。" S5 n) m0 S$ s' p) T7 ?* a
CSS Rule Tree 浏览器将CSS解析成树形的数据结构。
# V2 r1 a9 {% V* dRender Tree DOM和CSSOM合并后生成Render Tree。
. R" D. G) V/ {& d, dlayout 有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。
: ]; g5 z _* Y/ z3 U* b- dpainting 按照算出来的规则,通过显卡,把内容画到屏幕上。0 w9 N+ P; ?5 D0 t! e
1。当用户输入一个URL,浏览器就会发送一个请求,请求URL对应的资源
& P8 Q( u6 p( e) M* a0 e2。HTML解析器会将这个文件解析,构建成一棵DOM树5 ]3 N( G( Z" X' @
3。构建DOM树时,遇到JS和CSS元素,HTML解析器就将控制权转让给JS或者CSS解析器
/ \$ n& S3 P9 S- v9 v) \6 E; f$ ~4。JS或者CSS解析器解析完这个元素时候,HTML又继续解析下个元素,直到整棵DOM树构建完成3 n! d# }# n3 I% |% v
5。DOM树构建完之后,浏览器把DOM树中的一些不可视元素去掉,然后与CSSOM合成一棵render树" M; H* s q# @ Y$ ]
6。接着浏览器根据这棵render树,计算出各个节点(元素)在屏幕的位置。这个过程叫做layout,输出的是一棵layout树
/ ?# _. P; s" z9 `' O. n7。最后浏览器根据这棵layout树,将页面渲染到屏幕上去" h6 v. ? k5 u3 B+ W, l+ Y
1$ |* Y7 ?3 A& I
2
7 X. x" }; B& J3
+ C3 [, }& P! F; @- Z7 c' g- o; q4
q d+ V F9 `- j% s- W5( z5 p# d5 R5 K2 W3 P3 f4 f: J
6* M U2 G1 b. l5 Q: _
70 b O* ?, D' B- q \
重排Reflow6 Q- x6 }/ g+ p) o3 a) E8 b$ o6 y
7 o' W# p9 a- b( f6 G" z- m0 d0 Z
定义:当浏览器发现某个部分发生了变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫 reflow。
B3 a/ B7 R: A# {- g6 b' _触发Reflow:, ?* o8 F/ q/ q$ j |
当你增加、删除、修改dom节点时,会导致Reflow或Repaint
$ r8 N) o3 l, x9 [7 w当你移动DOM的位置,或是搞个动画的时候
7 N+ b/ w7 L+ Z& Q当你修改CSS样式的时候8 x I9 u, C- N( v
当你Resize窗口的时候(移动端没有这个问题),或是滚动的时候0 p, b4 [+ S2 k4 q4 `
当你修改网页的默认字体时) n- C7 W8 Y, J; u. F
重绘Repaint$ N! ^) O* F. R
0 f' _% ?2 j) M! Z
定义: 改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。- a3 B; T' n: m2 Z! t
9 _. T/ D) S* I4 g2 }% Z- p( X触发Repaint:
: z+ M+ b+ p) L( D- E* h) m! ]
; Z, H' Q3 }; j8 RDOM改动
8 H; \" d/ r; H1 } \CSS改动) p9 S- @% L- Q7 @7 o9 n% N5 O
————————————————
$ b4 s! E% O- y g3 U( J! R" C版权声明:本文为CSDN博主「ton365」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
/ _5 y5 f' [" Z* c0 J+ o4 B3 G原文链接:https://blog.csdn.net/u012015672/article/details/105931291
3 [5 t7 }- Z2 J/ ~5 t
, O% D: |* f; E1 X3 z; x. ~* n, o; _" q5 Y
|
zan
|