Board logo

标题: HTML结构化:DIV+CSS网页布局入门指南 [打印本页]

作者: admin    时间: 2007-10-6 22:55     标题: HTML结构化:DIV+CSS网页布局入门指南

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
: ?" \0 {7 ]0 ~* y  U8 {; K
/ g' ?3 q9 J2 Q, {  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
, x+ C8 q( j$ l6 C7 U; i# E2 `& n# Y9 D+ \1 ~( n
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。
/ V! X. g# r- r" i2 h. {! Y9 o$ Y5 {( t+ a, U9 a7 \6 a  E( g
当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。 ( S. h: `( z, E( I6 y
; Z5 H: w* T# D. F. K9 }3 x* o
  结构化HTML
0 j1 r$ T8 X5 j2 T: k* n7 x
0 e& [  |* e/ h. k, t& ~3 u, b  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。
0 s2 y3 U. P! r, O: A, z, _0 J* \9 u2 ^9 F3 `0 @7 C. b, c
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
  |; \. Q3 ?  C. G7 b% c: J( j5 m! @/ S9 z  N  K; i: g
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
/ _/ W$ O4 @- K8 i3 r3 Y' Q! e- e4 f( D* O$ y) w3 E
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
. o% Z1 l+ k- @. T
& `9 v: b. N- T) Z4 @! R6 y  开始思考
4 ?/ L/ [' C1 R" P' A9 ~- }% m: v% M$ Q
5 L7 n7 y$ \4 v; A

% w* p* R) v" M* n  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
' R3 Y/ o0 \1 n. b6 U+ N* O. ]: T& }- T* {- Q8 y( J7 D" N; f
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: 5 d% @6 o* f8 G; \6 n
( Y8 {: u2 y! a1 `7 o4 g2 i
  标志和站点名称 , G5 T8 x' M/ e2 r" j
  主页面内容 0 z( x% u5 ~9 _  Y9 g' d
  站点导航(主菜单) " }2 Z/ t. U: U7 Z/ d3 D3 f
  子菜单 " a* ~) v' e8 g- o
  搜索框 1 F, ]* ]) _0 X8 c  Z
  功能区(例如购物车、收银台)
3 C5 t$ q- o  q' a- \! h  页脚(版权和有关法律声明) / [2 t4 M4 ^7 u+ k, V

& R0 g4 C& u" V9 D4 |4 X7 m! R
4 ]: w  I3 u& ]2 r2 Y0 E  我们通常采用DIV元素来将这些结构定义出来,类似这样: # V& F7 g0 p/ S& h9 Y* H% H

& q* Y1 V" z2 V- J1 I  <div id="header"></div>
' W. G( m) h! o" }# q3 Z6 C, m4 j0 m4 p4 L0 N% x. ~9 w
  <div id="content"></div>
6 `: F# x% l- R" [: R$ J7 S' r* X, u9 W# E: l
  <div id="globalnav"></div>
7 D# E+ L, P+ s$ {3 m/ T$ _; [  z/ Z  |( t
  <div id="subnav"></div> . i- }" p" D7 a) g- s: ^
+ q1 F+ a' w9 E& J( h+ E
  <div id="search"></div>
. o$ E; |7 [( d- S1 g, J# ^8 a+ n. V! c/ i( X' C, i; m5 z
  <div id="shop"></div> 8 _+ n. M5 F" R4 W9 w) M3 T) \
1 S4 L- W$ N6 j! p+ B5 l8 X* p# e4 H5 U# ^
  <div id="footer"></div> # q& e: A! _* o: N6 c

" v. H* y6 W; z- f  z6 o1 ^  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
9 t8 P, v# I! }, E9 X8 m: A1 I! _6 }0 i& }5 E" r
  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 - D1 e7 a/ H/ e5 q9 w4 Z$ s

* k+ s. z) G- u: K  使用选择器是件美妙的事
$ h: S/ E0 c' f  I' F% m( Cid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 " k, G3 ^! i' @# ?' L$ M6 Z( {

& T0 H, [* S8 F! l4 p5 g1 ~. I  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
4 ]( G' t4 D9 y) T! }( n0 l. q1 Y+ ^* k5 _8 p: |" e) h' q
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)" ?3 _3 s9 R6 A8 }
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 & L# ^0 Y7 c- t2 m  |: i8 T; d

. p4 M& T8 ?& B- M' O6 `& O. c亲自实践一下结构化
) }% r8 G8 ^+ ^) M  J0 P1 ~- ]" f; @. F" t/ R
  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: 3 X# W! d2 q1 M" w! j
/ E$ ?$ F1 ]+ y8 f
  <div id="navcontainer"> - f; C8 ?$ C6 C0 g- k  F# m
3 q. x$ A) F5 `, E9 ^$ k
  <div id="globalnav"> # V7 y2 F' j  F+ [8 G" Y) z
% e' B" Q% l6 P) y3 t0 Y
  <ul>a list</ul> 0 @9 R  S# `) h' C

1 V9 F7 F+ ?8 R# \  </div> 6 A& w; d5 V. s# Q* N! _' J1 w% k
2 ]$ e5 D3 Z/ Y8 H7 G' ^
  <div id="subnav"> 1 W* i: q  y: \; w# }3 B. [

+ O% d: g$ ^2 i$ |  <ul>another list</ul> / b* U" F6 h* K- @! f8 N8 W! {  K& @
" q. S7 E& y3 \5 c7 P! T$ u
  </div>
2 \- D) e' Y; B/ T* _
$ H4 r0 y" S# T/ `+ y  </div> & g# m; K* o. L' j8 |

# M$ B  s( I' @! L+ i' u  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 ! E) n6 j1 x6 r8 i; `* L- u3 l2 K: F) c4 K
. S3 c  z! r+ W( Y1 `
8 C) a5 S' c0 [7 k
  用CSS替换传统方法 ) R7 F  K5 U2 F8 L
  下面的列表将帮助你用CSS替换传统方法: 6 @! k3 M$ c& ]+ e' E9 ~5 Y

- x6 _7 q% a% p* F  HTML属性以及相对应的CSS方法 # @  b& _0 H7 v( U, y# R* j. N
  HTML属性 $ j% {' g# P$ |. c5 |# j
4 c% t3 W6 J+ Q  x0 r; h3 x

( [/ ]# U& k2 v2 r' g1 O# _8 u( H% K  CSS方法说明 4 L/ i4 d: r# l6 L+ e5 |% }
  align="left" 4 e/ J! H/ A0 ?' H4 i

/ a  h. H3 R7 v9 ~  align="right" float: left;
! w! Q( d$ \3 f& g# ^; P/ d
: u9 ]. ?$ D% ?. N2 ?. [, X  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
7 C, r4 U& H0 T+ ~& x+ g% y3 a( q
, n' t# Q8 _/ ?" w5 c  当你使用float属性,必须给这个浮动元素定义一个宽度。 # Z+ z* ~" i5 _$ k

8 H) G! I- q( {1 T9 s  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
. N  u/ a4 @5 U7 v' E$ K" m) a* t) }) }% w* b1 F
  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
1 b9 w; H! v" t; U1 C/ a  W
8 V$ {. `- y( j9 N0 \1 f1 B  a:visited: #339; : Q1 u% i3 E: i6 F& M/ W

9 J  r1 W* ?' N4 x8 K  a:hover: #999;
+ B" J/ a. }1 W% A: b5 E# V  s
& d8 V' ?0 n/ P  d  a:active: #00f;
$ P- U5 Q( S$ @: |  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 , d" T' i, u: {8 X9 D+ L* G+ f& h

3 Y. O1 c0 r* n9 Y; I5 G% z  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 # h* A2 f$ a" i$ P" z9 b; [5 v

7 l' A; B# x. N) ~  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left & x& V. q. ?4 t8 S  M$ c

1 A) v* w1 x- z( P. W5 s  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
4 l" _5 Q* w- i# Y7 Q0 }1 |( O% G# K+ H) P
  你可以使用 table, td or th 这些选择器. / P; X$ O$ o2 Q& Q" M

3 v3 F) u7 ^/ Z0 f5 q: z2 g& f) x  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; $ W. F& u1 K8 u" H) e

. @2 @- D( W8 T  s8 }- w  <br clear="left">
" {; O4 p8 M, d9 D5 z   3 x2 z- }2 p/ V/ U: a: t; G- g$ f  A0 [
  <br clear="right"> % K! \! A% s. @* b

- n7 R3 k1 w7 c( {5 j! c  F% r* T  <br clear="all"> 3 X( q& o. _0 y3 }7 S/ W

. A3 y4 {$ _; l) R5 k6 Q% H  clear: left; 3 w! H! v8 Y1 s/ l( I$ W
9 q3 p+ e4 M3 _9 H5 Z
  clear: right; ( m- t2 W/ N3 @$ k2 e1 g. V

2 \1 l# \+ x/ G  V% Y& _* _  clear: both;
; k3 A4 @" Z7 H8 J' l! I7 [. g& r  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
& @9 ]7 e6 L, T7 s4 a; K$ W, g7 ~/ \2 F: y. h3 ~/ I  E
  cellpadding="3" % K! l; {1 l1 S5 P! a
" g7 w) T7 W* t0 m" A/ l# O; Q
  vspace="3" ' D+ c- ~5 R' e

4 x7 p  f3 B; d- Y* \& x* T  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
- E: Q- o% y4 ]0 O. G" S  A& z5 d! n1 z1 t! ~
  align="center" text-align: center;
8 k5 V1 U" h, A' [0 u' a2 V' ^/ y$ }. ]6 T- o1 W
  margin-right: auto; margin-left: auto; % {0 C4 o6 Y3 P4 \
  Text-align 只适用于文本.
  K# ^4 m8 w7 x7 J2 H4 u9 f( i2 U1 ^2 W7 C. {6 V
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 2 K* a  L  F' V6 `5 b8 \  r9 l2 ?5 W4 [

8 R0 Q* s+ o! \, Z) x& W  一些令人遗憾的技巧和工作环境
2 t( Z# U/ ]- I2 ^
: J$ T+ S$ d2 S& p
0 h/ @/ H$ }6 E由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。4 Z# t3 \$ K: P3 g
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
+ X; I0 |& M0 T( H* w2 E4 _+ k0 O$ e3 T
  理解浮动行为 3 N$ {1 x) `1 t
7 D# b' e1 v3 I- [/ z
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
  L8 J7 S8 n3 S' v  Z* A
7 ~( f* v( ^9 y1 u7 B  更多帮助 * ?. ~2 m7 k4 g* @- n: A) I
* a: X! w( ~! f0 Y( r9 x  U: N) h
  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。
作者: 伪装淑男    时间: 2007-10-7 19:54

现在似乎很流行div+css布局哟
* Q/ z, V- u2 m( S$ A要逐渐的用div取代table布局  好像是table不方便用dom操作
作者: love    时间: 2007-11-3 23:18

看了头都大了啊。我是初学,都不知道从哪入手啊
作者: admin    时间: 2007-11-4 09:05     标题: 回复 3# 的帖子

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




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2