打印时绝对定位元素的位置不正确
Placement of absolutely positioned elements incorrect when printing
我目前正面临一个奇怪的问题(嗯,很可能我只是没有意识到一些重要的事情)。
我有以下html片段
<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>
这应该使测试div水平居中,这在浏览器中工作得很好。但是,当我尝试打印此页面时,该元素显示在打印页面的右上角,而不是在中间。
我想也许使用像素来定位打印元素有问题,所以我尝试了其他措施,如em:
<script type="text/javascript">
$(function () {
$('body, #test').css({ 'font-size': '12px' });
$('#test').css({
left: (($('body').width() - $('#test').width() ) / 24.0) + 'em'
})
});
</script>
但不幸的是,结果都是一样的,无论我尝试什么浏览器…我遗漏了什么?
#作为对Adrian的回应,我做了一个尽可能简单的样本,以提取出每个人都可以重现的问题。
<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在打印文档中的位置取决于打印时浏览器窗口的大小
我实际上是与媒体查询工作,以及在我的实际项目。我试图传达一个非常简单的例子来展示这个问题。
在我看来,这也是有趣的,也是邪恶的根源。即使打印机从打印媒体查询中使用其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>
编辑:只有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>
CSS解决方案
在这种情况下,我将使用CSS @media print {}
来瞄准打印。
我假设你有理由使用javascript来构建你的CSS,但如果没有,我会建议以完全不同的方式编码。它不需要javascript,也不需要绝对位置。
总之,解决方案如下…
<html>
<head>
<style>
@media print {
#test {
left:50% !important;
margin-left:-50px;
}
}
</style>
<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>
相关文章:
- DIV并排,位置不正确
- 将CSS应用于在JavaScript中创建的表-表的位置不正确
- 谷歌地图标记IE中的位置不正确,在chrome上工作正常
- 按钮在 Chrome 中的位置不正确
- 动画过程中位置不正确
- 从 SVG 加载的结构 JS 形状的位置不正确
- 使用 jQuery 滑块缩放图像的位置不正确
- 为什么这些列表项的位置不正确
- Phonegap:在目录中导航,索引位置不正确
- Jquery日期选择器图标位置不正确
- 使用jQuery Mobile构建的iOS应用程序的页脚位置不正确
- 使用VS Code、TypeScript和Node.js的断点位置不正确
- 道场堆叠条形/柱形图表标签位置不正确
- 打印时绝对定位元素的位置不正确
- Html5画布绘制位置不正确
- 刷新页面后图像位置不正确
- 和中逗号的位置不正确
- 气球在地图上的位置不正确
- ng重复会导致锚点位置不正确
- jQueryUI可排序项目在拖动时位置不正确