获得本站免费赞助空间请点这里
返回列表 发帖

HTML结构化:DIV+CSS网页布局入门指南

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
8 {$ |# }+ b: y' U& [3 v
" I9 Z$ T. V8 D+ B  o  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。 9 H, a) p  _* ^
' x: Z5 Q1 A; X4 m, S1 z
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 ! x1 k: W: @+ f- W' D4 M7 q
; i# w/ Z) R5 }( O" F
当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。 & N( O% Q8 g! x( t! r7 h: i3 d

# H% G: e) l7 S8 v% x& F0 r  结构化HTML # w- p  ^) o" B( Y

2 @# `+ U  \, f  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 5 R# C+ F9 E8 o" l# y/ e( r7 D# _
6 d+ t' \* {  d& A* K$ \
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 0 f1 f5 f- l) {# w+ Y% F: c# Y6 F

7 O, {  }6 H+ Q! [  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 . C* r3 l* S4 v) u
$ m" m. G$ C  ^- @* D. r( `
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 9 E; q0 D" z" C9 f6 c1 [# a
! Y8 q: Z/ |" o7 a) U6 U. C
  开始思考 ; J& P+ Y9 j) g  m3 L

& m: p- `1 K0 J% R- [  f
. `+ c7 {+ X. ]& w
8 J) E, P3 W, ~: I4 ]  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 3 f! R! x7 Z6 ]/ E% J" @
; U5 t( `& m# J4 A
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块:
: h, o6 d6 T, R  v% S
1 _. h4 [0 U% y6 K) `( `  标志和站点名称   _* c: ~% \) M+ e: ?) A6 F# M0 ^
  主页面内容 % G/ L8 d' t& o4 d
  站点导航(主菜单) / K  a, b- ^$ A
  子菜单
3 L/ Y- P) ^# Z. r- s  搜索框 9 A+ a5 A; o2 K0 A( \2 G9 l
  功能区(例如购物车、收银台)
! q( T- w8 q% N- G& H  页脚(版权和有关法律声明) / j/ F6 ~. Q7 V* H

3 R3 L7 {0 [+ \' u; X5 V
- B' z: B; _) N  我们通常采用DIV元素来将这些结构定义出来,类似这样:
/ H/ {/ B3 y, G, v' v5 E, P
( E# m, U7 d( P- g$ {% Z  <div id="header"></div>
: [7 Z& N4 m; s% R+ w
  s7 y! ?3 A- o  <div id="content"></div>
6 @! }$ e. ^) J0 Z: P8 c7 D4 X
' |1 x. U( R$ g  <div id="globalnav"></div>
5 c, n3 u$ }" D6 P5 f( J1 G' o+ B% `
  <div id="subnav"></div> 3 v( ~  R0 ^: s% K/ U) z/ A( C1 P

  h3 P$ F# \/ D+ m! P  <div id="search"></div> , j: i0 n+ S% A* P% M  G
1 E5 h$ t5 e$ i% |1 h
  <div id="shop"></div>
$ _7 R2 n* T5 m  n4 M# q8 B# c
) F, i# y5 c" e- k' L  H4 Y7 S  <div id="footer"></div>
" d; I! {/ i6 M% q& }; U* n
; N5 D! V# ^) y0 {  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
6 S6 f7 y2 _2 c
. S4 r, l. a/ }  L4 o! I2 J0 M  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。   p7 R8 }+ K& g( s0 `

2 G; R4 w: {8 |( {* N% a  使用选择器是件美妙的事
5 F( F: f# G! Y& X  Hid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
3 |* y/ s( [" `& F! h2 I( r0 S; |9 w: J& q; P# k
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 ' q8 e2 X, P3 }6 H! I

' T- C+ a  R5 U6 ^6 F1 M  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)$ n  W7 s6 x3 ^
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 ' m/ M+ p2 p: F5 B

' z4 @4 J7 E; B) ^! ^) a6 [亲自实践一下结构化
" ], @' g, I) O
) F* a" L* L! e  ]' ~0 t: q  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:
7 x: K; s, x0 k
1 s4 g8 f0 O' l  <div id="navcontainer"> $ D! G" |2 ~1 Y

& V- Y( I1 i, d. X: v, C/ K  <div id="globalnav"> 0 C7 F* T9 c+ t

0 y! e5 f9 c6 b; }! V8 S, ^% e  ?  <ul>a list</ul> + U* }4 i3 y( A7 h6 ^: b

* N* h/ Y$ `. [) ]9 `) S  </div>
/ i$ _, \0 d  ]9 C$ Q: s' n+ X0 T; m, b* i  s4 c
  <div id="subnav"> & ~- G/ ^: `% b8 L5 Z- ?
$ M  w6 W+ g# U
  <ul>another list</ul>
/ q# ?  y7 K5 N0 T( k, U% ?2 _6 k+ P* J
  </div>
6 P2 r5 x. S3 R  x, }6 \" T2 T4 `; {2 f, E( c1 X$ b
  </div> 1 A+ u- R1 X, g/ B  z
0 ?  a" D4 I/ _" L
  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 # [% X7 @8 F( ~! k# R; r/ ?% ]) o+ \
3 N5 r3 |. U3 @8 ~7 S
# s4 w1 |: ]1 a4 `; h$ m$ k$ D
  用CSS替换传统方法 . W% Q6 _9 o# n4 l2 E: v" S( i
  下面的列表将帮助你用CSS替换传统方法:
/ f0 I3 Y( g" j, c" L* _5 V8 B2 A& q5 P. n7 X4 [
  HTML属性以及相对应的CSS方法 ! W7 Q! _& n$ _
  HTML属性
; w3 [  _6 H* f- _5 n8 t+ V
. V( s; F" R# t' E8 v
& A, q" v" B6 _4 g: f: k- F  CSS方法说明
1 k0 N0 L# b% f7 z* f9 ]$ ~$ r  align="left"
$ x& k; O; D2 |$ `# c2 f* b
- h( Q$ O  w! Y8 ^/ n( [6 ~: t/ y  align="right" float: left; 1 R' |8 r7 O2 D* t9 I
0 M, k8 x/ R; b4 L# i
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 7 w$ S( q8 E6 g# z3 b( o2 _+ k2 V

: g2 k5 b' @& r% L( \3 W& i  当你使用float属性,必须给这个浮动元素定义一个宽度。
* @9 g+ F4 o( ^4 y4 u
$ H8 ~) D2 t0 {+ g4 U" b  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
& Q6 K% n1 {: ~, s: b* M  P2 v) p
- H/ ^5 h6 {* S/ S. P) \  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; # n8 m) j. \6 N5 P8 Z& E
' `* ^  H4 M- n- a
  a:visited: #339; . j: a( }+ N6 R. v  I

$ L1 Q. g* J! i/ X  a:hover: #999;
+ z! J! H3 y& V% |0 G+ a8 M
4 b  J( L- l0 x8 d3 [: o  a:active: #00f; 2 W5 k+ T7 `5 y* s5 N5 l4 Z
  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
* n( H# v1 S" W! ^) v. O( }! S1 D$ k3 ?6 [6 ?* o: ~
  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。   s7 s) s' Z. W- G5 f9 ~
. c9 c9 R* f# v4 U3 o4 C" r. s5 U* Y
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left ' c0 s' h* K/ \5 K% U3 @) w
# J6 m3 f4 p# {+ n0 X" X
  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 , H. i9 o, e% q. ^- @! ^. j

& R9 J1 j# b3 U6 B5 p. m7 t% ~  你可以使用 table, td or th 这些选择器.
' I- K/ _( W0 q4 `$ m; _- _- ^( W* F
  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; 1 R7 W/ T1 k& G. _7 p
7 |, _* r1 _1 ^% M- H% Y
  <br clear="left"> : T( }, w' u; `5 I1 x, m4 W
  
5 b, U' Z3 s0 ?) k6 _4 P2 B  <br clear="right">
. n1 W( |9 ]! Q6 q* L! i4 B! Z+ K4 ?" K( g" X" O# i& x
  <br clear="all">
; J2 M/ E3 o) R
: {+ f2 T2 K! i1 b  clear: left; " M' c" }: P1 Q" G  z4 k
9 I: `% O! G8 U' _& X6 e% x2 k
  clear: right; : ]. Y; ~6 ~% L& T2 h6 D
5 `+ c! x8 k/ j
  clear: both; : K7 z; |8 j% \: ?0 c
  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
( Z' Y( y# y6 w7 S; _# g0 Q/ Z
: ?" y5 @$ d) v& f5 x( F  cellpadding="3" % I2 V0 L! a; G

3 Q! _! d0 I- ?! M/ S: B4 ]  vspace="3"
/ j; s. l) b. B2 e0 f2 f& V* x0 Q# @7 F( L
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
2 A' p! R+ C! B6 e" m$ N$ Y1 \, D
* L4 E6 e; @) d6 K3 Z: H  align="center" text-align: center;
: `0 F: E+ J  n
+ A' ~7 l4 U8 |, _. X0 {& K  margin-right: auto; margin-left: auto;
& o, R" {% ?( g6 ~  Text-align 只适用于文本. . t) k7 k% u% P

/ n% e- i) Z( o9 E- a. V  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 % z  a% N# R* V  j5 F
1 t2 ^! B3 b7 M8 C3 P5 b& Q
  一些令人遗憾的技巧和工作环境 6 Z9 b" u( S5 R7 Y

( r& L' J5 \1 G, _2 f& \2 }# J4 r# ~6 i& u+ U7 s% m6 l1 \
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。6 G4 R. B- _" K% A1 j* p5 O: d# d
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 5 D: l% ~- ]( U

" Q' v3 H( P; a4 D  理解浮动行为
+ U( ?2 y8 U1 [4 \& @1 j1 r3 A: k& d# F2 Y! Y
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。 2 c" ^, Q& j/ u. [" R. l5 X
! B9 X; `9 i# r; N( T$ v
  更多帮助 ' o8 U! S" L/ x8 _; j- v7 d

2 r; \; E9 h4 u  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟 ! f2 e$ J/ I9 K1 }9 ]) @
要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

看了头都大了啊。我是初学,都不知道从哪入手啊

TOP

回复 3# 的帖子

初学者先到 建站交流 版块学习一下吧

TOP

返回列表
【捌玖网络】已经运行: