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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
+ S9 p" [5 v6 h! F4 Y, @! z0 Z+ B" Z
* l  c. i, J: q8 T/ b  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
' Z& e& y% g" t# }- x
. q& W  P5 y; N. l3 D  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。
$ {' J. Q; E& l4 E! k
( I; p) E! w% J% s6 q当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
& B# M$ |+ }% b# _4 J2 R6 R( q  d9 d3 b
8 ]: z5 S4 e3 u1 o+ y" M0 s  结构化HTML / k" w+ t8 h( n. [/ @3 t  a, E: t

: R, m" N% X4 ?  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。
/ t/ t- J' F2 ]* L2 S9 l" d) V) {
; ^+ F* N) P0 d7 x+ P& j: e% _  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
7 A4 F: g: t3 {4 V6 K! v# c8 N3 s1 |& `' e- Y* y
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 8 D* C3 G' D9 f: e% i) A+ Q

0 Q# S" H3 i% H  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 * j) @2 }, z& z( D* g0 J' q

3 ]. g: m+ O0 c9 I  开始思考
2 |5 u' |2 P7 L! F; X6 {) O! X+ ^. X. E0 D; h
! [& L4 [5 c5 a* F
! z& \) a# T2 v/ ~9 |
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 & }2 f) n% q5 y" _- i: C
2 w* c' `% v. m/ Z
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: 4 Y2 t+ `/ ]* b. ]1 C) W/ I$ |, z
0 E6 H$ O6 w2 Q1 D
  标志和站点名称
+ `7 q" p3 |5 L( {2 h  主页面内容 , f7 ~# c0 H, T- |* I$ {- Q5 j
  站点导航(主菜单) 3 F- q: t; {+ h* \3 g8 d
  子菜单
2 K0 D" V8 }/ o+ X! y8 Y  搜索框
$ E( r/ t8 d6 V5 w( W% a8 {3 l  功能区(例如购物车、收银台) 9 K4 t# G8 S6 k8 \( W
  页脚(版权和有关法律声明) ) X5 @: ]* C, H) k% m' c" W* Q
( J; n, D, ]. M2 ^/ X9 y6 h8 O' c

: o: K# J+ A# Z8 z  我们通常采用DIV元素来将这些结构定义出来,类似这样:
# Z$ X# H, ?" `# L
. a) J  M: |& k- D2 }% a& Z9 i  <div id="header"></div>
( W8 o$ k* h1 C- b: ?6 X
; a  Y' b* ^  o; _. C, f" Z# R* d- b  <div id="content"></div> 9 n; q2 D6 _3 ]  V# u- b+ L0 m

9 Y, D$ Y$ _5 f- k- K. E7 l  m  <div id="globalnav"></div>
. j' v& V7 b  r7 v4 T, M1 U
) a( K! A8 k. h% O0 s3 @7 J  <div id="subnav"></div> ( |+ n2 M& U7 [' v

) C: b, L4 ]' n  x  <div id="search"></div>
2 T& q+ D1 @0 R4 K
) z! f# D6 s# X* T+ R) e, c  <div id="shop"></div>
8 z% H% n7 ^7 ]* Y! U! |& D# n9 `4 l$ h8 p1 y( V, B8 L  r" ^
  <div id="footer"></div>
0 k9 |* u$ W4 ~2 j7 _+ ^+ T5 g7 {/ A% p9 n6 s
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 & C7 ?) S6 a# t- l. G0 h( S( q2 M

. G- ?' N6 Q3 F; U' c% E( {0 y3 t  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。
9 c2 v  Q5 g+ Y$ v, o7 ?% I
: M$ O+ b8 {7 w& b) A1 c5 F  使用选择器是件美妙的事
2 t- i+ {0 Z2 h* [0 i  o8 {id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 & C) p2 z3 p% u& D$ }% [3 |

8 P5 J# n9 i5 Y2 H2 d- s1 x  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
" P; O: Y* b* g1 s
/ w$ m0 C/ L+ [( i  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)- N1 H. N  r0 N1 G6 h
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 $ k( W# w  z$ o( F) ~/ j. x& D9 a0 [
4 C5 F* o) J6 I/ L
亲自实践一下结构化
4 G$ @" E+ O2 ~" q+ A& I
6 S9 [. i/ I, \6 t, b& L9 s& v  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:
7 o. Q7 L4 O/ Z
/ j% S0 R2 @5 [* o. L  <div id="navcontainer"> ; P0 Q) p, d' v
3 C( g4 e/ |& {
  <div id="globalnav"> 2 Z/ T0 E: j+ x; i5 [8 w

( L! E$ W! U- ^  <ul>a list</ul> ) I9 l# D* B7 y+ D5 O  S8 K
3 L% L' R% n% O. G
  </div>
& F: t4 I, x" ~/ z' f$ {) h, _% F7 M* }+ F, C0 ~
  <div id="subnav">
2 n1 F+ I( q1 j) |- j8 O7 m( P3 k' S' j
  <ul>another list</ul>
+ s' z! o1 R  ^
: G8 B  v+ r$ C- ~  </div>
6 p. J4 E! Z. n- C( D9 c5 n* m/ \4 L* ?. S
  </div>
+ ~4 Y  U. @% i* z' }# R7 u$ ]: _- b7 q* p
  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 5 l+ E" f1 z' k6 i% |$ l% \

+ N$ J/ i3 Y) T5 {% @+ s# U  G
2 I. j& `% I" w1 R1 N% ?  用CSS替换传统方法 7 l, P) y4 i6 \. k* S
  下面的列表将帮助你用CSS替换传统方法: 2 o; n( T) X& V- I" u; S( @" P
4 ]2 }* Q, A1 g$ v$ h4 G
  HTML属性以及相对应的CSS方法 ) `7 d+ _4 L1 ]  q) M5 Q' r
  HTML属性
# P% p7 ^$ V4 Y+ _: X' T
: i1 r7 T* \6 ?& t% G% Z. ]+ i$ R- y& s
  CSS方法说明 " R4 K* K* u6 F  i$ e3 p" d
  align="left" 6 T" p' K& `" e9 L+ w% `9 }& B
3 Y" \8 a1 c0 S/ {
  align="right" float: left;
, B4 ]- S! ]/ N, s3 l+ d: L) U# E8 n" [9 {
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 7 x9 @% b  J: P. D

  N1 S. Z6 T; Q* B# Y+ c  当你使用float属性,必须给这个浮动元素定义一个宽度。
) t* U& [4 G# Q1 ~  A( M. h6 |& B4 u
  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
; S3 n' }( @' v$ v3 y
+ P! z/ ~6 m' ?& }, n& A# M. }  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; ! A' L6 `2 ?: Y: H- e. O  p# ~" e

/ V& u' T0 M! {  n  a:visited: #339; 2 W; J& b/ H) h) Z5 u

0 [) {- }" y& S' V5 ~; u# c2 Y  a:hover: #999;
7 J6 s. u0 d3 m- I- f6 I' N& X8 S. A0 Z6 y/ q
  a:active: #00f;
9 A; L9 I; e: w1 M2 M  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 4 q5 B" ^. c& L9 `
' G! _$ J9 K, X4 i* V3 ~7 v3 d
  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
3 Y2 r) K7 I/ r: ]- z
' A8 H5 Z3 r, f  `8 ^- C  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
$ R' p9 x9 @6 i4 _; I1 x. m# q4 O# ~- `4 J+ m9 G
  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
0 N5 t8 N& M, V0 Q( [/ f
2 A( O7 @! G' w# e9 K& S  你可以使用 table, td or th 这些选择器. ! q9 V7 \) L+ M+ h1 L* f

4 t3 n4 W) p* Q+ M7 X  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; ! G- p7 j0 X2 w. M$ T
3 c! r; @, o7 M3 b9 |  C0 _
  <br clear="left">
: q: e/ g1 g5 P4 u$ F/ {   2 N7 Y! t! {+ w* ^% f
  <br clear="right">
; e1 U% L5 ^9 c( X+ q3 y4 ]7 a
0 G6 l5 t: G2 C" M$ l  <br clear="all"> % V) N" I5 R' C* T. X  b1 X

* d" r( E& w9 o  F  clear: left;
7 p& h# Y  q) D5 D
) r9 @: d6 t( l% T  clear: right;
8 h1 L. D+ V, d2 h# S( M; a$ W5 M2 N9 Z
  clear: both;
+ p; A, f7 I8 b8 |  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
8 X; F  D8 G6 y
- G2 G) F8 D/ L2 |3 q( z! E0 g) |7 R  cellpadding="3"
% R/ |- h# \5 h4 H; q
" k& ?8 Y5 C. X  O. C2 E* C3 i  vspace="3" 2 ^* R0 G3 _+ E5 H/ z0 n1 W
% T2 e- W) t2 \" s" p  ?: Z
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 ; Q4 o- x. A& \, p
6 h' h7 Q- J8 D/ W' U
  align="center" text-align: center;
/ a+ }% R* J+ s: t) c+ |$ V( Z6 r% z) k. B0 D1 h; \) x; `
  margin-right: auto; margin-left: auto; 5 o, `- b9 n$ q3 ]8 Y  |0 m
  Text-align 只适用于文本.
" q' z6 Y2 b: z1 [/ o& H1 s" T( b: z6 N2 b. H6 U* {; Y
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
1 ~9 d0 \. V4 E' m( D
2 k+ w+ L& a7 ^( B" H# S  一些令人遗憾的技巧和工作环境
' H+ a) P5 h9 X$ _! o& `& P5 {4 A/ u! F8 d) ?/ ]
, F, N+ I$ l; S, \$ [
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
# S/ \7 H. C2 O: H& S7 i  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
; c  T4 B! D) Q. H
/ _% f  g" c' k) U5 ?3 x) w1 {- Z  理解浮动行为
+ ^! T- d5 p7 Z3 J! \
) a+ |3 N  K' M# N2 P! q8 b  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。 , a) d) C, d4 Q) [- W
/ b5 `( {4 d( Z  Q; ^' w
  更多帮助
( C6 o# q. a1 ]* w, k7 L2 ^# h0 F
) C; Y) r: h! {6 b: ~  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

回复 3# 的帖子

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

TOP

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

TOP

现在似乎很流行div+css布局哟 5 L% P( y3 V9 z7 ?. s7 Z0 D( c% F
要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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