我有一个包含多个图表的页面,网格状格式如下:
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
每个图表都显示在包含float:left
的包装中,图表所在的div包含overflow: auto
。这样可以将图表包装到屏幕宽度所需的布局。
我遇到的问题是在打印模式下,这只会打印一页并丢失其余部分(第一页也是空白)。我已经阅读了一点并理解解决方案在大多数情况下是转为应用float:none
解决上述问题...但我丢失了网格格式,我想在打印页面上有多列图表。
我该如何解决这个问题?
我正在使用打印样式表,但这里是屏幕样式:
.chartSpace /* surrounds all charts */
{
padding-top: 20px;
width: auto;
overflow: auto;
}
.chartWrapper /* wrapper for each chart */
{
float: left;
padding: 0 20px 0 0;
}
答案 0 :(得分:7)
Float在print css中不能正常工作,所以删除浮点数或用float:none覆盖它们并改为使用inline-block:
.chartWrapper {
float: none;
display: inline-block;
vertical-align: top;
padding: 0 20px 0 0;
}
答案 1 :(得分:2)
我不知道你是否真的需要float: left
来做其他事情,但你可以试试:
/* wrapper for each chart */
.chartWrapper { display: inline; padding: 0 20px 0 0; }
这也会使div
彼此相邻,并且不会对文档的流程产生奇怪的影响。
答案 2 :(得分:1)
过去我遇到了同样的问题。自从我一直关注解决方案。我最喜欢的方法是使用<table>
元素。并为打印构建不同的页面。大量的工作,但最终值得。因为我需要它来计费。我的客户真的无法收到丑陋的账单。
示例:
<table style="width: 100%;">
<tr>
<td>Alek Rasschaert</td>
<td style="width: 60%"></td>
<td>Mobile Express</td>
</tr>
<tr>
<td>Diestsesteenweg 93</td>
<td style="width: 60%"></td>
<td>Diestsesteenweg 93</td>
</tr>
<tr>
<td>3010 Kessel-Lo</td>
<td style="width: 60%"></td>
<td>3010 Kessel-Lo</td>
</tr>
</table>
答案 3 :(得分:0)
这是我在项目上遇到的一个问题,不幸的是我找不到直截了当的答案。 Jeroens的回答对我不起作用,因为我还在每个图像下显示一些标题文本,因此我需要显示:块行为。我最终采取的方法如下:
[] [] [] []
-------清算div
[] [] [] []
-------清算div
[] [] [] []
等...
我使用了以下样式:
div.pageBreak {
page-break-after: always;
visibility:hidden;
height:1px !important;
margin:0;
}
最后,做大量的跨浏览器测试!我发现我必须使图像非常小,因为相同的网格布局适合浏览器的一个页面。这是因为不同浏览器使用的默认页边距不同。
希望这有帮助。