如果你提到印刷用CSS在网上,很多人工作 打印样式表 是想到使用。 我们都是用来创建一个样式表时要求web文档打印出来。 这些样式表确保打印版本是清晰的,我们不会引起用户打印出巨大的图像。 然而,CSS也被用于格式书,目录和小册子,内容可能从未被设计为一个web页面。
在本文中,我们将看看CSS模块创建了用于web浏览器,但处理印刷和分页的媒体。 我将解释如何选择器,属性和值,他们介绍工作。 我完成了一个工作示例,您可以使用作为一个起始点为自己的实验。 对于这个例子,我们将需要一个支持这一专业的用户代理CSS。 我将使用的王子,这是一个商业产品。 然而,王子有一个免费的版本,可用于非商业用途,使其很好的工具来尝试这些例子。
为什么打印HTML和CSS有意义吗
这看起来可能有点奇怪,内容不是特别的web应该保持HTML和CSS格式化。 这看起来就没那么怪当你意识到流行的电子书阅读器格式如EPUB和手机域名是HTML和CSS。 此外,即使整个手稿或目录不是在网站上发表,其中一些可能会。 HTML成为一个方便的格式标准化,更容易处理比拥有一切在Word文档或传统的桌面发布包。
CSS的网页之间的差异和CSS打印
和概念转变,最大的区别是,打印文件是指一个页面一个固定大小的模型。 而在网络上我们不断提醒我们不知道视窗的大小,在打印每个页面都有一个固定大小的关系,我们所做的一切。 由于这种固定的页面大小,我们必须考虑我们的文档页面的集合,分页的媒体,而非连续介质,是一个web页面。
分页的媒体介绍的概念,在网络上没有任何意义。 例如,您需要能够生成页码,把章标题的利润率,打破内容适当,以便数据并不成为与他们分离的标题。 您可能需要创建交叉引用和脚注,从您的文档索引和表的内容。 你可以将文档导入一个桌面出版包和手动创建所有的这一切,然而,工作就需要重做你下次更新副本。 的,这就是CSS规范被设计用于创建分页的媒体。
因为分页的规范设计媒体,我们不会考虑浏览器支持本文——它不会很多的意义。 稍后,我们将看一个用户代理设计将HTML和CSS变成一个PDF使用这些规范。
规范
CSS的你已经知道将有用的格式打印。 专为打印,我们有“ CSS分页媒体模块 ”和“ CSS生成内容分页媒体模块 ”规范。 让我们来看看这是如何工作的。
@PAGE规则
的 @page 规则允许您指定一个页框的各个方面。 例如,您需要指定页面的尺寸。 下面的规则指定一个默认页面大小为5.5 - 8.5英寸。 如果你想打印一本书,也许是由按需印刷服务,然后发现大小您可以使用是很重要的。
@page { size: 5.5in 8.5in; }
除了指定的大小和长度值,也可以使用纸张大小关键字,如“A4”或“法律”。
@page { size: A4; }
你也可以使用一个关键字指定页面的方向——“肖像”或“景观”。
@page { size: A4 landscape; }
理解页面模型
在进一步讨论之前,我们应该理解页面分页模型媒体是如何工作的,因为它的行为有点不同屏幕上的东西是如何工作的。
页面模型定义了一个区域,然后16周围 保证金盒子 。 您可以控制页面的大小之间的区域和边缘的大小页面的边缘区和页面本身。 表的规范解释很好这些箱子的大小。
( 看到大版本 )
页面上的页面区域空间将您的页面内容流。 当它跑出房间,就会创建另一个页面。 保证金框仅用于CSS-generated内容。
左和右页面传播
页面模型的另一个方面是,它定义了伪类选择器的左和右页的文档。 如果你看看你手头的任何印刷书籍,您可能会看到利润的规模和利润率的在左边和右边页面内容是不同的。
我们可以使用这些选择器来定义不同的幅度大小对我们的页面。
@page :left { margin-left: 3cm; } @page :right { margin-left: 4cm; }
另外两个伪类选择器定义。 的 :首先 选择目标文档的第一页。
@page :first { }
的 :空白 伪类选择器目标“故意留空的任何页面。 “添加这个文本,我们可以使用生成的目标上方边缘框的内容。
@page :blank { @top-center { content: "This page is intentionally left blank." } }
生成的内容和分页的媒体
在最后一个示例中,我们使用CSS-generated内容向上方边缘添加文本框。 你会发现,生成创建我们的书内容至关重要。 这是唯一的方法可以添加到我们的保证金盒子。 例如,如果我们想要将这本书的标题添加到左下边缘盒右页,我们将使用生成的内容。
@page:right{ @bottom-left { margin: 10pt 0 30pt 0; border-top: .25pt solid #666; content: "My book"; font-size: 9pt; color: #333; } }
分页符
还“分页媒体”的一部分规范是如何控制分页符的信息。 如已述,一旦页面内容填充区域,它将移动到一个新的页面。 如果一个标题刚刚被写入页面,你可能最终与一个标题的页面完成,相关内容在下一页开始。 在印刷书籍,你会尽量避免这种情况。 其他地方你可能希望避免休息之间的中间表和图及其说明。
一本书的新篇章 H1 标题是常见的。 迫使这个标题的开始页面,设置 page-break-before 来 总是 。
h1 { page-break-before: always; }
为了避免一个标题后直接减免,使用 page-break-after 。
h1, h2, h3, h4, h5 { page-break-after: avoid; }
为了避免破坏数据和表,使用 page-break-inside 财产。
table, figure { page-break-inside: avoid; }
计数器
书都是关于编号的东西——页面,章节,甚至数据。 我们可以通过CSS添加这些数字,拯救我们脱离不得不重编号的一切,因为我们决定说,添加一个新的图壮志未酬身先死一个章。 我们这样做是使用 CSS计数器 。
最明显的地方开始页码。 CSS给了我们一个预定义的页计数器,它始于1和增量与每一个新页面。 在你的样式表中,您将使用此计数器作为生成内容的价值,把页计数器在你的一个盒子。 在下面的示例中,我们添加页码右页面的右下角,左页的左下角。
@page:right{ @bottom-right { content: counter(page); } } @page:left{ @bottom-left { content: counter(page); } }
我们还创建了一个计数器 页面 。 此计数器将永远是你的文档的总页数。 如果你想输出”120年第3页,“你可以。
@page:left{ @bottom-left { content: "Page " counter(page) " of " counter(pages); } }
您可以创建自己的柜台和增量和重置您需要。 要创建一个计数器,使用 counter-reset 财产,增量 counter-increment 。 下面的CSS规则将创建一个柜台章命名 chapternum 并与每个增量 H1 ——在这本书中一个章节的开始。 然后,我们使用该计数器的值生成内容添加章节号和前一段章的实际题目。
body { counter-reset: chapternum; } h1.chapter:before { counter-increment: chapternum; content: counter(chapternum) ". "; }
我们可以做相同的数据在书中。 数字数据的一种常见方法是使用 chapternum.figurenum 。 所以,“图3 - 2”将在第三章第二图。 在 H1 ,我们可以重置 figurenum 为了使每一章开始从1。
body { counter-reset: chapternum figurenum; } h1 { counter-reset: figurenum; } h1.title:before { counter-increment: chapternum; content: counter(chapternum) ". "; } figcaption:before { counter-increment: figurenum; content: counter(chapternum) "-" counter(figurenum) ". "; }
设置字符串
再看一个印刷书籍。 当你翻阅一章,你会看到这一章的标题是印在左边或者右边页面。 这听起来可能有点奇怪,“生成内容分页媒体”规范让我们使用CSS实现这一目标。
我们使用一个属性命名 绳子 在选择我们想要的内容。 章的标题,这将是 H1 。 的价值 绳子 是你想给这个内容,然后呢 内容() 。 然后您可以输出,这是使用生成的内容 字符串() 。
h1 { string-set: doctitle content(); } @page :right { @top-right { content: string(doctitle); margin: 30pt 0 10pt 0; font-size: 8pt; } }
当你生成分页的媒体,每次一个 H1 发生时,写入的内容 doctitle 然后在右上的保证金框中输出的右页,只有当另一个变化 H1 发生。
脚注
脚注的一部分” CSS生成内容分页媒体模块 ”规范。 脚注的工作方式是,您将添加的文本脚注内联,裹在HTML标记(可能是一个跨度),与一个类来将其识别为一个脚注。 当页面生成的内容,删除“脚注元素”,变成一个脚注。
在CSS中,使用脚注的价值 浮动 为你的脚注类属性来创建一个规则。
.fn { float: footnote; }
在你的文档中,使用这个类来包装任何脚注文本。
FootnotesFootnotes and notes placed in the footer of a document to reference the text. The footnote will be removed from the flow when the page is created.span> are useful in books and printed documents.p>
脚注有一个预定义的计数器,以同样的方式表现为页计数器。 通常,您会希望通过1每次递增计数器 FN 类和重置它发生在每一章的开始。
.fn { counter-increment: footnote; } h1 { counter-reset: footnote; }
脚注的各个部分可以有针对性的CSS伪元素。 的 footnote-call 是数字的锚文本,显示有一个脚注。 这使用脚注计数器的值作为生成的内容。
.fn::footnote-call { content: counter(footnote); font-size: 9pt; vertical-align: super; line-height: none; }
的 脚注标记 是前面的数字标记放置在脚注文本文档的页脚。 这些行为以类似的方式有序列表的数据生成CSS。
.fn::footnote-marker { font-weight: bold; }
脚注本身被放置在页边,在一个特殊区域页面的命名 @footnotes 。 你将目标和风格,面积如下。
@page { @footnotes { border-top: 1pt solid black; } }
交叉引用
在继续工作之前我们学到的一切的例子,让我们看看交叉引用。 在网络上,我们通过添加链接交叉引用的东西。 在书中或其他印刷文档,您通常会参考引用的页码的地方被发现。 因为页码可能会改变根据这本书是印刷的格式和版本之间用CSS这样为我们省去了经历和改变所有的数字。
我们使用另一个新属性, target-counter 添加这些数字。 首先创建链接在你的文档中,给他们一个 href ,这是在文档中元素的ID,您想要的目标。 同时,添加一个类来识别它们交叉引用,而不是外部链接,我使用 xref 。
Chapter 1a>
链接之后,再次使用生成的内容输出 (x)页 ,在那里 X 是书中的位置的数量,可以找到ID。
a.xref:after { content: " (page " target-counter(attr(href, url), page) ")"; }
我们会看这种技术在实践中当我们创建一个工作示例的目录。
把它放在一起:一个例子的书
我们看了很多不同的属性在隔离。 他们更有意义,一旦你把它们使用通过构建一本书。
实际使用这个CSS创建一本书,你需要一个支持它的用户代理。 目前,很少有事情实现这个规范;是最容易的一个 王子 。 一个独立的商业许可王子是昂贵的,但是,您可以使用王子为非商业项目免费。 这意味着,如果你只是想尝试这些技术,你可以。 另外,如果你有非商业使用这种技术,你可以用王子那些书格式。
我已经提取通道古登堡计划从我最喜欢的一本书, 我们的猫 由哈里森堰 。 我选择这本书是因为我喜欢猫,因为它有图片和脚注,我可以使用它来证明格式。
你可以找到我的文件使用,再加上一个生成的PDF,结束了 GitHub上 。 如果你想尝试CSS和构建这本书你自己,那么你将需要下载并安装 王子 。 王子是一个命令行工具在Mac上,虽然有一个Windows的GUI,我将使用命令行,因为它真的是非常简单的。
使用一个终端窗口,切换到你的书的目录或从GitHub的位置你下载我的文件。
cd /Users/username/smashing-css-books
现在,运行王子:
prince -s pdf-styles.css book.html builds/book.pdf
这将创建一个PDF中 构建 文件夹命名 book.pdf 。 现在,如果你进行任何更改CSS和HTML,您可以运行看看王子是不同的。
HTML文档
我的整个编译“书”在一个HTML文档。 编译文件王子是可能的,但我发现它更简单的只是处理一个大文档。 之前的章节,从一开始 H1 ,我有一个div,包含封面图像,然后对书的目录。
目录链接id章节的 H1 标题。
Our Cats and All About Themtitle> head> div>Extracts from Our Cats and All About Them by Harrison Weirh1>
- The First Cat Showa>li>
- Trained Catsa>li>
- General Managementa>li>
- Superstition and Witchcrafta>li> ul> div>
The First Cat Showh1>
… p>
Trained Catsh1>
… p>
General Managementh1>
… p>
Superstition and Witchcrafth1>
… p> body> html>
然后CSS使用的所有事情到目前为止我们已经描述了。 首先,我们需要建立一个大小为这本书使用 @page 规则。 然后,我们使用 :首先 伪类选择器删除1页的边缘,因为这个页面会有封面图片。
@page { size: 5.5in 8.5in; margin: 70pt 60pt 70pt; } @page:first { size: 5.5in 8.5in; margin: 0; }然后我们处理封面的图片,确保它覆盖整个页面区域。
div.frontcover { page: cover; content: url("images/cover.png"); width: 100%; height: 100%; }( 看到大版本 )
接下来,我们处理的细节左边和右边的页面,使用 :对 和 :左 伪类传播。
右手边的传播将这本书的标题在保证金框左下角,右下角的页计数器,右上的章的标题。 章的标题使用 绳子 进一步的样式表。
@page:right{ @bottom-left { margin: 10pt 0 30pt 0; border-top: .25pt solid #666; content: "Our Cats"; font-size: 9pt; color: #333; } @bottom-right { margin: 10pt 0 30pt 0; border-top: .25pt solid #666; content: counter(page); font-size: 9pt; } @top-right { content: string(doctitle); margin: 30pt 0 10pt 0; font-size: 9pt; color: #333; } }( 看到大版本 )
左边的传播在右下角,这本书的标题页计数器在左下角。
@page:left { @bottom-right { margin: 10pt 0 30pt 0; border-top: .25pt solid #666; content: "Our Cats"; font-size: 9pt; color: #333; } @bottom-left { margin: 10pt 0 30pt 0; border-top: .25pt solid #666; content: counter(page); font-size: 9pt; } }( 看到大版本 )
第一页,包含封面图片,我们会确保没有生成的内容似乎通过设置它 正常的 。
@page:first { @bottom-right { content: normal; margin: 0; } @bottom-left { content: normal; margin: 0; } }下一节的样式表处理计数器。 除了预设页计数器,我们为章节定义计数器和数字。
/* Reset chapter and figure counters on the body */ body { counter-reset: chapternum figurenum; font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif; line-height: 1.5; font-size: 11pt; } /* Get the title of the current chapter, which will be the content of the h1.Reset figure counter because figures start from 1 in each chapter. */ h1 { string-set: doctitle content(); page-break-before: always; counter-reset: figurenum; counter-reset: footnote; line-height: 1.3; } /* Increment chapter counter */ h1.chapter:before { counter-increment: chapternum; content: counter(chapternum) ". "; } /* Increment and display figure counter */ figcaption:before { counter-increment: figurenum; content: counter(chapternum) "-" counter(figurenum) ". "; }章标题前的数字放置。 数据也显示他们的号码。
( 看到大版本 )
我们创建脚注解释前,上标脚注的呼唤。
.fn { float: footnote; } .fn { counter-increment: footnote; } .fn::footnote-call { content: counter(footnote); font-size: 9pt; vertical-align: super; line-height: none; } .fn::footnote-marker { font-weight: bold; } @page { @footnotes { border-top: 0.6pt solid black; padding-top: 8pt; } }( 看到大版本 )
然后,我们添加一些规则来控制页面。 你需要非常小心过于严格。 如果你的书有很多表和数据,然后添加许多特定的规则可能会导致大量的长差距在书中。 试验和测试将显示多远你可以控制的。 我发现下面的规则是一个很好的起点。
记住,这是一个用户代理的建议。 在某些情况下,阻止一个表破坏将是不可能的如果页面上的表不适合!
h1, h2, h3, h4, h5 { font-weight: bold; page-break-after: avoid; page-break-inside:avoid; } h1+p, h2+p, h3+p { page-break-before: avoid; } table, figure { page-break-inside: avoid; }最后,我们风格的目录,我们使用一个有趣的地方。 在描述交叉引用,我解释了我们如何使用 target-counter 显示页码的ID。 这就是我们做表的内容。 下面的规则把页码后链接表中每一章的内容。
ul.toc a::after { content: target-counter(attr(href), page); }( 看到大版本 )
一般书中,您将使用领导人点排队的所有页码右边距。 令人惊讶的是,CSS给了我们一个方法,通过添加 领袖() 之前在生成的内容数量。
ul.toc a::after { content: leader('.') target-counter(attr(href), page); }( 看到大版本 )
我们现在有一个完整的样式表来构建我们的书。 我避免花费大量的时间在排版上,而不是集中在创建一个书的细节。 然而,从这一点上,你可以实验和添加自己的风格设计创造一个独特的书。
不仅仅是书!
记住,这些技术不仅仅是书。 你可以使用它们来生成打印和PDF版本的产品目录直接从HTML的一个网站,你为一个客户开发。 或者你可以从web内容创建传单和小册子。
如果你想创建PDF文档使用王子,从一个网站 DocRaptor 是一个伟大的选择。 这个服务通过一个API使用王子。 你可以发送文件通过API和接收一个PDF——允许用户下载内容的完美的PDF。 我们看着在本文中所拥有的一切都可能通过一个API与DocRaptor集成。
即使你没有立即需要PDF生成,这是一个迷人的CSS方面,这是一个有用的技能有藏,所以,你知道什么是可能的,当一个用例。
文章整理来自网络,转载请注明北京网站建设公司-北京传诚信,翻译不好,请见谅!
- 相关推荐
- 大家在看
建网站一般需要多少钱?如何规划才能节省成本?
时要节省网站建设的成本,你可以采取以下几个策略:1. 选择合适的网站类型根据你的业务需求和预算,选择适合你的网站类型。例如,如果你的业务相对......
年中钜惠,模板自助建站1000元起!
年中钜惠来袭!现在,我们推出了超值的网站建设服务——模板自助建站,只需1000元起!是的,你没有听错,只要1000元,就可以拥有一个专业的网......
如何建设网站:网站建设的5个精选方案
当建设网站时,以下是五个精选方案,可以帮助您成功建立一个专业、功能齐全的网站:确定网站目标和目标受众:在开始建设网站之前,明确您的网站目标和......
北京建设网站需要多少钱,哪些因素决定价格?
北京建设网站的价格因素是多样的,具体费用会根据以下因素而有所不同:1. 网站规模和功能:网站的规模和功能是影响价格的主要因素之一。一个简单的......
做个企业网站要多少钱,需要注意哪些细节
做一个企业网站的费用和需要注意的细节如下:费用因素:1. 网站设计和开发费用:这是建立企业网站最主要的费用。费用会根据网站的规模、功能和复杂......
北京网站搭建哪家好,服务年份是一个可以参考的值
在选择北京的网站搭建服务提供商时,以下是一些建议:1. 参考口碑和评价:了解不同网站搭建服务提供商的口碑和客户评价。可以通过在线评论、社交媒......
服务年份和建站公司的关系
服务年份可以作为评估建站公司经验和稳定性的参考指标,但并不是唯一的决定因素。一个建站公司的服务年份可以反映他们在行业中的存在时间和经验积累,......
真正永久免费的建站系统有哪些?我来告诉你
永久免费的建站系统有很多,以下是一些比较知名的:1. WdPress:WdPress是一个开源的内容管理系统(CMS)用户可以在不事先了解编......
建网站究竟需要多少钱?
在数字化时代,拥有一个精美实用的网站对个人、企业或组织来说变得越来越重要。然而,对于许多人来说,建设一个网站的费用仍然是一个疑问。这篇文章将......
从事网站开发的公司
作为从事网站开发的公司,一般可以提供以下服务:网站设计与开发:根据客户需求,设计和建立符合其品牌形象和目标的网站。可以包括用户界面设计、前端......
普通商务网站建设流程
建立一个普通商务网站首先必须先给它取个名(域名注册),并把企业的域名注册、域名解析等先期工作完成。然后开始制作网站。大体上一个企业的网站有以......
网站支持移动手机的重要性!
现在当我们走在街上、搭乘大众交通工具、排队等候时,总是可以看到有人正低着头滑手机,或是觉得无聊想要打发时间,您也会拿起口袋看看有没有讯息、社......
HTML/CSS编辑工具─Notdpad++介绍。
大家在网站建设的时候,一定会常常去编辑到原始码,不管是编辑HTML或是CSS档,如果用微软内建的记事本来编辑,文件小的时候还好,文件一大,行......
企业网站设计的重要性有那些?
随着网络信息时代的高速发展,企业已经不能再单单去靠传统的推广模式去打开市场而更多的公司和个人已经认识到了企业网站的重要性。很多的公司都是通过......
移动网站设计及其展望
移动网站设计及其展望今天,我们可以使用我们的手机作为一种资源丰富的媒介,快速连接到互联网。无论我们是寻找时尚网站还是房地产网站,我们都可以轻......
网站数字营销如何操作?组成部分都有哪些?
数字营销具有三个主要组成部分:线索生成,线索捕获和线索培育。阶段1:潜在客户产生数字营销的第一步是计划并执行潜在客户生成策略,以吸引合适的人......
网站建设系统性设计原则。
网络以大量的信息流作为营运的起点 设计时需要从系统上合理组织规划和呈现这些信息引导人流在网络系统内部的有效流动 再通过系统上对互动操作的有效......
网站制作中的资讯是为了产品销售。
网站制作中一切资讯都是为了带动产品(服务)销售,提高目标客户群体对我们产品(服务)的认知度,目标客户群体越了解我们的产品(服务),越容易成交......
什么是SMTP身份验证
什么是SMTP身份验证?SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议它是一组用于由源地址到目的地......
微信小程序怎么申请账号
开始开发小程序的第一步,你需要拥有一个小程序帐号,通过这个帐号你就可以管理你的小程序。跟随这个教程,开始你的小程序之旅吧!申请帐号进入小程序......