Javascript 打印时绝对定位元素的放置不正确
我现在面临一个奇怪的问题(很可能我根本没有意识到这里有什么重要的事情) 我有以下html代码片段Javascript 打印时绝对定位元素的放置不正确,javascript,jquery,html,css,printing,Javascript,Jquery,Html,Css,Printing,我现在面临一个奇怪的问题(很可能我根本没有意识到这里有什么重要的事情) 我有以下html代码片段 <div id="test"> Hallo Welt </div> 哈罗贴边 以及以下javascript代码片段: <script type="text/javascript"> $(function () { $('#test').offset({ position: 'absolute', width: '100
<div id="test">
Hallo Welt
</div>
哈罗贴边
以及以下javascript代码片段:
<script type="text/javascript">
$(function () {
$('#test').offset({
position: 'absolute',
width: '100px',
left: ($('body').width() - $('#test').width()) / 2.0
})
});
</script>
$(函数(){
$(“#测试”)。偏移量({
位置:'绝对',
宽度:“100px”,
左:($('body').width()-$('#test').width())/2.0
})
});
这将使测试div水平居中,这在浏览器中工作得非常好。但是,当我尝试打印这个页面时,元素出现在打印页面的右转角而不是中间。
我认为使用像素定位打印元素可能有问题,所以我尝试了其他措施,如em:
<script type="text/javascript">
$(function () {
$('body, #test').css({ 'font-size': '12px' });
$('#test').css({
left: (($('body').width() - $('#test').width() ) / 24.0) + 'em'
})
});
</script>
$(函数(){
$('body,#test').css({'font-size':'12px');
$('#test').css({
左:($('body').width()-$('#test').width())/24.0)+'em'
})
});
但不幸的是,无论我使用什么浏览器,结果都是一样的。。。
我错过了什么
#
作为对阿德里安的回应,我制作了一个尽可能简单的样本,以提取每个人都可以复制的问题
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(function () {
$('#test').css({
background:'red',
position: 'absolute',
width: '100px',
left: ($('body').width() - 100) / 2.0
});
});
</script>
</head>
<body>
<div id="test">
Lord
</div>
</body>
</html>
$(函数(){
$('#test').css({
背景:'红色',
位置:'绝对',
宽度:“100px”,
左:($('body').width()-100)/2.0
});
});
贵族
我还注意到#test在打印文档中的位置取决于打印时浏览器窗口的大小。编辑:仅使用js的较新解决方案
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(function () {
$('#test').css({
background:'red',
position: 'absolute',
width: '100px',
left: '50%',
marginLeft: '-50px'
});
});
</script>
</head>
<body>
<div id="test">
Lord
</div>
</body>
</html>
编辑:仅使用js的较新解决方案
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(function () {
$('#test').css({
background:'red',
position: 'absolute',
width: '100px',
left: '50%',
marginLeft: '-50px'
});
});
</script>
</head>
<body>
<div id="test">
Lord
</div>
</body>
</html>
在我的真实项目中,我实际上也在处理媒体查询。我试图传达一个非常简单的示例,作为问题的展示 在我看来,这也是有趣的,也是邪恶的根源。即使打印机使用打印媒体查询中的100px,它执行的javascript返回测试div仍然是100%,这在我看来是错误的
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(function () {
$('#test').text($('#test').width());
});
</script>
<style type="text/css">
#test {
width: 100%;
border: 1px solid black;
}
@media print {
#test {
width: 100px;
}
}
</style>
</head>
<body>
<div id="test"></div>
</body>
</html>
$(函数(){
$('#test').text($('#test').width());
});
#试验{
宽度:100%;
边框:1px纯黑;
}
@媒体印刷品{
#试验{
宽度:100px;
}
}
在我的实际项目中,我实际上也在处理媒体查询。我试图传达一个非常简单的示例,作为问题的展示
在我看来,这也是有趣的,也是邪恶的根源。即使打印机使用打印媒体查询中的100px,它执行的javascript返回测试div仍然是100%,这在我看来是错误的
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(function () {
$('#test').text($('#test').width());
});
</script>
<style type="text/css">
#test {
width: 100%;
border: 1px solid black;
}
@media print {
#test {
width: 100px;
}
}
</style>
</head>
<body>
<div id="test"></div>
</body>
</html>
$(函数(){
$('#test').text($('#test').width());
});
#试验{
宽度:100%;
边框:1px纯黑;
}
@媒体印刷品{
#试验{
宽度:100px;
}
}
您的css中是否有一个@media print
查询导致它执行其他操作?@Adrian我用一个独立的示例补充了我的问题,您可以在您的计算机上尝试;-)我意识到$(“#some div”).width()返回浏览器中div宽度的大小,而不是打印页面的宽度。问题就从这里开始。有没有一种方法可以查询“画布”或在打印时返回浏览器或打印页面中div宽度的任何宽度?您的css中是否有一个@media print
查询导致它执行其他操作?@Adrian I用一个独立的示例补充我的问题,您可以在计算机上尝试;-)我意识到$(“#some div”).width()返回浏览器中div宽度的大小,而不是打印页面的宽度。问题就从这里开始。有没有一种方法可以查询“canvas”或在打印时返回浏览器或打印页面中div宽度的任何宽度?我正在开发一个复杂的调度程序组件,需要使用javascript在调度程序中定位事件。问题是,虽然在屏幕上看起来不错,但当试图打印屏幕上看起来不错的同一个调度程序时,相同的事件到处都在浮动。啊,好的,我会用更合适的解决方案编辑我的帖子。我正在开发一个复杂的调度程序组件,我需要用javascript在调度程序中定位事件。问题是,虽然在屏幕上看起来不错,但当试图打印屏幕上看起来不错的调度程序时,相同的事件到处都是。啊,好的,我会用更合适的解决方案编辑我的帖子