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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习: 4 r  W1 p7 G5 U2 Y: J5 ]: H
) x" H3 \# R0 c( g7 v
  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
4 i( B1 u% S+ z5 ^* ]: B6 [- c0 C, A# E' U
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。
2 Y. I, T% Y( p( l/ h% i' m( L$ u7 g" |+ G' [- X. v
当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
  F" d; V3 d# T9 r& z
% ]3 H1 C% r$ i, M  结构化HTML
6 B2 F  \  s2 o1 t+ J/ m. Q2 S' L# V: F! O
  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 ' F8 T$ j* N6 ]% M

. n" B* Q$ r8 i- Y6 B  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
2 H$ I! F, G7 y6 |
: l) S- p3 h0 [0 f; U  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
! `; Z  Z) N1 i" ~+ a9 V; i; _
* Y6 |7 u4 g) R  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
0 k5 q/ w( g* J. N
$ ~% U. t( n; {# V4 j  M! H+ a* p  开始思考 $ `, m: l0 v6 l+ I. m/ L

0 W5 o4 J" b. z4 B/ S) {/ s" t, [5 s9 z: J! ^8 D* A7 t, ?- X. B; y

+ B/ w) }" ~2 n  @, q; ]1 U  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
) q  O3 B4 @* Y+ w% C( y2 \# ?$ u' H( D# g- {! P
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: 0 C% u2 L- P% O, [* M

; |3 K9 [5 u, I" P2 o  标志和站点名称 ' g7 b$ i; y5 ~, }  s5 U
  主页面内容
" o1 z, ^2 D* Y3 `2 s2 f  站点导航(主菜单)
0 _1 _1 N, y% F& }  r5 {/ @& V! B' q  子菜单 ) `" }) Q, j. m# D  v8 z
  搜索框 2 a8 m7 u* A7 Z3 L9 Q
  功能区(例如购物车、收银台)
4 H2 c9 ]6 q9 n0 {  页脚(版权和有关法律声明) * a/ }4 H% ^0 h6 p7 x2 Q. m. Z
* n/ a" X& t  l9 O
- [! |: E6 q. z
  我们通常采用DIV元素来将这些结构定义出来,类似这样:
/ k: Q" x6 `$ Q9 C5 \6 K1 N
7 e% Q0 l, T. }1 Z! [( V% M  <div id="header"></div>
* q; }4 L* c/ G9 w: k9 }) x$ ?( ^( U2 o, b* H
  <div id="content"></div>
) n* s/ [( q) D
) O4 n( L( R2 V  <div id="globalnav"></div>
; l1 Q) \: e) g2 k+ x" G' a# F* ^: B5 W
  <div id="subnav"></div>
2 y" v) Q7 v/ _$ j5 X: e
* q! x, V* r. g& y7 `7 c( ]9 U1 ^  <div id="search"></div> + V' r4 t% ^4 k, i& W& X
( p4 T" A3 c) `; L) [$ j) ^
  <div id="shop"></div> ( p8 n& j, Q: c: K' |
5 ~4 ~: x8 D) ?$ u
  <div id="footer"></div> $ i) t: |8 p% y- x

8 B+ W- Q, V( O# ~0 `$ ~  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 0 @" @6 o$ N( |+ y- N9 [0 ~  R

8 H+ A9 E+ r& ]& q0 U  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 * A* ?1 ~' k: x# W

: x- `, b8 E- B$ f  使用选择器是件美妙的事
) M: x4 Z* U, ~9 `id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 6 c9 C1 j$ E# t, r, b! ]
7 }( k! ?/ c3 p7 ~8 P$ ^5 U  h
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
/ h3 M% P; u- s% ^
* F( f3 }" ^! |. u  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)- Q7 e, l4 Q; z4 k
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。
4 e" G% m, o& D, f: L6 g5 {- t! s& n! c/ s: D9 A  [
亲自实践一下结构化 - g4 K  |3 F1 \$ h4 o

4 n6 K' m7 d8 G/ B  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: 4 k) f1 v, i. |; ]

7 N) `3 T; {6 S$ d3 l0 [  <div id="navcontainer"> % d) g6 s2 m) C

8 V' ?& m7 r: }  <div id="globalnav">
0 p8 w% |8 A% y3 j5 X
9 y6 G/ E/ B+ c4 j5 I& z6 {, Q  <ul>a list</ul>
1 j: Q) M- T( @* H' C8 D" y; T( D1 z6 t/ J2 b7 a$ I
  </div>
2 _6 D6 u1 [( ^. v; t+ x7 _: `7 B* L$ t" b2 \
  <div id="subnav">   {/ _; |4 `6 ~( @: W5 c# _. X" d" N
3 x( A- m9 e# T; u" K
  <ul>another list</ul> 6 R8 }; D2 P" ]. n6 \
: j; F: d6 R) ?
  </div> $ D: G9 V% b3 L- o7 y$ v
- J- t( `% h5 J, u) W8 A" _
  </div> ' j* ]5 f% f5 c( i7 T5 q1 Z

) V) j9 u/ K5 Z: S1 Y  R7 m( q  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 1 ?  t; t" g* p% j" h: {; U
# H% _# Q0 a) \8 b& g  W9 m5 v
7 ?% ]; }  ]1 v. B/ z( f
  用CSS替换传统方法
# M; m1 X8 o! \: T3 N1 Q& [  下面的列表将帮助你用CSS替换传统方法:   w0 H3 v( `6 J8 O( O3 s
0 y2 O' d" z% T4 T9 A+ G
  HTML属性以及相对应的CSS方法 8 r$ Q6 [: |% X% {; @3 D
  HTML属性 4 c' Q4 O* O$ D8 K

- R2 w3 ?# Z3 ?- V0 w1 z; k( f; R4 T% P; S8 m1 z  t
  CSS方法说明 ) k) Z7 r; _; e* e# d
  align="left"
& `1 r( m7 Y1 {: @& G$ S
! F( ?: C9 U/ t4 d! @  align="right" float: left;   i/ Z. Z  G+ L& }6 S- {4 S

, _1 r$ v( X4 c6 {' o% \  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 ) V1 U) M. g6 X2 k, r$ }

, X! x! J, @9 Y9 R8 `! \  当你使用float属性,必须给这个浮动元素定义一个宽度。
9 k5 I1 `- w7 q+ H$ W
6 M! i7 w* [$ z' e7 n  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。 # W" z/ |/ p/ E

  \$ g& D: I) l- K7 u  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
' q) i% ]. h, R
( V  \+ z) L1 `5 i4 |' ]  a:visited: #339;
! |4 z$ z% t7 n+ C- V: b( A/ ?2 S& h  l
  a:hover: #999; # A1 g" \7 f$ O. v" X

2 u+ t: H3 b6 G6 ^1 x9 p  a:active: #00f;
( f: Z7 \; I8 e" i. y1 j" ^; Q  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
/ |# P. ~! R; _+ }
$ R8 g% X& P9 H, t  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
6 {$ v' p  a2 G8 U( s/ z7 s( W" m2 r9 K) y0 E1 A% h# e
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left 8 H* \3 E  p9 K/ G2 z9 N! x* o

: p  P8 ^# [# N, F8 D5 D  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
# o2 p) F; ^" ]1 S  F+ F- Q* b/ K: U  J0 b0 l. O( z
  你可以使用 table, td or th 这些选择器.
% N$ E: ]0 l* l8 y+ I+ p# H0 j  b3 `1 p, D/ M: V
  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; 1 A3 N" U; P  a
) d4 D& e5 W6 c" \% B& p
  <br clear="left">
( B9 M$ _/ L( v- ~   4 }& g9 i: U9 m4 y, t# C4 K) ]
  <br clear="right">
6 ?. K8 z% u8 _! {
' K) F5 @, h% i: R6 I* p" c% G  <br clear="all"> % L/ [6 c1 T) T; K% J3 t

" a& T% R. n, ?7 B- }6 u  clear: left;
# c1 h5 v, w2 G. f) G7 u7 I  h# n/ N( r. f
  clear: right;
/ Y0 [" k, W" R" c  M5 `3 j& E) V, {+ g7 a5 B% N9 {$ N% C) k
  clear: both;
8 a: S' x% y, O7 ?( v& g  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. : |" T! s' S# e
& p: |  N& E! @+ X# f
  cellpadding="3"
% b& n( j0 B7 U/ Q% g  w! \0 I* t7 b5 {. w0 z, Z# S8 n4 S, P5 M
  vspace="3" 0 n+ {2 h; Y7 R! L; A+ H6 c) _
* ?4 c  G9 \! P) B9 `  j' _
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
$ X& S0 @; i) W9 Z, E8 v- C( H9 Z+ Z3 f: ?
  align="center" text-align: center; 1 k# ^& j6 Z$ L+ c( z( _. Q, S

, H5 k5 k! ^7 j% e0 N  margin-right: auto; margin-left: auto; $ a5 E  ?' d1 F$ E9 A% _5 P" w: Y
  Text-align 只适用于文本. ; o& w, q0 F! s8 d8 Z8 c* }8 N5 [, |

9 X$ I1 Y5 m( n+ E3 g# s  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 4 [6 }( E" A) o3 v& t* u
9 I7 f8 F% B8 {( s
  一些令人遗憾的技巧和工作环境
9 |+ Z$ ?8 ^& z( ?
; P5 ?, b$ |7 \
4 u) V" t$ Y& n' I& I. {" s由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
) |/ H- [5 P1 `$ W1 v- n  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。   d" e) {# w2 R! f

0 _+ s5 J9 D: D  理解浮动行为 3 g- s( S( k' U3 {  \
1 |6 ^$ n$ h. B' K0 S( F$ g3 R
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
* l' w1 Q4 D0 Y- N; p# c6 A
) B+ }, I# \$ u3 o: g  更多帮助 - _3 w4 W8 H; |6 a' I$ h  ^6 }' \

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

回复 3# 的帖子

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

TOP

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

TOP

现在似乎很流行div+css布局哟
) s! @+ j9 @' r% w要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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