html - 设置过渡持续时间后无法覆盖打印样式中的填充

标签 html css

我有一个奇怪的问题,它似乎只影响 Chrome(在 Ubuntu 上的 Chromium 47.0.2526.73、Windows 上的 Chrome 48.0.2564.82 m、Ubuntu 上的 Firefox 43.0.4 中测试),并且只在实际 打印预览(在开发人员工具中模拟打印媒体时不会出现此问题)。

我一直在尝试解决 GitLab 中打印样式的问题,页面左侧有一个不希望出现的间隙,如下所示。

excess margin in print preview on GitLab page

现在,人们希望这是一个简单的解决方法。主容器元素有一个 230px 的 padding-left 为侧边栏留出空间,打印时需要为零。但是,我无法获得实际消除此填充的打印样式。

我已将其简化为最小测试用例,如图所示 here .我会使用就地片段,但当您尝试打印预览时效果不佳。我的示例源码如下:

<!DOCTYPE html>
<html>
<head>
<title>Print style problem demonstration</title>
<style type="text/css" media="all">
.page-with-sidebar {
  background: purple!important;
  transition-duration: .3s;
}

@media(min-width: 1199px) {
  .page-sidebar-expanded {
    padding-left: 230px;
  }
}
</style>
<style type="text/css" media="print">
.page-with-sidebar, .page-sidebar-expanded { 
  padding-left: 0!important;
  transition-duration: 0s!important;
}
</style>
</head>
<body>

<p>I have no left padding.</p>

<div class="page-sidebar-expanded page-with-sidebar">
  <p style="color: white;">I should have no left padding when printed</p>
</div>

</body>
</html>

在这个例子中,我试图通过在打印样式中设置 padding-left: 0!important; 来消除打印时紫色 p 的填充。我已将问题隔离到 transition-duration: .3s; 样式,如果将其删除,问题就会消失。但是,设置 transition-duration: 0s!important; 不会成功覆盖它。

purple element with unwanted padding in print preview

我已阅读 this thread ,这是我能找到的最相关的解决方案,但所描述的解决方案似乎对我不起作用(使转换仅显示屏幕,并添加其他 transition: none 行)。

一个有趣的进一步观察是问题也依赖于 @media(min-width: 1199px) 规则。如果删除它,问题也会消失。

我发现导致此问题发生的所有因素都无法在 GitLab 中轻易更改,即使可以更改,我也很想知道是什么导致了此行为。

是我做错了什么还是 Chrome 中的错误?

最佳答案

主要问题是过渡属性,您可以将其写入媒体检查以下 css,我也对此进行了测试并且工作正常。

    <style type="text/css" media="all">
        .page-with-sidebar {
            background: purple!important;
        }

    @media(min-width: 1199px) {
        .page-with-sidebar {
            transition-duration: .3s;
        }
        .page-sidebar-expanded {
            padding-left: 230px;
        }
    }
    </style>
    <style type="text/css" media="print">
        .page-with-sidebar, .page-sidebar-expanded { 
            padding-left: 0!important;
        }
    </style>

关于html - 设置过渡持续时间后无法覆盖打印样式中的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914129/

相关文章:

javascript - HTML5 File API 中的 FileReader.readAsText 如何工作?

javascript - 让所有JS等待页面加载

javascript - 如何在加载时切换图像

css - 父级内的两个独立文本翻转不连贯的文本翻转

jquery - 显示为三个单元格的 block 必须删除 cellspacing

javascript - 使用 javascript 将文本插入 <div> 元素的最快方法是什么?

html - CSS 适用于所有内部 div 但跳过第一个 child

html - div 背景图像在 Firefox 中悬停时变为空白?

php - 如何在 Virtuemart 中将 "product details"文本更改为我自己的文本?

javascript - 附加左键或右键单击的事件监听器 - onclick 不适用于右键单击