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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习: & ^8 @4 K/ t6 n( M

: p/ z; w  ]. x- ?, E1 V& P& s' J  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
$ m7 v0 d' M0 P7 Z
  i5 o, O. w0 y  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。
( e! i9 R  I/ ]' B; g
& U1 l& M; ~$ `( [' y当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
! G& M7 o& O- [; t: c* ]2 X6 P; ?; k2 k+ X3 s$ t
  结构化HTML ) B& T4 ]% S9 A1 D  {; I& z& x4 R) C  P

; H# f& W7 r" w# }3 a- a  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 : b- x& ]) ^0 ]% O  S  ~
; _$ X/ [  h+ a, l8 M  R
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 - g* B/ F+ b' `3 \6 t
' J1 h6 e# f8 Q, r% ?
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
" E; B3 e. I6 k7 \
( E& _7 E2 L/ y  i# ~$ y- U  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 - z7 U8 g" d. C* {1 `
& `4 V7 P. I! ]6 w# ]) t
  开始思考 1 u& q8 y/ B4 Y* k/ n0 t4 f

" c6 \. O% a0 v& L* ]
/ }7 _4 S2 w7 a  e1 J$ ~* z/ T2 I
7 k/ l7 |8 t3 S! ^/ _  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 : f/ \* Y+ a8 Y& e4 M

6 K4 K/ y/ U4 f$ a5 X: B  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: " `9 k- X( A; {3 `6 k

0 u) W3 @- A4 L% X  标志和站点名称 ) p8 R' J8 r0 t. M+ t
  主页面内容
9 O# v, E- M$ {5 j2 g+ M) J  站点导航(主菜单)
. b' i0 k+ n/ O" ^9 |" k6 t  子菜单
$ {# Q; @9 i5 Z, {& w) B5 T6 t  搜索框 ' Y9 ~2 h& {# z5 S# H2 ?7 a& y* s; g
  功能区(例如购物车、收银台) ; v( Z  V2 G* y
  页脚(版权和有关法律声明)
- s6 d, I' A! J0 ^1 n1 {
- w) A: W& t; c/ I+ l! w7 t$ o; D; `- P
  我们通常采用DIV元素来将这些结构定义出来,类似这样:
: q; V+ F& o! A2 a
3 d+ }9 Q9 p. P: T2 K! K  <div id="header"></div> 1 r, Y, p* O' h( V# _' B  o3 `$ |

9 z. w9 _( G( G& \8 g  <div id="content"></div>
3 v0 K( }$ C7 {" y6 M+ X) Y
1 s- Z. K( C6 m+ Z- \( Y2 Z2 F% r  <div id="globalnav"></div>
$ H# n) Z2 o, g. h, ?+ r1 ?4 I. W9 a$ @8 r& a. r
  <div id="subnav"></div>   D) Z) k; @5 R1 O! V- g+ B8 K1 o% G
$ [: n) V, \# K, l* Y
  <div id="search"></div>
" j: M: ]2 ]) E: r! s0 l1 [, E/ K, h3 s2 V
  <div id="shop"></div> $ ~% v$ Y8 W/ ^; `* s4 Y3 }

4 S3 e1 t+ n5 L3 e- {: x2 J5 I, P9 ?  <div id="footer"></div>
$ z. w+ b) v$ {2 y# u
- q3 E% U  r* W  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
! b6 D3 Q9 q) c7 |( @
3 h5 ?& J9 w1 Z  z* x  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。
9 L. T$ M+ T( q( d7 h3 @: v+ \# N  }- ?, D
  使用选择器是件美妙的事
- {8 B* X1 v5 x: A5 nid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 ' o2 q; H+ v# }1 B3 ]* s" e
' D! T7 f4 h' R. P& ~$ C- m
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 # y1 i6 S" N) Z: L- U
8 `6 O. e5 l* N  ^2 R: _; k! F
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
9 F$ {, r) q' m5 K  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 : `8 h  t( b4 m* R& A, l
5 l. o3 L' n, ^6 k# U0 R5 Q
亲自实践一下结构化
; V& K& B' a8 d9 H. n6 r2 g! h4 G; I, j
  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:
7 k( u% g/ T; |" I1 S; E2 p! P. s" D
9 F; Y( I9 s, q% x% U/ H( |  <div id="navcontainer">
% u- l. [( O1 I- H# ~% n9 u/ e* j) j5 q1 b$ a9 f4 h: _4 e  Z
  <div id="globalnav">
, m3 Z3 r' E: b( \. ^! m7 ]' ?1 F1 |% Y1 Q
  <ul>a list</ul> - N, R3 A% u2 u! Y9 z

3 L% v+ C& J8 P" A5 R# T  </div>
3 H- l& y7 |7 Q4 ?3 a- o3 ]) o: h" A2 F+ U! ?0 ]
  <div id="subnav"> ) }: W- W  z5 f* J9 r
4 i- O% D. n: Y3 Y' O
  <ul>another list</ul>
- N' ]& s% M$ D8 M9 Q2 X' g
9 Z( E6 n) z+ I  </div>
! A% Y% x' L- l$ m3 Z8 {" Z' d+ ^7 f- b$ ~6 i3 p1 G) a
  </div>
! ~4 K* N: G$ N" Q- y( o- e3 T& H* h9 t
  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 + j8 ]" K6 b& w/ p: S

' K( l! p8 X, a" F. I4 U; j7 \" L0 j+ v8 ]9 a% [( g  q% e
  用CSS替换传统方法
7 m) ~6 l2 c  J; r7 S- E# P9 b  下面的列表将帮助你用CSS替换传统方法:
: o& n9 _1 w8 {3 f) f" I: q9 Y# _7 a. H9 I/ q- z. H' L
  HTML属性以及相对应的CSS方法
" I% U+ x  y4 O7 }- l  HTML属性
5 P2 J% l$ E; A4 [$ ]! Z+ a
6 Z. c; m) C1 O; j' i) r1 L( _; D# ?, _! {6 g6 q/ X  z& g6 l
  CSS方法说明
9 Y; [' v( X. i/ {5 G) l" O  align="left"
3 ^% b' n8 c2 E- B, B2 T3 \, [. Z; u! d6 m3 K
  align="right" float: left; ( z% z( Q/ e. p+ ~1 J
5 }' ]# b" V. ?$ Y. d$ x. m/ Q
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
; p# Y8 @4 @; T$ v7 i8 C
) w  a- \5 R( v6 o  当你使用float属性,必须给这个浮动元素定义一个宽度。 ! A# t/ f0 b( I4 ^+ |5 u& a

" w) {0 }# z1 U, q, o( v; T1 v  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
. W6 N2 L2 U* a$ M; a0 n7 D/ R! p
# u. Z0 q+ q* W" m: N" B+ ~: `  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; $ x! O; U* B7 i  \. {7 i

! h8 o, C! Z; P6 d. D- s( u+ M  a:visited: #339; / o; C# t% \" B, L4 g
  {$ `  G5 m4 `+ D4 g
  a:hover: #999;
0 n& J: R/ {/ B) E2 |
* b. g8 f1 N) o$ T$ f, ?! G  a:active: #00f; / g! s+ W$ o5 `2 Y
  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 : p7 @& P5 z5 a1 ]- A# X* E5 V9 ^
* R# ~9 x( |2 T8 ]1 k, t7 q
  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 7 k9 B5 v# U) l  s5 d6 W  h; z
' K8 F& X) r4 x: _# T1 `
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left ( d+ Y, m# h7 }; h8 k
1 X" H* x! W# e; f* t3 T
  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
# H5 q4 ^" A! J3 W7 f0 g
7 G! d4 X$ \% X- X+ l- D  你可以使用 table, td or th 这些选择器. # c0 b8 ^% _6 {7 [! m  ^) h" |

( I9 j0 z5 U  w3 I) d  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse;
- W/ v; m+ Q) u. |
! d& a! @& L& p6 F2 Z. G  <br clear="left"> : U# ~  t+ f2 L+ `
   3 A7 C1 i- ^+ M
  <br clear="right"> 2 N! `1 b0 A6 t# T* E1 B
) w8 x+ V8 W3 C) e- p5 o3 i# X: o# [# i
  <br clear="all">
- e. p0 i2 [& M4 p" _  D# \: d, w2 k8 R9 B% _( \! B. p8 D
  clear: left; 7 {9 G3 y5 H" ?% e  h! P8 Q
! M2 G# ^) i7 w! Y
  clear: right; ( g/ n9 [4 R/ u6 M2 V0 z( }% z

2 G3 ]( J! K3 p% K6 p( B9 G  clear: both;
3 w+ D6 A* R1 c. E* |  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. / A* Y8 s0 x0 a: b" d. \8 r9 h
! Q& }. f9 Y$ C4 N+ @7 I" p
  cellpadding="3"
! t/ A1 h" Z1 }5 Z" a8 F2 Z8 n$ [8 q. j; \# Y0 F
  vspace="3" ) c  ~* f- O3 o) E1 j, p3 Z

3 j8 A: S) ]( c' q% ?; q: A1 N  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 5 J0 [* [, L2 q8 I

1 f  i& l2 u" l; \  align="center" text-align: center; . e* M6 Q7 T3 v: ~
! L# K! U3 ^$ d/ _% a6 G( c
  margin-right: auto; margin-left: auto;
. Q" T  s* m7 i6 `3 v( Q2 P  Text-align 只适用于文本.
. d& T/ Y; i/ R/ A
- g$ O0 N  d$ p1 O2 k  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
) D; j# u  f/ D: b2 n4 j
. Q/ Q2 U' d2 b* H  一些令人遗憾的技巧和工作环境
& b' O( ]1 ^+ H4 P- u  X/ |0 ~( B& z3 f9 ~& e- g! b' O! D& L7 `
$ C, F! c  n1 p( ~
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。- p* \1 Y  J( J/ e  ?6 d" u. y) X% C
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 - D$ O7 j3 a" c. G/ G8 u# \) y

$ ?( Z  k) w5 e: T  理解浮动行为 3 t' ?" N8 o4 ~& K" Y1 i$ Y; D
& u9 ^% o4 c. s: v6 C
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。   @5 o* V9 ^5 ^) v: m# e5 }/ t

! {8 p4 U% Z! e8 S6 [' e8 c  更多帮助
- S  s% g, G' J: }0 S/ h5 a+ |7 i
2 n, {0 S. H' x) w  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟 # T1 d5 R7 u& C$ y
要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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