该用户从未签到
|
## **方法一 **. H5 X/ ]! \% ?4 S, A' K
思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中) S0 T* N+ s9 q9 h$ _: h9 M: {
优点:父元素(parent)可以动态的改变高度(table元素的特性)9 V( M& t/ i9 t2 C, d
缺点:IE8以下不支持
( z3 S' C% { B n4 q4 x3 B
( M! u) e5 \6 \3 y```
3 Y- {& m: |/ k! k: _0 Q8 i- f<!DOCTYPE html>* L" C2 `, n, p
<html lang="en">6 U/ D5 F6 z; }% @8 P
<head>
) C0 k' w% T; t( H <meta charset="UTF-8">6 \$ l6 D# y4 u
<title>未知宽高元素水平垂直居中</title>
5 D0 J" [- g. c, Y* {6 U7 \( E! p</head>
% h1 p( Z; \2 S! |: [1 D% ^<style>' _: Y: F% G5 u/ N4 m
+ R9 K$ J& |' i8 g( H) ].parent1{
; z* ]5 ^% G' y4 u# ^9 D5 I display: table;4 I, C/ H: X3 D' r( o) Q8 v
height:300px;8 m8 B% H# l9 J6 l, z
width: 300px;+ W b: }4 y3 |8 m `1 s- J3 j3 ^
background-color: #FD0C70;
+ A; s# O L$ c1 N}
" d/ Z% O1 e- |& I2 X& P.parent1 .child{
/ a6 p! x* Q/ A! }8 R$ ?& h+ }6 W display: table-cell;
- A( J1 I8 b# C7 t vertical-align: middle;
; [: t: i2 Z9 M: t text-align: center;
# J0 t6 w8 O( P3 l2 }1 n color: #fff;
: q0 L3 G+ G" f. s font-size: 16px;
7 p! X. N0 p/ u! s& u}
& P4 [) E3 P+ ?# t% Z/ S( u$ U
" N( V! v" p- p4 P4 J: V</style>0 d8 G+ m6 q7 Z% G
<body>
6 g. o* ]6 f& _; j2 g, d3 N/ ` <div class="parent1">
6 j8 U$ z0 o8 e# C; |. g' v8 r9 z <div class="child">hello world-1</div>
' ?& k6 a- B5 t( k* Y9 W% D" e </div>7 e2 B7 e0 }8 C, z: ~7 p3 v
</body>
1 H; E7 A. @ B' H' W6 ~0 S2 ^</html>! {+ E/ Z# Z' z" p2 I! r1 h
```
' S* P4 q2 f8 A## 方法二:
/ r c2 o& N( u& V3 }; O- I& b* T' y4 x% Y/ |
思路:使用一个空标签span设置他的vertical-align基准线为中间,并且让他为inline-block,宽度为0
# ]; _9 X. @; N1 t缺点:多了一个没用的空标签,`display:inline-block` IE 6 7是不支持的(添加上:`_zoom1;*display:inline`)。- P' r( k) Z) R/ B7 g' t
当然也可以使用伪元素来代替span标签,不过IE支持也不好,但这是后话了
0 G* H$ Z1 D, ^
9 o7 {5 }; o6 q, n6 S& K```5 [' L8 K% C2 p7 m/ T
<!DOCTYPE html>, Y) o8 U' _4 f V1 v3 I' ~! {( F6 c( A' F
<html lang="en">
& ?; i- Z6 W, I; x9 {, H0 i% V0 {<head>% k# D2 e0 `" w* m) O
<meta charset="UTF-8">
% G0 g3 r% K# _+ d- j8 h3 ^ <title>未知宽高元素水平垂直居中</title>
- K5 U% M$ [# L4 q" i3 C( Y& h) F- G</head>/ |- @0 u1 b* d: e9 ?) c
<style>6 m: N# i, f, Z4 S- \
.parent2{
1 r; a9 j2 y, a* ]. B height:300px;7 v) K9 V8 {% `8 R; X7 Z
width: 300px;
0 s) @3 k3 x4 O- N% @# k" ~# j$ B text-align: center;
3 g$ i; d0 y. @ background: #FD0C70;1 g3 `( _& f, P) ^
}
- N9 S# L3 B, u) `# |% G.parent2 span{! w2 R3 p- |+ C$ {/ P
display: inline-block;; \1 J: d/ S) u8 q2 f
width: 0;
' X5 n! |6 r" A$ [: c2 z: N1 e& p height: 100%;
' l7 H8 ]* d- L/ s: W3 E' U { vertical-align: middle;# b' }- u0 Q) p; ~) A2 `
zoom: 1;/*BFC*/7 B' t: `1 `. j5 T/ o- O) x
*display: inline;
- R5 W. U5 m& ?' M2 I' O& d}
$ Q4 b9 V+ Z$ r; y7 y- x.parent2 .child{0 f6 m$ @; j2 i
display: inline-block;1 q) O: ~0 H7 a- y
color: #fff;
* ^/ Q) }" k: v/ Q zoom: 1;/*BFC*/7 {' W7 q1 z* H, i
*display: inline;
' g" b. V) v! g3 W}6 y; p- x' D- v+ M
# x" {4 b9 M1 g+ R8 i- g, g
</style>0 F- r5 ~( F" |+ |0 D2 B
<body>2 D. f. c; |1 v4 t6 f- f4 V9 L& e
<div class="parent1">8 w- T1 X G& h% C% |0 M) u
<div class="child">hello world-1</div>, O7 ^( l2 V. I3 H; N
</div>9 [ Z) s9 L; q- h0 j
! Q7 n1 x8 O3 i- @; R R5 ^* ~& Z <div class="parent2">- _" u7 C, s( q
<span></span>0 X: P, X W4 E( |, R$ m$ k
<div class="child">hello world-2</div>* ?+ x+ n) Q5 @' {0 ]5 H
</div>
) f+ O W6 k1 x2 U5 H* B% F</body>9 X3 O3 I) T1 `' H/ Z0 }! v
</html>
9 Q+ O! C& h) y. S* W" ?```5 ?! v9 {1 V0 y o5 w- X" q9 H6 L, w7 z
6 c- K5 e; ^0 y* o& d
## 方法三
5 I0 _0 h! R/ U( G$ m3 a; R9 U% r
" x# \( t" ~( A2 B+ j2 E) j/ p思路:子元素绝对定位,距离顶部 50%,左边50%,然后使用css3 `transform:translate(-50%; -50%)`/ \) f: b( \: o) N
优点:高大上,可以在webkit内核的浏览器中使用5 o) O C. ?* D: Q
缺点:不支持IE9以下不支持transform属性
: U1 I2 s8 V4 ~9 n) ^5 G$ H7 T( s1 m7 k7 B7 f. F# w2 ^; i- e
```
H! y E8 P& C<!DOCTYPE html>5 f Z, {( y/ z2 ^
<html lang="en">7 C7 H! e, K3 u
<head>
# l/ [$ ~* m. H. d5 u: W c, E0 S) u <meta charset="UTF-8">4 d' t3 y- @8 l% R
<title>未知宽高元素水平垂直居中</title>* T+ u0 W( U7 K5 `
</head>0 f+ O3 [( Q. {1 }2 Y. x6 c
<style>! h/ [! M- x4 H4 D& T
.parent3{3 T! P- o/ d2 r' u
position: relative;
5 z/ i) j) K1 K4 ]3 i+ k height:300px;
6 }8 c* T" P7 ?3 W width: 300px;
7 G, M; p. k. q background: #FD0C70;) ~9 T: l$ N, g: O8 M# t ]
}, V3 U& Y6 V! w2 M
.parent3 .child{4 Z1 J, A( d) h- ?
position: absolute;7 e0 W8 x* t2 T) E5 R
top: 50%;" Y2 K2 k7 Q: ]3 ?& A+ B" E: V
left: 50%;; P$ l, M+ |6 L3 s" f3 H1 P; d
color: #fff;0 p1 R- P: {$ w% `* `
transform: translate(-50%, -50%);& M" m4 Z: m* ?8 S) }, Q$ ?" U
}3 z8 ?( k4 s! O W
</style>4 y4 p/ X# i& W7 g p0 ?
<body>% i2 N1 {5 z) x! ~. m
<div class="parent3">
. B( p' d; u, @- O, p' s% ] <div class="child">hello world-3</div>
. V0 [6 k" u0 Y. Z </div>
0 F, n" ], o/ A; E- K4 T! J</body>! K" H9 C1 i( r }% B# Q# o
</html>
' l' e2 H" z( r8 q9 W```% |; K) D% i" R+ u
9 V4 e0 [5 g( E4 c9 b/ i6 Y
## 方法四:7 J* K0 ?1 z" T( i! d
思路:使用css3 flex布局
% ]8 s6 K, H; a5 N' J- b% Y4 N优点:简单 快捷
1 {! u# ~3 Y s/ K+ T. d缺点:兼容不好吧,详情见:http://caniuse.com/#search=flex
0 K& h7 J; z0 }) w- Z6 \" W. u/ ~& n1 ]) ?5 r4 Y# ]( z8 o$ I4 P. _
```
8 t# p+ u! j) Y' q<!DOCTYPE html>
$ P, c' B; w) Z+ P3 q- P<html lang="en">
( `- g! G, t3 B* j o n! `<head>7 ~0 \8 D6 H* H/ u+ Y' {7 ~
<meta charset="UTF-8">
; x5 a2 l- e _0 p, u" F <title>未知宽高元素水平垂直居中</title>
) r- r4 J. f& j4 u% o9 ~</head>; {, u$ D8 B% A
<style>0 b5 n' i- c% J, S" u, @. R
.parent4{# S# V6 q: O1 L( W4 {1 x
display: flex;! J& b* g8 G" M+ O; T' R
justify-content: center;/ j* _5 Q( c9 b a- n0 A7 q
align-items: center;
S% S# s# Z; ]& Q/ u S* n width: 300px;
' F& `/ G' u) A7 ] height:300px;
& m) A# ]+ P5 D background: #FD0C70;- m; ]7 @* S8 z5 g
}
. {" D- I1 Y2 _& S% w.parent4 .child{
) m6 x; o6 H! r- c+ e2 \: Z- H color:#fff;- z2 g( _3 U* F$ k6 C3 @5 z
}& q$ O& d1 w( }# S1 ^* \" y) C3 D
</style>5 |7 X7 Q6 K$ o& x$ q
<body>div> <div class="parent4">$ F/ A4 T8 L8 T2 g/ e! J) t
<div class="child">hello world-4</div>
; l, t3 Z, e$ ]0 ]( u </div>
! l) M; J9 a6 N</body>
& g5 M, I* H$ A g2 F* W</html>
/ e. w" @' f3 y t$ {, |```
% k o# e! x' d# V, H |
|