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

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
& v3 r3 U! k3 q! e  q
. O" ?" O, U8 U# b. S2 ?  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
: ?, n9 z( [( @2 H4 |+ R, ]/ f. t% n  _+ V
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。
, ^! {" W9 I8 F, S  D8 m. d. A# v3 c0 H
当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
; y* a# U0 C0 C' n& I1 r8 ~3 T4 L5 B+ n8 J8 P6 P* w% @* f# ~
  结构化HTML + K4 f8 B* Q% R5 E* z; V

. Z! v1 G- }, ~1 [$ F# ~0 k0 a  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 - Y/ j: A# [0 J6 V# E4 z# o2 C

+ @- z8 u2 e; }0 p; E  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 1 f. w9 U/ }1 i6 g2 q

$ n) ]- Q1 h2 {. Q: Y* Z+ z  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 6 X/ M4 X) L/ @( C4 D
6 m. H6 ~8 x* E0 D
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
7 p" ~; N# Z+ `: l/ s1 s- ]% V' l4 O7 [5 Q2 D' @" n  W
  开始思考 0 R0 j* S: \: T9 f

4 p. S) W; W8 R% M7 p9 n9 X7 l* ~( M" r# Y. c( ~0 V1 r& S8 z- U& V

3 E$ t" s9 j4 q& }  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 7 ^/ U" |% c* Q1 Z
4 j& {) [( P4 z  c8 \# a* b4 K# o
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: 2 `, z9 W( k, G9 Y0 o- ~; m/ R
1 J- D; j3 W5 h4 Y
  标志和站点名称 2 Q9 [% n! t9 L5 B. L/ v- [: a
  主页面内容 + Z: J4 P% e& |( N
  站点导航(主菜单) ; b$ u8 u/ V' v9 Q2 c# v: c1 }- V
  子菜单
9 J/ y( R0 f9 ^2 h) T  搜索框
! K. K% j/ [9 Q: y1 N4 o  功能区(例如购物车、收银台) 2 u- I. {3 ~2 y, X1 N
  页脚(版权和有关法律声明) : `# z$ {! N! i3 _
* i* x8 b: o9 p7 F* b2 j

2 V2 V* m, j/ z9 D4 E/ m2 J* y5 G- V  我们通常采用DIV元素来将这些结构定义出来,类似这样: % a9 k4 V& ^( U3 N' U
& e  x* _3 Y" A, `7 g! W* F. K
  <div id="header"></div> : m& m9 j7 j/ d$ O, z
+ S3 }) w9 I7 o' x7 X: l! P
  <div id="content"></div> - P9 e0 d  M' K& A
) R5 Q, {, N% k6 y  k+ @
  <div id="globalnav"></div>
, H  G  g1 A# n; O. E" @
7 n2 [( ?' Y$ y: o  <div id="subnav"></div> & y4 E$ q: v, H( A! _4 V

% r" a$ l: [4 r8 v# X" j  <div id="search"></div>
& q0 B7 k3 D' z6 b4 i# e+ b* {1 [8 ~, E4 p) \' ~* a0 V; d- r1 v
  <div id="shop"></div> & F0 @: G: Y7 Q

  f- B2 s4 ?0 p' O( C" g9 |4 E  <div id="footer"></div> . l3 m; W* m. Z0 s! N4 E; I! u+ @

, T6 M; v3 c: y7 L/ E  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 ! Y* O% G- d3 G0 h9 w
# N3 B, \; k6 o9 Q5 |" P
  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。
5 l3 }$ ]$ G( \. a  q3 o' U; ^5 {, U& {4 R) b5 s. |  m0 U' W
  使用选择器是件美妙的事
) O' o$ c: f0 Vid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。 8 N7 L/ S& Y( X) y
+ _2 m% \+ u# X9 J( C
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
4 l9 `2 P$ v- C4 @% ?- W' M" e6 s$ c4 X
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
& S5 q; F1 @8 O% Z' o* O3 m  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 2 J: f% \# `$ k) a

% K3 L  n/ O. g4 I7 b( s$ r( x4 w亲自实践一下结构化 ) Q8 i( k- w- R" z1 w6 {7 _

4 ~& j. E% I6 Z  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:
6 V, `6 W! o6 n* c7 N* p, ~( c" a  u, i5 Z7 K6 D
  <div id="navcontainer"> & ^" q% _* K5 ?" S: H# `; [2 w
3 F1 {) y. [8 n5 S4 A+ q9 r
  <div id="globalnav"> 0 c" p' D& j7 b9 P) V/ r

2 u* t: P  J* C5 w6 h) O9 `  <ul>a list</ul>
' G! Y+ o0 Q+ G) ~; i  l+ B: n& M
9 B5 }7 O& J( {5 T" P2 s2 c2 V  </div> 8 @, w! s; D7 @6 N9 o! R7 x' ]
) q9 d5 @& d* \. D: ]+ d7 c" G  n
  <div id="subnav"> 1 f. N7 h* F1 A: V( D: p2 r" H
# {; [! M8 {. c/ T; }
  <ul>another list</ul>
' s3 m5 f+ Z& k0 y( i0 Q$ o, ^9 p/ |! R0 g9 [+ |
  </div> 5 ]/ \* [3 O9 @) I8 i; Y

" F" O" j+ A  G+ L) M  </div> & b+ D0 v% H. E$ X9 M& X! @
/ C2 L5 k4 @* }& g/ A
  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
& ?& f: ?6 E6 ?7 e2 q& ?5 {9 z2 z7 C& ?; l# Y

' h. m3 x- N) k3 J' t! i  用CSS替换传统方法 4 f4 U/ B. n+ a8 w
  下面的列表将帮助你用CSS替换传统方法: " c* M: ~% {1 n$ x* D

' g7 u7 v2 c2 A! B) n  HTML属性以及相对应的CSS方法 - Q1 q2 _+ k0 b; R' P. B
  HTML属性 . d$ H& z( u/ Q% l. D
9 F7 s! P; v% Q9 S# H

" f$ E: g4 j: ~8 ~7 ^- U  O  CSS方法说明
$ r6 S2 D* ?( q  align="left"
" g- e: [6 j9 T3 [# ^3 |- ~) i7 w6 x  I; N# T# n
  align="right" float: left;
8 ^1 `3 T6 E* w# u; }5 d, H" B- K. a+ w; g. D
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
0 j$ j0 ?  K# I1 V8 g7 S( I$ _) I6 p% l. @/ c5 {+ D% ^/ B3 p' U) L
  当你使用float属性,必须给这个浮动元素定义一个宽度。
; Q4 I" k  _' P0 Z
' B" N7 \3 R8 P& v# A% v: u, w/ h- o  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。 * l" c( b# Y2 w! \' u$ h

' A0 o- A3 \0 {1 l/ l$ O" P) r  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
" ]8 n4 E& d) |9 M! g
$ o. I2 l" B  e+ ~2 Z7 T  a:visited: #339;
6 H' O+ U8 g1 ]- W& L! h! q. |$ Z- f% K
  a:hover: #999;
5 s2 k( b5 t; n' i- m* ~: y$ ^$ f( \1 o& K# D$ ^% X6 s  ^- X. z/ o
  a:active: #00f;
' D  |* W" F; Z6 w+ t' ^0 C4 t  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
4 U% _5 ]0 f7 P3 s8 s. X
& p; e) C7 o8 `8 `0 m( f) M8 e  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。 , w$ i9 Z2 j# h2 P
1 }* c, c' p; x# \& W/ U
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
! q  U, `) D& I, g* E
$ [  a/ H1 j; W2 {  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 9 {7 z" x/ W. F- J
1 C5 `, i9 l3 E0 b3 Z& {5 [
  你可以使用 table, td or th 这些选择器.
* P# J: @3 X% g
! `9 j+ }+ a, g1 s9 y$ c) ]  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse;
7 ^4 Z6 H) s7 w( Q' D3 ]# A
/ h8 v9 h% A( B) {! I1 L& |  <br clear="left"> $ j# }* c" c& d) Y+ U0 T
  
. ?, E  O; s7 ?! `  P2 U+ g$ c  <br clear="right"> . h6 Y! J; C3 @* Q" [, V

' @# ?: R; J& `. `7 ?  <br clear="all">
& K4 u- }2 z7 G1 w3 M# B* Q5 m9 T9 v3 _) X
  clear: left; 8 F( u2 r3 m+ q* ^/ S: z
2 c: U2 k6 z  O3 q+ |
  clear: right; : v1 }& h, I+ {5 |; S
# s# [( B3 s- z: ~, K0 C3 [2 G$ F* J7 k
  clear: both;
; g" J2 o; l$ Z2 J: K' L4 O  D  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. 6 s: m0 K5 H4 B  P4 C, z  ~

/ m) c: K4 V# N' q5 {  cellpadding="3"
$ N" \6 J" i3 b4 U& L2 l
0 z6 X, b7 V: n9 P5 I+ i  vspace="3" 8 p/ l& k! C& j# S
) R3 j# T' u6 i4 p0 h' C! s; L
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 ; Q9 R8 o3 `8 r9 Z; P! j3 B( U8 Y0 P
& K0 F: C+ i& L0 v, \7 x! O
  align="center" text-align: center;
- ^  }& Q0 e% d1 g' U& W; w" d% h3 Q" |$ `: q7 h- j" C
  margin-right: auto; margin-left: auto; ) }3 M4 q- M4 n4 P' y9 c
  Text-align 只适用于文本. 1 z. `4 Y$ s* Q& w4 e  j" T
3 V/ Z& l* f4 \! N
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
4 d* _5 ]! W0 j9 w
  s5 p6 X8 U" w+ b9 A  一些令人遗憾的技巧和工作环境
7 r$ B0 y) I! E+ }3 L# ?
7 u/ i$ U6 h! e
0 E/ _" P, h: e5 r由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
( l; b( D, P& [# [8 ]/ C$ V8 S4 k- f  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 2 u* M% P& `6 S0 w' T/ |) n4 [

; `( F/ K% B& \0 C7 U7 W/ S  理解浮动行为 9 @5 S, B2 X1 l$ q: ?; O0 l$ K
. E! l* t. L2 [$ b4 Z( \* T* \
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。 7 M5 u9 T4 Z- q

$ l, K- h' H+ J1 z. L0 R  y" ^/ |  更多帮助 4 `' G7 o; h; ~5 M+ C0 W9 ]5 r; B

8 h: x/ |: k7 r  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟
! j: V7 q6 K( w: T5 w要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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