通常,我们需要使用另一个link元素来添加打印样式:
<link rel="stylesheet" type="text/css" media="print" href="print.css" />
按照惯例,上面这个样式表包含所有打印相关的规则,包括版式和颜色规则。特别是版式,样式表中的规则大部分很可能拷贝自main.css. 也就是说,这造成了很多重复代码。
可以看出从布局样式中拆分出版式和颜色样式的好处了:在打印样式表中,我们不再需要那些重复的规则了。除此之外,可以使用另一个组织上的小技巧来改进站点的适用性,以及针对有问题的浏览器隐藏某些布局样式。
回顾下我们的样式表,考虑以下代码:
<link rel="stylesheet" type="text/css" href="type.css" />
<link rel="stylesheet" type="text/css" href="layout.css" />
<link rel="stylesheet" type="text/css" href="color.css" />
我们没有声明媒介类型,因此 Netscape 4.x 会读取这三个文件中的所有样式。但是,Netscape浏览器能理解最基本的CSS, 我们可以利用这一点。通过将layout.css包含的所有样式移动到新的样式表——适当的取名为screen.css, 我们可以进一步组织样式。最后,将layout.css中的内容更新为引入screen.css, 这样,NS4.x和它的同族浏览器们就再也聪明不起来了(因为它们不理解 @import指令)。(译注:作者这里说的是将所有layout.css中的内容都移动到screen.css中,然后在layout.css中通过@import引入screen.css. 我觉得最好的做法应该是在layout.css中保留最基本的NS4.x也可以理解的布局样式,而将其它高级布局样式移动到screen.css中。)
@import ‘screen.css’;
还有一些改进的余地——应该声明样式表所针对的媒介,我们通过给@import声明添加媒介类型来做到这点:
@import ‘screen.css’ screen;
问题是IE7及以下浏览器不理解这种语法从而忽略上面的样式表,如果想给这些浏览器提供上面的样式(这是经常期望的),可以很简单地使用条件注释来做到,这将在下文阐述。如果你拥有鹰一般利锐的眼睛,可能已经注意到在样式表名称的两边使用了单引号(’)来替代双引号(”),这个小技巧可以让IE5/Mac忽略样式表。IE5/Mac的CSS布局能力非常弱(特别是对浮动和定位的支持),对它们隐藏布局规则是完全可接受的。毕竟,它们依旧能获取颜色和版式信息,这在某些情况下已经够用了。
采用相同的技术,可以导入print.css文件(和你猜想的一样,包含打印布局的特定规则)。
@import ‘screen.css’ screen;
@import ‘print.css’ print;










