打印滚动的div
你不能在纯CSS中做到这一点 - 你将不得不使用你的Javascript UI库来重新实现滚动,以获得你想要的。
打印时不使用滚动条的用户状态(考虑一下,如果滚动屏幕上的3个屏幕并点击“打印”,浏览器是否可以打印该部分当时在你窗口中的文件?)。但是,如果您使用实际操纵DOM的JS(即,如果该人已滚动293像素,则将x位置偏移设置为-293,就像CSS中的style="left: -293px; overflow: hidden;"
一样),则它将在打印文档中显示。
我的建议是,除非图是非常宽,就跳过了这么多废话,并使用与width: 100%
打印机样式表图表的<div>
所以只是缩小到页面宽度图。
我认为你将不得不指定印刷,你不知何故需要删除溢出的备用CSS:
<link rel="stylesheet" type="text/css” href="sheet.css" media="print" />
然而,也许是用JavaScript甚至Flash中的方法吗?如果我理解正确,你只想打印一部分图表(用户选择“?”而不是全部)?我很肯定这对纯HTML/CSS是不可能的,但我坚信Flash或者JavaScript/AJAX(一次只加载一部分图像)可以解决这个问题。
一个简单的方法是将一些javascript文件发回给你的页面,用户在链接上选择滚动位置,如“设置打印”。然后,服务器端返回一个页面,其中相对定位在滚动位置的图形使用overflow:hidden
来适当地剪切图形。
当然,这对JavaScript禁用的用户不起作用 - 如果你想支持这个,你需要用户指定滚动位置,如文本输入元素和提交按钮,你启用时用javascript隐藏。
您需要暂时将父级的滚动位置转换为子级的负边距,并将该父级设置为溢出:隐藏。
这里是如何做到这一点的Javascript(这是唯一的方法,CSS不能这样做)
请注意,您将需要的东西在打印后执行printDone()来恢复一切正常。您可以通过轮子事件触发它,例如因为用户在尝试滚动时只会遇到问题。或者,您可以像我一样放一个按钮,并仅在调用printGo()时显示它。
<html>
<head>
<style>
#wrapper {
width:800px;
overflow-x:scroll;
}
#content {
width:2000px;
border:2px solid red;
}
@media print { /* This overwrites the css when printing */
#wrapper {
overflow-x:hidden;
}
}
</style>
</head>
<body>
<a href="#" onclick="printGo()">Print</a><br>
<a href="#" onclick="printDone()">I'm done printing!</a>
<div id=wrapper>
<div id=content>
Hello this is my content.
</div>
</div>
<script>
var wrapper = document.getElementById('wrapper');
var content = document.getElementById('content');
var scrollPos;
function printGo(){
scrollPos = wrapper.scrollLeft; // Save scroll position
wrapper.scrollLeft = 0;
wrapper.style.overflowX = 'hidden'; // Optional since css does it
content.style.marginLeft = -scrollPos+'px'; // Put it as a negative margin of child instead
window.print();
}
function printDone(){
wrapper.scrollLeft = scrollPos; // Restore scroll position
wrapper.style.overflowX = 'scroll'; // Optional since css does it
content.style.marginLeft = '';
}
</script>
</body></html>