css元素定位
1. position:static|无定位' p7 {! B2 D( ~9 g) f+ Y3 w$ y
position:static是所有元素定位的默认值, 一般不用注明,除非有需要取消继承的别的定位1 F5 n, J$ a) y# C
' {4 O% ]/ v/ H# n1 m* }example:
% l7 Y* `" q) Z. K a, e#div-1 {
( [0 O1 n f5 X( c9 B Z1 G position:static;
* |# e; d/ }: J}
* G4 }" c" c/ G) P7 T# u7 E( Z. l' W/ h. d1 N
2. position:relative|相对定位
: g4 |' D5 n- S8 @6 Z0 b% H- i使用position:relative,就需要top,bottom,left,right4个属性来配合,确定元素的位置。) w' c* f) C: z9 W# h1 {1 J
如果要让div-1层向下移动20px,左移40px:' y8 e& `5 f" i- u* O1 X% t6 `" |# x
3 ^# G" u D8 q/ |% L+ V
example:) F0 Z4 Q( j7 w: M5 t
#div-1 {* S" V5 l6 n0 b* n. O/ V
position:relative; f8 m7 r8 T3 C- d0 g( r
top:20px;3 X1 H ], c" z- v9 D; ]/ O, G
left:40px;
! Y0 M* r9 A5 L* T}% n! R9 Q0 j% w- \
_! p6 W" C* Q1 u
如果用到相对定位,紧随他的层divafter是不会出现在div-1的下方,而是和div-1在同一个高度出现。" q2 |" s; h' y0 B
5 m$ D( W+ Q+ O8 O, \; n
3 F1 O# M: I7 |' n可见, position:relative;并不是很好用。
$ i3 Y8 E! H% |; u
; P5 T* w: Q- d+ G5 A3. position:absolute|绝对定位
! q B$ v* j7 y+ l使用position:absolute;,能够很准确的将元素移动到你想要的位置,让我将 div-1a 移动到页面的右上角:
! F* B s& p# x* P' F# [ \9 o8 O. n6 j4 |6 w
example:& B+ L; V1 p7 q# e/ h7 H& q
#div-1a { i' t9 C& B& j& e! C2 P
position:absolute;
, M# q: c& U; _$ } top:0;
& v" T$ Z' x3 l2 G o, s right:0;
* y% x0 ^0 ]) C width:200px;! W' s- w, Q, ]4 u% A# R
}: J7 `, _! X0 c
3 e/ V- V9 P/ `
使用绝对定位的div-1a层前面的或者后面的层会认为这个层并不存在,丝毫不影响到他们。所以position:absolute;用于将一个元素放到固定的位置很好用,但是如果需要div-1a层相对于附近的层来确定位置就不要实现了。5 c# w" I1 @. \9 N* n# n1 B
*这里有个Win IE的bug需要提到,就是如果为绝对定位的元素定义一个相对的度,那么在IE下它的宽度取决于父元素的宽度而不是整个页面的宽度。& i& e% w2 X/ G6 i& Y
( l+ E' d: D% Q
4. position:relative + position:absolute|绝对定位+相对定位
7 O; n( h/ a3 V# @9 v如果给父元素(div-1)定义为position:relative;子元素(div-1a)定义为position:absolute,那么子元素(div-1a)的位置将相对于父元素(div-1),而不是整个页面。
/ w( f2 v, l3 ~, }让div-1a定位于div-1的右上角:7 G/ o% I* Q% X4 ]
! ~+ L# x A a7 ?0 y4 i& Mexample:/ D8 I- p! B1 `! d: R- f3 _3 ]
<div id="div-1">
6 G1 X! _1 G3 W3 w <div id="div-1a">8 X* K3 @8 Q& _1 {: e& r
this is div-1a element.4 ?8 x9 [3 N3 N" k" S
</div>
0 D8 k! H) l- c2 w tthis is div-1 element. R* ]$ \5 R3 V- _, ]: r- ?
</div>
8 L t& t8 H4 z1 l& ^4 ]6 N% e& i1 S/ A$ d0 d5 R$ k
#div-1 {+ q; N& h4 U9 j) C/ X
position:relative;* j# G+ N& f% Y |
}
5 K: J6 m6 _2 |#div-1a {
7 j, h$ N( j% p& b8 @ position:absolute;
+ R, J$ B9 J* V8 z top:0;9 Z- D8 y$ Z# K. z
right:0;+ E' Q2 E/ u+ d2 E) D, S2 J |
width:200px;
. a! k$ ~ x P' j: t% |' ^}* ~% l# C9 M7 x" u: Q1 z
) t5 T0 g, k+ I0 ?- q" i7 ^0 n. e
2 l# i* m0 o2 U1 F% |& s1 q$ ^, S
5. two column layout|两列布局
* i% |& B, e6 U' T让我们实践position:relative + position:absolute的理论,实现两列布局。$ r4 R. {0 t$ q! [4 x8 I7 [
9 ^2 A/ y8 t( B, y2 gexample:/ U% L/ }' g. O; F9 V: I
<div id="div-1">. f7 i+ L; D; _. J R4 @
<div id="div-1a">this is the column-one</div>8 v: S# S( h7 @% O7 w q; _. q+ C0 ]
<div id="div-1b">this is the column-two</div>
" i+ F) [. u5 o! E1 U4 t- S</div>: D# d% k! O# ~
( ^( h) v: @2 x# ~7 Z! U
#div-1 {
+ }8 l5 ~' L' a/ m/ Z( g8 `2 y2 l* V& { position:relative;/*父元素相对定位*/! z; U7 V' D4 J1 V9 Z
}
, K7 V, m' I. j* a/ \#div-1a {
) E# }( X7 e- e& U; p position:absolute;/*子元素绝对定位*/- b8 ]: C% B% u! A. _
top:0;& r7 f& O4 y. A$ U4 W
right:0;
8 ~8 O( j8 J. x9 M- ~- k width:200px;
( u3 H2 k) g3 U; L0 C4 O2 B}
* q, ]% b9 D" @ F' o" s#div-1b {0 }: I/ _. _- ~2 ?' D
position:absolute;/*子元素绝对定位*/
& i( C4 F, K9 ~! t/ {2 E7 i top:0;
5 a; ^# |; }* f' @* z left:0;
7 q5 }' ?5 O1 L; ^' x" \7 g; ^ width:200px;5 a" |2 \+ g1 @4 |# a! u3 M* M
}' g2 }8 n* R) I) z$ [
- R) `, I/ U% i4 D/ o7 j
注意,在这个例子中会发现父元素的高度不会随着子元素的告诉变化,所以如果父元素的背景和边框需要定义一个足够高的高度才能显示出来。+ s6 u3 Q$ v: T) H5 _# t) W' v2 t
% u1 Q( \4 T# m3 @. L( J
6.float|浮动对齐
3 N9 p. T1 }' c" g. }$ ]使用float定位一个元素有float:left;&float:right;两种值。这种定位只能在水平坐标定位,不能在垂直坐标定位。而且让下面的元素浮动环绕在它的左边或者右边。
7 d) J% Y- d! Q6 f& G P5 Z9 j" t9 y) E" Z) I5 `" V9 o
example:3 E m* N: F) R! ]; g
#div-1a {
/ K% U* h8 ~& e' j float:left;+ v; H: C! J4 o0 b
width:200px;
$ r6 x' m6 \& o* ]: L, I7 j}$ e# F3 i+ Z/ [1 s/ z; v2 e
g2 e! N( P# {8 v7.make two clumn with float|浮动实现两列布局8 N* w# n( f0 q
如果让一个元素float:left;另一个float:right;控制好他们的宽度,就能实现两列的布局效果。
9 U0 j3 { q- t4 c7 B; U* U# E ?& k( x& n B1 B% T" E' {% r
example:+ l# S. ^) g- Z! V
#div-1a {4 Y* }% d/ O, s. j$ B
float:left;- q) B7 i7 I1 o( d7 p1 m5 Z }
width:150px;
; t% S4 y& w# [( t* @4 {* o c}9 P3 T* s, E x' y* ~: C& B
#div-1b {# Y+ ]5 [$ ?% K1 I3 r$ |
float:left;# \/ _2 M/ }2 E$ g, K6 y6 }7 G9 r4 N
width:150px;
' P5 K6 ~7 V- o( Y) y( {9 d( |}+ z; m' }6 k8 h" K) l* _$ C4 G
0 u. O* R3 V: i2 S1 w8.clear float|清除浮动
$ j0 _) \/ I7 j+ Y6 P如果你不想让使用了float元素的下面的元素浮动环绕在它的周围,那么你就使用clear,clear有三个值,clear:left;(清除左浮动),clear:right;(清除右浮动),clear:both;(清除所有浮动)。* S L) x( i, A% v. V( n8 J( b
. }2 R$ T2 D9 w: L) F! m) n8 gexample:
! |1 k+ q/ @, V2 l<div id="div-1a">this is div-1a</div>1 K* P, T* a/ _& j, R' U S1 X
<div id="div-1b">this is div-1b</div>
/ T/ d; F+ E( A$ L6 |<div id="div-1c">this is div-1c</div>0 E. W+ [7 v: l
2 {; ]1 j+ a( y* Z E
#div-1a {; u# o3 u5 _' i; ]
float:left;
- u9 G. q& s- b! j+ c; `0 { width:190px;
. I' f( D* P N* ? p+ }}, n, |) z x4 s' e4 c# R
#div-1b {
+ Y! q4 P5 m2 Z5 Y% u2 h float:left;
! M2 M' t7 P& k; p$ t+ t width:190px;8 ]" H x7 |& K, W0 l7 g B
}
; n# i+ r& i9 n3 w) ~: |#div-1c {
% u4 {9 V. Q1 ~/ Z; d clear:both;5 r3 k* L7 ^" I
}
4 ~% @) S/ J+ m d) P4 a
" x' H: m `* I6 Y2 Y" `3 L" o5 a至此,这个css的定位部分就结束了,你可以动手体会体会加深印象。