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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习: 8 G/ i; S; m$ M- [' ], ?
. k6 n; c  I. P6 ^
  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。 & A! N. G8 _% d8 q& f: P
/ [6 k( M1 V; O8 O; p5 U. R
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 ) \7 p9 R# Y# Q5 |+ Z% I+ F

1 K. Z8 r0 E9 {9 a! K9 ^当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。 + d# h6 ]. X" X* n( h6 K

% f2 {  |) h2 D' Y+ Y# R  结构化HTML * {1 D8 J: d' L; Q3 K
6 {- w, H, \% n3 e
  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。
) @) b0 |0 g$ Q: M7 S% M# t+ k7 ]3 `7 y8 t& u' q4 S: D0 }$ ?- [
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 $ Y) \2 y0 W/ r. ~6 e0 Y
8 K& g( x0 G) U6 A! {
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 + m# f! M# R0 B+ X
$ K# v* k. z+ `# y5 c! R! R
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 6 K7 f6 K( {! y, {+ q8 T# W6 ]

8 N9 U* q% u7 `$ F  N6 F5 s  开始思考 : h; J4 \3 S  E! r  l( g* ~
/ W( J# H: F' w! H
2 P5 \: M4 O, Y4 q+ t
2 C) @4 R! u: v1 L( V
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 0 B8 k+ C( L+ |( z- G4 c. L8 i# Z

; J: E" V: a! B/ i( e  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: * J- s& B  ^& o+ w  n

! ~5 `; z. ]) m8 }  标志和站点名称 4 I, [  n) |1 J  u* H, M
  主页面内容
$ H0 |* o4 @) ?- h' }0 x  站点导航(主菜单)
$ e, H) H( D5 c  子菜单
. y. d# z  F, w. b4 Y" y  搜索框
; Y1 G1 g+ }0 {# F' `  功能区(例如购物车、收银台)
* g' |2 e5 I5 q6 ]8 F: C& p  页脚(版权和有关法律声明)
3 |# Y, u; L) Y8 o' Z, X, b. w
# _! {* R- O1 A' a( h' c; T/ U3 t, C' c; s2 v( P7 q) O
  我们通常采用DIV元素来将这些结构定义出来,类似这样:
0 A+ Z* r$ R# y. {
; e9 u( R/ S% e& k  <div id="header"></div>
  r% ~- D4 z# T/ G8 [
6 ~6 C( B! K! C9 e7 z2 K7 [; T: r  <div id="content"></div>
! v) O( z" s2 j) _, }. @- w, D- Z$ G8 r& y3 w4 ~, @' {1 X2 Z8 M( H
  <div id="globalnav"></div>
* {' K7 ~# |0 S9 i. q1 A% j$ R4 N2 {4 ~  c
  <div id="subnav"></div>
' J+ I6 X# d8 D2 E' K$ j; ~. O& f4 e  b) n
! ~* f# o$ k4 V8 J' Y* ~  <div id="search"></div> 4 M% j: j% n% g3 F% v2 B
/ a8 M" a4 Z" |( O3 x
  <div id="shop"></div>
) x5 F% G. B+ h6 j4 P3 U5 N
. u3 z. l- T6 B% x* L& R0 l  <div id="footer"></div> - |( h. X) D7 A. X( m( u
, g$ A$ {5 J' `8 T* G# N6 s! o+ t+ ~
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 . e; [, T7 ?( X0 L( u
. K* T* r9 v4 D( H
  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 % l+ X4 }8 }5 `3 D8 R7 a, Y1 w

8 l' B; F9 s2 S: G6 t  使用选择器是件美妙的事 + J* j! c) V7 p4 P
id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
) y' i% M' ?+ u0 {, l. }
5 ?' o' a5 `+ Z/ q6 q9 j0 L  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 - F6 A: a+ j. G9 {' N' p4 i
; J3 i! }) k5 a* F$ Z8 k# T1 T/ u  K
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
) j" L8 X5 X+ Y1 |3 N  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。
8 f9 G+ w: B' s+ T/ q, Z4 Z
( N" E3 L, I9 ~6 J: h亲自实践一下结构化
; c: t. V8 J( \* L4 S3 a5 A! E" J" J$ q; n0 t
  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: - C  o; W. z. U/ y) `3 n
9 \/ A1 u1 T6 F( W9 d7 @
  <div id="navcontainer">
" o# W. d6 S# _$ ?' R+ d! Y/ z8 |/ A3 C, `
  <div id="globalnav"> 1 `4 V6 n. i" e  Y+ N+ Y. ?

, y) ^7 S. t* z  <ul>a list</ul>
4 G' A' ?" S' j+ o- @! ^4 p  ~. K. d( n  F$ K: E
  </div> * |' ~$ Q* @7 V6 C5 ?% K: W; m/ }
) g* K/ N( s* w" H" s5 N
  <div id="subnav">   S2 I9 q& [7 ~: e; L
  g9 N, ?& C2 j; G% p  ?
  <ul>another list</ul> & R) [+ c/ q1 y+ R9 u

( `9 v6 B. c' \" {  </div>
- `, y  F. `  l1 X3 k/ q1 X& n3 p6 Q: m( n( z4 b) ]
  </div> # p, b% ^2 g( s4 f
9 o# |9 \) `# }
  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
7 H9 b9 f( F2 W" \* S
$ G0 b# t6 J; R+ G& P7 W8 Z, g& O  P! q* I# o. A2 z9 l9 H% G
  用CSS替换传统方法
% T' j) }6 Y' p  l8 i1 o, F5 \9 o  下面的列表将帮助你用CSS替换传统方法: ' ], B! ]4 Y6 C0 g
+ I# D- t2 `6 n. ~
  HTML属性以及相对应的CSS方法
3 R, V) v& \' T, a8 v$ A% Q  HTML属性
, P: d/ C  B0 F# h6 g# v; V. A- T  m' r5 X- K% c$ `1 G3 X

5 N" x, c: y! P0 ^  CSS方法说明 % A3 P8 n( b* e# E. z# g+ E
  align="left" . ?3 p, W2 P7 m+ n: r1 J9 a9 C2 E

+ A& k* e7 x, z; Y# d  J* M  align="right" float: left; / U) |+ D" L# G0 E
- m4 s+ Q2 K% v3 C4 `
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
2 L! i9 b; z, Z: b2 P3 g6 d
. H; w4 B; ~; A' A7 ?  当你使用float属性,必须给这个浮动元素定义一个宽度。 " j- t7 `: O, Q$ f% p% A
" I0 \. k& n8 [$ H  y6 I' _: C
  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
: T0 v5 L! ?# _. N( g1 M% M
& H7 i! Y9 R( I& d: {( \- d  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
5 ^- l( p3 k4 `* }6 H' y4 |9 s# W
9 x% {' X6 R' D/ e' x# T  H  a:visited: #339;
, x+ ?+ d: b& Z" X9 b$ D- y
- a* _( W# z  U+ [3 [  P9 _" T  a:hover: #999; 8 h4 H; G  H% h

7 Y; O' c9 [% l7 T* q  a:active: #00f; $ l1 q2 w2 {+ K3 g
  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
. t8 f9 |  u& k2 ]
! H) V4 K- i8 h# u; J0 L3 E  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 . y0 |. _7 {/ F+ P& |

: l& D! Y/ X1 j3 c4 y4 q( V; i; K  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left * a4 n  k% W% U( `

) E" w$ L6 ]* b0 I  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 4 b! }6 ^2 `2 D- W! x5 q% v
' \  H# C6 P0 }+ w3 [4 e% y% ?8 ], Q
  你可以使用 table, td or th 这些选择器. 6 \1 A4 X; f( u& F) R2 k$ H. w

$ L. ]8 s+ T  ?  ?+ H  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; + d3 l9 D% r6 o& }# v' l1 R

( A  P* L' r1 H  <br clear="left"> ' t# Y% |" N, o7 ~$ ~
  
& D4 ^2 Y. W$ U) o* d  <br clear="right">
* X" L" a1 j4 ~; M; Y7 k! C6 V! c# O) G! }4 x7 R
  <br clear="all">
1 U% ]3 B" I! M$ v  O# Y
0 I; c) h4 d4 M  v  clear: left;
/ l/ a/ Y- {% w9 G+ u8 M- Q: X% ?
  clear: right;
. i: T" {- J$ b$ U0 V" u& Y. c4 `3 l3 Y7 l/ |# ]6 t2 q/ R) P
  clear: both; 6 y$ x5 f. o, F, o+ M/ H; n
  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. 8 \  x( O" @' E  U/ h1 _2 n0 c8 ?
0 ?7 ]( W9 x4 @) w- K
  cellpadding="3"
$ r& c* a" d& S. L( L7 N  X
( B, D5 T, h  g+ s  k* w0 q  vspace="3" : R2 F& S* u5 t- m5 P7 D7 L9 A
2 V8 n+ l7 H4 j; C/ ^) |) p, R
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
5 Y! W6 x1 A: ]5 O; k/ F+ q2 h8 b8 g! L$ s" S% W0 L( E1 l0 \1 `
  align="center" text-align: center; ; Z" a0 k, S/ f7 ?+ |

% W! z, ^8 [, f  margin-right: auto; margin-left: auto; 1 P  j& P6 I; h' c6 T
  Text-align 只适用于文本. , B6 ]: {' z8 q0 U$ @! H! k
+ P1 R! u  m* @: z
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
: v. r- d0 z, a$ o) H* Y+ K: \: r' y5 X, a! e' M
  一些令人遗憾的技巧和工作环境 % E9 ?0 e6 C/ u# q# I- H8 [

( @- N+ Q! B" o7 A. r) C! D. E. c, H4 Y. {; T9 s! r
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。2 y- R! R; u6 C: ?9 x: N- |
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
6 U  Z/ U3 W% T) {* m: d7 F. z) `, S& _3 J( n" P
  理解浮动行为
0 j& o0 E+ K# X: n8 O8 o( V9 B7 J* n5 }
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
* s! `7 K8 n. g! `/ w3 U7 u7 n; p" W, i, t+ P
  更多帮助 ( ^0 ?7 O, m" z! J, F
: i: M$ v& p4 B; [
  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

回复 3# 的帖子

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

TOP

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

TOP

现在似乎很流行div+css布局哟 5 K3 ]0 Z$ h% u8 d
要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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