正确的使用margin:0 auto与body{text-align:center;}实现元素居中

body{text-align:center}与margin:0 auto的异同?这是一个对齐上的迷惑,刚开始的时候或许大家对它们都不是很理解。我们通过下面的一些小例子来了解他们到底有什么区别,应该在什么样的情形下正确的使用body{text-align:center}与margin:0 auto。我们首先了解一下它们的基本概念:
% _* m4 b* ~/ {: L8 P * B& M1 }, F% v) U: o
  text-align是用于设置或对象中文本的对齐方式。一般情况下我们设置文本对齐方式的时候需要用此属性进行设置,如:
. j' j* w0 @5 q& w0 _+ L 2 B- Y& A( X. d
Example Source Code - K; G( _& F: [: k1 J

* C. G5 y/ n  j; @! h1 A) }  div { text-align: left; }  表示文本居左对齐。   i& J% B2 x- z, L8 e

, h- L  F9 `! m1 c- S* }- Y' @
) i3 I! Q" }  w. ^8 F  ?9 t. I; ^  margin是设置对象四边的外延边距,被称为外补丁或外边距。如:
) k  V# p5 T: U0 Y0 i. c1 ?, ` + J3 c0 i9 C6 z% g* Z$ E0 L
Example Source Code
: K, _" S& @, b, i5 `
% }7 N, M; l+ r, Y7 m  div { margin: 20px 10px 30px 40px; }
5 E. y* S; u- P0 Q0 O
9 t0 z: B: S* T/ j; L+ c( ?+ Q  表示对象外边距,顶20px、右10px、下30px、左40px。 * @: h' Z* k" F* R( Q) Y8 A
! P. g7 Q% c( `7 Z( m8 v% T
  我们设置某个对象水平方向居中的时候,常常将左右的外边距设置为auto来实现。如:
. K. @0 r: {) l0 q$ Y; A & a5 z8 p8 \6 [2 C5 e7 d9 }
Example Source Code
9 t: u) C; I9 y! |
! q; u2 o7 e( ]/ d( rdiv { margin: 0 auto; } - u2 V& ~0 G$ u: }" t8 @; X

0 B5 L7 z5 }  H  现在的问题是:body{text-align:center}与margin:0 auto的异同。text-align:center设置为文本或img标签等一些内联对象(或与之类似的元素)的居中。margin:0 auto是设置块元素(或与之类似的元素)的居中。但这两个属性IE与FF的理解也有所不同。
9 k% d- P$ |# q  v; y& ^
* G4 U) `. F0 k2 z% K' k2 p   我们设置一个段落P,在段落内存在一个图片img标签。 9 u8 a8 }( V) o- j2 i; O6 R
9 J  A# @) T9 q3 b; @4 U) W, X1 }
  我们设置body{text-align:center;}。得到下面的图片:
6 x2 `3 D( E' M8 g5 }: j! K ) a$ E" _. O# h8 D' L+ N5 E; N

5 i7 T2 A8 e; Q% Q, `

7 F# T5 A8 b. l1 B. e9 b3 t

 

 

在IE中,段落P,图片img同时实现了居中对齐,也就是说text-align:center;同时作用于元素p与元素img。
& h: J5 c# f6 X3 Q* D( Q* j
- O0 p% g/ ?3 N- B$ F  在FF中,段落P,没有能实现居中对齐,而图片img实现了居中对齐,也就是说text-align:center;作用于img标签,而段落p标签没有起到居中的作用。! W0 e$ L: |9 U4 u! u

% f( Z2 y3 [% @, l/ m, y, |  我们设置段落 p {margin:0 auto;}。得到下面的图片:6 p6 U/ r: N, Z" h+ Q+ l5 y/ c
, G2 z  P! t& d2 F3 l4 J4 \
$ w" K2 w: j7 P, n4 ^

) p! d$ w+ ?0 Q# E) E& V  O

  l$ l* t+ k$ S; ~
5 b' O$ C7 T1 n
  我们发现在IE与FF中,段落P均实现了居中对齐。图片img由于不是作用对象,所以不会居中对齐。7 f- E' S  U1 g% a, |

# R/ W. |, d# v; \. _  有三种情况需要说明:
) H% i  c9 V4 S' F* M+ g3 |" H1 o
3 v& z/ s0 x; l  一、有朋友在操作的时候,将margin:0 auto;的选择器混淆了,应该是作用对象,如div,p,而不是body。如果设置:body { margin:0 auto; }将不会达到任何效果,除非你定义body的宽度,那将会让body内的元素产生位置变化。如我们设置body宽度为500px。对p段落不作任何设置,我们最大化窗口将会看到段落并非处于窗口的最左上角。6 Y4 m7 @) t0 Q8 _# W
8 M+ Y* G0 s. P5 Y$ H
  二,我们设置段落 p {text-align:center;} 将要实现的并不是段落本身的对齐方式,而是段落内元素居中对齐。
4 g5 m. y: `: O- a5 F! X  ~) M6 q6 t( P" m* w% l
  三,我们设置图片标签img {margin:0 auto;} ,我们就犯了一个小错误,img类于内联对象,不可以设置图片img标签的margin属性,如果你一定想要设置,那么首先要将它的属性转变为块元素,如下面的代码:img {display:block; margin:0 auto;}

 

 

有朋友产生疑问了,那该如何使用呢?说说我的建议:
8 M6 J7 w0 E# L% M
. P4 j4 }0 S7 Z; P  如果页面中的元素,均位于div标签或其它块元素内,进行了合理的嵌套,我们不必设置body{text-align:center}。只需要设置相应的div元素margin:0 auto;即可。如上面的代码所讲述,页面中的元素均位于段落p标签中,只需要将段落居中即可。
& I7 ^" U4 Y; p/ e$ m9 k9 F6 o- G/ J4 a8 ^/ H0 L) x6 p
  如果页面中的元素,有一部分不是在div标签或其它块元素内,我们需要设置body{text-align:center}。但也会遇到问题,这样设置以后,大部分内联元素,都居中对齐了,包括页面中其它的一些文本,还需要进行相应的调整才能适应设计的需要。如:我们设置body内有一个段落P,在段落内有一个图片img及一段文本,在body内还存在一个独立的图片img,看下面的图片:
+ r0 s/ I; h. h4 T; X
$ [( n5 ^- O. \: }  D

& Q: e$ r" X/ p' [" ^  v( Z' B

; C7 Y+ R8 ~  i$ {# U  我们实现了段落p的居中,同时也让位于段落外的图片实现了居中,但段落中的图片与文本居中对齐了。如下是运行代码:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  O4 Q; I, z/ i* z- T4 Y; p<html xmlns="http://www.w3.org/1999/xhtml">
) e7 P2 c5 r6 j4 Y2 H- T1 l<head>0 b! Y4 h) [- k& Y6 g  [; N
< meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
$ @- y$ m3 g' i" d4 T7 b<title>www.52css.com</title>
. l. P7 S9 [& L$ A" X7 ^' {7 |<style type="text/css">- q5 }# [2 T8 {/ n
body {
* H) E7 X+ M9 S% x8 i        text-align:center;
0 g9 F% x9 s9 c6 u3 @1 w2 f}
- d+ c* b$ C6 O- pp {
# B$ k" [8 b5 {. l* ^, g. Y        margin:0 auto;# \, d  k5 m, M# [- D
        width:300px;
, }; K# c4 ?0 h  u        background:#06f; 8 `% g. Y, f1 K
}0 B: X$ [! }5 v: S% \1 Z
img {  @4 ?$ n7 |. k+ s* _

$ e+ }7 u/ w( [}, U, V4 `) B' x  Q) ?; s
< /style>
/ o, ]5 E- N. B1 E9 P$ O</head>
  [: d5 q4 s# R+ V<body>9 L. N% h0 H1 P  z
< p>1 a9 q  e0 \7 q2 c
< img src="http://www.52css.com/skins/logo3.gif" alt="52CSS.com - CSS Web Design" width="200" height="90" style="vertical-align:top;" />
# ]  x; D% V0 @4 o: L<br />6 m: r/ \9 f5 f& T
52CSS.com是一个专业的CSS学习站点,内容丰富并且保持每天更新,我们建立了很多QQ群供网友们互动讨论学习,52CSS.com是学习开发符合WEB标准的网页及网站重构的首选站点。
/ J4 }$ m0 O. S</p>4 b1 D  r( h+ ^: Q6 {; T$ u1 J
< br />, y( ^: J0 l; A7 ?' G6 A+ m; K9 K
< img src="http://www.52css.com/skins/logo3.gif" alt="52CSS.com - CSS Web Design" width="200" height="90" style="vertical-align:top;" />
0 Y6 D6 x; g- h. N2 j8 Z9 M</body>
3 ?3 }8 [" l. [: {% S6 W* f</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值