该用户从未签到
|
## **方法一 **
- O# e/ k) `$ {, A6 a( C" k3 A思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中% Z: k$ ~, g- {+ O% w) _( _5 q
优点:父元素(parent)可以动态的改变高度(table元素的特性), t ~ o2 C6 ?+ _( s& z& W
缺点:IE8以下不支持) o* V. l( `6 R$ t: Z& S- K/ |9 b
9 D% s4 r% q6 H1 ~```( [! v. U7 n3 M/ F
<!DOCTYPE html>. d* `7 T( P" T- k& z+ L
<html lang="en">: `$ {( |1 p$ H, ]2 P
<head>
0 {! v8 e |. S: r" x3 h <meta charset="UTF-8">
6 V0 g" J0 U' h <title>未知宽高元素水平垂直居中</title>
7 M7 Z% V+ f8 M! _; V( `+ R9 }</head>$ [# ] d; V2 G& c
<style>
1 ] f( t* H* s2 C1 Y) C4 S4 D. ?+ |- t! [! a/ p1 y% L
.parent1{
4 b" r/ S9 a( S5 b. Q3 ^+ P S display: table;3 E3 S: k+ ^& c
height:300px;; ]$ u3 O% N' F: m& m( V
width: 300px;
4 U5 _7 W4 g; \7 e background-color: #FD0C70;
$ e3 O8 \, L; F. A" \/ P V; @}
6 p. n: Z. D, l5 j.parent1 .child{/ D" Q( B+ i( Y1 [4 n
display: table-cell;3 j9 E5 X/ \6 B! s8 V- }5 m
vertical-align: middle;
8 r8 Q# x/ m' Q6 |2 S, C/ j text-align: center;
1 J; m8 _5 H; v; V- Q S5 b color: #fff;6 G# e b" x, }
font-size: 16px;" S% C' Y/ s$ G0 K5 S8 s; I r+ f
}, ?. Z! B" L# e3 u: A) z+ U
{/ ]: B9 q% f f9 ^, e</style> W) C: B. {6 W$ I$ J
<body>
) \4 S+ z6 h' A: q6 D <div class="parent1">
+ O, y6 I; B n6 c" O <div class="child">hello world-1</div>
4 P( J! n5 A, `1 a' e5 b </div>
/ T" g/ C, K) J& e+ e' t</body>
- r- M" F' V Y ^7 _" X* l</html>/ W0 M' o. Y; R& Y# B
```! z0 q( \; E. q
## 方法二:. O+ Q- L+ V% c! |/ Q
0 w- _) \: B. r' R2 t" D: ^
思路:使用一个空标签span设置他的vertical-align基准线为中间,并且让他为inline-block,宽度为0
" P% G& x/ b. F+ z- Q. \( m$ P缺点:多了一个没用的空标签,`display:inline-block` IE 6 7是不支持的(添加上:`_zoom1;*display:inline`)。- O# v. j( ^' ]7 p) r; Z
当然也可以使用伪元素来代替span标签,不过IE支持也不好,但这是后话了
& A# b, |- C+ [$ Q' T; j8 I, O9 D# L2 e/ M- }; q
```
2 k4 e# O# ]7 x& _( A" t<!DOCTYPE html>; h2 `6 R- F6 n, B
<html lang="en">
! F; \: R; }" Y5 P<head>
, @0 {' T! O& `* u' X' I <meta charset="UTF-8">; Y7 [9 S( m" f$ ]- H- M [& X
<title>未知宽高元素水平垂直居中</title>
$ j; q* _, k- ]) I" L& @</head>
?4 h2 S5 N5 _4 V3 E7 M+ S<style>
) }2 ^' c6 Z0 b" Q5 j; d.parent2{1 ?7 Y1 n& w. C" J! ?
height:300px; r }& t3 i6 Y/ }* p, j( }/ R9 k0 S- n9 w
width: 300px;+ [: a* P' g( l, G! L1 b
text-align: center;6 R0 V) |% x i4 Z! D3 P+ H4 M
background: #FD0C70;
0 w' ^/ ~4 }/ |0 X$ L8 ~9 Z6 }, k}
' {- G, n; \# Q( T.parent2 span{/ A+ `- @6 k8 h: k# Q3 f
display: inline-block;;
7 ~/ Z- Q) B" X! P3 P$ F8 Q3 Y width: 0;/ B l$ T: L$ W6 C! n) q
height: 100%;0 y, _& `/ U! C: e8 |. Z
vertical-align: middle;
( M8 h4 w$ C! d U1 E7 o9 d5 t zoom: 1;/*BFC*/
; ~. G* N+ f! s& p5 ?+ o W *display: inline;4 W$ `/ Q: l* R2 _9 G' T# S9 @/ {6 S# S
}
! L6 h$ M- q: e# Q.parent2 .child{9 ]; y3 Z5 R& ~1 Y6 T% u
display: inline-block;
) q$ Y. S- v( `! g- T$ ^) }# l color: #fff;
3 h/ ~. ^/ [; |9 J zoom: 1;/*BFC*/
: m7 g v8 \- q5 S% B *display: inline;
/ K; X, s1 z. r$ @' E7 N$ A$ R8 ^}; |! ?- B' ^; _( l
8 o) t( B$ Q- d" L' S2 U
</style>2 V' s9 v) _+ @9 d- c: G: W4 I# k
<body>4 j% J4 J. C6 @9 r$ i
<div class="parent1">
# g1 ^$ `$ y' j) ^+ b* V: x2 v <div class="child">hello world-1</div>
# V1 m# u; x( K- Q </div>
- x+ n* G7 X. @& ]* _- N) X
0 `: d) ^% h1 ] <div class="parent2">
+ ?! ^6 D- v4 Z5 f* x( _) \ <span></span>
0 H) y( Q# O. D3 A: j <div class="child">hello world-2</div>8 M0 Z& o* n* R+ c7 [0 _* R
</div>- D. y: J5 d0 S2 T
</body>: L& d S) l9 J1 A$ x9 L- Y! _. f! S, p
</html>
+ [( ^$ j9 V8 h: J5 i5 P& {```
0 b0 v, ]* y* d1 ]* r# S- u e/ t+ g- m
## 方法三7 Q% [8 }- V1 l. c8 f
3 n1 c: D) p4 _- M8 ], d/ \思路:子元素绝对定位,距离顶部 50%,左边50%,然后使用css3 `transform:translate(-50%; -50%)`, B- G! R5 C$ x: x
优点:高大上,可以在webkit内核的浏览器中使用/ u- l/ |% z7 H4 B, n! w
缺点:不支持IE9以下不支持transform属性2 \' n! j# {) D1 @) ]8 y
3 r7 z+ A+ v- {& v4 g. H! G```
$ F8 r f$ ^3 w7 z8 F<!DOCTYPE html>+ J6 W) w# N! Y# C) ~0 U
<html lang="en">9 q2 D8 J U$ d) I1 k
<head>
* O, ?1 N4 k- F G, Y6 Y <meta charset="UTF-8">
7 l* n7 b) T. R. _' R) l <title>未知宽高元素水平垂直居中</title>. N; I! ^6 y0 l; K$ ^
</head>- @- R* A; {! y6 _1 I
<style>( s; z: z) Z' Z
.parent3{ R D/ g2 a* c% U
position: relative;% S X$ I) H& \' E" Z8 l2 L
height:300px;
5 Q( f* a% x: |$ @/ t% V2 s; q width: 300px;. G- v4 F$ B! M G) G
background: #FD0C70;
; R) x$ Y- J. E2 T7 v}
+ w. K% }9 \; }3 D+ I) S.parent3 .child{9 u$ O+ E7 H' t" \4 k; U
position: absolute;
7 F p# h- N6 _9 F top: 50%;; t1 a3 M5 Y* o
left: 50%;* ^, t1 b. L0 h# ^
color: #fff;
6 i$ P* h8 `! s transform: translate(-50%, -50%);; _* w- b6 y- o/ w( B/ m' C S
}5 [! A' {0 C( M8 o0 f
</style>' b* O, W: |( p8 W7 I
<body>
( {2 U' f$ M4 _1 u9 e<div class="parent3">
# @- v. b0 n: M3 \7 t <div class="child">hello world-3</div>
: ~+ X; q+ \$ ]3 u. D </div>' A4 ]1 S) [9 N/ D0 K
</body>
) `- i! B2 N7 U; B</html>
; C: f3 e6 C( r( P: n! [/ \```' h( V2 { {$ X, ?! X5 _# K
# k" |5 T, Z' q$ m8 r2 a0 T## 方法四: s- r! C' K- B. q$ s2 ]* H
思路:使用css3 flex布局0 f( B, Z* u9 }) K* I v
优点:简单 快捷: k1 A; M1 D$ p: m2 G# `" W! W3 E
缺点:兼容不好吧,详情见:http://caniuse.com/#search=flex: k, h2 f' ]$ t( l- ~3 y
/ v+ K) A. l' w' T
```
! Z" v! B; l5 X: a* S: C+ K; `3 G+ K<!DOCTYPE html>6 o" S1 }( g; @
<html lang="en">
2 P* `: W- p+ J {5 {% R5 k2 V( q& ?<head>% u; j1 X& r1 b; ?' d
<meta charset="UTF-8">& |; V2 \" Z4 a/ N4 Q6 c
<title>未知宽高元素水平垂直居中</title>% H& \9 I3 b3 L2 h5 W. [
</head>
1 u- G R3 U/ q( n4 k5 f0 L3 w, e<style>
6 ]/ g" @5 g% F6 I" {7 C3 K, M.parent4{
: {4 p7 Y8 s! k display: flex;$ Y2 f6 [: K4 c
justify-content: center;
6 V' ~1 b$ d" \, Z# e align-items: center;
( |% Y @2 s( w7 h0 e7 T& f* P8 E width: 300px;
- Y6 J3 X5 M! s. ~* U height:300px;, h. q! @ R# [9 C
background: #FD0C70;8 Z" I5 x7 c+ y7 l3 J! v
}! g- x, v# ]; p2 b. ^1 p) B
.parent4 .child{
+ e7 z; d, y8 N: h3 u color:#fff;
% L- g* q4 l4 {! j( M% C( ^}9 R* A" k) ^+ ?+ ]
</style>
' H ^' j8 Q* a<body>div> <div class="parent4">
' i" a" M/ e% m9 u3 Z' ?& H <div class="child">hello world-4</div>7 m; x$ v( b" J; F' V. ^
</div>
/ e1 V* i* q8 H! p</body>: u0 D# d2 L0 o. m. T
</html>2 W6 y! g7 m6 M+ x
```
$ I# @% P) u8 Z6 P6 \- K6 o7 z1 S |
|