返回列表 发帖

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
5 l. F% S5 O, I: X  q/ O6 l/ A+ Z: [
  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
) G$ G1 Z* x& x. C* W/ H* d5 C6 ]) L- W* E& T
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 / L" f2 z$ Q) |' A! F

. x. ?) _; g  X8 \8 Q' E2 [+ K% H当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
& I1 k  w! |" E* e0 g/ E* m8 a1 P; Z& {
  结构化HTML
! \! v" G; y: u1 b4 e, V7 i
. }, J2 Y3 L6 O% E# u5 n  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 7 b3 b8 b" s. C& B% S
0 ~1 ~$ n. }) D" X, ?; o4 O
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 / r8 u4 D4 P1 x0 D3 L0 ]
8 h6 c; o/ l8 @% r+ s
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。   g# Y: l8 m1 G# P, l

* `& s8 k2 j5 v, F( [% ~( S4 O+ x  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
- {" v5 Z5 I2 D* p  V; b0 j
+ z* e4 J" ^0 [% y# P. y  开始思考 ; M- M- {4 e% q2 Q( d
9 t, f& v. V- R; g; M+ d" c( |
% |4 U: W2 |# U9 z# i% w
; M7 n6 ^+ H& l% e
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 5 B8 l) F- K! l3 M& @$ e) p! E' G
2 L% u' i. H4 z' |
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块:
2 b/ o" Y# |7 L/ }% ]  F( m! ?
! o% q8 \  |0 V$ e8 u' V) |  标志和站点名称 + M+ d+ _1 D& n/ d4 S5 F# q
  主页面内容
6 v6 s6 Q! S1 s3 v  站点导航(主菜单)
/ H* B8 W+ q* z( _: ~  子菜单 , r# @2 M4 r4 p8 \; ]; L0 e( O0 {. K
  搜索框
9 L) ~# p1 `' j  功能区(例如购物车、收银台) ) ?, W5 P/ V: F
  页脚(版权和有关法律声明) 4 ^$ M4 {$ ^9 C6 k8 H) u+ Y

, l. d& T* {0 {4 {% z) b& P( C
) q( N" p: L; `  ]* r" j4 t* O: x  我们通常采用DIV元素来将这些结构定义出来,类似这样: ! j+ W8 w, ?. g, N3 V

4 d8 \: S" H8 S  <div id="header"></div>
" b, {  k1 F6 s" e4 E4 S* K( y% a8 }) E
; o- `# \0 G) G+ [* ~+ Q) T  <div id="content"></div> ! y% e% Z8 y9 i
- U+ B  f, G% h/ _" O7 h
  <div id="globalnav"></div> , \% y' w% \) Q# H, _0 J

5 P5 O& I) O. z/ t' r  <div id="subnav"></div> - }) G  s8 c4 ?. t: M4 _
. Q) X5 l5 t6 F$ b7 V7 C% V
  <div id="search"></div> % `2 ]3 L9 T  y) L
# J8 Z8 C6 \. ^/ H6 r0 K4 G6 W0 D4 k
  <div id="shop"></div> ) V4 T) }# r& q0 _

/ s$ b+ I' b* d) ^  <div id="footer"></div>
  @9 o; d8 h9 w) q0 Z5 M
  D, R; |# x5 T2 }  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
$ J' ^* g+ l$ `1 ^6 o0 m  i
8 T' L  n  D( Y  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 ' J! \3 ~5 T6 ~& \% z
0 m  d6 ?/ H" e+ h; V
  使用选择器是件美妙的事
3 y! |3 d* `5 }& F# A; k2 G9 o; Jid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
( g9 }# x/ D' Q) U5 T' Z  G, g
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
$ n% ]$ o( V4 A- c$ |* g& _) n. g1 q5 O  N  T: t3 r
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
9 t3 J" m3 M7 E5 z7 E! ]+ {' [) B- `# j  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。
2 \* @  k6 g! q, B5 _/ I6 c* f2 U
亲自实践一下结构化
  |0 H7 Y1 U' N5 Q* O4 o* N1 k, F! s- b! o
  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: ) E1 h7 j0 S9 o1 [

9 i  ?, m% m0 T' m7 h  <div id="navcontainer">
2 K3 n% @! w2 J
' E0 x/ g( x" }( O7 |) S6 V  <div id="globalnav"> ; o7 b/ r4 b  L; Y

1 _1 X# s7 A7 T: M& s' R, _  <ul>a list</ul>
1 l, e" a8 ]" X0 p& B0 j# h, N. o9 n9 \: v7 @
  </div>
2 U9 |0 X5 Z$ y- Q, ^
5 r6 f# V1 e% u2 O8 F' N1 l  <div id="subnav">
$ f' S6 B6 ?. I3 ?* @& @! c4 z( _0 `
  <ul>another list</ul> 6 h* f( ~7 g. K/ x
3 N" a8 d8 b2 W5 M% u# i
  </div> ) N/ e9 U; ?& C9 C1 L
$ U: |& q/ K$ {* X
  </div>
+ ]! n6 K- b6 m7 M# k$ j5 K( A. Z
- O: |  c' i3 J, G6 D2 H/ j. K  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 8 h. z: z. Z, y7 G$ K& `+ ]8 {

- _8 X! Z2 i9 f: v& M0 i& [: J6 h: V: H) @9 s
  用CSS替换传统方法 . T" @8 O5 J3 D$ \
  下面的列表将帮助你用CSS替换传统方法:
& B$ o% \0 S$ }2 x, O; m- z. B* {% D, Q
  HTML属性以及相对应的CSS方法
6 M+ p- U4 u0 |- g- d  HTML属性
5 C! n! i/ T9 O9 q$ G/ m) @2 R% K2 I: _9 z6 z7 i
, v/ {# [$ f: a( h* x0 n$ U9 \
  CSS方法说明 ; m& I2 V. {8 }1 g: ?- C- ?
  align="left"
( Z% v4 o2 ~2 b/ R+ b7 ?
$ j. z$ R: q" O  [% o( s  align="right" float: left; - w9 b. {) N( j  }

1 _  G+ A3 w% D. R" t' W- h; Q  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 ! m+ c& r: C" A7 d; T: {# R9 _
3 O0 D" y" t/ q, q
  当你使用float属性,必须给这个浮动元素定义一个宽度。 5 Q& W1 s2 b/ \" V5 K  ~7 c

; Z2 R, g3 i( \8 r5 z  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
$ Z% i& j3 O; u$ n( }: b) u8 U. q  I: u) n/ n# t2 z
  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; ! I6 |, c: f( g% @. }# V' x5 M/ t

' B/ ~6 R/ G1 r( S) Y  X  a:visited: #339; % q! L, C# C. Q) K7 h  v7 ~$ t$ R3 \( j

% T2 `% Z9 p8 w& F  a:hover: #999;
; F5 n- j3 H6 O$ N$ h7 s* A5 K5 a' z/ u0 B* t# u8 e$ L
  a:active: #00f;
0 j0 |( R) k& j; Z  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 8 a# p2 s1 L) }$ Y( Z/ {

) n6 U( x0 K# G  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
. @' E2 M$ {; {6 G5 V; p2 t- W; K. P! u' _. r: L7 {
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
1 Y4 t7 ^+ j  ^6 D. x* b1 d
. `9 H# i, S2 o% k8 p' U  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 * x7 z. y9 x  f5 Y& O

' c  m9 \# M. v- X% ?  你可以使用 table, td or th 这些选择器. + s9 x, \# W" s$ C

+ X1 z! N, T! _& G; R9 V6 j$ |5 E  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; # ~0 s0 H3 [3 w* v7 }9 m5 ]2 F

, s7 w+ d+ d1 z- d( N  <br clear="left">
" U9 i! x' T) R; @% F   2 {" c5 A* B; H
  <br clear="right">
0 r4 d6 S! R& X- b
$ Q! d, w$ p: _" W% s. ^  ]  <br clear="all"> 1 q) x! o" X, w- i+ S
2 e; a. y8 n) Z
  clear: left; ) `% r# ~, Y! }

# T1 h5 L3 b7 q# g7 n* g  z  clear: right; . M* B1 e" Y4 @3 N7 ^, m

7 f# `( n- W) R: n  clear: both;
" \/ F5 t1 [4 H  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. # G* j* n# V5 F, ?, {" H0 S4 l2 d5 c
9 q8 P# u' I7 e: U5 b  D5 P
  cellpadding="3"
: T9 Q' x7 T; d: k" l! p
2 V5 G2 J$ P, D. U  vspace="3" 0 q. o- N/ H' D0 [0 l; u$ V. X5 b
9 z4 ~: F. ], [! m
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 1 ^8 `! j6 D8 B( _" u
+ A3 P& g" W' n+ W" t1 F/ n
  align="center" text-align: center; 9 A- B. M# j( W) B
1 f3 Y( h* M8 i! l9 h! d2 f! N
  margin-right: auto; margin-left: auto; - ^2 G5 C( e8 F( r, W' I5 m
  Text-align 只适用于文本. 9 X- U) c' q$ P
( ^4 F* E. n( n) R0 d, \
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 1 n9 X  t+ j* {7 c
0 f7 t9 k+ i' c* J# C+ E, X
  一些令人遗憾的技巧和工作环境
' p, J+ i% F* q, L4 A8 A+ z4 K& ]0 d
# t( V" y8 y/ u: p
! m4 A. C+ P( b( u% N% I由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。0 h- ]% N8 l- _( H2 o/ W8 r; z5 P: x
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 ' R- d; P; ^: k( @
& |6 I) H/ h2 F# P: M. W" p
  理解浮动行为
* p% \. }/ L, A3 L
$ j2 C/ H1 }9 |0 n( p+ J  u  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
/ R, g1 c. t( {3 ]2 r7 m9 t3 |: c& W$ t- S
  更多帮助
" d. M; H6 z* `8 v) {, B: i* h4 }  m! l* H. a0 X) R+ }: M& X
  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟
+ c- L0 D* d" P8 c: @# f! o要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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