数学建模社区-数学中国

标题: HTML 知识点(未完) [打印本页]

作者: 杨利霞    时间: 2020-5-5 14:53
标题: HTML 知识点(未完)
HTML 知识点(未完)0 o7 l" r' ]+ V, x5 n

* r& L4 e& U: K/ THTML 知识点
: ^" l5 r, w8 V+ k: @( x
% D) T" m" j. b" a" C; v三列布局- (高度已知,左右宽度固定,中间自适应)
2 N& v, F! Z  ?. t5 }8 z% T6 ?" S3 D6 C7 z0 I2 i* Y5 |
布局方案        优点        缺点
2 I8 V* @/ B! z6 e6 C( z% G浮动        兼容性好        脱离文档流,需清除浮动$ Q& z1 z; H3 _2 S
绝对定位        比较快捷。        因为其本身脱离了文档流,导致了其子元素都脱离了文档流,使用性较差。; K+ g' k4 l$ Q+ W+ C
flex布局        目前是比较完美的方案。        只兼容到ie9。
. f% A) ?' A( }! E; o表格布局        兼容性好,当需要兼容ie8时可以用表格布局。        多栏布局时,某栏高度增加,会使其他栏高度一起增加。0 m+ o1 [- ?7 z2 D7 R
网格布局        新技术,代码量少        / A7 @1 d0 k- C5 g
<!-- 网格布局 -->* c. p3 p/ [  S  Q1 U9 a& X3 _
<body>
& e. T7 j5 s* K    <section class="layout grid"> - \4 a3 s; ]! t! K" r4 a+ ~( _. _
        <style media="screen">
7 ~6 T5 f, Z5 u+ n: X( x  V/ R            .layout.grid .left-right-center{( O+ U3 D% b8 b4 }
                display: grid;
" k+ q' W. r( W1 G  ^9 n- j' M- @( T6 o                width: 100%;. w! K+ U9 m, t$ v% e# s
                grid-template-rows: 100px; // 设置行高
5 M( y1 U' p0 J                grid-template-columns: 300px auto 300px; // 设置每列的宽度! }" b1 b! O' }/ S* q
, g2 b4 C- z+ m. J
        </style>
+ n# d4 w( c5 I) M6 k  N1 J9 V            <article class="left-right-center">+ y2 e  `  g  N0 S% [
            <div class="left"></div>  A# [: J  X; B& `1 v& b; R* @
            <div class="center"></div>
" c) [# d& n: @! G" U" M            <div class="right"></div># ^8 x" f! ^3 z  D! `& v
        </article>9 @+ `3 k5 x4 E0 }% O, X# p6 }, {; Q& D
    </section>+ {9 Z, D2 k* d* R4 b
</body>
$ a& M4 q, f# o6 v& H+ F6 N9 H( K1 U9 Z0 U5 u% b. e; e
css盒模型1 `% F* @3 D! _4 k1 A5 u
& [9 Z, y0 x% v. H* U* G
CSS盒模型的认识- u0 \' r/ @4 V6 z1 u* ^" Y
" b3 J0 _- U7 ^
css属性: content padding border margin+ N* ~! L8 B# x8 j& E

4 @' D7 J0 {: B/ q4 C9 F两种模型:IE盒模型(怪异盒模型)和 标准盒模型
/ \3 I$ {( J2 `" F2 C8 [; M
- I0 f2 M; E  s; t, A; Y两种模型的区别:计算高度和宽度的不同
* N8 b1 F# W; W: L
4 F7 B) u2 A& O  E& H两种模型如何设置:box-sizing: content-box(标准盒模型); box-sizing: border-box(IE盒模型)" C( e, T8 \& d

! l) D# ?* @1 {, e7 x- nJS如何设置获取盒模型对应的宽和高
4 P8 p* D% G+ l" O: Z
0 w" M5 P( V2 ]0 @获取方式        优缺点
8 P6 r2 ~- \# k% N  t. ddom.style.width/height        只能获取内联样式设置的宽和高
; ]. m0 L/ N$ X  Hdom.current style.width        获取浏览器渲染后的宽和高,只支持ie
7 k4 ]% r% ^2 U/ ]7 k/ {3 {window.getcomputedstyle(dom).width        兼容性更好
3 j" W8 O$ `' |% [dom.getboundingclentreact().width        适用于取元素的绝对位置。能取到 left top width height 四个属性 。// 获取浏览器渲染后的宽和高一般用于获取元素绝对位置
/ }, \- e4 w; K1 ~  H- H实例题 (根据盒模型解释边距重叠)子元素边距成了父元素边距" N- n' {" o2 [7 ^; p
# D- u3 b% |) E  V# x9 e0 F
块级元素包含了子块级元素,子元素是100像素
" z: y9 O  D! G7 @子元素与父元素上边距是10像素# s! e1 b8 n, o2 X& ]
父元素是110px还是100px (100px, 设置了overflow:hidden就成了110px); J, |9 L: W% n' _0 E
另一种兄弟块级元素-
7 D5 Q6 z) z$ Y( p0 ~2 h) |  ?3 D0 P% x) x5 M5 o7 `3 C) o
挨着每个都有上边距或每个都有下边距。-9 H8 h( O) z7 m: F* x# g* Q4 e
该重叠的原则就是取最大值
% q& Y# ~" _1 s! w" A空元素的边距-取margin-top和margin-bottom的最大值
6 L3 j" `$ O& ]( w6 r解决方案:6 K/ u3 J7 o# V! K
4 g# K3 }) Y6 ~  z2 K% U
父元素创建成一个BFC (无论父子,兄弟情况)
/ w5 ]" x" B. P+ S9 \; e4 s, p; y: C& {# ]5 x7 x' y" D
4. BFC (边距重叠解决方案). ?; ?* A3 w3 [% q

, l3 B  E( r" G" T9 nBFC(边距重叠解决方案)& r9 X, M& H. B; ]* j0 i" U
) F+ i8 m: S. U) k: z/ d' E
1、BFC的基本概念: 块级格式化上下文;
3 J! Z  V0 {8 X
! Q  d9 U' h/ U  J( t8 s# E% P" l2、BFC的原理:BFC的渲染规则。
1 f2 V4 d7 }3 i. C: E% K. q( F5 a; c& v5 @! ^
①:在BFC这个元素的垂直方向的边距会发生重叠。(同一个BFC下外边距会发生重叠)1 B. y8 T7 u& X4 y: H

5 c2 T9 Z" l3 s8 r8 B6 h6 n) o②:BFC的区域不会与浮动元素的box重叠。(清除浮动)
5 p' p' W1 ~  T" X* b8 [/ _- L9 o# q6 n
  l6 f3 s  Y/ u" B( l3 \: ]9 P③:BFC在页面上是一个独立的容器,外面的元素不会影响里面的元素,里面的元素也不会影响外面的元素。
& }* K) t! }* K2 \! {
- `% Z% J7 ]& [④:计算BFC高度时,浮动元素也会参与计算
0 [' F; z# B4 K; o3 O& @; P& {0 ^, _) s  N+ [2 j
3、如何创建BFC  j+ |4 R: Q2 H6 r$ H0 z. O7 e

# Z1 a) v, y) o! t7 K①:float不为none。
( }/ g. J) c: X7 V8 V9 G# a6 U) [- ^8 X$ ?
②:position不为static或者relative。
1 P' y2 u$ @& _) h
6 f9 d; [5 V, t( J& X' s/ c; Y6 s③:display为inline-block或者是table相关的。5 t/ g: ^( W- u& t- ]- p6 ]

. f5 o* e* S. b* I. Z6 l④:overflow不为visible。3 ?6 C/ |7 U# a) z
) T/ E/ z  o0 l8 n' A. u; w
⑤ : body 根元素
% ?/ v* N2 u, k+ b: |1 D) M" o1 D
应用场景:
5 w7 ?. }' a9 u# K/ o8 u左右布局时,float
1 `: h( A2 E9 d, |" O+ I9 |" N相邻div使用margin产生边距重叠! ]0 F  q- a+ ~
dom事件& C" v% V0 V: F& V2 t& M

' M5 F: F* ~3 X+ l* u/ R基本概念: DOM事件的级别
# ?; c. s! Y! Z- x! P- z, d  X: [2 Q8 ~7 X7 t
DOM0: element.οnclick=function()" x# V: a- f9 x1 e2 J  g( F
7 G7 t  a1 K) A- `
DOM2: element.addEventListener(‘click’, function(){}, false)2 s; x9 X& Z' q# K" C/ B$ F3 l3 s: G

4 o2 s2 U0 v. E( M8 nDOM3: element.addEventListener(‘keyup’, function(){}, false)* U4 F. s9 N% u2 Z1 l7 l4 K; x/ S
/ D5 v( p( _( ^7 l0 I0 v7 N+ O
DOM事件模型5 G. M' @+ V  P% {* U6 X

/ `! Q, \5 A' Q' Eevent.target 2. event.currentTarget6 y8 @1 i$ g7 \3 N$ Q' U: Q
event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素
2 _2 g- I( i8 ~2 E9 EDOM事件流
. `! O8 ^3 v1 W2 D9 k) d* H
' P. l. K9 q8 v: b事件流 -->《捕获》 2. 目标阶段 3. 冒泡
- m: p4 @  K4 I2 q  u1 R7 m描述DOM事件捕获的具体流程
- o9 `" w! h0 y. b" N( X# k& D" l( e: X3 Y
window 2. document 3. html 4. body 5. 按html结构 6. 目标元素, o1 }7 C9 ]" |* j  t
Event对象的常见应用5 R$ i* ^+ y0 Y8 {% V" B

7 H, h: K$ E9 R  se.preventDefault() 2. e.stopPropagation() 3. e.stopImmediatePropagation() 4. e.currentTarget() 5. e.target()# m* Y. a8 D7 i6 c& t
自定义事件6 [! b3 o1 e& _' Z6 `0 Z
% \7 L' J' p$ b5 L. B) l3 F' ]
var eve = new Event('custome');
; V9 ^/ P# G5 \# pev.addEventListener('custome', function() {
1 X% x; R2 q4 C& a+ a    console.log('custome');
/ a! v% \0 C  u' {3 y});
( {# z. R/ f- _9 dev.dispatchEvent(eve);
9 q, s" b+ @# `8 y  H- I15 e1 \8 j! N' S8 U( \# P- I
22 w! f9 @  ^$ l" B! I8 X
3, L. F) w$ v" D4 b' |* ]- ]4 ^
4
. p$ G+ W1 h' q: o. M5
* ?" L, ^2 |3 n1 n3 m2 k: Qhttp协议
. s; E# j1 @9 o& c: Z7 a
7 j6 [; I1 d1 j, w* ?HTTP协议的主要特点
& T6 y& _$ k# k# v2 a
% H2 Q7 P/ o" F6 ]* \* _8 h6 T简单快速(资源的URI是固定的,输入URI)、灵活(头部分有不同数据类型,一个http协议不同传输)、4 A: M/ y; X3 _
& e. V5 y! i) X" F
无连接(连接一次就断掉)# g% n; m: w' d& E, i4 p9 h
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
: _9 C6 z% ^& L: l. k0 J& X  G无状态(两次连接身份)* M/ K# V4 @; ?: h
是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传
  [2 b! r' E( jHTTP报文的组成部分/ z. d: a) \5 H: R* M5 D7 ^; F
# r1 j6 Y  s; B# m
请求报文
/ @) u3 E/ T& L+ o2 c( u
1 V! [$ u+ u: x1 Q请求行 请求头 空行 请求体! l; ~" G) T. D. Q) w
" H; F: T3 |7 Q" a- {! m
响应报文
# U$ Y# X" |: m
  |  z& i# C5 q+ \" S  _状态行 响应头 空行 响应体
9 w7 w- n8 J5 J9 O* ~' W& L6 @0 L5 T6 X( a
HTTP方法% }# b7 J0 D7 ?# n  ^0 c
  h9 o% o! u4 l$ w/ y
方法名        方法作用        注意
6 }: s. F0 Y  E$ m2 p. CGET        获取资源       
: R; m5 @& @% Y% B; E1 Y8 U: EPOST        传输资源        # c# a: a' z$ |8 Q9 {
PUT        更新资源       
* Q" V7 g8 L6 p8 X, EDELETE        删除资源        9 q& I+ P" d9 }* {, E
HEAD        获得报文首部        ! c( ?# j5 P0 A( Q9 k5 \; h2 @
POST和GET的区别* o# f; E8 q. c+ a
- X: k5 |  n& r8 t. d
get        post
0 ~, B4 G% A7 k5 \' @; i" G# L在浏览器回退时是无害的        会再次提交请求
. R6 f8 ^- Z4 f7 e  `产生的URL地址可以被收藏        post不可以
# n- N& }. T! {. _4 M' D: R% R请求会被浏览器主动缓存        不会,除非手动设置: b* A5 B2 O, m& }. N2 B2 U5 a: v
只能进行url编码        支持多种编码方式
% B) e. [$ X4 H请求参数会被完整保留在浏览器历史记录里        参数不会被保留
7 ?4 q9 E4 q" i3 u8 V9 [请求在URL中传送的参数是有长度限制的        没有限制
! @3 p6 |8 D3 ~& L3 H  H对参数的数据类型,get只接受ASCII字符        没有限制7 r6 H6 y- ~% _
更不安全,因为参数直接暴露在URL上,所以不能咏柳传递敏感信息        没暴露
# t( W  o! E  [  d  {参数通过URL传递        放在Request body中
: |2 m& o, m. L+ o5 G+ X2 LHTTP状态码% q$ C% p, ?- i- ^7 H8 T
) T' W) ]& L# i& g5 m3 q4 ~" {
状态码        意义
5 O) Y% {1 `. y# M2 b9 n1xx        指示信息 - 表示请求已接收,继续处理。
+ E) y# h( i- ?& u: ~2xx        成功 - 表示请求已被成功接收。- f0 ^* Y2 h9 m2 _! }
3xx        重定向 - 要完成请求必须进行更进一步的操作。( Q1 _4 k; [' }0 I% S, C, |
4xx        客户端错误 - 请求有语法错误或请求无法实现。0 i3 ^7 P  ]. s; V4 f
5xx        服务器错误 - 服务器未能实现合法的请求。
7 p$ I' I$ ^8 t# ^" c) p状态码        意义
9 r/ Z9 l1 O) ]2 Y0 j4 s' M200 OK        客户端请求成功: M8 a" n5 X# W  O
206 Parital Content        客户发送了一个带有Range头的GET请求,服务器完成了它
+ g0 ]  d- |; |. f4 ?$ Z0 I+ h301 Moved Permanently        所请求的页面已经转移至新的url
* Q2 i: Y5 Z. N$ W/ i5 b* _302 Found        所请求的也么已经临时转移至新的url1 n. {9 i+ a- a7 D( ^) \
304 Not Modified        客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用! u5 \# B. D, V( G8 T/ X& V  H
400 Bad Request        客户端请求有语法错误,不能被服务器所理解
3 {( }' ]2 [, U401 Unanthorized        请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
1 W. D, J7 ]4 d403 Forbidden        对被请求页面的访问被禁止8 V9 O% G4 D& L% E$ _. o% v7 U  P. x
404 Not Found        请求资源不存在- l8 o2 @7 P4 u& W$ \1 a
500 Internal Server Error        服务器发生不可预期的错误原来缓冲的文档还可以继续使用! Z8 R2 N( S" I/ e% t( G9 Q
503 Server Unavaliable        请求未完成, 服务器临时过载或当机,一段时间后可能恢复正常
4 ]  r- g  z! B5 @. ?; ?什么是持久连接1 Z" W6 L9 v& L% _+ t3 q
7 @" V& @( D; E, O2 h
HTTP协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时, 每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议)
4 m5 o9 h2 a5 `1 z+ ?4 q
( ?. \3 w7 v( Q& x8 `$ r' h当使用Keep-Alive模式(又称持久连接、连接重用)时, Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
* ]" X8 p" S& J
( e0 A! e( J* s4 m) d1 W2 Q  p0 v使用了持久连接; y  B3 [7 S/ A6 F! k! T/ n% u

! v$ D: D( W2 O/ n& n4 M请求1->响应1->请求2->响应2->请求3->响应3( _1 \$ n4 h( m5 Y; S. u% f
2 |3 i# O! e$ M8 a
变成了9 G- J) y9 h  j  d4 g0 F
1 Y# Y* ?! v" i- v: x6 w
请求1->请求2->请求3->响应1->响应2->响应3
+ c' W$ ]$ @$ m, X: L8 \, K/ _( \
: N/ I2 _' c" Q* d% n) X什么是管线化
) }! ?% H7 {! d; \  Z- N" ~! G  I8 j$ X0 T/ g3 [
管线化通过持久连接完成,仅http/1.1 支持此技术
. u) I; {1 J8 K, t只有get和head请求可以进行管线化,而post则有所限制, w2 [( H+ `" I" m, ?
初次创建连接不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议. K6 P+ M' {& d, A9 H
8 {9 Q0 o7 M+ B: c; I
安全- E7 y$ O4 Z- v8 A

5 C3 H' F1 Z, Y: |" X4 w+ tCSRF% i0 n$ e" a- m0 P8 k, b! x5 Y
基本概念和缩写
& h1 r8 @: B; I: UCSRF, 通常称为跨站请求伪造,英文名Cross-site request forgery 缩写CSRF。
% B- Q, E3 K7 ?) M3 V4 y攻击原理
! F1 J/ r* M+ s访问网站B时,网站B引诱点击链接,用户浏览器携带的cookie就被网站B的某些代码访问了。, z1 C0 p4 y! {0 \' T3 D; c
这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
& E) e' R7 |+ R! q) z3 CXSS
; p  W& d! n. p9 E8 R基本概念和缩写
, \' ?) }6 a; y) Z! f! D& OXSS, 跨站脚本攻击, 英文名Cross Site Scripting 缩写XSS。& V+ C& W* k* ?
攻击原理4 M' c/ a. }; P# A. G
输出脚本code! I, O) }1 a# M
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。5 D: X! F, Z' q
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。: Q( V$ V" z' D- [! V8 z+ g
渲染机制类4 I2 ~- [6 }; w* `! q; A& R7 {5 q/ J
% P6 r- Z  _( i* T: G, F
什么是DOCTYPE及作用
; {" _" w0 O7 W6 B1 t5 K/ K& ^$ w& w2 r0 D1 i3 ^
DTD (document type definition, 文档类型定义)是一系列的语法规则,用来定义XML或HTML的文件类型。
/ e  U: f, C' @" k作用:浏览器会使用它来判断文档类型, 决定使用何种协议来解析,以及切换浏览器模式。
) s+ s7 P* J$ QDOCTYPE是用来声明文档类型和DTD规范的,$ u' Q8 D: g+ N6 S6 G4 T* j
作用:一个主要的用途便是文件的合法性验证。如果文件代码不合法, 那么浏览器解析时便会出一些差错。( e  K0 }( \; h8 T0 ~) `
HTML5的DOCTYPE:
3 J( A! E7 Y1 i$ u& i
/ T' E( y( O9 L4 c! j7 ]' @HTML4有严格模式和传统模式% g- o; X7 _' S$ V

) U* v( Y; d/ n; W! q8 |" ?- }浏览器渲染过程
& S( U- f& L1 o0 v$ o+ D
) A: b9 ^: N  H2 B4 T, ]一些概念
; r# k  |; r  P1 c+ `$ E
: U+ P# {4 e4 b; |, X名称        概念
0 V, ?( r( P# t& ]$ h/ DDOM Tree        浏览器将HTML解析成树形的数据结构。: c$ p: v* a+ c. Q# c9 E9 R
CSS Rule Tree        浏览器将CSS解析成树形的数据结构。
6 |/ ?1 B, D; `: HRender Tree        DOM和CSSOM合并后生成Render Tree。
1 ~/ L0 ^# G+ mlayout        有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。
: K$ ]5 I- T3 q* Spainting        按照算出来的规则,通过显卡,把内容画到屏幕上。
) R- R' N6 L, ?' R! z* g1。当用户输入一个URL,浏览器就会发送一个请求,请求URL对应的资源: J. N! E; A% |. T5 ~* V# G+ z
2。HTML解析器会将这个文件解析,构建成一棵DOM树  g( l* ]" ^! Q( O
3。构建DOM树时,遇到JS和CSS元素,HTML解析器就将控制权转让给JS或者CSS解析器% B) ~. `; b: d) G
4。JS或者CSS解析器解析完这个元素时候,HTML又继续解析下个元素,直到整棵DOM树构建完成
8 f1 ~3 k8 v' o* z  O5。DOM树构建完之后,浏览器把DOM树中的一些不可视元素去掉,然后与CSSOM合成一棵render树0 ?6 w/ s7 t% v% Q; f
6。接着浏览器根据这棵render树,计算出各个节点(元素)在屏幕的位置。这个过程叫做layout,输出的是一棵layout树
9 r9 E" w1 F& I6 z, i, X- t7。最后浏览器根据这棵layout树,将页面渲染到屏幕上去& X: \$ D# m2 V0 y8 q. R% n) c# U* L
14 b+ }. A( _0 l5 ^
2' ]$ v6 z7 M5 {
3* F6 a' I1 n1 T9 ^- q
4
) s' j% Q% ]. G4 d5
6 S0 ?9 y# E  j1 X6 k/ N' ?$ p6- b: g$ p# o! a; W( m
7
( v; k6 l2 z0 T4 D9 y" q9 Z重排Reflow
' K  J" V  f* x8 u6 ?2 x. j/ C, @  z
# `9 N$ ~+ [- o+ U定义:当浏览器发现某个部分发生了变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫 reflow。
: S# c( W3 Q- D  U# d+ }" a" `触发Reflow:
6 S% A* l/ f  `/ O当你增加、删除、修改dom节点时,会导致Reflow或Repaint
5 J% D4 a! v* K$ `; d: G当你移动DOM的位置,或是搞个动画的时候$ Y& h0 @  f/ X1 U) H. [3 V( Q
当你修改CSS样式的时候
. z3 W( y% |& [0 b当你Resize窗口的时候(移动端没有这个问题),或是滚动的时候
& o7 D& ]0 h$ R% j* m! _当你修改网页的默认字体时
9 z! q9 v/ M% c8 g, f重绘Repaint
& ?, ]" ]4 h3 g+ e7 l8 D( b, G
6 _" e0 M  C8 q6 W$ l定义: 改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。, f' n# b  O4 z: u
9 e' u% f8 a% S; K, F
触发Repaint:
; e) N$ D) Q* [- G* L& _3 v) A6 {2 l' o3 O
DOM改动
; L0 ^8 h8 `/ I1 _0 ICSS改动# h( F' V" U% [3 I" \& E
————————————————7 U7 M% B. e% l8 G
版权声明:本文为CSDN博主「ton365」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。9 E2 b9 Y' q8 d5 H/ e
原文链接:https://blog.csdn.net/u012015672/article/details/105931291
% g3 ?) D, U3 Y! h, h
9 |+ @( L4 p  `  M& Q* W" M9 ]. `5 W; }* N





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5