簡單說一下div+css佈局3 L' S& w7 w! d3 `. P$ h
1 @# c0 z& R3 W( S2 \/ _5 n, P1.CSS佈局常用的方法:
: j2 r& W) y S7 Bfloat : none | left | right
, R* i) ?! D! k) u! E( I
4 _2 r$ m' |4 H+ z0 m( {5 v/ N取值:
$ S& b* f" |- P* L! |- t Dnone :? 默認值。對像不飄浮 t# o8 o" P9 V7 A) a) M
left :? 文本流向對象的右邊
8 b* d2 I% s7 g& Vright :? 文本流向對象的左邊! K' O1 d: `1 R( ]2 K& r
* N8 k* V8 }& |* M' N9 B3 N, y$ i: w
它是怎樣工作的,看個一行兩列的例子
' C6 F/ D3 v( o2 r
, h8 L" _9 g; O4 J7 K! N. Vxhtml:0 K) U" G! C$ D" W9 X; G! D& v+ N
3 K$ P/ B$ z' {* k! F9 P<div id="warp">
6 l# A2 T: Q9 P+ \8 b3 Y$ E<div id="column1">這裡是第一列</div>: r2 ]* Z/ c; b b+ B. _: x' `) D
<div id="column2">這裡是第二列</div>" W7 b+ n1 i* ~/ U7 ~ k9 M+ t
<div class="clear"></div>
8 A B4 |# Z' {0 Y* p2 |9 N, j</div>
; z' W5 `; a" kCSS:
/ Q! o$ {. m# i7 D8 X! h: I5 g
1 Q4 r/ f& L- \; R" r. J#wrap{ width:100%; height:auto;}
6 k# v3 n* c" h3 r#column1{ float:left; width:40%;}% i2 Z& w" f6 _9 R6 T7 z! T
#column2{ float:right; width:60%;}2 `* T% C$ V$ e
.clear{ clear:both;}
$ j; g# l) [3 E1 x. |* _position : static | absolute | fixed | relative2 m/ T" S8 _; g
4 f+ U3 U2 {. g* ]
取值:9 r" ^: Q* [ n$ |
1 q. ? g! p: w5 |: vstatic :? 默認值。無特殊定位,對像遵循HTML定位規則
6 B% _# O: A; [% i0 Qabsolute :? 將對像從文檔流中拖出,使用 left , right , top , bottom 等屬性相對於其最接近的一個最有定位設置的父對像進行絕對定位。如果不存在這樣的父對象,則依據 body 對象。而其層疊通過 z-index 屬性定義
% M6 s/ d7 ?# ?fixed :? 未支持。對像定位遵從絕對(absolute)方式。但是要遵守一些規範 & R: h' a' [( [9 l+ a0 G9 H7 V* ~, b
relative :? 對像不可層疊,但將依據 left , right , top , bottom 等屬性在正常文檔流中偏移位置
0 H- P/ f5 X* W2 S
$ c6 L' ]8 r4 X2 F它來實現一行兩列的例子, g# m; w& g# [" c1 L7 }6 k
7 y1 q8 E$ |, v$ L7 T& z' ~8 Rxhtml:
5 ^. }1 D3 R( H9 p( q( m/ u- c7 }
{& `; y7 T1 n& k( h0 h8 Z<div id="warp">
; [3 u8 F: c8 |, r9 M' C<div id="column1">這裡是第一列</div>
- A5 B) n! f. s* `/ M<div id="column2">這裡是第二列</div>
& K8 ]' S6 D& q7 {' T" C6 C* \</div>
/ q6 V6 g8 a6 d/ ]* b& dCSS:. C3 B1 C! D2 _
% U1 k: U/ f9 n& b' I! G! {
#wrap{ position:relative;/*相對定位*/width:770px;}5 y: b$ E2 \# A2 Z, Q
#column1{ position:absolute; top:0; left:0; width:300px;}! c2 O/ s2 l z) r2 P
#column2{position:absolute; top:0; right:0; width:470px;}
7 j# b, k, x+ i) A5 T% j. [! ]他們的區別在哪?
4 s+ ?$ r7 L/ z* g8 |. o: p- y) a* D, j/ ~7 F
顯然,float是相對定位的,會隨著瀏覽器的大小和分辨率的變化而改變,而position就不行了,所以一般情況下還是float佈局!
' `8 n2 R/ N4 ?$ G% A7 q8 {- {9 _# d" A1 b v- M
2.CSS常用佈局實例
' t- w3 a. Q! U8 n' y) f; v3 k. }* K* ]/ I$ s
一列
4 ~. A; h9 R: a單行一列. i2 P' l5 P6 W, x
9 G$ {7 O# T d% r
body { margin: 0px; padding: 0px; text-align: center; }# g. J/ \- C' ^- g, g2 R( o) \
#content { margin-left:auto; margin-right:auto; width: 400px; width: 370px; }
6 Z8 K/ z3 c/ _3 k兩行一列3 T' q7 `% I7 l) J3 x: I6 l
( j+ v- V- [( ]- G, h3 t
body { margin: 0px; padding: 0px; text-align: center;}
" M. Q. X8 S9 j. r% u7 T" v#content-top { margin-left:auto; margin-right:auto; width: 400px; width: 370px;}
# z+ P* S7 K- A/ R: b' ~* b4 p7 ^#content-end {margin-left:auto; margin-right:auto; width: 400px; width: 370px;}
6 u7 |5 ^% Y. @三行一列
3 o9 M3 I0 s. d$ E5 I" |; _7 W2 \# I3 O, X
body { margin: 0px; padding: 0px; text-align: center; }
0 o) E2 {# q1 s#content-top { margin-left:auto; margin-right:auto; width: 400px; width: 370px; }
5 g- a$ ^% W: ?0 R( j#content-mid { margin-left:auto; margin-right:auto; width: 400px; width: 370px; }
3 e' U* B& t# m6 I' q#content-end { margin-left:auto; margin-right:auto; width: 400px; width: 370px; }# m$ M! B* w2 W# w- U8 q. f
兩列% X/ G. A K C1 \. D
單行兩列* T+ z* x x0 z5 K$ N
4 W y: |$ @9 Z4 E4 B# ^#bodycenter { width: 700px;margin-right: auto; margin-left: auto;overflow: auto; }1 z' M9 y: b6 e! S1 j
#bodycenter #dv1 {float: left;width: 280px;}
# }; ~! ]& @! h- P: j: c#bodycenter #dv2 {float: right;width: 410px;}
Q: B, Z* l6 |+ \ Q! F& ^* U兩行兩列
7 u# S( t# V2 X+ W$ W3 r& z! Z# O
! g! ~. d% m$ V#header{ width: 700px; margin-right: auto;margin-left: auto; overflow: auto;}& t: q9 n, ^: r, n* p" C9 ~
#bodycenter { width: 700px; margin-right: auto; margin-left: auto; overflow: auto; }
2 K l' K% f/ c' Q2 y( Q#bodycenter #dv1 { float: left; width: 280px;}4 k# X3 V9 ~9 g8 D2 @+ V
#bodycenter #dv2 { float: right;width: 410px;}
7 [0 S5 X5 i9 o5 Z% ^3 Z3 ]三行兩列
/ S" k8 C0 S( s1 o) ?- G* K2 L% W" Q/ F) Y3 W
#header{ width: 700px;margin-right: auto; margin-left: auto; }% B8 U+ a# x+ C, Y- E/ y3 k
#bodycenter {width: 700px; margin-right: auto; margin-left: auto; }3 {- i( Q: W |7 g. C2 m4 w
#bodycenter #dv1 { float: left;width: 280px;}- F8 t: e0 C, g, k
#bodycenter #dv2 { float: right; width: 410px;}" G- a. G8 @6 K0 J% @7 W
#footer{ width: 700px; margin-right: auto; margin-left: auto; overflow: auto; }
- Q( v D R: P% M1 \9 l- R- m三列
$ _5 n( y( C7 O+ h3 b; d單行三列
+ w; X1 l) i' w- o4 _絕對定位2 \/ I! h( `& ?7 v, u7 L. O
: i8 I f" T% r5 X! k/ e#left { position: absolute; top: 0px; left: 0px; width: 120px; }- U: h. d& E3 E; r8 Q: j9 f, X5 E
#middle {margin: 20px 190px 20px 190px; }
+ Z! l& t7 `. g2 ^/ u! G6 j7 n#right {position: absolute;top: 0px; right: 0px; width: 120px;}
9 U( w! `1 c+ z. T" i- }float定位$ A7 F8 F! ` T% W- [/ A* X
8 B" t. n1 D) H* c$ Y, K, N
xhtml:3 R: I9 ]# ?+ G+ H
1 C8 v$ y, k. A0 e- o# ?
<div id="warp">
8 ?& V- Z" m9 E( T5 |<div id="column">
Q1 \/ A) d6 p7 r8 W, I1 c<div id="column1">這裡是第一列</div>) J5 s5 j+ w% M1 b
<div id="column2">這裡是第二列</div>7 Y T6 e) U% B6 r
<div class="clear"></div>" A# N/ C- }* m9 H$ M6 `5 n
</div>/ d g6 v2 @0 \" T
<div id="column3">這裡是第三列</div>2 j9 P' Z+ N8 C( e# e
<div class="clear"></div>
( [# U8 l& Q9 ]4 O</div>; S# n0 v/ `9 }2 N8 x* y
CSS:
9 x* e) q" D, Q. G& F
- j& L4 P$ {% U9 F! `* N#wrap{ width:100%; height:auto;}8 U* S) I$ {& ?) i: H! S
#column{ float:left; width:60%;}. t( x$ d9 I J' c; y
#column1{ float:left; width:30%;}* M4 ]5 T. q; H8 a5 e% l: h1 L3 e
#column2{ float:right; width:30%;} a; p6 Q2 K8 m! y4 r, R
#column3{ float:right; width:40%;}
D- ?% d5 K5 j+ L* U$ Q" w' G. O.clear{ clear:both;} ! u5 `5 j- N3 X, Z
float定位二, F: e% ^" P% A
. x& c! I2 ~' F! `. X8 y
xhtml:2 z$ Q9 ]% A4 H" r9 U- [6 }$ U
[5 x1 ~ t, u6 e( [7 Z" L" w- L
<div id="center" class="column">( N g3 u: V+ t5 e+ M; G
<h1>This is the main content.</h1>1 s( \) x+ S E
</div>
8 r! Z; Y) b( h' y4 {" i! o6 ~$ _* z( n<div id="left" class="column">( e# `8 B) L( u5 c
<h2>This is the left sidebar.</h2>( ?7 R4 M; u: y# X- j
</div>6 s8 t& g( `' n: p6 d4 n
<div id="right" class="column">7 ?" \4 R' l: K9 y+ o
<h2>This is the right sidebar.</h2>
C$ W6 k" J% F6 g& _7 L6 z3 o</div>5 d( P) c. q$ ^5 R( O+ A5 G
CSS:" Q0 y; Z: _( y( B! Q; x
/ F$ b( I+ f' @4 T. Gbody {margin: 0;padding-left: 200px;padding-right: 190px;min-width: 240px;}: {6 ^: B' e ]2 \1 ]
.column {position: relative;float: left;}
8 u/ y }, x/ U+ E9 t#center {width: 100%;}( }* H7 A- t- [" `' K7 {% x% z4 f
#left {width: 180px; right: 240px;margin-left: -100%;}. E2 d" k0 S8 H( Y' \' p/ m# V
#right {width: 130px;margin-right: -100%;}
9 M# J2 ]- U+ F* L8 B- N3 u兩行三列2 h: P" ?$ ~" j# P
( W; V" r7 H4 x7 l& U! [3 _xhtml:1 h9 ]5 j6 N: A3 |6 S, O3 i
+ X; D6 J( s3 k! y! d' c% l( @
<div id="header">這裡是頂行</div>
; e2 X+ t# ^+ w- H, b6 `<div id="warp">8 }; p. c$ m7 ]
<div id="column">
* @8 W2 j" l7 ? a8 E$ C<div id="column1">這裡是第一列</div>: `5 K" b: ?) J6 l i* F
<div id="column2">這裡是第二列</div>6 f! r- c! P* p( ^9 V( s
<div class="clear"></div>
4 `3 z ^1 s3 t2 t% \</div>
9 e" O, o$ T5 t* l( ~<div id="column3">這裡是第三列</div>0 g% v4 C$ j% c, g* r
<div class="clear"></div>
5 ?9 S+ D S6 B( o3 H' S! b</div>5 ~9 i; p7 Q4 J( I1 D# ]' f: g/ ]
CSS:; }3 k) p8 F3 P7 F. [
% q& ]2 w$ W: Q% o5 j#header{width:100%; height:auto;}
3 ?& n; S Y1 Z/ |& J8 f4 p5 D; Q#wrap{ width:100%; height:auto;}
- S4 F: V" r- T. p) L. B! y#column{ float:left; width:60%;}
% e0 a3 {4 H+ a' \; t# @( M$ Z$ `#column1{ float:left; width:30%;}. P# A4 Z* C, u- k# _
#column2{ float:right; width:30%;}; X8 u( H& E# G
#column3{ float:right; width:40%;}
/ A: U. K) i7 g: [) ~! W8 `.clear{ clear:both;}
, w( X! r6 |6 D9 a三行三列
) ~% U5 c c2 R
( Y% x, h- N8 U4 ~8 `9 Q# A6 wxhtml:; N, F7 G: ] M+ O) o
- L4 u3 N& i# }5 q3 C: _0 |. P
<div id="header">這裡是頂行</div>
. f2 q3 [$ r( x<div id="warp">
/ t! k8 x% J/ R; O1 j0 t<div id="column">% @1 J3 F3 c! q
<div id="column1">這裡是第一列</div>
" {% Y5 _! O, o1 _* n<div id="column2">這裡是第二列</div>
6 ~$ }) q: G& ^3 R$ K<div class="clear"></div>
2 G( V& q2 p, T7 n4 w& x% v; r</div>
7 Z$ a9 w/ W7 c$ S- G<div id="column3">這裡是第三列</div>
8 T. Y6 g6 T2 b! i5 x D, t<div class="clear"></div>* q7 s$ p9 a, F) E
</div>
% c' H$ t3 B% R) H. N<div id="footer">這裡是底部一行</div>9 K' v$ R/ Q7 e7 f( a2 |$ B
CSS:5 f, O! ?3 v: A* ]8 y7 V
6 \" N6 r/ _; k+ ?" i#header{width:100%; height:auto;}
5 x U$ e0 g, ], a& m, U% E# J#wrap{ width:100%; height:auto;}- b2 M! {) d1 S0 J% p7 @3 r& X% b
#column{ float:left; width:60%;}/ @1 @: D; B7 M# T5 }; W) O
#column1{ float:left; width:30%;}
2 g Y' O/ J; h( m& m6 P#column2{ float:right; width:30%;}- M2 @1 Q3 F! R% K7 Q, k9 _+ Q/ C
#column3{ float:right; width:40%;}
9 y( Y! G% R8 p k# X" _# i+ D.clear{ clear:both;} : s+ b" V$ J& h5 v3 n
#footer{width:100%; height:auto;}
6 @% V8 }2 a, _' N) [PS:這裡列出的是常用的例子,而非研究之用,對一每個盒子,我都沒有設置margin,padding,boeder等屬性,是因為我個人覺得,含有寬度定位的時候,最好不好用到他們,除非必不得已,因為如果不是這樣的話,解決瀏覽器兼容問題,會讓你頭疼,而且產生一系列CSS代碼,我覺得這樣的效率和效果都不好!
; `( U1 `9 \$ F6 H% @- ^) _5 Q" Z% ^! t+ Y' {
3.CSS佈局高級技巧" i: Y6 g4 N* P+ n
6 u( l2 N4 W5 g( ^margin和padding總是有可能要用到,而產生的問題如何解決呢?由於瀏覽器解釋容器寬度的方法不同:
8 H7 F" U% L, m, N# I# a4 D; H, ]
( p% c& i ]7 `+ HIE 6.0 Firefox Opera等是) m$ d9 ~5 z% W
真實寬度=width+padding+border+margin% M6 T4 M) @, n* e7 x
IE5.X
, [3 y5 ^- J, o真實寬度=width-padding-border-margin" X, V/ s/ z L- G
3 v7 e( |; R! |; C7 P
很明顯,第一種下很完美的佈局在第二種情況下後果是很淒慘的!: ?7 w. W5 X' j, v# t
$ c+ X+ L6 x D* S0 u( G解決的方法是 hack
/ V( v/ W% T7 t8 B
+ ^" x% Y0 h' m1 G0 P2 E: d6 N% l2 \0 e) v' g* G
div.content { . ?0 F' ~2 t- |. b
width:400px; //這個是錯誤的width,所有瀏覽器都讀到了
2 R8 M# l* c' u* ]voice-family: "\"}\""; //IE5.X/win忽略了"\"}\""後的內容
8 h7 c2 ^: |4 e- c) p. uvoice-family:inherit;
3 y+ C- z+ R# h- p/ w0 zwidth:300px; //包括IE6/win在內的部分瀏覽器讀到這句,新的數值(300px)覆蓋掉了舊的
" w; Q( y$ K# |1 I}
x \# {- c2 I" `html>body .content { //html>body是CSS2的寫法
# A/ w0 t% V5 U# l* _, [width:300px; //支持CSS2該寫法的瀏覽器(非IE5)有幸讀到了這一句. S- m2 s' _& A0 H1 e
}
4 K1 Z, v3 n- G$ x( @2 X/ x5 @& P4 i+ R2 N% J% _. ~: _
div.content {
; x, f' c& M1 }; O3 nwidth:300px !important; //這個是正確的width,大部分支持!important標記的瀏覽器使用這裡的數值# g b. ^% p, C( x$ B( p( u
width(空格)/**/:400px; //IE6/win不解析這句,所以IE6/win仍然認為width的值是300px;而IE5.X/win讀到這句,新的數值(400px)覆蓋掉了舊的,因為!important標記對他們不起作用
- Q i7 ~: h T5 T- N5 M. |7 Q}
1 y3 ]: {+ T) ?* W" zhtml>body .content { //html>body是CSS2的寫法* b' |8 o2 \5 B3 T* x6 w- a
width:300px; //支持CSS2該寫法的瀏覽器有幸讀到了這一句' g m- d6 y: Z% A, n
}
% A' x( e( y. I& @具體解釋點擊下面鏈接查看! E7 N# i; w. [6 n0 t& k
1 G5 `! Z. O. }- u" A* M* T" S
www.blueidea.com/tech/site/2006/3170.asp$ L! Q+ W8 T' h/ a
www.jluvip.com/blog/article.asp?id=114# e1 V8 k9 Y2 ]
0 M8 |8 E" \; F8 g7 `
列等高技巧
- y4 S, S6 W- v9 X) H% ~# j! Q! } p1 z6 [5 H8 L
n行n列佈局,每列高度(事先並不能確定哪列的高度)的相同,是每個設計師追求的目標,做法有:背景圖填充、加JS腳本的
- @/ c, a0 N( I c0 U4 y方法和容器溢出部分隱藏和列的負底邊界和正的內補丁相結合的方法。
# U% }- r$ U# Q; ] ^" Y6 j% p' g O* D. Z4 `1 q+ h1 u
背景圖填充法:
9 x0 M/ C7 [; u# e6 J# \0 X A l; ~
) c$ f8 G1 s1 j/ E' oxhtml:* Z, A5 O, D& B" B' P3 l& v
4 r/ t* _% q. ^8 k: E
<div id="wrap">
: y2 J( @" J! {' @7 }<div id="column1">這是第一列</div>
. n& F9 J2 I: c8 I<div id="column1">這是第二列</div># @9 @, f1 t) K4 k! f+ o2 k5 U) |
<div class="clear"></div>
d9 G! H+ b6 x p1 n</div>1 q& g% Y! ^% D4 J) z/ J: X" G
css:
% n& p7 R( c% B/ z3 Z
5 L% W# A; ]6 Q2 x#wrap{ width:776px; background:url(bg.gif) repeat-y 300px;}
) j6 l; q6 X a( S$ i3 x#column1{ float:left; width:300px;}
3 S; ?& T$ P F3 q#column2{ float:right; width:476px;}# r( l' `/ g3 U, O+ x
.clear{ clear:both;}& `+ K, _7 P1 l
就是將一個npx寬的一張圖片在外部容器縱向重複,定位到兩列交錯的位置縱向重複,在視覺上產生了兩列高度一樣的錯覺8 R& p5 a( T" ~& H) s' |
! I! n7 {7 T. v& U[ 本帖最後由 hailin2442 於 2006-10-5 14:12 編輯 ] |
|