当前位置: 代码迷 >> HTML/CSS >> css设立页面的打印样式及css用于不同媒体介质的设置
  详细解决方案

css设立页面的打印样式及css用于不同媒体介质的设置

热度:490   发布时间:2012-11-09 10:18:47.0
css设置页面的打印样式及css用于不同媒体介质的设置

这几天做东西涉及到打印,需要做套打,有些表格或文字只让他显示在网页上,但不需要打印出来

于是就找到了css的这个属性Media

<link href="../CSS/Style.css" rel="stylesheet" type="text/css"/>

<link href="../CSS/Print_Style.css" rel="stylesheet" type="text/css" media="print" />

?

我加了两个样式,Style.css为页面显示的样式,Print_Style.css为打印机专用的样式,这样就可以兼顾页面显示和打印了。

下面是css里Media属性的可选项

screen:指计算机屏幕。
print:指用于打印机的不透明介质。
projection:指用于显示的项目。
braille:盲文系统,指有触觉效果的印刷品。
aural:指语音电子合成器。
tv:指电视类型的媒体。
handheld:指手持式显示设备(小屏幕,单色)
all:适合于所有媒体。

?

指定媒体的两种方法

W3C中有两种方法能为CSS制定媒体类型.在本章开头示范了其中一种方法,也就是使用<link>标签与media属性,接着让我们比较看看这两种方法.

网页教学网

?

方法A:Media属性

<link rel="stylesheet" type="text/css" media="screen" href="screenstyles.css" />

与稍早的例子类似,方法A里指定只对电脑屏幕使用screenstyles.css,如此应该能避免在打印,投影,使用手持设备浏览,使用屏幕阅读器之类的时候套用screenstyles.css内的规则. 网页教学网

部分支持

有个重点必须留意,那就是严格支持所有媒体类型有点不切实际,在理想世界里,所有装置与浏览器都应该严格遵守指定的媒体类型,举例来说,如果写了:

<link rel="stylesheet" type="text/css" media="handheld" href="screenstyles.css" />

那么就会希望只有手持设备(像是PDA,手提电话等)会套用这些样式,不幸的是,标准内容在本文编写的时候似乎还没有普及到浏览器之外的世界,因此并不是任何设备都支持与其对应的媒体类型.

由于这个道理,我们会把焦点放在能够实际应用的媒体类型上,比如说打印样式.

Webjx.Com

?

方法B:@media或@import

<style type="text/css">

? @import url("screenstyles.css") screen;

? @media print {

??? /*?打印时使用的样式放置在此 */

? }

</style>

第二种指定媒体类型的方法是结合@import和@media声明.举例来说,当我们以@import引入外部样式表时,能够一并为它指定媒体类型.

同样的,@media规则能够隔出针对某种特定媒体的规则段落,与方法A类似,以@media指定专门用于打印的样式.

放在<head>里或者放在外部

在方法A里放了<style>标签作为例子,它应该位于文件的<head>内,但是也能把@import与@media放在以<link>标签引用的外部样式表里(参考第10章的"结合方法B与方法C应用多重样式表").

Webjx.Com

?

虽然指定媒体类型时screen是预设值,但没有指定媒体类型时会以all作为预设值.这代表,根据预设,CSS会应用到所有设备上,屏幕,手持设备,投影机,屏幕朗读程序等等.

Webjx.Com

?

可以使用多重设定

不管使用哪种方法,都能一次指定许多媒体类型,举例来说,如果想以方法A同时为打印,屏幕指定某个样式表,那么可以这样写:

网页教学网

?

<link rel="stylesheet" type="text/css" media="screen, print" href="screenstyles.css" />

多重设定值在media属性里要用逗号隔开,同样的,如果我们以方法B指定多种媒体类型时,写法则类似这样:

网页教学网

?

<style type="text/css">

? @import url("screenandprint.css") screen, print;

? @media print {

??? /*?打印时使用的样式放置于此 */

? }

</style> Webjx.Com

在前面的例子中,通过指定多重媒体类型,把screenandprint.css同时给屏幕显示和打印媒体使用,接着再以@media规则隔开打印专用的样式.

看过两种指定媒体类型的方法之后,接着来看看如何实际以它们提供屏幕显示与打印时使用的样式.

?

?

?

分开屏幕显示与打印的样式

假设我们想为同一份文件提供两份CSS:一个在显示时使用,另一个在打印时使用.现在以我的个人网站作为示范.

Webjx.Com

?

我以<link>标签引用整个网站的主体样式表(styles.css).styles.css的内容只是个简单的@import规则,用以引入另一个外部样式表,这样能够对老旧浏览器(像是Netscape 4.x)隐藏样式设定.

?

?

在页面的<head>里,链接到主体样式表styles.css 网页教学网

<link rel="stylesheet" type="text/css" href="/css/style.css" /> 网页教学网

同时也建立另一个特别针对打印设计的样式表(print.css).在print.css里,我写了只在页面打印时适用的样式. Webjx.Com

<link rel="stylesheet" type="text/css" href="/css/style.css" />

<link rel="stylesheet" type="text/css" href="/css/print.css" />

Webjx.Com

?

然后,现在要如何确保这些CSS只会针对各自适合的媒体发挥作用呢?为<link>标签加上media属性就可以了(与方法A一样). 网页教学网

<link rel="stylesheet" type="text/css" media="screen" href="/css/styles.css" />

<link rel="stylesheet" type="text/css" media="print" href="/css/print.css" />

网页教学网

?

通过为styles.css指定screen,就能确保styles.css包含的样式只会对电脑屏幕使用,同样的,把media属性设为print就能确保print.css包含的样式只在使用者打印页面时使用.

现在已经把屏幕与打印样式分开了,接着让我们看看有哪些样式适合放在打印样式表里头.

?

  相关解决方案