返回列表 发帖

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
  K6 B7 G+ T6 B% P' l& {4 V1 F) }( d, a- T, b8 {( s
  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
5 F- S3 c& @1 g' R9 g& k4 }/ l# A  J% k$ c9 j9 g, U) D
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 6 ]* D" F7 k" b6 P

  x/ u% ?" w2 q: W6 |2 H9 P当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。 $ [9 w" K$ z, k4 a* s
" c" K8 e* V; h. m% b8 B, w  b
  结构化HTML / w7 u; b$ R6 a& x
( w0 n$ n# x1 |& s! n
  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。
4 i  h5 n3 T: B9 ~$ m
/ |0 e" G# {0 ?9 j7 S% G3 O0 C  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。
+ b  J# d9 Y$ r& v$ z8 M4 n& B" h+ y2 z, R4 O) n% d- ~
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 9 I$ a  q2 Z/ u/ L' |9 o" D, {
% ^$ f6 s; Z. K
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 ( P4 O& Q: _9 o' |  S- g
. u' M% P* t8 Y7 D+ k7 `% o
  开始思考
- w" Z. @& r0 R6 O5 i3 M* i& `9 ]7 s) {" w! S9 q6 P

) C0 v$ _6 [/ D5 I" P' ]7 }
: s' Y% Y) W& R9 C; d, W1 f  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
* r% f" `9 Y$ {. s* \1 B! C  S1 R- y6 j$ k8 j
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块:
  F% E" O3 I( c7 }4 I4 h; L& T" L( q$ L1 U8 ]
  标志和站点名称 / M) P. ?4 K" Q3 L$ M2 z( h3 |
  主页面内容 2 f1 s, G  V+ t3 h& o! z
  站点导航(主菜单) % o0 g# U/ I/ ?6 S7 C( k: i
  子菜单
4 O8 _) |% |3 K( A* A  搜索框
( D( O) J& j& c) R* A' s  功能区(例如购物车、收银台) - w7 V) J0 z8 G% @
  页脚(版权和有关法律声明)
5 C: n# c3 F8 Y5 n9 k5 U# i6 K% L- O7 Y! O, w4 k$ V

# m1 b. ~/ a# @! w8 X4 m9 P7 Q  我们通常采用DIV元素来将这些结构定义出来,类似这样: 2 `& L- C1 g. w
% C! o/ y) k/ `- V
  <div id="header"></div>
! ~+ Y) l9 j  k; C2 }" T/ w+ U( u& J+ A9 q
  <div id="content"></div> $ T0 [# U$ U- k0 k

" r" K8 X6 Q' C  <div id="globalnav"></div> 3 e$ |. W- U) d$ d7 |  w- ~- F
8 i) S" n! f: @
  <div id="subnav"></div> ( [# X0 y" u2 X, P3 U

9 U, l! [5 p, t( Q0 Y9 T6 Z3 i  <div id="search"></div> ! z* R; g/ R5 Y* w+ x4 ?5 w$ Y- q

1 b  q0 J- c, W0 r2 a& N) r  <div id="shop"></div>
4 G9 x5 b5 E, ~6 x+ k. M: _
& C0 t2 X0 i# d  <div id="footer"></div>
' H4 H/ Q5 E% t9 D, C# i
; X$ z! Z: @, N4 i& |  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 ! x' ^! T4 n7 f  ^" D
$ P0 u- y* c9 F, m- R, e& X) m1 p
  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 , U2 C) A7 \. [5 M( h' d5 L4 {, c
- z( ~# P/ A. q
  使用选择器是件美妙的事 ( w# T! O/ F6 j) n4 I
id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 4 S% [! J# Z  r* G. K
7 ~1 m0 |5 ~, H7 g4 F% H2 [
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
0 m- e" `! k; P  V4 `& X, Z+ P) v% \9 v( _* S) \
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
# e$ j* n: ^' I" r% B1 n- v! a  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。
5 h9 A3 s5 h! @* ]) s0 `, g
' |+ |4 x2 s$ n7 d4 a亲自实践一下结构化 9 O* i5 c# S0 u5 [/ H

# Q) M* k7 v& Q% h  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: " y* q3 b. Z7 C; Q
% E9 }! r* \9 D
  <div id="navcontainer">
8 ]9 J* G* L4 u7 F' }' ~! a" p& k7 u7 ]; p! W1 u1 G/ f" p% ^) Q
  <div id="globalnav"> . L/ C; a9 G2 n9 |# N. B
2 ~- c& K2 P7 f( T
  <ul>a list</ul> ) ]% t/ Z+ U& `1 p$ D& a' f

, O! h% R% V6 }4 D6 D$ n  </div>
  \4 [0 ^; m# c8 _) m
( w8 ~) J) ^9 L; H  <div id="subnav">
3 `4 m4 o- E9 N
+ W+ N. Z  u; A/ b$ m& q, {  <ul>another list</ul> 2 k+ g' ~$ u8 V1 u
  K; c/ H% R5 b
  </div>
. z- E0 n- k( e  p# a9 W: }& F
, R  W7 @9 i( l. D6 t. b  </div>
. O0 |) a  O9 p2 q+ n
7 e3 L: L: k3 v- Y# c' ^  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 ! e6 Z; W: ~4 q, k

0 u! g5 |/ @3 g7 W2 R2 Y( |- }
( E6 j: q4 G, [  用CSS替换传统方法
0 D7 F. ~$ C+ E+ _5 Y" n- x8 k8 Y  下面的列表将帮助你用CSS替换传统方法: , l' f* B, M' e8 P
: F  {# P4 z' g; |/ c( N6 \
  HTML属性以及相对应的CSS方法 4 _4 v! r; F/ z( {
  HTML属性
0 {, K+ O# E, d
2 k. l# E  [! c, a2 F) ?* W' e% X' Y6 k! {  r
  CSS方法说明
2 N; B2 S1 B8 T* `4 e" `  align="left"
7 J( [" t; k; O) z' I; U% O: C5 t! H7 `
  align="right" float: left; " F; B2 \/ ^0 n/ e# C

6 I9 z7 r, p! i6 {2 I% \  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
: \) m/ a; s. f1 T' E1 F9 I9 x4 g9 m# J, e7 d( }3 q% t2 X/ a
  当你使用float属性,必须给这个浮动元素定义一个宽度。
$ E8 k5 E/ f# E2 q6 |* Y3 {  @8 X5 v) P9 N
  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
9 x% T6 t) W: u* _  m$ x
0 K0 a; Y+ Q$ V1 x  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; 0 @' T* c# _; M1 k8 H+ m3 q$ h5 q. m
+ _2 p+ G: j( c5 \' ~; k+ |
  a:visited: #339; 8 ?- }$ ~( o. |2 m8 S9 E
$ x& |# t$ r: A% X7 @
  a:hover: #999; $ k( l" J7 W1 q7 N. W

- ^4 q! k, R/ R: N7 M/ _" Z  a:active: #00f;
- U" t# x. s/ Y5 w5 }8 Z+ G5 Q% x) `  K  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
# \& A, ]; c4 V, j( p# p- M, ?/ L: ~6 ^
" V" b/ t( l# ~+ a" w  q# G  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
) ~7 o1 l  W( S# W; E
+ _1 P! ^* s" m- J  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left % W; U7 x, Y& M; A  R+ j. k* m; }

) F9 |/ x9 a# T& f  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
) |3 `. }& ?* ~; K0 q
0 h/ Q  l0 k5 o" G  你可以使用 table, td or th 这些选择器. * @! L; g) H/ b
' J7 z% H& T, ]
  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; # Y: K: x" J% ?% H0 ~; g: [% U

% l7 }& f& G0 t$ x5 g  <br clear="left">
( y* B0 z, Y4 S0 I5 a  
6 }* }4 H9 V. c" z  <br clear="right">
7 t1 J6 F& G1 ?; Q: ~9 `$ a( N: }- t- m# B2 w! m
  <br clear="all">   h4 `7 @0 p  g* G' \
5 I! k9 [. [- G& c% c
  clear: left; 6 n; B# J* S4 k- p1 X( ]

/ v) L7 J8 o2 C' Z" c2 U5 X3 J# N  clear: right; 8 {' D$ N1 |2 h" y
5 S$ ?( z, @( N. D  O
  clear: both; & g  @1 ^3 c4 ?$ T' {+ L
  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
3 N  G% `( F: e; i6 F+ ~4 O
; V# N6 E# Y& e2 R: c  cellpadding="3"
9 n% y) H% k' B: ~. L$ c5 u4 }7 i, {
  vspace="3" # p  e6 b& k2 n& ^; l: k
  v, I8 J' l9 H+ t' v. V
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
8 \3 x; [8 C. P! J$ r2 H+ B+ u* K1 @
% i# `6 O8 t$ H9 m% _1 W  align="center" text-align: center; 7 T) T7 A  H  @. `
( d- ~9 n- }8 m( v' L5 @7 \
  margin-right: auto; margin-left: auto;
* x1 `4 q$ w9 _  Text-align 只适用于文本. $ q: D6 ^) X- ]# f" R8 ?

2 I7 V! @, I( _. [8 R  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 & H+ ~% ]( |$ H4 t+ y

$ F0 T- X* {+ j$ h  一些令人遗憾的技巧和工作环境
- \$ ~+ [/ X% R  Q9 ~) q( p4 J# {8 z4 \6 T

7 f: I9 v& k* g  |  N; @/ J3 c$ V由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
8 U" s! H) C+ n- n  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 + Z9 f$ m$ y% ]$ s) @$ ]
/ d+ f2 a, i% C- }! E+ ]
  理解浮动行为 , M+ u4 q8 F' t4 I0 G1 b  q
) u8 V6 h/ {& K5 \$ Z. _
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。 ( c% j  ~" t0 |. C* B" W/ a

6 j5 J9 u/ U' Q; l  更多帮助
% ~8 j+ B. f' n' B7 z! P" X5 a, Q8 n8 V* s/ y
  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟
9 k* ?1 E8 a, z3 [2 u要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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