返回列表 发帖

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
* x! @- v' X  G) _$ `
, w, \) O' N6 w, u3 b4 m  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
7 j2 Q) I* Z; j' x2 [2 m
" y0 L( E2 l% o6 n9 N  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 ' C1 O2 ^& k* ~/ g) |1 }* j+ C

0 o- t0 o  A# ]1 Z/ p) t当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。 . T) |$ t5 R, l" r+ p- _

* j- r4 E; `. l& Q  n; ]' Y  结构化HTML
" c5 {0 m/ K8 D3 Y, X& N8 v
7 v2 y  j2 U& m8 E- U# z  T  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 ' G2 W3 l2 t, ?! X# @2 l

( P) h7 z0 O$ h  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
# n5 N% ?1 a  |( P6 |
8 y4 e% d( y' H; l/ }  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 ) y. T, m- K8 ]: }

+ B, L0 r; W: i) k8 z% s  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 - U4 X: `2 T% v; r7 \, ?7 _1 z! R  Q5 F
8 \; ]  w4 j& E5 F2 U8 Z6 i/ [
  开始思考
+ b6 d" f4 `7 w  ^) x8 k
0 |% W) o- m3 V8 }6 ^
5 ?8 b: @5 v4 Y2 T4 w" T
/ o# C( @( a/ a. M5 k  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 ' C. I6 M' K/ n! ~3 w

# O& Q1 C+ \# w" V4 d  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: 3 D: U; }: T8 q: }: o" w6 r$ Y( Q

( }; L) C- V! F3 ]' C: R  标志和站点名称
- e! u9 p/ e) K) C  L1 C  主页面内容
$ g3 d  h3 I% d7 z) T: y  站点导航(主菜单)
6 Q( ~' w' m" e1 H5 ~  子菜单
3 d$ Q- n; Q1 ^# o2 S- Q  搜索框 : _  H8 ]; }  A
  功能区(例如购物车、收银台) ) B$ T( F( J9 ^7 {2 @" U
  页脚(版权和有关法律声明)
) d. t$ F# x3 j: E7 K) c2 q' Z3 [' D
: J5 U  @) y6 h4 _6 C+ O- j0 D
  我们通常采用DIV元素来将这些结构定义出来,类似这样:
; B# M9 K5 h- A. \
5 R! j8 X9 V; b0 K$ c% s  <div id="header"></div>
. X5 r: z1 U1 v6 Q; s* R0 Y" R4 O, ?+ {( C! [1 f
  <div id="content"></div>
3 a  H0 E3 D' k7 O+ @( Y) U( a7 B& d: e1 J: S( |
  <div id="globalnav"></div> - _+ \" s& s( G/ ]

8 M! L5 K* a. H4 N3 z7 }) ~  <div id="subnav"></div> " I3 x. d. L( A
  D0 g2 y. v. p' W0 x
  <div id="search"></div> 4 [, C3 a3 x$ c- y
! |, h2 B7 r1 P/ s
  <div id="shop"></div>
8 K' t% _( o' L% i1 f$ i3 \$ ^
4 o/ I0 A7 m5 p; \  <div id="footer"></div> ; l  g+ \' W' p: k. X+ e
6 j. n# e0 Q2 u  R% m$ U" }
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
7 a" c. E% |7 N: |9 C. w/ }  F- C; T1 h; W: B3 X
  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 6 B/ ?. ?% O* @( y* P# ~8 Z
' Q5 N+ [% h: Y$ }  S# x5 C1 }
  使用选择器是件美妙的事
4 q* e2 u8 h/ w8 [: R- j  Cid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
9 W! y% p3 J+ O+ T3 q# h2 a" R/ o7 b3 |: P; v& y* ?& C
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
0 O/ F/ U) ]" J! D+ T
4 {% B9 w& @, T1 e9 e" L* l- Q  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)4 N% J& m1 v7 B5 @9 y( k
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 1 |8 w+ D/ ~+ t
) Z9 X0 O2 F0 ^- c0 @& D
亲自实践一下结构化
+ Z# i) l9 @: G. b, i0 C3 c$ Z
- G/ F! l9 k3 o' L( @1 x5 m) `' H2 U  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:   m: C& A- U; R' K5 r
9 A; h3 Q% u3 v6 n4 V( i( m( n
  <div id="navcontainer">
  I  W! n! b1 }% J; H$ t. W- y' |% @' ~* V. _% l7 U
  <div id="globalnav">
& ]% `0 b7 H& _9 G  e+ i
4 v8 ]& X+ U/ d  <ul>a list</ul>
3 L. p% O. S# s
& _1 ^2 \# u) ^) \  </div>
1 L3 I& [- _* r- q) q7 u  R) ]& c1 \' J: {) k( }. O
  <div id="subnav"> ' _# n( o# P' |8 o/ `' l& Z8 |

% }( t6 T3 @5 |% s. o  <ul>another list</ul>
6 }9 }3 {- H' I' \
. l- m/ i2 ?) h. u" M2 x5 y  C$ }  </div> - L! s4 M& C, H% h2 C
) t% f+ r/ V  l( |
  </div>
! `9 r, @. F8 p5 u, V# M- _3 Y5 Q
7 e$ O& U* }$ h& f$ t( U  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 & @9 h0 y8 A& |# ]. d0 f: X

3 @. }5 k$ A# v8 o! _! M
7 M% G% P& T3 u2 G  用CSS替换传统方法
/ [9 J0 ~- G$ t1 s  下面的列表将帮助你用CSS替换传统方法:
) }: J/ s% e) S+ N$ _) v+ l$ |; v% D3 }+ [" g, O8 X
  HTML属性以及相对应的CSS方法 $ o9 N$ s8 V* f' |" G! B$ H8 F$ e, I
  HTML属性
% V5 }* v! ~7 \- V6 o8 T$ w0 A$ F7 F9 o3 C6 t$ F
3 [- N+ S# s5 [; i) J
  CSS方法说明 : d" l& E7 F3 f0 X: q
  align="left"
8 b, M9 O3 s0 P& Z$ k2 i* f) g4 U3 c! b
  align="right" float: left;
% y9 n; v4 h% y
: T: B9 O* U) M. {. _  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
+ n2 Q0 @: ]. \5 w4 j$ b1 n/ }' }2 c) V! ?. ], e# b/ s
  当你使用float属性,必须给这个浮动元素定义一个宽度。
2 m! ], C' p7 ~/ F( \* o9 p) a: t1 e- {* Y. z# J' ~5 o! B+ w9 u% n
  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。 - g6 h  @& L+ \1 i
) z1 v& X* S+ ^* z
  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; : M" T4 M3 d" K, ~

3 {; o$ _/ K/ C  F  a:visited: #339;
% g8 h/ k) t  }( n# n
5 z5 X' B& u" I  a:hover: #999; 0 R2 A, I+ U  u) c
1 J0 O. L1 E2 X8 r! c
  a:active: #00f; $ F! k& c5 ?3 M; x# @8 W
  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
' @4 }7 t* B5 ]/ {1 `+ N- j/ t  X& v
' c$ w  @2 K, T+ v  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 $ ?8 |6 k1 Q$ R$ L! d/ _/ U' G) v

+ N0 e* V: n/ u' U2 y  `; j  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
! R% I9 n( z/ z' L* n2 M3 R8 l
5 {" p6 G4 @3 X) ?3 A+ w+ r; z  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 + ]# Q2 r" `0 U9 t0 B, H

8 I- ~% g. J; A! r8 S8 X9 O  你可以使用 table, td or th 这些选择器. ! ~0 G0 q9 t1 h7 k* ^' o* H
' j" n0 e  D) v" @4 W. @- G$ x  X
  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse;
" w1 ^5 W$ C  g2 c
! e5 J' L% o  k# b( z" i" B  <br clear="left"> ) X# `% H. Q0 ~3 n! Y4 K$ K9 q, Z5 ]
  
! h' g. b& N4 P7 s  <br clear="right"> 1 J. D- I; T3 n, I' U, v& |
+ `4 d% m3 b+ M$ |
  <br clear="all"> 7 N4 C" |$ X# u6 ~4 w2 K

% d, [  r" B, _- }. y  clear: left;
+ D; Q& \2 d4 Q+ b! E
0 p8 _; I$ u, G  clear: right;
$ p  w! Z5 x$ V6 d( y# h  C* F( y2 Z, v+ m$ c' [* V  [6 Y( J1 @
  clear: both;
) I9 t! N: W/ D+ N4 K  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
' ]/ |0 I9 [: H. Q7 H1 Q9 o. A( P" U5 j% S! m
  cellpadding="3" ! B: O/ s! `" l2 a( B
2 H% ^4 L6 F! `
  vspace="3"
& S: p6 _) V/ L) ?8 x! r; r% s: N3 R9 h! `
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 ' h# d- v4 y, @+ b! x4 a. T
9 B! \: w3 c: j& `3 h+ M) T
  align="center" text-align: center; ) @" Z9 I4 G5 {, C, p8 y
, L: I. z2 J5 y7 y4 \
  margin-right: auto; margin-left: auto;
" X! F' R2 Z4 m5 \( b- t  Text-align 只适用于文本.
( y2 K# w" H; G% K3 }+ g" V7 t9 c9 W
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
0 r9 H' D9 k8 p; c3 D2 g5 m& ~- ^6 p- `! u& \& g' D6 B; G
  一些令人遗憾的技巧和工作环境
7 C2 p' r9 [7 G. w6 z$ s+ L% f) L4 C+ P7 y
# _$ t' i, T' p% q6 f9 n
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。4 |6 _6 A6 W6 q+ p
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
' H2 U. n) |% d- Q' t' E
6 N% d0 g2 K' K6 e- t  理解浮动行为 ) r& E; e: p5 G3 T6 U* e

- _5 o3 `) c, E: n/ w  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。 8 q& G, I- W5 Y& w1 w6 C

) r0 z0 m6 B, K  更多帮助
) _- l6 V) R; b) d3 t
* i( a9 m, X5 a# w3 b) c+ L2 E- a  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟
7 D' ^; p& q: @; j要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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