返回列表 发帖

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习: / y$ |  w  F# ?& z, s& N

; n3 ?, A& ~) y4 ]0 C  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。
3 t1 O5 b/ y9 D4 B( I& Z( I8 R: d9 N/ W5 B
  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 , W/ c! o5 A5 v+ ~! M- `
/ _; r/ }) l' m) |+ y4 y2 R
当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。 $ R/ r8 p, d( g; z

, D% }! `; a8 ~, j  结构化HTML
+ g# b, ]/ L8 Q& T5 C1 q* C0 @
  }9 J/ [8 M$ U& G  _4 ]7 y  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 / e- U5 i7 P/ N7 w
0 p  o& ]6 t$ a8 J- c' ?8 i* S: _
  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 : p$ k0 M9 w; K6 G) R% O

' E- U! W  D1 a6 z! C$ `: c8 y  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
0 f% w1 ~1 M9 q; k1 B( @+ m0 f  r; f! h9 Q' M
  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 " @  F' N- c( k* k1 X) V9 z( }

2 Y) U6 _9 a, Q4 N1 q8 X* U* [  开始思考 8 F. @; E! |. L& k. a5 H6 c4 e

0 Z1 G, R0 n1 @1 n5 P: ]' d4 y% ^0 \  }/ w7 E( V9 p; b" J' _7 b; g
! i- A7 E% u- e1 p1 n6 p' ]
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 ( H: u/ z% |( X1 f, d: D

0 `- I/ }4 q$ R5 s  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块:
# |( n( g) T% Y. j, X9 I% G3 Q. d" T) G+ `
  标志和站点名称 % D/ W! N$ N2 c; D. i
  主页面内容 3 B, ]. q. n1 w, J
  站点导航(主菜单) " a; {5 D5 D7 s
  子菜单
  \. ^( J: E6 p& Y( ?! }  搜索框 $ @: _% ]; i& e; N" h3 }  [. D
  功能区(例如购物车、收银台) ; w7 B0 J3 A% L0 I5 Q  z& R5 `
  页脚(版权和有关法律声明)
% H2 I  W; o9 Q7 N9 E
) [  |* `* b5 @% ]% A" f
- V/ v. a0 ]6 o& t) K  我们通常采用DIV元素来将这些结构定义出来,类似这样:
$ S# W; `. w6 \# {8 X! {
) i( K" u9 \; a8 ^4 C0 {  <div id="header"></div> 7 E& Q% D3 b, E

- l9 O% a. [3 ]* v- u, [: ?) M& u, ^  <div id="content"></div>
3 C8 I( J- O' E1 }, q+ E
; B9 J, D) e7 y+ C/ K" P: W  <div id="globalnav"></div>
7 T6 u  `6 b2 w% n8 ]/ ~! o
  F0 z/ f' l$ ?& ], `! n0 K  <div id="subnav"></div>
9 ?0 @$ |; L" G) F0 g. B9 w! }& q
9 D& A0 e5 j! J) q$ v: @! Q  <div id="search"></div> 1 N5 R; r% U- G8 P8 ~; }" H: t

- v8 R8 D" s- W/ Q4 d  <div id="shop"></div>
0 Z1 V$ ?2 H  b; I( d0 M) i, x. b5 d4 I0 |: c
  <div id="footer"></div> / P8 L! K9 x' J6 l2 \8 H
/ k: W5 o/ p! R5 K
  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 2 l% ]$ a1 L9 r( W) K' p  k
" I  D" y; Q! L
  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 # m$ [% B' l! h) h' q2 ]2 j/ O
+ ]& c1 p2 {4 e' P3 |
  使用选择器是件美妙的事
, ]/ u# z  r/ r8 M# R' M3 S( F* Nid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
$ ], G; b! H1 c3 s' c9 ]8 b6 B, \3 P/ J% N& |# t- N6 u$ O
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。
! K% s; M0 x; x2 N1 d5 W; m: x5 v2 }6 S1 K# ^
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)6 |5 t$ @+ }" f5 G# G
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。
' J! ?5 m4 z; d. ?. e. V; Z) N& e$ l: @( d" X2 N2 `
亲自实践一下结构化 + R4 E- E5 S  Q. }5 e+ a
7 S8 u3 _. ?* t3 u( U7 |
  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样: . n4 C' B1 [  m
$ O; ]1 q' ^( z, I: r
  <div id="navcontainer">
: p  w: U% T% t) }7 R' M& |6 b+ j, x& W8 U- n" \2 n) d& v
  <div id="globalnav">
2 x  U  A9 y' c# r3 b0 r; w
+ D1 G  F/ h& e  J3 E6 k5 {1 @( u  <ul>a list</ul> ! v- H+ r+ a; o, ^+ P

2 o8 @! h7 p% F/ W" M8 v4 u6 V0 i  </div> $ W/ c4 y; Z) ?; m: T

. _# }3 G7 w, P# G1 T1 \  <div id="subnav">
  z+ y6 [/ o: @' S* S4 A
) Y' Z% d4 f; m  <ul>another list</ul>
1 ~2 _7 z9 G6 E! r% e0 @7 G5 G& b8 X
  </div> ! x5 H  e/ ?0 m+ J4 L
0 z" O+ P  S8 S6 z5 U* D+ W3 s
  </div>
( c9 V, Z' \: H3 j3 s7 b0 N5 b: j; T) s$ k1 {" ]1 P
  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。
3 R+ x' g$ ]4 T( T( N, s
; U( p3 I+ ?! \/ M/ n
$ S3 y7 s, N, G& x3 C  用CSS替换传统方法 7 _/ @+ r# O2 J5 g
  下面的列表将帮助你用CSS替换传统方法:
" K1 l' R: M* J. i+ X( p8 x0 s2 g5 [, T, q& ~4 Q
  HTML属性以及相对应的CSS方法
" G; a3 G6 [' |- e  l4 `& o  HTML属性
+ A' P6 X9 t! \. d
# I7 a" P% K4 [( P, O
4 X/ `' `2 \4 C) U  CSS方法说明 . a6 U; z2 V& ^# t: m
  align="left" $ I* q) g; f$ E( r6 N

4 @( I- `0 r% H& e$ [  align="right" float: left; . z0 Q1 w6 P: V0 w8 S/ r; Q" l

! s; ~3 E+ j& C: o% N. G1 }1 X  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
- g8 H: Y( g$ A( z. l0 l+ E+ _* u! M5 `
8 M3 C6 J  X2 e* j& N  当你使用float属性,必须给这个浮动元素定义一个宽度。
, H2 |2 ?! E) |2 T: y4 N0 E! }. K. r& Y3 |
  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
3 ~2 f+ R  R& B/ t
+ W9 N2 H. e+ }) `' w  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;
* d" y- n; I* @/ o, ^3 T
7 W2 G4 H0 `3 z# m/ f  a:visited: #339; - w) H/ |/ O+ [, Q  p5 J/ {7 D+ M1 @

2 D" J9 p6 p6 M  a:hover: #999;
/ d9 `7 r9 R/ s: a9 R' H
3 f. A& X+ F2 s/ l) }  a:active: #00f; ' ]$ w& _- M6 }- h0 o
  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。 1 M0 _- T# d9 L3 K7 C

9 m  T( c) i1 u1 P3 b; j  Y" Y  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
( q- \' a) M* y' c/ ^: N  e+ x6 w3 o5 _+ a$ G5 Y' Y: m& \. _
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left 7 ^/ u+ G! l  D+ l* R: o, j

$ _& ]( Y( U! R" h3 ~1 J! c  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 6 r$ C* M, W! z8 b- C; t8 L* R

  B% }) {6 |% U  你可以使用 table, td or th 这些选择器.
! r2 ^: y( d! Z. Y$ s3 f" O
: Q/ T, U6 q9 L% Z- |6 V% T: f  g  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; ' X* q% T6 B- V  }. h# ?

. U% o  U) ~% y  g  <br clear="left"> ' _. h' Z% `. L( z' }3 [  ?0 |
   + u# Q/ w5 O6 j+ b/ k
  <br clear="right"> . s$ u$ k) ~9 ^# B9 V% ~# @
2 `0 r$ t" k& @2 E
  <br clear="all"> % ~9 t% |+ I# {
/ }9 X2 z* E9 G9 o/ S7 h0 U
  clear: left; ! Z& `! s* P: j, h

0 D# v/ J1 w; [+ O/ z& ^! N  clear: right; ( l# z6 V+ H: p( G0 _9 f' A

/ s) h3 K. k; n$ F  clear: both; 0 o2 ~& P! q7 g( }3 T" \; M  h
  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. - k3 g3 I- i" G: e# ?

$ y$ `/ I) {( G5 D& w  cellpadding="3" 6 h7 q- {( e: P% O3 B7 D+ @* u2 S
) r* W' X( Z- m7 h6 {; L
  vspace="3"
0 S# |5 b: F) q6 ^
1 F( b1 e) v4 F  S% a7 T4 f6 R5 a5 I) _  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。
, e/ a9 H. I9 H
; o0 O+ O( i1 I2 C$ f  align="center" text-align: center;
5 Y- [# z. ~/ j, c. G* o, i+ C  |! W3 W
  margin-right: auto; margin-left: auto;
3 x# R( I: R" Z; h0 a3 y8 P  Text-align 只适用于文本.   J, D+ V) }' F$ Q& J
8 ?  n# W' h7 s3 q6 Z
  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 . o- L' v% O8 G2 ?. f# t
, A6 [6 J5 B. @: N
  一些令人遗憾的技巧和工作环境
: r" p+ c$ H- |& m- ]7 }0 w9 P$ ~$ f
7 N5 Z, M2 |/ o8 O( i
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
% ~+ L2 x* M5 v3 I1 e! x  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
0 A9 r- f/ w9 G& P3 M9 f- T
2 e4 U8 X8 W: Y! {  理解浮动行为
6 Y- V' @0 X( Y
! S+ f0 Y" \3 P5 j( H+ [9 S  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
& ~6 o* X- o* @( B3 u/ z, b3 p+ V" D5 r- q& d0 T# {  b/ M( _- E
  更多帮助
- s7 H; Z$ S7 O0 J" b7 {  A. G8 E; Y9 ^% k$ ^, W! }6 h1 K
  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟
1 d+ {" W# C4 M6 ^7 @6 H要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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