精通 CSS

用HTML制作网页就象是用画笔绘制一幅图 画。只有那些对网页制作痴迷而执着的人 才可能精确地实现预定的结果,这并不是 正确的工具和灵活性就可以实现的。 任何使用过HTML大一个多星期的人都知道 HTML是一种非常好的网页制作工具。所以 有时候我们不得不制作体积相当大的GIF 图象以获得想要的字体和布局。同样,有 时候也不得不使用各种表格标签和隐藏的 空格GIF图象以使页面的布局能达到预想 的目的。 的确有些荒唐。我们的编码实在是太复杂了,GIF用量越来越多,而我们的页面变 得比英吉利海峡还要宽,互联网有限的带 宽怎么可能通过这么宽的信息呢?这种设 计并不是网页设计的最佳形式。

但是,1996年底的时候悄悄诞生了一种叫做样式表(stylesheets)的技术。全称 应该是串接样式表(CascadingStylesheets-简称CSS)这位HTML的表弟向世人保证: 将对布局、字体、颜色、背景和其它文图 效果实现更加精确的控制。 . 只通过修改一个文件就改变页数不计的网页的外观和格式。 在所有浏览器和平台之间的兼容性。 更少的编码、更少的页数和更快的 下载速度。除了还不能全面支持我们常用的大多数浏览器之外,CSS在实现其它承诺方面作得相当出色。CSS在改变我们制作样式表的方法。它为大部分的网页创新奠定了基石。之后的5天,我们将漫游样式表的世界。你将学到样式表的基本知识并将其应用于你的网页中。你还将学到如何处理字体、图文、色彩、背景及定位等的详细技巧。今天,我们先浏览一下样式表的基本内容。第1个问题;样式表能为我们做什么?

那么css样式表有什么特别之处呢?简而言之, 它能帮你做以下事情:

  1. 你可以将格式和结构分离。
  2. 你可以以前所未有的能力控制页面布局。
  3. 你可以制作体积更小下载更快的网页。
  4. 你可以将许多网页同时更新,比以前 更快更容易。
  5. 浏览器将成为你更友好的界面

你可以将格式和结构分离。 HTML从来没打算控制网页的格式或外 观。这种语言定义了网页的结构和个要 素的功能,而让浏览器自己决定应该让 各要素以何种模样显示。 但是网页设计者要求的更多。所以当 Netscape推出新的可以控制网页外观的 HTML标签时,网页设计者无不欢呼雀跃。 我们可以用<FONT FACE>、<I>包在<P>外 边控制文章主体的外观等等。然后我们 将所有东西都放入表格,用隐式GIF空格 产生一个20象素的边距。一切都变得乱 七八糟。编码变得越来越臃肿不堪,要 想将什么内容迅速加到网页中变得越来 越难。 串接样式表通过将定义结构的部分和定 义格式的部分分离使我们能够对页面的 布局施加更多的控制。HTML仍可以保持 简单明了的初衷。CSS代码独立出来从 另一角度控制页面外观。 你可以以前所未有的能力控制页面的 布局。 <FONT SIZE>能使我们调整字号,表格 标签帮助我们生成边距,这都没错。但 是,我们对HTML总体上的控制却很有限。 我们不可能精确地生成80象素的高度, 不可能控制行间距或字间距,我们不能 在屏幕上精确定位图象的位置。 但是现在,样式表使这一切都成为可 能。而即将推出的新的CSS功能更令人 兴奋。以后4天内,你将会明白我所说 的意味着什么。 你可以制作出体积更小下载更快的网 页 还有更好的消息:样式表只是简单的文 本,就象HTML那样。它不需要图象,不 需要执行程序,不需要插件,不需要流 式。它就象HTML指令那样快。 有了CSS之后,以前必须求助于GIF的事 情现在通过CSS就可以实现。还有,正如 我先前提到的,使用串接样式表可以减 少表格标签及其它加大HTML体积的代码, 减少图象用量从而减少文件尺寸。 你可以更快更容易地维护及更新大量的 网页。 没有样式表时,如果我想更新整个站点 中所有主体文本的字体,我必须一页一 页地修改每张网页。即便站点用数据库 提供服务,我仍然需要更新所有的模板, 而且更新每一模板中每一个实例实例的 <FONT FACE>。 样式表的主旨就是将格式和结构分离。 利于样式表,我可以将站点上所有的网 页都指向单一的一个CSS文件,我只要 修改CSS文件中某一行,那么整个站点 都会随之发生变动。 浏览器将成为你更友好的界面。 不象其它的的网络技术,样式表的代码 有很好的兼容性,也就是说,如果用户 丢失了某个插件时不会发生中断,或者 使用老版本的浏览器时代码不会出现杂 乱无章的情况。 只要是可以识别串接样式表的浏览器就 可以应用它。 怎么样,样式表的确是一个很不错的注 意吧? 那么,现在我们就开始制作一份样式表。

我们已经 学了将css样式表加到网页的一种方 法。实际上你可以使用4种方法。每种方 法都有其不同的优点:
  1. 将样式表植入HTML文件中。
  2. 将一个外部样式表链接到HTML文件 上。
  3. 将一个外部样式表输入到HTML文件 中。
  4. 将样式表加入到HTML文件行中。

植入样式表:

这就是我们在上一页中用的方法,所有 的样式表信息都列于HTML文件的顶部, 同<BODY>分列,例:

<HTML> <STYLE TYPE="text/css"> <!-- H1 { color: green; font-family: impact } P { background: yellow; font-family: courier } --> </STYLE> <HEAD> <TITLE>My First Stylesheet</TITLE> </HEAD> <BODY> <H1>Stylesheets: The Tool of the Web Design Gods</H1> <P>Amaze your friends! Squash your enemies!</P> </BODY> </HTML>

植入样式表规则后,浏览器在整个HTML页 面中都执行该规则。如果你想对网页一次 性加入样式表,就可材用该方法。

你可能注意到代码中有两处很奇怪: TYPE="text/css"属性和注释标签。 TYPE="text/css" 设定采用MIME类型,这 样以来,不支持CSS的浏览器可以忽略样 式表。

注释标签(<!-- and -->)更为重要。有些 老的浏览器(如MAC机用的IE 2.0)即使 在设定了TYPE="text/css" 属性时也不能 忽略样式表继续执行下面的命令,而且还 会显示样式表的代码。而使用注释标签则 可以避免发生这种情况。 链接到样式表上

这里是样式表功能发挥得淋漓尽致的地 方。你可以将多个HTML文件都链接到一个 中心样式表文件。这个外部的样式表文件 将设定你所有网页的规则。如果你改变样 式表文件中的额某一细节,所有页面都会 随之改变。如果你维护的站点很大,则这 项功能绝对会有其用武之地。

它的使用方法:产生一个普通的网页,但 不使用<STYLE>规则,而是在<HEAD>内使 用<LINK>标签:

<HTML> <HEAD> <TITLE>My First Stylesheet </TITLE> <LINK REL=stylesheet HREF="mystyles.css" TYPE="text/css"> </HEAD> <BODY> <H1>Stylesheets: The Tool of the Web Design Gods</H1> <P>Amaze your friends! Squash your enemies!</P> </BODY> </HTML>

(使用链接的样式表时,你无须使用注释 标签。)

现在生成一个单另的文本文件,起名mystyles.css (或者其任何你喜欢的名 字)。文件内容如下:

H1 { color: green; font-family: impact } P { background: yellow; font-family: courier }

H1 { color: green; font-family:

如同发布HTML文件那样,将这个CSS文件 发布到你的服务器中。在浏览器中观看网 页时,你会发现浏览器将依照链接标签将 所有链接了的HTML网页按照样式表的规则 显示,在HREF属性中你可以选择使用绝对 或相对URL。

输入样式表

输入外部样式表的方法同链接的方法类似。 不同之处在于链接法不能同其它方法结合 使用,但输入法则可以。例:

<HTML> <STYLE TYPE="text/css"> <!-- @import url(company.css); H1 { color: orange; font-family: impact } --> </STYLE> <HEAD> <TITLE>My First Stylesheet </TITLE> </HEAD> <BODY> <H1>Stylesheets: The Tool of the Web Design Gods</H1> <P>Amaze your friends! Squash your enemies!</P> </BODY> </HTML>

而其中输入的 company.css文件内容如下:

H1 { color: green; font-family: times } P { background: yellow; font-family: courier }

在本例中,浏览器首先输入 company.css 的规则 ( @import 必须打头), 然后加入 移植的规则从而为这个网页产生规则集合。 请注意,对于H1在外部样式表文件和植入 的样式表中都设定了规则。在两者冲突的 情况下,浏览器应执行哪一项规则呢?植 入的规则此时将占上风。所以文字显示效 果如下:

Stylesheets: The Tool of the Web Design Gods

Amaze your friends! Squash your enemies!

输入样式表的灵活性可以使你输入无数多 个样式表,并可以按照自己的喜好用植入 的样式表凌驾于输入的样式表之上。

但是目前只有IE 4.0支持输入法。

在行内加入样式 最后,你还可以在HTML行中加入样式规则, 如下:

<HTML> <HEAD> <TITLE>My First Stylesheet </TITLE> </HEAD> <BODY> <H1 STYLE="color: orange; font-family: impact">Stylesheets: The Tool of the Web Design Gods</H1> <P STYLE="background: yellow; font-family: courier">Amaze your friends! Squash your enemies!</P> </BODY> </HTML>

在这个例子中,你无须在HTML顶部加入样 式表代码。加入行内的样式表属性将使浏 览器同样执行样式表规则。

该方法不方便之处在于:你必须在每行指 令中都中加入样式规则,否则下一行时浏 览器将转回到文件的缺省设置。

加入行内的样式表相比不如植入、链接及 输入的样式表那样功能强大,但有时候你 会发现它也很有用。

记住,你可以同时使用几种方法,其实, 样式表的能力就在于综合你加入网页的各 种样式。

css分类及其它技巧

我们已经学习了所有的css样式表基本语法。 下面我将给你讲几个你肯定会非常感兴 趣的技巧和快捷方式. 分类 我先前已经讲过所有的HTML标签都可以 用作选择,并附加样式表说明.但是如果 你想达到的目的比这还要复杂该如何处 理呢?比如,你想让主体文字的1段用绿 色显示,第2段用紫色显示,而第3段用 灰色显示,你能做到吗? 这种情况下分类将发挥作用。你可以将 段落P分成3种不同的类别,每一类应用 不同的样式表说明。这些规则(不论是 植入的还是外部样式表文件)将以以下 方式显示:

P.first { color: green } P.second { color: purple } P.third { color: gray }

你的HTML代码如下:

<P CLASS=first>The first paragraph, with a class name of "first."</P> <P CLASS=second>The second paragraph, with a class name of "second."</P> <P CLASS=third>The third paragraph, with a class name of "third."</P>

你可以给类别起任何一种名字,但不要 忘了在样式表规则中类别名称前加一个 句号(即英文中的 .)

你还可以生成不加任何HTML标签的分类:

.first { color: green }

这种方式更加灵活,因为现在我们可以 将CLASS=first用于任何HTML标签,并应 用到网页<BODY>中,而设定的文字将以 绿色显示。 情景选择: 如果你想让所有加重显示的文字都以红 色显示,但条件是只有当这些加显示的 文字出现在通常的主体文字内时。不可 能吗?利用样式表可以实现你最狂野的 梦想。情景选择将使你梦想成真,心想 事成。情景选择要求你设定一个可以执 行选择说明的情景即可。

P B { color: red }

<H1><B>Emma Thompson</B>, Actress </H1> <P>Dramatic actor, inspired comedienne. Is there <B>nothing</B> she can't do?</P>

样式表的规则告诉浏览器只将所有<P>之 内加重显示的文字以红色显示。所以, <P>之外标题的加重文字不会以红色显示, 而<P>之内的文字则是。 注释 即使是用样式表制作出的非常简练的代 码也应该加上注释。利用样式表代码就 可以做到这一点。例:

P.first { color: green } /* green for the first paragraph of every page */H1 { text-indent: 10px; font-family: verdana } IMG { margin-top: 100px } /* give all images a top margin */

有关浏览器的坏消息

我必须得作这个简短而又尖刻的评价:串接 CSS 样式表很伟大,但浏览器却不怎么样。 Internet Explorer 3.0是第一个试图支 持样式表的浏览器,它的尝试是很有勇气 的,特别是在尚未确定样式表的正式标准 的时候更显得可贵。但也因为如此,IE 3.0支持了CSS的大部分属性,但也存在一 些小毛病。 你可能以为等Netscape Communicator 和 IE 4.0问世的时候将会更坚定地支持CSS。 很可惜。似乎微软和网景关系的开发者对 CSS的某些属性都作了自己的阐释。而双 方的阐释彼此互不支持。 结果如何呢?应用样式表就象是行走在地 雷区一般。大部分的东西都很正常,但有 些不是。甚至有些东西都能运转,但在不 同的浏览器上的显示却不同。 在以后4天的学习中,我将尽力说明不同 的浏览器各自支持什么属性。但是其中的 细节就需要你自己亲自去趟这个雷区了。 将利用样式表制作的产品放到不同的浏览 器和平台上进行测试是非常有必要的。这 是避免令人不愉快的结果的唯一办法。 同时,我们应该大声疾呼,让微软和网景 公司明白必须统一对串接样式表的支持, 只有这样才能实现标准化的设计。