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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
- ~8 T# Q/ {' T$ h3 j' Y$ y/ e. Q* t% }
  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
/ f  W9 d7 i" U1 E$ y( @7 Q8 N+ U) q& F
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。
0 c: B/ t( V# }, }  M0 ?
5 ~1 E5 H2 F# u+ X+ R当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
. x  z& s  P$ E3 o$ [! s8 F  i5 R8 E+ y6 {
  结构化HTML
+ w; K% N  U! S6 d* T8 X& D# w& o7 Z, R: v
  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 ; D- l2 b& v4 V5 A3 A' o- \8 ?2 y  w

. [/ V% m5 C+ |& W$ G" A  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
" K4 n0 }% X9 i8 z$ ^0 u- H# W$ J. k3 b6 b" f* L
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
( B6 h, p) A7 t. j0 R5 r
0 Y* O- q' H6 X: n# O  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 : _1 V; @! `; w8 D  E

* _4 x9 ]! V+ \' E& M  E1 [3 t. g  开始思考
& j2 s4 n5 O( M0 T4 N: N
* ^  e3 F9 y, V9 ]( R; m
* X6 K3 R5 g! h0 B, x- _  d% O1 ~" \# k5 E
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
" Y6 m" L  f7 x' f4 D
, u8 r8 B4 Q& {2 |! e! [- X8 L  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块:
6 t; V* H2 G, n' ]% h" X6 l7 Z( I3 w4 w( E5 c. u/ D
  标志和站点名称 . l+ o; G) c. m8 J4 I& S" t
  主页面内容
+ L% X4 L7 G! f8 Q/ \; P  站点导航(主菜单) 9 G4 w# I' g* M
  子菜单
  @! g/ I- ~, S, C. O% f  搜索框   P! s* s8 f6 ^& T; Q
  功能区(例如购物车、收银台) 6 K+ _0 V5 u3 v$ F
  页脚(版权和有关法律声明) , h) {0 A" o5 S$ v* s2 s' Y
; l5 o3 t" M3 k  T. f
3 C! e* v: x  B) s+ W$ Q
  我们通常采用DIV元素来将这些结构定义出来,类似这样: / L- [1 i6 W8 |, {6 a% A
% `' s# M8 E0 s& S4 I" M. l* L: S
  <div id="header"></div>
0 \" C8 E8 _1 J) i8 A3 H5 A1 w
4 J! g3 q4 j# [# Q& E( Z  <div id="content"></div> - W$ \" q1 b# o# W5 |# E
* S0 d- z$ @, k2 S3 e  _( S
  <div id="globalnav"></div>
7 p4 U6 O, S' N3 C8 h- ~) ?1 l# T3 t0 o: v" p; g
  <div id="subnav"></div> 4 W3 N" z$ L* N! I

6 `$ n  u% D- `6 ~" ^  <div id="search"></div> 7 s6 C: l( g7 H2 O% d

. S4 Z) X* @; ~+ G! b4 }  <div id="shop"></div> 9 k- p9 g- ]2 N5 p) [

; F' z# [1 w% E6 k3 j% r  <div id="footer"></div>
* r. F9 e. p5 u; _' B) E% C) q9 ^" E: e
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 - R: F7 ]4 {- `

. q& h  Z& _& Q! |# g: A- Y  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 & p2 R) m2 ?9 s1 c
0 c& q+ S+ F2 a) m
  使用选择器是件美妙的事
; X+ B& e' U+ K9 Zid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
5 p, T! F' W+ S; n
+ C9 c. Y8 A  U% O& P, @  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 ! `+ K# ^2 d: j9 _- X4 C5 J

. I/ K3 `# v) d$ q1 L9 y  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
; T9 E8 M' I; g  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 8 s  Q; K% _, R" R" w
. T, _( d+ }9 t) g* ]. o7 ]1 T2 H# U
亲自实践一下结构化 % k" e0 c4 S& b  N

9 h& O! |+ c( J3 A  ?  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:
: `. ]1 S- w  E& b& g( i9 e( y' R2 b' `5 G/ D5 r
  <div id="navcontainer">
: C% v* W) C- D( F' `' G, i, ^/ \+ A( t
  <div id="globalnav">
% y$ z0 F& ~7 E* L# W; g3 Q! F" H4 I) w( r  v
  <ul>a list</ul> : P  c$ r* g" Q. B5 i8 R

/ S/ `8 }7 t4 E' t, S( a/ I  </div>
0 P4 a/ T( g% T) ]
) l1 w$ m5 E% b8 Q, l4 e  <div id="subnav">
7 `7 F! b; @4 V, n" ^) D( T6 m2 I9 r' Q& R4 E9 ]- @
  <ul>another list</ul>
+ q! C, h& |2 ~7 q1 |
2 a, G0 g) X5 f1 q3 `7 P& e& C  M, K  </div>
: U4 @7 w* c8 X+ U. v7 D! w
: j. y* Z) \$ u$ x% Y$ \  </div>
3 Z8 |" u& ]5 P( Y; N6 o+ ]# Y6 ~
0 Y, Z& S! l! u( f1 ~  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
) f, g* J; J0 f* @! s
- v  q4 C: R+ U. C1 y: y: k9 E
) a1 D' r/ G, W$ [7 g  用CSS替换传统方法 6 S& A% U/ T0 s, M& A2 G7 O
  下面的列表将帮助你用CSS替换传统方法:
" }- h: R& Y7 o" S+ R' B- }
& w. m% f# b& S9 v' z8 j: q  HTML属性以及相对应的CSS方法 ! u5 T! j* D' K3 [6 f3 b: A$ `
  HTML属性 , @% J4 S! X2 u! G
0 N* F- _8 a, F: [! h
, S" Q: S; @1 w0 l8 W3 `, a
  CSS方法说明
- s0 t2 u) N) _& I' [7 p( X! _6 Y  align="left"
  R4 {& |0 {4 }8 K  ~( N: {' r& w) l0 W( D
  align="right" float: left; 3 F3 P+ I" i6 b3 j- f9 f/ a
$ \) b) i; B. P: s* O3 W
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 9 u, h6 W4 ]+ w5 k/ k

$ f! j" Q# `! D+ C9 N  当你使用float属性,必须给这个浮动元素定义一个宽度。
0 U: z$ ~% z( V' o
+ R  f$ {, B/ R% w# l  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。 ) Y$ E% G4 W/ l& V4 t$ k
; j6 Y! }- l2 Y# G& Q0 V% H
  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
% T9 W8 x/ q' f' q* y
- S; c# E, O/ s  E  a:visited: #339; 8 M2 i8 G3 f7 i

- a2 v% X9 E% I9 }: Y" [5 T  a:hover: #999; 5 N7 L! F+ }4 S( X

( m1 Q# J6 j$ p6 J  a:active: #00f;
4 r8 T$ S! N( a8 X! ?' \! I  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
5 O9 a0 G2 [9 p1 n0 I- A+ E  R6 `
- ^. E* d: H7 V, F' k  t  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 2 h& ^% A# y4 K# l5 a: |% w

! F! r  _9 Q0 k7 @$ F  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left % O9 k6 p; V: Y1 `5 g
& P% h0 h7 c! V/ B1 W
  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
  p; o7 B  N* V- V6 V0 _: D. l3 `. z: Y
  你可以使用 table, td or th 这些选择器.
7 d# W+ E  z8 B" a* l/ T+ z7 n* t: X
: y) A" h# [& |; l  D- m7 |  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; % J  ?. R3 d! [# h# u* ~: L

- ]* f4 G- A0 v- b' i# r' M  <br clear="left"> 9 d7 }# w1 d) T9 U* w! [
   4 b, G3 |4 g! T% P: a( r' l* p
  <br clear="right"> 8 a' A$ W0 Q$ Y3 A  _: i5 [& f- Z5 j

+ K4 N$ a4 ?' J7 t9 j) W  <br clear="all">
5 Q9 t' x  _; }% O
& L: F: @# _' \" C( L( |% }  clear: left;
9 g" S( ~% b* ^9 y, S9 v8 K0 B7 c5 L* x  ~& \
  clear: right; : Y* l$ e; X+ h
9 f% O+ f8 n$ q8 o, J1 u  e; M
  clear: both; ; [4 ?; t$ V; S9 c4 d4 ^$ p+ N, |
  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
* x6 d3 ?# `2 j8 n1 p1 [9 A3 h' E" R( y. U- g+ L) _- `  B* Y
  cellpadding="3"
; _4 E$ y4 U% }9 u
& C3 ]# J6 S. q0 p  vspace="3"
0 f! D( w. Z* j' e
/ U5 `7 H9 k" w3 [: m- B" Y- {  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。   E7 `) b* S* n; g8 Q7 |# ]2 J
* G6 }; B# Z! {2 b
  align="center" text-align: center;
) `2 ]' \7 e5 N& K& f3 d! d) t& t
/ @- u; z7 x+ W1 B9 f: I5 A  margin-right: auto; margin-left: auto;
8 X4 Z/ l! j6 x( s, o- ?. N$ F  Text-align 只适用于文本. ; C7 \( `$ a/ w/ T/ i, k
; U0 v  t7 d6 ?6 k
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
' A9 J' `% f* `- B2 n
3 {  J' f, }, p  一些令人遗憾的技巧和工作环境 9 o* L% d% D: ~( c; @

( D1 Y4 t; G( h" R5 d
- w, \0 {8 n: j) W) ~; M6 ]: u由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。) l# N1 [  b/ \
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 4 K- X& S8 U, j2 y8 m3 X
8 h. u- ~' O# F$ k
  理解浮动行为
* F! a% B' r- ^, D& i0 D
6 Y" b, L4 f" K5 ]+ S  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。 . x/ z; b5 G* Z+ s/ l& X

) _) }# ]- s& Z/ b' [  更多帮助 , k  D7 F& G  g7 T/ l# |+ R

" M; w# h5 K; f3 J- g8 v5 D8 s9 ~  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟 " t( I6 s- u, M6 U  k$ ^8 M
要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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