[翻译]标记语言和样式手册 Chapter 10 应用CSS(3)

作者:zhaozy 来源:3user.com 时间:2008-02-02 18:44:00 

结合方法B和方法C应用多重样式表

有些时候,在一份文档中引入许多分样式表可能很有用,举例来说,可以将所有布局规则放到一个文档中,并且将字体设定放到另一个文档中,对庞大,复杂的设计来说,这能使维护大量规则的工作变得更简单.

变色龙效果

在制作Fast Company杂志的网站时,我希望每个月更改网站的配色,以便配合当期杂志的封面图片,为了简化定期修改工作,因此我把所有与颜色相关的CSS规则集中到一个文档里,并且把不会每个月修改的其他规则放进另一个文档中.

每个月就能更简单,快速的盖好所有颜色,不必在构成设计的其他几百条规则里慢慢找需要改动的内容.只要改好这个文档,整个网站的色彩就会立刻改变.

如何办到

要结合方法B与方法C引入多重样式表,做法是在页面的<head>里使用<link>标签引用CSS主体文档,与方法B示范相同,链接到styles.css.

而styles.css的内容只简单包含了几条@import规则,引入所需要的其他CSS文件.

举例来说,如果想引入三份样式表,一份处理布局,一份定义字体,一份定义色彩,那么styles.css的内容则可能如下所示:

/* 老旧的浏览器不会解读这些导入规则 */
@import url("layout.css");
@import url("fonts.css");
@import url("colors.css");

如此一来,就能在整个网站使用相同的<link>标签,只引用styles.css文件,这个文档能以@import规则继续导入其他样式表,新样式表只要加到这个文档里,就能对整个网站发挥作用.

这让更新,替换CSS变得非常简单,举例来说,如果在路上你突然想把CSS切成4个文件,你只需要改动这个文档的@import规则,而不必修改所有XHTML标记源代码.

Lo-Fi和Hi-Fi样式

以方法C的@import规则对老旧浏览器隐藏CSS时,还有另一个技巧可用.那就是使用CSS的层叠效应,以方法A或方法B提供老旧,最新浏览器都支持的Lo-Fi效果,接着以@import为其他支持的浏览器提供进阶效果.

老旧的浏览器只会拿到他们能支持的内容,而新一点的浏览器则会拿到所有想使用的样式.

接着我们看看这个技巧的代码长什么样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>Applying CSS</title>
  <link rel="stylesheet" type="text/css" href="lofi.css" />
  <style type="text/css">
    @import "hifi.css";
  </style>
</head>

此处lofi.css应该包含基本的CSS规则,像是链接色彩,字体大小;而hifi.css则是包含进阶规则,像是布局,定位,背景图片等.

我们能同时传送Lo-Fi和Hi-Fi版本的样式,完全不必编写script或者在服务器端以任何方式辨认浏览器版本.

顺序很重要

在标记源代码内指定<link>与<style>标签的顺序很重要,CSS的Cascade(层叠)指的正是规则的优先权,这是根据出现顺序决定的.

举例来说,由于大多数最新的浏览器都同时支持两种做法,因此会下载所有样式表并套用里面的所有样式,这时,在hifi.css里的样式规则会覆盖lofi.css对相同标签指定的样式,理由是什么?因为标记源码里,hifi.css出现在lofi.css之后.

老旧浏览器会忽略hifi.css,因为不支持@import规则,因此他们只会使用lofi.css定义的样式.

拥抱层叠特性

以各种方式发挥CSS层叠特性带来的好处,举个例子,假设你整个网站都共用一个外部CSS进行布局,定位,设定字体,色彩等,这时你应该会在每个页面以方法@import这个样式表,为老旧浏览器隐藏这些规则.

如果网站上有一个页面想共享布局和定位设定,但是需要调整字体或颜色.在(与网站上其他页面不同的)这个页面里,仍然能引入CSS主体文档,在完成引用之后,我们紧接着引用第二个为这个页面定义好特殊样式的CSS文档.任何在第二个CSS文件中的规则都会被优先采用,覆盖第一个CSS文件为相同标签所指定的样式规则.

让我们看看示例,master.css包含了整个网站结构,字体之类的CSS规则,而在custom.css中只在特定页面引用,覆盖几个特殊标签的样式设定.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>Applying CSS</title>
  <style type="text/css">
    @import "master.css";
    @import "custom.css";
  </style>
</head>

由于custom.css在标记源代码中是第二个出现的,因此它为相同标签指定的样式会覆盖master.css之内制定的内容.

举例来说,假设在main.css之内我们要求<h1>标签使用红色serif字体,而<h2>则使用蓝色serif字体.

h1 {
  font-family: Georgia, serif;
  color: red;
  }
h2 {
  font-family: Georgia, serif;
  color: blue;
  }

在某个特定页面,我们只想改变<h1>标签的样式设定,沿用<h2>的样式.那么在custom.css中,我们就只需要为<h1>声明新样式.

h1 {
  font-family: Verdana, sans-serif;
  color: orange;
  }

这个声明将会覆盖master.css内的声明(因为custom.css在它后面再引入).如果页面先引入master.css之后再引入custom.css的话,<h1>标签会使用橘色Verdana字体,而<h2>仍是蓝色serif字体.因为后面这个在master.css里的声明没有被custom.css覆盖.

CSS的层叠功能是个共享通用样式的好工具,让你能够只覆盖需要修改的规则.

标签:样式,标记,css,手册
0
投稿

猜你喜欢

  • FSO如何一行行地读取文件?

    2010-06-10 18:40:00
  • oracle 字符串转成行

    2009-06-19 17:38:00
  • Dreamweaver实现flash透明背景

    2008-05-04 09:35:00
  • asp datediff 时间相减

    2011-03-25 10:34:00
  • 瞬间的设计(四)【碳酸饮料会】

    2009-12-23 13:56:00
  • ASP看代码学习CASE的用法

    2008-04-13 06:36:00
  • 条件注释使用指南[译]

    2009-03-23 17:41:00
  • 另类解读SQL Server中的DateTime数据类型

    2009-01-06 11:22:00
  • 细化解析:轻松掌握怎样测试 MySQL安装

    2009-01-14 11:54:00
  • Firefox 的 Jetpack 扩展案例分析:Gmail 邮件提醒

    2009-10-15 12:41:00
  • Oracle时间日期操作方法小结

    2010-11-25 18:04:00
  • IE8 的 JSON 解析 Bug

    2009-05-22 12:36:00
  • Oracle 外连接实现代码

    2009-08-08 23:08:00
  • PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法

    2009-04-30 18:41:00
  • 了解WEB页面工具语言XML(三)支持工具

    2008-09-05 17:18:00
  • 设计者在网页排版中应注意的一些问题

    2012-04-20 13:13:58
  • 网马解密大讲堂——网马解密中级篇(Eval篇)

    2009-09-16 16:04:00
  • 3个JS控制图片滚动的效果

    2007-10-23 13:40:00
  • MYSQL启用日志和查看日志

    2010-12-03 16:24:00
  • 用CSS实现柱状图(Bar Graph)的方法(二)—基于表格元素的柱状图

    2008-05-26 13:23:00
  • asp之家 网络编程 m.aspxhome.com