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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
8 `1 [) W7 ?. G, P) H: Y8 L
5 D8 M, x3 p3 u* o  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
. C" t, N8 [7 N: `0 d( g) s/ h9 o, D3 e
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。
; X/ ]% o0 b8 k% r/ B" I( C
% B0 m8 B" v- I: h' O) ^: e4 I当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
' [) [" @% [4 _
+ ]: n* a( _1 K3 B! Q  结构化HTML
  v1 j6 s6 U$ z2 Y4 K
: Y1 w% S. J8 V1 Q' T# t# ~  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 0 @7 U6 x/ N1 m6 A
5 e% t' d; k$ n( P$ l
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 6 ^0 e5 b) o% |6 V  M9 M5 b
4 s# ?, _0 F0 l
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 2 b+ @# W8 p+ m( b9 H7 a4 A2 K# a$ m

4 e0 I$ K, j; y6 j; Z  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
' r& n  w  I9 {9 I% ?' J' B$ |" V! o- W  H4 }
  开始思考
$ I0 `) b  f: B; H% v, t2 D- Z& m7 f/ g5 w

6 n/ ~7 L* G, u: \; ?
! }: L1 m; S) i4 w: i  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 # S% n$ |- @: q9 P0 Z* ]

$ o' [7 x# {$ ^$ n* }8 |6 \0 [  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: 1 Q% W( Z: X' M6 T
4 a3 k' z0 L7 ^' ^
  标志和站点名称
- \: W+ m3 S3 a/ t1 k  主页面内容
# Q7 b* c8 m! }% A1 k5 N, z  站点导航(主菜单) 1 z" W" ]/ c9 [" W9 f$ [/ X* n
  子菜单
' a# }# ~0 o0 j8 a% Z1 M  I  p" w  搜索框
0 s2 N( @7 O! @8 Y- F6 L! A  功能区(例如购物车、收银台)
. R9 J+ ]8 H+ {5 Y, ~% @9 k  页脚(版权和有关法律声明) 8 j9 T; Z7 u& l4 |/ ^% `: C

# K) g9 l1 A3 ^. ?3 ?* n
3 M/ v( v. r; F( ?+ z: {  我们通常采用DIV元素来将这些结构定义出来,类似这样:
8 v2 F9 I3 d0 u5 g* ?" v
/ j; u* U; D0 T  <div id="header"></div> 0 `8 t3 l7 @1 j0 W

8 e8 \2 F$ C8 h) }3 ^; [6 u) K  <div id="content"></div>
1 b' N; Z6 X# R5 t, j' c5 u5 i% X, A- m; b9 b
  <div id="globalnav"></div>   a5 y" L  C6 b1 A

: M" _& u& J+ S+ {  <div id="subnav"></div>
  p9 k& O1 k1 h( g' ^/ v
& ?, I6 y" v% e, R3 E  <div id="search"></div> 0 _' E8 S5 N3 \" b
5 R5 c& y1 {: B4 v% f/ [/ `4 q6 R
  <div id="shop"></div> 0 U1 d4 ?# S1 p  S! d: `0 |
+ W) g0 m: i4 F% Q
  <div id="footer"></div> ! y2 J$ `$ P. O
: s( e$ r# m8 C. ^% w/ L$ j- C* I
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。
# G( J; _8 o% e0 f- O
& d" q6 Z: _9 [- a: u" _  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 + q& [" N) [* C' f

0 T/ k$ p) x2 F  h$ u  使用选择器是件美妙的事 ! v! a4 ?4 n+ C/ }6 {; M
id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 4 X6 h- D2 h- x" c
( o6 j8 J% d# R# c8 K
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 $ V8 K# f# i2 Q2 E9 B* ^

% e! t6 g( l/ z/ B- D8 [" M  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)- x* t2 P' |! n; K
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 / E$ O, z! k4 r
  G3 Z5 f, d2 a- q' ?
亲自实践一下结构化
7 v1 W" r$ N. r. b; l+ F, ^: W/ N) N
1 R, Q. i" F/ f8 b0 h/ e0 y  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: & V, u3 u$ P; ~1 Y8 U2 @

  x( u" ~! T0 v  <div id="navcontainer"> & t5 |% W/ L0 S" d0 q) O7 C( K

( D  H8 |$ r: s4 V% E  <div id="globalnav"> . M  _+ v5 M# `6 j

) L4 M, X' W2 n2 Y' F" L$ [% w; M  <ul>a list</ul> : f. d1 V/ R( [' Y
: r: N- C. e. d8 B+ M) r
  </div> , b6 [" v& A2 {! D$ `  n# M' E3 \
% q4 u8 T, J) @. [8 C
  <div id="subnav">
3 V7 \- U0 P: ^% G8 t6 |& p7 x: f1 B4 @3 Z6 p8 s: m
  <ul>another list</ul> 7 x3 g, j+ R% K5 O& X( {

4 Z4 s8 m% e0 k0 z6 V' |; C  </div> 9 b. A  x* {4 }4 x) s+ [" k, G
) o1 F, E; n$ d; A& V$ x
  </div>
$ \( e6 u9 C. R& O8 @  Y' C6 K+ ?7 |/ D: l6 O& l) o
  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
) d6 c+ c% b4 Z+ b: C  J9 A
- g  g- k- E! X8 o5 h/ E3 ^/ k; K2 ?7 I# t' r7 L
  用CSS替换传统方法 . d2 h1 k( o& Q* F0 ]
  下面的列表将帮助你用CSS替换传统方法: ' E4 ~! p0 u; ^) @1 f* S! X
& k# B' R, J. |1 T, b
  HTML属性以及相对应的CSS方法
9 J2 j& }! n; i; d; j  HTML属性
. h- i; R' j! g3 X9 P% U' {7 x7 N8 i' }: C6 k: h, h& ?, l
, q- T5 Z6 s* t3 p6 @- F& _
  CSS方法说明 * a1 [! i8 ^* Q4 r) E, S
  align="left"   @, A; W3 c6 `6 e

2 r* Y& j( ?' A" g' l  align="right" float: left;
7 g  w% F% j: n, ^4 Z* }
: Z$ Q* R% Q: U  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
( `4 `  g. F* [1 H% @/ o+ W0 A7 B( V& r6 V- |/ \9 v2 X
  当你使用float属性,必须给这个浮动元素定义一个宽度。 2 Q5 S6 `6 C' g* t/ P: G6 [

+ H6 N" k$ K# Y! {% |- H  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。 $ H1 F- ^. P2 C# A

  p: M' z5 X1 B& L" E5 C  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
& O, e' d1 T( l- d# p: v; z5 ]0 R% P- F" }8 Z# Y0 Y
  a:visited: #339;
: T8 _/ w! f  |6 [( \5 T2 {4 s: w+ B2 e8 \; s9 f% ?5 E
  a:hover: #999; & _. S! C$ o; }$ j  ?8 C0 o

2 W5 M& h; p  L5 G  a:active: #00f; . N3 e$ s& K; m8 m4 N& @! v: B
  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 . z! g0 |- L2 _, n
: o# j" {5 \8 ?# E0 M- Y* S
  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
  h3 V) H5 w% k0 w! j2 z& J7 n9 A
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
- R  z+ b. L5 \+ q& r6 {) |5 s1 J4 ]% {, l
  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
9 L9 i# F# {, q; N/ a$ y7 R$ N; b; R" E* X5 P
  你可以使用 table, td or th 这些选择器. / `: J3 j! [0 E8 `2 h; s0 U6 S
  P0 d( |  f! ?  J
  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; ) |2 ~9 ~4 }8 V  t) J
9 v3 ^4 U, p* G5 j9 L% R5 d8 S
  <br clear="left">
& O' L  N! M+ _% c& S   4 W+ C% P4 ], [6 ?/ o, c# H
  <br clear="right"> $ c; F% }, X6 |$ x. ^* y# W
5 l) {: ~/ d5 x2 b3 ]
  <br clear="all"> 2 R, T3 x. i% Y( g6 I! f
7 f) h- B4 z; B  q% o
  clear: left; ; @5 F2 t" d3 ~9 y

5 a: u& z  U; X  s4 |/ m, g  clear: right;
- o' Q6 q7 I( ^0 g9 H5 a& n- Q3 w! a- `% n, @: Y: q
  clear: both;
( t' Z6 M7 ?1 H+ D: ^' y  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. : u- d4 f6 y( _8 D! T* Y1 \' d9 @4 X

& I/ w9 [1 N& ?- a  cellpadding="3" ) C: ~9 `3 `9 K5 Y9 C* X# H

( `$ _) @/ d: j# N  vspace="3"
+ \4 E7 c% h, r. m- @( }0 Z. ]% Q/ V; M
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
  N$ A* w# E, H
, {: [  s8 W% c" d0 V+ W  align="center" text-align: center; 6 ^3 m. M: \8 A* }) U

! ]! p1 X4 l  k. A8 t  margin-right: auto; margin-left: auto;
- t3 R( A% S4 R- _7 s  Text-align 只适用于文本. ) ]2 w& U. Y- N8 m4 h! P
% l# m3 F+ ]2 ~3 b
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 6 h: D  p9 c9 D- x# z" V

5 X, ~" x# q2 V  f, Q% q8 @  一些令人遗憾的技巧和工作环境 . g& x5 P: r6 O9 g' Y

, V3 O' t. I9 N9 G2 a  ]4 }
% Q5 U4 \# `; _- J$ s由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
0 ^3 x3 M; P' C) [1 s) [& A! R  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
  T! L/ H4 ~8 o+ ~- f- n: h" }) l$ D- L' R# W& M; F5 c
  理解浮动行为
8 D: Y& c3 S5 H3 }8 J3 D) t* n( \1 D0 Z/ ^
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
# [" n7 O# k& _5 e" i+ h3 m1 j5 L9 v6 T) c: s
  更多帮助 ! L& f9 s& l! X

) z- l) v, {2 s; z  b5 K  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

回复 3# 的帖子

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

TOP

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

TOP

现在似乎很流行div+css布局哟
# \  l7 Z. z5 I要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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