该用户从未签到
|
## **方法一 **
* B7 x/ X- _& n$ y, b' z思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中
" C+ i% j+ x! W3 `1 a N7 ^' w; a优点:父元素(parent)可以动态的改变高度(table元素的特性)
' b j# S6 M R4 k缺点:IE8以下不支持
" |. k5 B$ {" u: Q9 a3 @7 d3 A7 m$ S9 M# W( k, J: z& }/ _6 A$ T* d
```
3 G' h ~# }. L<!DOCTYPE html>! P* i' ]5 W+ m8 L! G
<html lang="en">
3 g2 y6 X6 d, C<head>- P, ~, v7 s. s% h3 p
<meta charset="UTF-8">% _& e4 D7 B* f$ f9 Q# ~! U
<title>未知宽高元素水平垂直居中</title>
# q* K! l, ]& `6 T( a' w</head>
1 Q2 i) }9 D; i2 s<style>7 [ j. h- M) U. i5 {, ?
: d8 r4 f% V: m# H
.parent1{ H9 [; w- M' a1 _' {5 ^
display: table;" P' V) I3 w3 }4 f. O" ?' t
height:300px;
. a3 H0 C9 T$ c6 z/ K z0 [3 z) S width: 300px;
# ?6 d9 ~( z9 j/ {% ^/ l& { background-color: #FD0C70;7 P% G" A$ y. y4 h& e3 Z- z
}* \7 Y! y$ u% K
.parent1 .child{( r+ ~& _3 F- Q$ }3 I5 J3 {$ s
display: table-cell;
3 S2 u6 T" o' E! X$ ^' I! W2 J vertical-align: middle;
$ _4 o# u4 D D% ]# H& {( l- w# j text-align: center;
" v, T+ c% q, b: z$ O color: #fff;! B- H: L: {: t. S* A# x
font-size: 16px;
% ]& W6 t# X6 P) ^}; U3 [) e- r; B# r2 d* d. O
2 D3 M ~3 a! H T
</style>+ p N" ^0 [$ E0 n9 q
<body>3 {& y. @4 ~' E# m
<div class="parent1">% \9 i+ r0 y5 n I' {" X+ E
<div class="child">hello world-1</div>
& ?4 R$ a" c, ^3 C- r </div>+ I' s5 C' T. j, b+ U |
</body>5 @# s' o) n8 F$ v3 @/ L( r
</html>) ~- R6 e; c8 j: m; ^
```
) m5 S& h6 X. w; k/ Z2 ~## 方法二:: }+ k: V3 @, ]* y, W
8 u! ]% ~- z9 J+ S* }2 Z7 O! I5 a思路:使用一个空标签span设置他的vertical-align基准线为中间,并且让他为inline-block,宽度为0! R. \4 e' S e. H8 Z; e
缺点:多了一个没用的空标签,`display:inline-block` IE 6 7是不支持的(添加上:`_zoom1;*display:inline`)。
) h% \* F9 R) k1 v6 ^当然也可以使用伪元素来代替span标签,不过IE支持也不好,但这是后话了
" [5 T/ Q0 H: w" u! |0 r4 d8 [2 }+ y+ U P) T# G. |
```1 r: F6 E) V4 s r% Z. r$ j
<!DOCTYPE html>
7 e- K8 ^6 F" @1 k6 x<html lang="en">, K4 w" H3 n; J9 k4 ?
<head>
2 G/ J9 t/ Z' X <meta charset="UTF-8">6 u. {/ _. s6 \3 i, r7 K
<title>未知宽高元素水平垂直居中</title>
# R! O6 z% `7 t: {</head>* ~& j, Q" k' J# a$ Y1 o: W
<style>. L7 \9 G, z& ^+ B8 B' b
.parent2{4 A6 T2 {2 E. Q6 b6 z& ]
height:300px;- j8 e8 N q2 H+ q: B
width: 300px;
- _; w+ h2 X, h: Y4 P7 c5 j text-align: center;
& |; x& y- P: x background: #FD0C70;3 q; L' ^& G/ y5 r- H
}
2 e( l3 T1 j6 n# o.parent2 span{# c6 y. c9 v# I5 w
display: inline-block;;$ S' {6 V7 |& j/ p. d0 A% E
width: 0;
) l, x Z0 |" @7 w& y height: 100%;. ]5 L$ {2 w/ u2 `3 y6 {
vertical-align: middle;
/ b2 N5 O) m" b+ m7 m zoom: 1;/*BFC*/
- O9 |4 |% z# X' `: ~8 S6 A4 P *display: inline;
5 ^5 c/ X9 W" a/ e# f" h# Y+ o}' M# I8 Q. ?; b) s6 e
.parent2 .child{: f4 Y# F1 ~5 B; u9 G/ b4 O
display: inline-block;
- P0 g9 L0 g. D7 {6 a9 _" j. P color: #fff;
J O# g6 @: _# I) @, E zoom: 1;/*BFC*/& c7 m+ a+ u6 B! Q9 j
*display: inline;
) Q* @& \. R3 v' ^3 i}9 W, ]" |6 {- S6 j; ?
8 x- n! ^) \: K/ l$ ^* j
</style>
& y# `8 K- I+ Z; x9 [* Q1 }<body>
/ P( [; z" ?) p! Y) j- o+ [9 C, A. Q <div class="parent1">4 n6 z/ K0 T8 c
<div class="child">hello world-1</div>: L% }) z2 ?: D& C
</div>
: ]/ P, B- H& X8 ]
/ L' p; r4 R: w. @0 _# H <div class="parent2">, |$ a0 d: P+ H. _. G' |
<span></span>* G8 p4 O5 G+ G' z5 o
<div class="child">hello world-2</div>
2 O" ?9 Q% z- {. y$ ~4 f </div>& @: z/ u0 M+ k' P- g
</body>
2 J- b2 _# b3 L( i: ~</html>8 G7 j ^3 B' _, G7 ^1 b
```9 H& q, L) d9 l5 w
6 F$ l. s* q- k( p## 方法三$ U& ~, Q. D4 k' T% O
' d- d7 f8 X. E, z' ?, u! A. J思路:子元素绝对定位,距离顶部 50%,左边50%,然后使用css3 `transform:translate(-50%; -50%)`
9 F$ m2 s/ a% u优点:高大上,可以在webkit内核的浏览器中使用& x- R; [- y2 c& w( i( `& t m
缺点:不支持IE9以下不支持transform属性
) b$ G" m5 Z( L* w2 d% o
1 [4 U1 e+ k( p. L```2 n7 n. O- B! ?: b
<!DOCTYPE html># f, l& j. U( ]% `% T4 a
<html lang="en">
/ w. R. m/ g$ f5 w! l. l" j<head>
. ]& g) w$ i* ` <meta charset="UTF-8">
* L& B7 g n4 y <title>未知宽高元素水平垂直居中</title> |2 L3 s. l5 F) j
</head>- A8 r! p/ ?: l
<style>
" J$ A h) v% }( Y9 M9 b% J.parent3{
: Q$ ]" h: y% p" p- @3 D! w: l/ e position: relative;
+ w6 }" J; N; }+ E6 C4 `: Y( j1 l height:300px;
8 _+ j. [+ |8 a/ v' k1 A4 p ^- o width: 300px;
6 B! {% i9 R0 i7 Q2 v8 J! A background: #FD0C70;
7 u4 }4 O# c+ O( _3 w8 F; \) |}
+ ~1 D8 C& Y# l6 V, t.parent3 .child{/ E& K0 f8 c1 b% Y2 U
position: absolute;
; K2 t" f) _: m+ L top: 50%;) d# C4 d. C7 [8 M! K6 u/ I
left: 50%;2 G, M$ n- `9 `3 C7 `$ n# F
color: #fff;
" P( t1 i6 x$ L( K, @ transform: translate(-50%, -50%);3 D3 b8 L$ W4 N! F
}8 f" V! k# }% x8 m3 N
</style>5 o& O/ R- q% p
<body>
( @& d6 j, z% S( V3 h* z<div class="parent3">0 t1 [- P, K! v& P5 p( F
<div class="child">hello world-3</div>
8 w3 ~. t$ E) n: O" S- P0 S; S </div>* Z7 x* _# X4 k7 ]- [; A v
</body>
4 |( b [* i7 Q5 W9 W8 ^- A</html>4 ^- a. g# \2 Q6 g
```
$ p I/ J3 |2 f4 u) Q5 d
" q: B! E m$ m* w* {- i7 K/ F* V## 方法四:% I/ Z0 C! S% ^+ ^' z, S
思路:使用css3 flex布局
- j) L- W5 |! U优点:简单 快捷* j8 V8 K0 ~! o. D, L
缺点:兼容不好吧,详情见:http://caniuse.com/#search=flex$ N1 u# z- C8 X0 w* i
7 p% U1 T" S7 C) \- ]7 Z+ n```
) U' B& _% s% n# D u4 ]<!DOCTYPE html>* Y% R1 d. q6 s: S
<html lang="en">! N+ K3 B3 U$ o, k9 O: p* I
<head>+ u; M4 ~* y& P5 {
<meta charset="UTF-8">
' _) ~. B% f# Y5 C. r. l <title>未知宽高元素水平垂直居中</title>" Z5 O$ H k1 r
</head>
# A: z/ _) ~$ C9 f) {9 C- ^% u! C; L<style>/ v1 C5 Q8 c/ j1 {! L/ \
.parent4{; m2 R7 z( ~# ?. \
display: flex;5 K2 a! f. N- F8 d: V
justify-content: center;* R! @2 A& Y/ ^! w
align-items: center;
8 _' @1 g2 q! a) [: K width: 300px;
$ v( _. M: {) m7 j$ w+ S height:300px;
% f4 T4 j% @4 b8 l background: #FD0C70;
5 \ b! i4 L" [# F2 K' D}6 w- K, y7 V/ _6 C) u
.parent4 .child{6 m& n1 a: Y* L
color:#fff;1 V+ } a' o. h: G' z( {
}8 c! j' p$ D5 l& Q/ M' ]$ Q
</style>
* h; K/ S( b0 b0 C<body>div> <div class="parent4">' o# i: \$ }1 O, z+ }
<div class="child">hello world-4</div>
" M! h4 F+ L6 j- p9 e </div>
$ W6 d. z H6 ?8 ^" q5 l</body>* I* d- _" F3 u8 X9 W
</html>
9 v7 F4 T1 T( m% I8 j2 C5 P```
' c6 E: z- R9 Q& N5 {7 }! [( P |
|