返回列表 发帖

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
" |) T$ r, N7 A# r' z. j2 A
5 L, _' u6 y5 U: M, A; [) m: F  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
$ Y, P9 R' F4 z  K( X' t8 ]5 s! ]$ {1 V3 P6 q
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 . a1 B  R( V* R, ~$ ~, ]
- K! l6 ~3 J# Z8 |3 \
当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
1 H% n' v7 ^+ s" Y4 c, ]. }
+ @. f: p- U2 z8 a8 f  结构化HTML " m* [9 l, t/ q6 P' p

% X2 U  C1 d7 T6 O8 m* L1 O4 i% H  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 9 d7 {# d( H, Q( r9 A
, N, y/ X3 x# t+ m
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 2 q( B. ?. H) T: u

$ v1 m2 o& b* D: i% k4 u  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 & E( P; p; P# w: G( f! ?
2 X/ }' t/ T, P/ L1 \4 X
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。
6 x: U; V2 i! Y% B* E& J! Z. i+ O! R! x
* E8 R, o" x2 L! i4 G4 s7 P  开始思考 / x4 E$ B, Q# p+ p! L' c- g3 {0 D

# L+ h- W; `" ?9 b" [- b- D! P2 P8 x) ?6 D4 b- g
8 a& a4 I: C" x1 ^0 @
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。
* O* x+ P! F3 J/ X9 U6 ^2 y6 Y$ K! m$ a
  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: ( I( P( V/ Q' i# h3 V

1 @1 ?5 b* u# Z$ s4 X5 a! g& {, v  标志和站点名称 . E! D! Q1 v3 i- O4 I) o
  主页面内容
; X; s4 \# [: T8 O3 ~, ^- z2 f  站点导航(主菜单) + n1 k5 [5 [8 o2 d2 c" p( M
  子菜单
2 Y( K$ J" {2 K8 |8 z3 Z  搜索框 * k3 M2 C) @' ?
  功能区(例如购物车、收银台) ! K/ a/ S' {$ h8 I( C% z' e
  页脚(版权和有关法律声明) % R: r# H) \/ }
; _. Y# ?0 O' `# }7 R2 k
( N5 O2 k5 R/ v7 c6 ]3 D) ^
  我们通常采用DIV元素来将这些结构定义出来,类似这样:
' `* S0 ?0 U* }0 {  n# [4 }, r9 k0 }0 e7 m" D4 F. b% `! _
  <div id="header"></div>
) X# t" ^8 F& ]* d; N: x1 T+ L  t4 q& U* U9 \. C8 w: y1 ?' N
  <div id="content"></div> 2 p/ w2 n) z. U/ f% `/ @! f) P/ B
* |  L, z/ b  X5 ], C1 h+ ~% i
  <div id="globalnav"></div> 4 a8 u, q- l# H& K. M
9 w; O* \' \  O- {7 G
  <div id="subnav"></div> % b8 F6 J4 z3 H3 l/ U: [8 }

5 x1 ]; d, A5 }' l( \  <div id="search"></div>
5 l$ o( b  E+ u0 {  w3 S3 t* j
% D( Y* @- t6 z; @5 E2 m/ @% o  b  <div id="shop"></div>   ?8 z) y  ^  `4 c: O5 N
' M7 ^0 W  |9 R3 y
  <div id="footer"></div> + w5 ^8 C0 R. F4 Z/ L
  e) Q2 e, K; O% `" t
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 # ^5 m/ e6 d& r9 }

# W4 T- D0 F8 q; H' _9 G1 ~  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 7 h- c  F9 N( S0 M$ ]
9 `) I7 E5 V/ |7 q# @$ T% g% ?/ W
  使用选择器是件美妙的事 3 ~4 M" m- G/ a1 A
id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
5 v/ s( w/ Z7 [% K/ d  g
! S# K  w! _' h& k1 c+ Q; j. F# ^  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 3 @% B( G9 T2 u! E2 z- {9 A
8 W7 k) W+ w# v/ w8 ~' X% k. W
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)
3 X6 F4 Q- V: e9 r  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。 * G. R4 n4 P0 Z+ o' v' Y
2 u' c$ o7 @: v! a( W7 Q2 I& g
亲自实践一下结构化 - g# j2 ^( p* q+ H
+ n9 k7 G! o" b! p1 h7 ~" }
  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: 8 q7 u! u# p! h/ v$ U4 V. \( @

& R4 G+ ?2 `8 T, [* v8 H0 E- L  <div id="navcontainer"> : @& [8 X. [/ [2 W9 s3 E

, {0 R$ ]4 z' F7 J  <div id="globalnav"> : g( X+ }% F, }4 ]

5 |+ w5 R- `3 Q) p3 j/ ~# G; b8 Z  <ul>a list</ul>   \6 y) E9 R4 p+ W5 y# P$ b
7 ?+ i9 m" o3 q& [9 T' f8 b5 [
  </div> 9 E" O" b, n- j. L) g% c

( P3 @0 \% k7 E( \/ C  <div id="subnav">
2 c# ^% E& d! I; W. X$ g( n
. G2 n6 Q, J7 ~* T  <ul>another list</ul> - _+ j) J+ E6 U/ n6 x" F1 Q

1 ^! Z4 t% G. M. H. G  </div>
% D* D8 k+ e% Q& g3 ^* t7 S; e) `# w7 w5 z
  </div>
+ D+ ^0 p& e' b- l8 C# h, I$ H
% f4 e$ U- p  _0 Q  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
6 q; Y, l  r' J$ D- l9 Q& k! H
! w- x9 G& L4 g4 J' T  a
; `  {: q1 N0 y, P, J$ i, t  用CSS替换传统方法
% N% _4 I# [+ \' ~  下面的列表将帮助你用CSS替换传统方法: % J& a+ O; y  d$ W4 t

$ v% Z1 s9 x. R& s6 K1 u$ q  HTML属性以及相对应的CSS方法   c/ r1 r1 A: L( F2 Z5 O% W
  HTML属性
; q) v8 Q+ H) P0 Y; B, D- Q9 V0 h' C6 c
' Z% }$ j9 M; N1 z0 c- b
  CSS方法说明 + ~) w/ ^, g- m. |/ T
  align="left"
1 d7 p( ~4 A9 _$ t. T& K1 [/ i. x+ ]) x  v3 g
  align="right" float: left; $ }$ P4 X5 K; ^0 V* ?9 |( `
4 n8 N3 @" l* Z. Y% j1 ^
  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
: X+ I6 b: y& `  I
( j' Q$ d+ n% [) `8 i7 f1 B  当你使用float属性,必须给这个浮动元素定义一个宽度。
7 f  F. Q1 D! u* J6 T' D
! ]& |, p* |$ V+ ^  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
: v4 v0 a6 i2 |) o# i
% ?/ e2 H4 }; r0 q3 H' t  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; . ]" a: N7 M- I: J& n8 ?) @
$ Z; L* l! Z, @& o) p( h" G
  a:visited: #339;
7 O, {. t( F6 v" T! T2 t
- J7 E2 |8 o0 |  [$ f) N  a:hover: #999;
. ]* r5 B. S3 B" I4 h& h" R! P% k/ {
# R# W( A9 c. O" ~3 ~! K* {  a:active: #00f;
% P. K4 p$ Q2 N& y  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 9 @6 }+ R' U- B( T- a- v$ }
  M$ q9 M. S# L/ e, J5 _
  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
' I2 o+ E% P5 Z) ~$ x' p+ L# H" j* [4 @) Z' o6 _
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left
8 l( G+ a- B4 f9 T4 D% \" c# G" E( i0 X0 y$ }0 z
  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
1 }# I* ^9 w; c8 S& w5 Q
- A/ t6 Y& u2 b6 B5 U8 `( T  你可以使用 table, td or th 这些选择器. - f$ {6 s( E/ |2 O, Q6 g9 W# W' }

/ g1 o7 m( G7 C; J% P3 [  V  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse;
0 k0 f5 P* I9 X4 ^; w% t8 L) u
. u/ j- ?3 S$ R  <br clear="left"> & ~( d  D& l& _" ?
   , B) F+ l: s0 g9 C
  <br clear="right">
- Y# D' r5 m( I% e* v5 v1 C5 O% `& y
  <br clear="all"> + }6 Y. }* @$ V7 y; z

1 e+ j5 w4 d) m. T  clear: left;
, U& }0 Z1 |; P, M6 d! S3 [5 ?4 X+ }& p" c# Q
  clear: right; ; z9 z. Q; w4 j- o

2 i1 A. |9 q& B6 G7 W  clear: both;
2 i" K5 A/ J) l7 j3 k* G# D4 ?6 \  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性.
% a9 o1 Z$ e/ `# p3 y0 b5 I9 M
2 O- e. c: a; Z& X7 w/ U) Q4 S  cellpadding="3" . ?  j; @3 C0 ]* v
( `/ P& x9 B% e# S8 Q+ c
  vspace="3"
/ t1 t3 g1 c6 P  t. h( [1 W  f( G, @9 f! [3 V0 Y  x: ?- {
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 6 j9 B+ n+ j1 |- C
; J& a# G( n/ g& O& }- g
  align="center" text-align: center; . \8 A+ K. Y! M* K  ~
7 F7 l" {8 J1 U4 t8 I" l" \
  margin-right: auto; margin-left: auto;
7 D6 t- L3 d% O  N  Text-align 只适用于文本.
+ I. z6 ^, r2 O
+ X* H) Z* E# F; P8 M: J+ H% i; h3 r  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
- B2 V! U& g2 z8 ?7 s) R; f: J" _
/ Y0 e2 I) y( H  M4 Q( z  一些令人遗憾的技巧和工作环境
' F' S3 w, k3 u" Q
4 Y0 r% n( Q, A3 C
: P, L: X6 E- k) X9 u: I+ {由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。: d0 L, W: n% |: Z6 U
  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。 6 a; Q! `4 h5 l5 ?5 T2 V/ t$ G, O

: x% Y4 u; M/ a7 ]% S& V, y: J. C& \, N  理解浮动行为 2 @6 h* R* b5 U  V/ k4 U, @4 u
# o9 f. Q/ m$ X2 g# e& ?& u4 e
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
: Q- V9 m% v  I' ^: N6 _% {
$ U3 L& L! @, D: _0 _3 [! a( N& W  更多帮助
% L4 {$ w/ K& _1 ]. t  n" _% G& \4 t, o8 p
  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟
$ a" c( I. F& @' S2 P要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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