我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > CSS未知宽高元素水平垂直居中
总共48086条微博

动态微博

查看: 1119|回复: 1

CSS未知宽高元素水平垂直居中

[复制链接]

10

主题

3

听众

1289

金钱

五袋长老

该用户从未签到

跳转到指定楼层
楼主
发表于 2016-03-17 00:28:50 |只看该作者 |倒序浏览
## **方法一 **
. \/ Y' s% C3 z3 [! q* M8 o思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中7 O! Z# j& x9 m/ @: h
优点:父元素(parent)可以动态的改变高度(table元素的特性)8 |. }" U" O; @9 K2 i2 t$ h
缺点:IE8以下不支持
* t/ X0 z  _9 c1 _$ _( n1 r/ v' k8 J) @
```
% |: m  A- T4 n: n, z/ @* n8 f<!DOCTYPE html>
" [# ]- k6 `0 y. y# _3 [. o; t<html lang="en">
3 j7 T2 k& \( c+ x: A7 M<head>7 n2 w/ F9 n: a" c- ]$ E9 r9 s
    <meta charset="UTF-8">- ?  a# v' d3 D0 n$ R
    <title>未知宽高元素水平垂直居中</title>" F: k3 B0 P0 T- y3 G# N
</head>$ k& G( U3 j4 j1 M* p; T7 A" Q
<style>
8 `( _7 g' b* R9 C. R3 S
3 M  Q. M3 F0 z5 N* O. d.parent1{, x$ }6 B. t6 R( b1 _
    display: table;
0 E5 m- z2 E8 W% I/ I  E) i8 r    height:300px;
( M$ Z0 n& g4 b" b2 U! U* e0 g    width: 300px;. ^8 m/ I  b( e& V/ z/ t2 D
    background-color: #FD0C70;: P) {- ^- M$ n9 U
}) i" ]) m& b4 R2 G( g( {+ A8 v* q
.parent1 .child{; ]" Q8 e7 M1 P" _) ?3 w- w
    display: table-cell;& ?, C% q# Q- _7 t9 Q4 L' u0 n
    vertical-align: middle;
4 d4 V6 Q4 W4 E. b% W6 i    text-align: center;9 A4 F8 M7 V8 h
    color: #fff;0 g# R- I1 k, y' C
    font-size: 16px;
- F& ^5 n8 v4 z2 O* Y- q5 R3 `' Q}
" O; g0 X3 a9 M' v4 `6 O8 n. \7 Z( M% b' a# K- H
</style>0 @) j9 T* G2 c( ~. s5 w
<body>0 t9 ~$ |4 I1 A$ {- {5 k2 P/ q! N8 l
    <div class="parent1">
; ?) _# G) C% }2 X8 h+ o% ^! u9 ^        <div class="child">hello world-1</div>, J! C! F  K3 d  `  n
    </div>
6 @- h% O. }8 P+ Q  V* e8 g2 L</body>4 o7 f) C8 Y7 h7 B
</html>
- O( U# n: y& ]9 C7 c```
" i+ g1 w2 N1 }: k## 方法二:
& m- _( U! s$ ]2 C- e% G. b' s* Z' u* n* n
思路:使用一个空标签span设置他的vertical-align基准线为中间,并且让他为inline-block,宽度为0
$ q8 d  ^9 e! D缺点:多了一个没用的空标签,`display:inline-block` IE 6 7是不支持的(添加上:`_zoom1;*display:inline`)。
6 Q, @/ E0 o7 z1 G! G# W) l) J当然也可以使用伪元素来代替span标签,不过IE支持也不好,但这是后话了
( W$ t+ Z" m* Y' V. |: Q  V, j! @6 k! G* V6 O
```
  u3 k) O& z0 q<!DOCTYPE html>/ r* Y& F/ E, [1 @2 ^; l/ C8 c7 m
<html lang="en">
# k: _* _$ t7 s  F+ J' k<head># M) R0 @+ ?4 r
    <meta charset="UTF-8">! U# [/ k' g# r+ R/ m
    <title>未知宽高元素水平垂直居中</title>& W1 p' `9 x( j( Y
</head># F* C- I% P" @& ^
<style>9 h2 G3 [3 W# o  G; o2 S7 w. j; T
.parent2{
# x& b$ e. n8 |5 m4 k    height:300px;
! v, l# B% p* ^  a4 O    width: 300px;
0 u. k0 \" v1 D4 T% g    text-align: center;
: k5 \1 W4 G6 A6 b% L" c  F    background: #FD0C70;
7 ?7 Q, q/ ?0 V}; q& [$ Q- g" L: L9 S
.parent2 span{
5 s2 R6 x9 x2 _: M    display: inline-block;;
9 {3 G+ k) O- J6 s0 Q( _    width: 0;
5 ]8 K8 v: K! @$ b, i" F    height: 100%;
' T$ O# E- ?& p  w9 A    vertical-align: middle;8 h  r) t# _/ Z8 Q
    zoom: 1;/*BFC*/
1 g  g" M, P) K    *display: inline;
  V& ]  F. i$ N7 `}" p  }/ e; N1 e7 b
.parent2 .child{) {* _+ H* x0 c
    display: inline-block;4 o5 u9 u- }: T" G6 r6 _2 G
    color: #fff;; |0 ?! B' k" `
    zoom: 1;/*BFC*/( I" m! s( z8 e, ^8 o; C( p) P
    *display: inline;
$ q- I( s  ^, L7 z, q; G}. n6 Z2 A+ i/ E5 U) M2 N; g% U; A

: F2 @4 b& K7 U; w</style>
4 m" W" B9 D% `9 e, v( y+ Y<body>3 g9 M5 N4 G% b$ _, d1 e# W
    <div class="parent1">
/ f7 |% T- i3 n  Y; a0 ~        <div class="child">hello world-1</div>
. R7 {! l( Q4 I! m; u- G/ V    </div>
/ H/ y/ B2 [. R
6 V7 i  v# y) Q    <div class="parent2">
$ K$ Z  z* B% I3 u# M7 _        <span></span>
% T" P: n2 `& E        <div class="child">hello world-2</div>
* w# f6 X' a. V    </div>
3 H6 ]7 Z6 ~2 r+ n8 G+ f' S3 j</body>$ d- E/ S1 `) S7 a: E& ~- g# k
</html>
1 [9 l$ I/ M/ F```. C, _- `3 s3 O5 y6 R. g& r

  X# i- f& J# r## 方法三
; }% J$ S% [0 V, V5 r5 E! v) u2 s; P/ G0 r
思路:子元素绝对定位,距离顶部 50%,左边50%,然后使用css3 `transform:translate(-50%; -50%)`
5 T1 V; C/ R2 g; f$ e" ^1 {8 O优点:高大上,可以在webkit内核的浏览器中使用
! n6 ]6 E9 `) C  w( D4 k4 @缺点:不支持IE9以下不支持transform属性
( W! X/ G3 R7 s' k
/ v% e% e) n3 R6 H```
% T! e5 L5 P0 S<!DOCTYPE html>  [/ U/ E$ W/ a- j" b# e* ~2 J
<html lang="en">
$ ~  {$ E5 \  E<head>
* u. e; Z6 P4 V; C    <meta charset="UTF-8">
- |/ s* P  k1 h9 b, `    <title>未知宽高元素水平垂直居中</title>. L. r) X3 k. C6 g* {, {3 K1 d
</head># I' N* }% d0 w+ @. g
<style>1 p4 v0 N) O1 h* g" J- M
.parent3{, ^4 G/ s& V  ?6 O1 `. h; ]
    position: relative;
1 H& y/ b8 x2 x9 Y! c3 v    height:300px;1 H1 P0 W; B: x/ B. C  a
    width: 300px;
8 h+ y2 ?! }  x4 z    background: #FD0C70;+ o1 m0 l( A8 i3 {
}  x' y( O2 z# ?; C
.parent3 .child{; b; R* f- ~1 D: q
    position: absolute;
/ |& P  ]* J6 G+ G! K    top: 50%;
. o9 Z- H! m* m* v5 W+ \1 N    left: 50%;
$ w) q5 `- D( G& B* @: e    color: #fff;+ \4 F$ s0 L: j4 F
    transform: translate(-50%, -50%);0 t. {4 s& l' Q) o  x1 `. R8 B
}
/ X. [' X+ Z7 y$ H+ N& g</style>$ v; |( c$ E1 T: }0 D
<body>
7 S+ y' y, O- ]! i& T/ {3 b* T) y<div class="parent3">
  J, v# H' r; R+ u        <div class="child">hello world-3</div>
* I* B1 r) o# r) c% ~. v    </div>
+ E4 J9 o0 H7 |: G</body>7 @  R; Z9 p% L) F; A; v3 y; l9 v
</html># U6 P3 H* q6 g
```
/ I, V1 I1 F- C' e1 P. p" B5 a$ R0 e; J, c/ N
## 方法四:
; G% Z6 H+ \  N( J思路:使用css3 flex布局6 U- Q8 p1 e  j: H" C/ d
优点:简单 快捷
. O. g3 I: \4 ~% Q% ?缺点:兼容不好吧,详情见:http://caniuse.com/#search=flex( P5 U/ n% o+ t
1 M- q7 q* |+ ~
```
5 r6 U5 I: d, T" }7 F, J<!DOCTYPE html>
/ V! W+ i# \+ B, N2 O4 }' _8 n8 E<html lang="en">
* E) f# g$ K1 {2 T! z<head>6 N( V) L% X7 i& F
    <meta charset="UTF-8">: E: ~9 \8 c6 W* u% S
    <title>未知宽高元素水平垂直居中</title>+ ^# F% s. @  I  q& J, k
</head>
0 W- t, H5 K) X% B6 I<style>
- ]6 a! b! P) v- V* Z9 J.parent4{5 n. f; B7 r1 `) D3 j( C* M
    display: flex;
! C9 \, ~7 U0 k# j    justify-content: center;
/ z0 H/ n& I) v. L& D) R* U    align-items: center;
% L7 U& o+ |1 I    width: 300px;
6 z! o9 I: [0 _  t3 Z    height:300px;
- m. w7 q( U& H) }3 L" g/ u    background: #FD0C70;
: w$ R& h! V8 a+ E) q# w: I}
# Q/ q. e( A* Q- A4 b.parent4 .child{' [8 m6 P/ W) [. G7 N+ f
    color:#fff;$ c  T% @4 }; [/ `/ ~$ {0 }
}
8 B3 _6 u! `3 F3 e</style>4 Z; v- A0 o1 d5 q$ W
<body>div> <div class="parent4">6 G  q' P( L8 p/ g0 D
        <div class="child">hello world-4</div>
7 C) i9 c1 `/ l% P4 f    </div>5 _: ]: O+ U0 d6 {  S
</body>) A& I; z9 U. m; v
</html>
% M1 J. u3 _1 _( ]```& Q" _7 u' q5 f) x& h2 K7 ~- }

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表