返回列表 发帖

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习: / A+ V) u$ i$ ^2 |. q- N8 f- C

3 j. T$ ]  q  a4 k, [( @3 I: e  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。 ; d! G$ B$ n% e; d7 i

- U9 f, `- A6 E) I9 O  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 7 O5 {# \1 [* e( ?

5 \  O( [% `" }& P- n& ]' T当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
! b" g4 i( c8 @1 f3 L
/ `1 L! S2 F6 e/ D  结构化HTML + Y, e; {, H  r& O, Q3 |) L1 V
3 W5 z# W5 r: ^! M+ ^# g5 X9 V
  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。
7 Y+ p8 k* G6 ~/ C8 d3 {' W& B/ o' }  o% M, o, F$ D
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 & u" T  n) `/ F0 g8 h/ T9 a
; V9 k5 c! H0 V% E' l5 \/ `
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
5 {$ }, p# J6 p) G/ s0 A; K6 K1 z
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
! D2 w4 Z8 t' {1 K) j9 A: H
. {7 \* V& Q1 ^3 Z  开始思考
6 A" n, \, f, w- }4 b( E& y8 l
9 \  I. v  }- ?" ^) o( R5 [
% S3 I% m; E" ?% Q  P2 J0 Y: N' r' p; q/ r* P- K
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
6 A4 L* }- X$ s; A  T
/ N4 F6 j) k2 [% M4 h  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: " T# b; P! }) ~1 Y
3 {" V) y) G5 h5 e8 T
  标志和站点名称 ; ^" @" J8 }; f2 p
  主页面内容   ]% q1 }& R& j* _( h. J: r: e
  站点导航(主菜单) 5 h1 j. @4 q  y
  子菜单 2 Q" l( Q: J" c# o7 [2 W
  搜索框 2 H6 G2 H/ Z. |9 K1 \! D7 r
  功能区(例如购物车、收银台) ) p! g$ P& B7 `
  页脚(版权和有关法律声明)
& U" S% J. A3 \4 @. ?6 U7 U8 e+ m- O$ i
& M( g( ^* K# z- p. _# U
  我们通常采用DIV元素来将这些结构定义出来,类似这样:
- G; D0 Y* c0 c. ]: K3 V; q. l  t9 m- b6 W. R0 Y: C
  <div id="header"></div> # F" t# J' E% Z& M7 ~8 k
& z0 y- k) k' q# ^' i
  <div id="content"></div> 0 u) i6 G: S9 S% i- H* E7 w! }

+ z9 d: t/ d" V( u  <div id="globalnav"></div> ; W3 C4 N( {* @+ ~+ u: d* t
* i% Y5 t5 }1 ~- Q! o3 E- C8 C
  <div id="subnav"></div> 5 \0 Y/ A5 J  Z5 e% N' g
1 C7 c  n0 t% ~
  <div id="search"></div> 2 B+ r) m- P- K
8 H0 m$ T, ~- l* g' s* O
  <div id="shop"></div> * {) p% e) {$ H2 z, U) P3 H8 Y  I% e

  ?4 W" Y! V2 B6 W& a6 i" W, H6 B  <div id="footer"></div> 4 X7 e4 V- i4 @& B
6 N( b) Z5 k! n9 q& ]3 E5 }1 j6 S
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 6 [! K1 q: d1 e( z5 f4 R" N3 G' N

( f/ d/ D3 q: I0 E( b  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 # p/ Z, L! v) S2 A

2 S; x2 q  L) b  使用选择器是件美妙的事
0 U" p! Q! r: _/ [$ K9 o, A+ Cid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 5 g) x1 J$ e8 y2 o; `+ S3 K7 P

# [, L; l  E4 p% _' P  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 2 B! n8 N7 a4 Y% R2 K9 F# a

- [# U) w+ s) ]  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
2 n, b3 X/ f$ b( s. N$ K7 [  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。
) z+ o) O: A1 r' s
, N* Y5 c$ j7 v+ _亲自实践一下结构化
" a% @0 {7 t  s* c, A8 m+ f5 U) d' E' `3 u" ]( R
  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: $ I9 p7 ~$ ~9 p$ M) R  D7 l

. n6 `: ]$ T" Q1 `* M5 r  <div id="navcontainer"> ! m# w$ V$ ]8 G# D

5 q6 v# L" n. M  <div id="globalnav">
; k* Y6 k: {/ \" @
, s- n9 B: ^. ~+ J7 z3 V  <ul>a list</ul> - J# Z/ q# k- W! }( p# Z. W

0 v- y# x" |0 k" r  </div> 9 ~5 D. @+ t$ N
1 }  |- F& Z2 v4 s4 m
  <div id="subnav">
3 R, p/ t% Z4 z7 c  R) j
  @2 {) w( F$ N  <ul>another list</ul>
) `6 @2 Q# r4 Q" X/ i( `1 l) ?, l( O
  </div> 5 ]$ V, H( b) Z' L" n

( i! T+ w# Y1 f  </div> 5 h+ Y  [) J& Q! z

% c1 `$ M! b! K2 E  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 6 @- D; K" U; j: X6 G6 g: N

$ ^% b+ n1 f( E6 s
8 d: ~, ?; a+ |/ U6 t% s  用CSS替换传统方法
! F( ]" ^5 Q+ z( y5 W! Y  下面的列表将帮助你用CSS替换传统方法: 8 Q% ^4 f2 [# M5 e7 X) r

4 }# h+ {$ h5 o& Y7 |7 N  HTML属性以及相对应的CSS方法
2 S! i$ g% n& n; y" R  HTML属性
/ |6 N- Y& s' O2 O# |9 \5 n: U/ L+ u) k; @9 o+ s) W) U- L+ T
& d) |: ]) A$ J
  CSS方法说明 , I% M) P5 K6 w5 s
  align="left"
. ~4 F# O2 h1 q6 f
4 F( I% S# T9 J- }, p4 Y  align="right" float: left;
. y( J8 K2 V$ t4 V% s, e& q7 M& g3 Y
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
4 G0 y& {7 `; ~; s' P# u7 Y) d- c( L+ H, n4 d0 N  {' D3 d
  当你使用float属性,必须给这个浮动元素定义一个宽度。
: x: P1 ]1 K# y
5 B7 H' w0 {1 z# U( h  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。 8 _: k1 \- }2 d6 |1 N7 D! W

  F4 r& `1 s; e; w8 ?- ?  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; ; q) D2 G- f4 X1 `! o5 _0 {1 @
6 C5 V, ^7 t( l; l6 c
  a:visited: #339; 3 o. z9 D( W' V- h

6 J2 s9 s: @5 |7 j- h- Z  a:hover: #999;
( X$ [7 o. K, i& H8 n1 A$ _5 r& Z: P5 e% g5 w0 ]
  a:active: #00f;
# {, M9 g% p' D6 \" y  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
9 K6 S# S+ X% b! Q9 k
$ T- }! C9 a, P5 O. d. r, ~  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 + H* z; r/ l. M

0 t" e7 T+ U+ ]: ]1 Q/ B  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left . ?, L9 p2 B. I

- m5 F2 E* P2 [  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
8 [: N( v( A% a! j  T$ a5 o( ]4 r0 O3 f  {, ?
  你可以使用 table, td or th 这些选择器. 6 B. Q' c/ D$ u- P. k
) z" l3 G( s! i1 Q0 Q
  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; ) P& B: j2 W# t: h

: d( h4 Z/ W; P5 r1 W3 l  <br clear="left"> 1 ?8 g9 j. ]( Q  ?
   8 [+ y1 Z: n5 v3 ?5 n/ G1 K* ]
  <br clear="right">
& k- ]" q2 h( O. |; S* O. ?- e( j% Y7 b6 |/ G/ F9 l8 y2 L; F9 r' W
  <br clear="all">
8 e9 b5 N: q$ K2 W; }* u1 F! r4 F4 z  w. _
  clear: left; & I3 V* H  V7 N% c) g; C6 I# \6 B

  h% N7 @9 |( ?; M  clear: right;
6 ~$ N8 B" s! }$ R/ n& r0 F+ R
7 N% T! r2 E8 R6 }  clear: both;
0 u( x9 Y$ Q7 R8 ~+ D  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
: z- V8 O8 Z% J2 I# \; K9 W( Q' s; o* N8 Z: e) V+ E
  cellpadding="3" 9 f0 h/ G0 Y& j5 Y' N
% H7 w9 E) k) v3 ~. M
  vspace="3" 0 ]( z5 |. m' v
6 y/ n) D3 [+ A* P1 J: U
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
- I' o. a* i2 c4 }( g1 X9 w+ _( v+ d. I& P" v
  align="center" text-align: center;
: N( g! K, w" M6 R! p& o+ o0 t$ s3 Q( n8 W7 W
  margin-right: auto; margin-left: auto;
' r5 V4 \2 y3 }2 ]6 l  Text-align 只适用于文本. 5 v* j, H8 u$ B) t: z3 W7 {

! _$ _( U4 E% F; |, L+ L- W# f  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 ( D9 A) h3 y' w0 n, L( E
2 {) i4 `* ?; ~6 t8 {2 n
  一些令人遗憾的技巧和工作环境 3 g( l! ~; R% t, T

2 i- d( @, j, j3 z% B( k' S' @" V6 U) `- Z; a$ X9 }# @% a
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
3 G1 z1 v) V9 ?9 @  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 9 e" ?6 R$ i+ N- M

. o( w  J( F+ C' T7 N) j0 Y  理解浮动行为
5 U0 s5 l, T( }" {! R) l/ k' a9 Q( u# E. A: j2 K9 ?
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
5 Y: ~' o5 q7 a: {
7 R; i3 A* F. P2 M  更多帮助 / L: y8 ]( Q: J% N$ V& c- R

: @, W5 |1 A# N+ Y) v9 {  ^  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

回复 3# 的帖子

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

TOP

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

TOP

现在似乎很流行div+css布局哟
8 q9 O# v4 M: w4 v9 d要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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