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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
: i+ k! g5 d' x# h* G
* u2 c1 l. m& }- @  q! ~  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。 4 l8 V; V% q; r4 A% o0 }- b* Z- p" ?

$ \# A% n& ^, }3 `7 L& Q  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 % B2 [7 q' R, F  n

+ M) Y! B6 P! E1 T# o0 Z4 g当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。   W. M" W0 D: L* m( H

0 `6 W) J/ u* A2 {, K1 o5 V2 B+ p  结构化HTML # `& v! _( Z6 ^* [+ X2 w' s
+ {' \: s+ O1 v+ T% E% ^, O) c0 H4 v# z) H
  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 1 J* `9 l1 g3 P; `& X

0 ~+ Y$ _- ~0 V+ ]# \9 h. R; R  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
! L  l; O  s' n: y+ ?7 H+ z& ?2 }2 C+ E) E
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
0 t: W6 E8 `2 j$ w8 W
# I" J6 g2 g7 _& C  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
$ D6 k7 D4 R, w  d2 n4 x( f) N* j
" F6 W2 L) @, f" g  开始思考 / Z& ], h* p" e. x* M7 q8 i& A
: P( _- P4 A8 R9 c3 C3 N

3 M7 I6 O; H! e# }" P# |6 r+ W0 b1 z; }9 M
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
7 Z) N. U. L. ^* S4 o" Y4 x$ N! g, i' ]
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块:
6 ~1 _, E( B/ k+ Q8 T4 C( _
+ H0 _6 q. m' J, }# v  标志和站点名称 - I, h0 H. v" V* U( T+ _5 t0 f/ U
  主页面内容 $ E- m. B; p, Z
  站点导航(主菜单) 2 w/ O) X7 v) V2 d8 k
  子菜单 . }& x( _1 {6 g. i% U/ v
  搜索框
+ Z+ B3 _3 u/ q. w% T4 u4 O! {. G, P! y  功能区(例如购物车、收银台)
7 |' A1 t5 f: v# V. n/ n4 T  页脚(版权和有关法律声明) 7 `3 U3 @' a. h, z  X

9 o8 F: u7 w: m0 a+ S
$ s# K) |' q: `" \+ ~# \8 ~  我们通常采用DIV元素来将这些结构定义出来,类似这样:
3 M# v$ `+ j4 Y0 \9 R. J! f! @+ B: S* ~/ N% L# t2 C
  <div id="header"></div> 1 B3 Y0 I  d  Y1 s$ m4 S7 R3 Y; }$ h

9 i4 c2 t. i, m  h; F  <div id="content"></div> : E9 L3 Z) s/ l3 B

$ n! t* Z+ R, \9 A0 l  <div id="globalnav"></div>
- [2 e- z5 _# q% d. L$ J+ a- ]& L6 q# l) h9 r
  <div id="subnav"></div> 0 x  C$ A  z9 q* X3 o$ W+ @; N! C
# `6 ^1 _  [: [" u0 g' M  K/ \
  <div id="search"></div> * a0 N( j2 _3 \. d

$ d; u" M9 q0 Y' F  <div id="shop"></div> ( B, c# r6 f; `1 @5 V

- @, O+ l, \4 `! m6 F  <div id="footer"></div> : {/ G1 R" m, ^! k; m

$ `) F2 ?; i+ }  e( @" o  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
( b2 N* x5 K2 C4 {8 m  s3 C' w4 v  p6 f" _% @0 ]  H$ Z0 _. v
  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。
( Y$ g- \5 j! [0 C0 Q
/ G) D! b- e4 Y( u7 K5 x  使用选择器是件美妙的事
1 l& ?: L  g( @, D" rid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
: Y: P$ R  H' @8 \$ d0 c; N; V$ `3 ~. H! M
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 ! |* m. r8 W: R$ v
2 z4 j0 S6 s* K; h: }$ }
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)+ B- x7 ^9 |4 _1 t* w0 i
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 8 n0 _% E  n) T! `$ c0 a- b/ z
3 A& x2 p# r. ~) V$ |' J
亲自实践一下结构化
$ b$ `3 w  W6 j
, y  y# `- {  @1 j( K$ X: J7 K! f  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: ; o# o: v; n) G/ N3 B. O9 y. G6 ]# V

" ~+ O( w" f& q9 P1 c7 `  <div id="navcontainer"> " ^7 X" @. C( C& T* V9 C

; g6 R* [, l+ R! _5 v  <div id="globalnav"> * D1 ]% v5 A) l5 b& \" A( [

5 a4 X4 M8 [/ i- f- {# N  E  G  <ul>a list</ul> 4 U# d% b' {5 e8 e" T

- r2 H+ S8 W/ |/ `6 k$ o  </div>
4 ~5 v0 N; X" D9 \) i% O2 ~+ l+ U* ]/ _) T
  <div id="subnav"> 9 J$ ?; F% D2 ~

8 K1 H- z3 E/ g" v4 j; r  <ul>another list</ul> " i) U9 U4 {# ]/ a4 y5 u

( F8 m) H& M7 z  o% p) i+ l  </div> 7 V( G% h& n( o' m# A& X6 W
% j+ o% B% O* _5 S" L! B
  </div> 1 b0 K0 n3 |# w, A) v3 d* `0 n

2 c; T/ e6 S5 H" s+ b! q  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
* b& }- ~) {+ K2 i  I2 I- V; c9 {/ c7 u- n% k" R3 R3 e2 x
3 v8 H; n2 q* X) f" a- B
  用CSS替换传统方法 5 e7 J/ i# V: E& Y  V9 T' M  J
  下面的列表将帮助你用CSS替换传统方法:
& |. J7 q9 x8 {6 D7 L6 ~3 M7 D4 o
  HTML属性以及相对应的CSS方法 5 v& J+ F- h& q6 ~% ]3 B
  HTML属性
( g* T4 T' D3 u1 r* k3 `  N5 z2 h4 B" w- F! ^+ i7 {

- a# k+ X$ T$ j3 d3 g1 m  CSS方法说明
) ^6 [2 e: h: p2 I  align="left"
" r0 E1 u. b7 k$ R
- V* J8 |0 ?$ s) }  align="right" float: left;
3 Q+ u5 n) r7 j  w# N+ ~  o
% }1 v/ a. U2 M2 b0 A  A  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 / N0 B0 K- _; P. y& j  X
) v9 W8 Q- G. F9 ~& g7 \& s
  当你使用float属性,必须给这个浮动元素定义一个宽度。
$ @" Q" v0 s; }7 M  M7 P$ L1 o" r" R( D: i! y, p
  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
) @. ?* A# X# |5 x7 t$ t. d- K, |8 E8 o* r3 ]& r( c
  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
6 o/ S/ d' g! e  H2 G+ C
# v8 w" s% q7 g8 z- I& s/ n; I  a:visited: #339;
5 \; g3 d% Q. c0 R, v! ]$ j% K/ _7 T8 ]( @" r* W0 ?, C
  a:hover: #999;
, B9 k$ N! k9 H1 G1 D; S2 ~3 Z2 s( M% e+ |" D9 j8 j
  a:active: #00f;
. t6 j6 j; R* g; e  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 . z" u4 C: V* [0 `
/ Y7 _7 f+ z+ e% f9 f
  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 ) B- N. F6 t: }- O+ n9 }# f

9 J9 z8 g3 S) m. P8 U  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
- k, t+ U0 g$ E' S% g6 z0 E
$ k* M# Y$ Y' u  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
4 n( \2 c* O& y' V7 e% \' @/ y( c$ [& ], D
  你可以使用 table, td or th 这些选择器. 6 k$ m3 K" R# q

" W( E+ y8 J: S2 C3 h/ m  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse;
; G2 V  s9 [6 t% ]: u4 Y* B. o* h3 l
  <br clear="left"> $ H' S/ i) I- @3 C
  
# c: a( @5 H9 }6 }  <br clear="right"> % `+ {3 R0 F2 t) y8 s+ s1 F
- q6 {$ F& _7 d. K& R
  <br clear="all"> # p/ B+ l! c1 |' T4 C  o

% _8 V6 }8 s9 y) w# K- L9 h  clear: left;
/ F" C2 X# n1 W! M; z6 g9 m2 N0 g5 b# V
  clear: right;
( Q& h+ M8 n( |4 x
3 X4 Q; r2 ]! G/ T6 d& z% L  clear: both;
' K6 ?, A# k/ U! m  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
" [! v" H# p7 Z% j  |, g$ x9 R/ ~
  cellpadding="3"
/ h/ L9 Z# q  \
& C2 b8 J' c5 f9 ^, B, |; F  vspace="3" % T9 f7 E/ K. c1 @

/ w! D& L, T& g. s  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 7 B, m5 o' V0 d7 }/ y% @

: a, K0 Q* Z4 p3 n  align="center" text-align: center; 6 f, L' P8 J8 r# X
% y- K! B$ n) N5 j9 v
  margin-right: auto; margin-left: auto; ) o- Y' N' L' Q
  Text-align 只适用于文本.
! q/ E/ u" |% o& M0 E. Y( v
+ e; _( }+ V) [! X' u! X  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
$ K* A# n" J9 @. ?9 L
. S4 v2 T* C# r& r2 D+ d  一些令人遗憾的技巧和工作环境 3 l, K2 A% C! b( J6 O

4 S- O/ [4 }) v2 }
6 b5 C' |0 J) i: N2 T; ~& z由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。2 @  b- p  ^& A- g
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
' j0 z1 q" a' [3 I* d3 ~: j. i1 b) |9 [9 `9 P) z! d. a- }
  理解浮动行为
8 X/ i. V+ g* u
9 Q$ W; ?  r% J" X" Z  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。 * y2 h) s8 A% G6 g6 f
1 Z$ S1 ]7 q7 z3 X2 P9 x& s6 `
  更多帮助 0 G- [, a9 l- j6 y0 I

- J" X$ p/ B( p6 f  v, P& }  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

回复 3# 的帖子

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

TOP

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

TOP

现在似乎很流行div+css布局哟
' M( i' x" \7 `* Z: ]7 T; e3 z6 v: Z要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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