返回列表 发帖

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

你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:
* A( t% y) B+ |8 |( v' H2 R7 T: u- N+ `7 L
  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。 * b3 B/ F9 E  X0 O

* Z: {7 u! _0 x: N) s% D* h$ I4 R% R9 p  另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,、hspace、align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句。 $ W9 w3 l& E" Y" h' ~( \  E8 y- f% z

$ u1 w' i- J0 d4 L当你解决了第一种问题,知道了如何结构化你的HTML,我再给出一个列表,详细列出原来的表现属性用什么CSS来代替。
3 J0 U: u3 }4 u: D! \6 o# [
4 w9 j9 p% K" K0 W  结构化HTML
0 t  s) t+ [4 [, s2 \) B
% e( |/ ?2 F) }  我们在刚学习网页制作时,总是先考虑怎么设计,考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。
% p9 R/ d7 h! j
5 r" ]1 T) b2 t  如果你希望你的HTML页面用CSS布局(是CSS-friendly的),你需要回头重来,先不考虑“外观”,要先思考你的页面内容的语义和结构。 8 d+ B' W1 q7 F9 F
" }# m7 U0 @8 V3 c
  外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来,CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。
0 z& Y$ P8 i: u; i
: F! D5 Z- a  l* Z. k4 K" }  HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义,显示在任何地方,任何网络设备上。 7 \" D' n( M# r- t  U
) O- k6 ~5 p4 M% z4 f/ I6 P
  开始思考 % }0 \# Z$ D$ y# o9 ?
6 D2 m$ W) g4 j1 _+ |# G' A
  r. x& e2 x3 }4 M/ ~4 A& }7 m  I
# a+ C1 t, ^1 i  I' z
  首先要学习什么是"结构",一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块,以及每块内容服务的目的,然后再根据这些内容目的建立起相应的HTML结构。 9 @( z2 R8 d4 J% e3 ^

% e, V5 a2 ?9 `7 c( |8 A% T  如果你坐下来仔细分析和规划你的页面结构,你可能得到类似这样的几块: 4 R* C9 M9 X3 M( C

; C  m$ D( ~! M( i' a  标志和站点名称
5 n* H) Y  r/ ]  主页面内容
" Z4 O  c5 }4 M4 t  站点导航(主菜单)
' o8 x# x" D- A  子菜单 , ]. ]* E  i$ q) H
  搜索框 ' d3 s! X5 T  p* F
  功能区(例如购物车、收银台) ( J2 p" r, N8 H) d
  页脚(版权和有关法律声明) 2 x9 n1 o: L+ E# G
( P- {, d" V; ]8 G

% @6 [. J% J2 @+ n$ z6 Q& K: @& l  我们通常采用DIV元素来将这些结构定义出来,类似这样: 8 g5 R" P0 E+ B6 X& T
. ~. {( u) j' n$ j1 b
  <div id="header"></div>
. l+ C: B/ `0 v* w3 I  w/ J  c, D3 V6 k% v3 u
  <div id="content"></div>
8 s; E3 o' h$ M% J1 h) j7 y7 v, D: y  \7 M/ I8 }' Y5 J
  <div id="globalnav"></div>
+ Y& r# n5 a0 A) N1 S  b7 \. w( l- s: S
  <div id="subnav"></div> 6 g6 `# j, H2 }3 }% o( O

$ w$ P" V) E! k! n+ B  <div id="search"></div>
4 p9 D3 [3 p" z. s
  E0 U8 n" d; i2 ~6 Z  <div id="shop"></div>
" H2 D# N/ r& r, k  f9 m+ B" e6 Q7 Y, k' ]1 \: p' S
  <div id="footer"></div> ' I6 q9 Z; e( g0 R4 x; F

, n) G! ^/ ?3 s' }: R2 F  这不是布局,是结构。这是一个对内容块的语义说明。当你理解了你的结构,就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块,也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 5 X$ O  o& r; j+ t

0 B; R. Y  y& s- Q$ ]. l6 {# P6 ~  根据上面讲述的,你已经知道如何结构化HTML,现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方,再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 $ q4 _# i2 W8 N/ a5 [

* N4 o/ I  n/ K  使用选择器是件美妙的事
* N8 r3 i0 H- ?6 j- ]: g7 Cid的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则,就可以完全不同于#content里的图片规则。
; p/ M7 b  `' g0 D$ \# {5 R, _6 e: t; s  n, C
  另外一个例子是:你可以通过不同规则来定义不同内容块里的链接样式。类似这样:#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如,通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲,你的页面是由图片、链接、列表、段落等组成的,这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响,它们可以被定义为任何的表现外观。 ( Y: J4 i# o' F" S4 ]  P3 E
: H" x2 ?" ?8 ]  ?
  一个仔细结构化的HTML页面非常简单,每一个元素都被用于结构目的。当你想缩进一个段落,不需要使用blockquote标签,只要使用p标签,并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签,margin是表现属性,前者属于HTML,后者属于CSS。(这就是结构于表现的 相分离.)' D# \3 p2 R/ `8 F$ w( k! N' B
  良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如,原先的代码<table width="80%" cellpadding="3" border="2" align="left">,现在可以只在HTML中写<table>,所有控制表现的东西都写到CSS中去,在结构化的HTML中, table就是表格,而不是其他什么(比如被用来布局和定位)。
- u/ m' O3 u1 Z" H0 |; \! F& G4 h
亲自实践一下结构化   ^2 c& ]' s8 H8 ?. U2 q

- ^  _) H: Z, v: P5 |  上面说的只是最基本的结构,实际应用中,你可以根据需要来调整内容块。常常会出现DIV嵌套的情况,你会看到"container"层中又有其它层,结构类似这样:
5 G: W* Z, \. V" T. z* J% [9 I" h: T; P$ M3 a6 C8 n
  <div id="navcontainer"> / h( T* Z- ?* {# Y# T
9 ^  P9 h& J6 R+ ]( d! c
  <div id="globalnav">
7 m' C% {; i4 W& S* a- D- h( u: ?) e7 E4 S. q3 \
  <ul>a list</ul>
/ h) h! @/ H) k
- B8 \* Q) ]) i' s0 \  </div> 0 g/ J% B0 r$ y) {& n( a5 W
( u5 a  W: d( M. m$ W
  <div id="subnav"> 1 D' V  L& z: v  t% e

2 z' T$ v3 k; m8 Q  <ul>another list</ul>
( g' k6 [% ?0 a: s5 U4 P* k8 a% e2 G+ ?  T' {) m2 p" P
  </div> ; t% W" {. r; d8 d& m
9 X' N* S$ L+ c* X
  </div>
. D2 L9 y7 ^# n1 A7 `+ W
0 X! h& |- P- V% @3 G- F  嵌套的div元素允许你定义更多的CSS规则来控制表现,例如:你可以给#navcontainer一个规则让列表居右,再给#globalnav一个规则让列表居左,而给#subnav的list另一个完全不同的表现。 - g* s3 P% g9 v% a  X$ K& y0 Q

" @& K8 k& S: ]2 d' K: u, K4 l. {
6 x- @8 S1 Y1 ~$ v  用CSS替换传统方法
0 O2 P' {- k. E; U8 K) K% X( i) K  下面的列表将帮助你用CSS替换传统方法:
+ ?- r8 A. K0 d: i; Z: C$ A# q: v5 J+ g+ o( i! o
  HTML属性以及相对应的CSS方法 8 \2 `5 P( \5 f& R3 T
  HTML属性
2 \& `$ ~6 p7 a7 k% Z1 W8 I, B" W& B2 i2 k: c- y( c

! L1 {" Z# d. A% ~  B  CSS方法说明
0 O; M, H: Y0 ?* R; C$ Z0 \+ Y  align="left" : u( O6 q0 ^' l9 R4 _1 y6 T) @! z2 }

" k* T- `) ]8 S  align="right" float: left; - Z2 Q) U$ |* z' W+ g, Z4 `7 Y

3 g& `7 n, Q+ B3 P$ ?  float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等
2 P) F0 ]) R/ j5 z# \
( M1 k: l' [: V/ o4 e5 X! _  当你使用float属性,必须给这个浮动元素定义一个宽度。
8 |) R) z/ p/ J8 b  i: [8 c
5 Q( i4 B2 i1 @( E4 E' x3 L  marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的,你可以分别指定元素的top, right, bottom和left的margin值。
" }9 o7 a" g6 f! w
. |$ e7 d: _% s8 A- ?( Q; @) H  vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; + j& q2 M7 i9 |* [, I6 C, R

; b# e# p/ h9 k% b# {9 U  a:visited: #339;
: s4 i& K. p: F. `8 C6 B+ m% e
! ]! u# a( d4 _9 d* g  a:hover: #999; & i& ^6 L" E+ e- V

2 W% d( H# I4 e! y  a:active: #00f; 3 v4 ]+ I. y* H9 c0 H$ m
  在HTML中,链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器,页面不同部分的链接样式可以不一样。
. F4 |! D8 J& a9 Z0 E# G2 }
( V' J( C! }6 b* f# z$ u/ F  bgcolor="#FFFFFF" background-color: #fff; 在CSS中,任何元素都可以定义背景颜色,不仅仅局限于body和table元素。
# f6 G7 l9 n- K" e' g: e2 I% j, l" l3 A! }( C
  bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder),你可以分别定义top, right, bottom和left 8 R! J# `+ {4 y. W
7 r8 H2 h) @+ U1 j) ^& r; J
  border="3" cellspacing="3" border-width: 3px; 用CSS,你可以定义table的边框为统一样式,也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。
( j3 _; k( }: C- D; i# Y( Z: I
: |5 J- r8 p4 W4 V  你可以使用 table, td or th 这些选择器. . ~, j5 n) J; d: u! |3 ~% p: Q

5 w$ @; P6 \. `" ]" P( x  如果你需要设置无边框效果,可以使用CSS定义: border-collapse: collapse; / S- Z$ v2 g/ f' A2 M9 [6 \5 Y
1 g7 L6 W# B4 E
  <br clear="left"> 5 c2 Y- }+ h+ h( @. A: r, E* U
   0 G9 D# I6 K/ z8 D# J0 |
  <br clear="right">
# ]/ M7 E7 o2 t' m! `3 N
2 b2 f8 {0 t0 o" r& @5 _5 @  <br clear="all"> 6 h' }5 Z8 q5 e/ \

* i  u: g* {7 c! j# Q  clear: left;
. x! }+ h4 q4 b1 q% ~, F2 R8 F# o0 t& x, P& M6 M
  clear: right; 6 B& _$ Q, R0 f$ w7 @
9 Q3 V3 J0 r. L/ J
  clear: both;
& B. L9 R) W- F0 F  许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片,你可以使用clear属性. + Z) e8 j* v% D1 M! y& i, q) S# h

) X+ T' G- f4 ]9 X. D) o  cellpadding="3" : S3 E. |5 e6 p& [( {
9 W: G8 c& D( r* U
  vspace="3"
6 w8 W5 W$ y5 |' e: [+ v6 I2 i4 D- @3 g; B' p1 _
  hspace="3" padding: 3px; 用CSS,任何元素都可以设定padding属性,同样,padding可以分别设置top, right, bottom and left。padding是透明的。 # m, q" ~1 L$ A1 l) P
) v' f/ Y" i  w; e1 F, n
  align="center" text-align: center;
* B; \- x( o1 Q1 A8 l' ?' v4 F) a& Z; F* D- m" K
  margin-right: auto; margin-left: auto; 2 r  P4 U+ y& i7 w
  Text-align 只适用于文本. : x. e2 _. J# T, _5 U4 ~

4 p0 n' `% R. U2 ]$ s  象div,p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中
9 @4 F% ?( M3 F2 }7 Z0 u) i3 j0 u: `3 K0 T2 Q
  一些令人遗憾的技巧和工作环境
; C/ y5 [+ G, X+ I6 y3 n5 @+ h4 b$ B( Q+ e6 }* y$ Z5 y
9 |0 f" l6 E2 h& h( e) l
由于浏览器对CSS支持的不完善,我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧,盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。
! w* ~9 @; n) {% ]* I; A/ X( A  另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。
0 e4 X/ a  G' z) q! G  D4 g. R" T  U
  理解浮动行为 : U; M8 @% m8 z- R5 L! `" u
% U' ]+ o+ g1 |  x9 h& W! [1 `0 n
  Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear),阅读《How To Clear Floats Without Structural Markup》将非常有帮助。
2 x  E" t7 Y3 F5 \1 s
- U2 T; u% r/ P/ W6 l6 a  更多帮助
. [! S0 H3 a/ a! m- |- w# {5 F' @5 d% d$ C: }+ e  p
  已有的《CSS Discussion》列表是很好的资源,它收集了一个WiKiA讨论组的信息,其中包括CSS布局总结(css- discuss.incutio.com/?page=CssLayouts),CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多。

现在似乎很流行div+css布局哟
$ [% y" r! f# e& g1 h( I& g) x要逐渐的用div取代table布局  好像是table不方便用dom操作

TOP

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

TOP

回复 3# 的帖子

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

TOP

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