【问题标题】:Div tags with float left not printing properly带有浮动的 Div 标签无法正确打印
【发布时间】:2013-09-11 15:37:52
【问题描述】:

我有一个包含容器 div 标签和一些嵌套浮动 div 标签的布局。我以这种方式使用它们来产生两列效果(而不是表格单元格)。在网页上,一切都很好。但是当我打印时,浮动的没有正确显示。它是一组 2 组容器 div/浮动 div 和一个全宽 div 标签(无浮动)的序列。代码如下:

<div style="margin-bottom: 5px; border-top: 1px solid #000000; padding: 5px; font-size: 0;">
  <div style="display: inline-block; width: 50%; vertical-align: top; font-size: 11px;">
    <span style="font-weight: bold;">Provider: </span>
    Name here
  </div>
  <div style="display: inline-block; width: 50%; vertical-align: top; font-size: 11px;">
    <span style="font-weight: bold;">Location: </span>
    Name<br/>
    Street Address<br/>
    City, State Zip<br/>
    Phone
  </div>
</div>

<div style="margin-bottom: 5px; border-top: 1px solid #000000; padding: 5px; font-size: 0;">
  <div style="display: inline-block; width: 50%; vertical-align: top; font-size: 11px;">
    <span style="font-weight: bold;">Appointments:</span>
    <br />
    No appointments scheduled
  </div>
  <div style="display: inline-block; width: 50%; vertical-align: top; font-size: 11px;">
    <span style="font-weight: bold;">Care Team:</span>
    <br />
    Name Here
  </div>
</div>

<div style="margin-bottom: 5px; padding: 5px; border-top: 1px solid #000000;">
  <span style="font-weight: bold;">Referrals:</span>
  <br />
  No referrals available
</div>

如前所述,网页上的所有内容均正确呈现。感谢@avrahamcool,我已将其修复,以便顶部边框线正确显示。但是,当我使用 IE9 时,我得到的结果如下所示:


提供者:姓名
地点:姓名
街道地址
城市,州邮编
电话


约会:
未安排预约
护理团队:
在此命名


推荐:
没有可用的推荐

它在 Chrome 中运行良好。提供者/位置和预约/护理团队在打印时分为边界线之间的两列(并在屏幕上正常显示)

【问题讨论】:

  • 打印渲染因浏览器而异。您可能想考虑提供一个服务器端 PDF 引擎。
  • 不是您问题的答案,但作为最佳实践,您不应将标记和样式结合在一起。使用外部 CSS 文件。
  • @avrahamcool 通常我就是这样做的。在这种特殊情况下,我别无选择,只能使用内联样式

标签: css css-float


【解决方案1】:

我已经完全重新创建了您的标记,所以我可以使用它。

this 是结果。 (注意这有多美?)

我已经在 IE10、IE9、IE8、FF、Chrome 中测试过了。 而且,每一个都印出来,它就像一个魅力。

如果您必须将 HTML 和 CSS 结合起来编写(我看不出有什么原因……但我该判断谁)我会尽力帮助您将我的解决方案应用于您的 HTML。

所以,主要的想法是完全失去float这个东西,而改用inline-block

但是,inline-block 为元素添加了额外的间距(由标记中的换行引起),导致 50% 比这多一点,因此使列不适合一行。 我使用了许多技巧之一来解决这个问题。通过在容器上应用font-size:0;,并在他的孩子上重新应用字体大小。 另外,我必须 verticaly-align:top; 列。

所以,总而言之,这就是最终结果。

新的 HTML 标记

<div class="Container">
    <div class="Column">
        <span class="Header">Provider:</span>
        <span>Name here</span>
    </div>
    <div class="Column">
        <span class="Header">Location:</span>
        <span>Name</span>
        <br/>
        <span>Street Address</span>
        <br/>
        <span>City, State Zip</span>
        <br/>
        <span>Phone</span>
    </div>
</div>
<div class="Container">
    <div class="Column">
        <span class="Header">Appointments:</span>
        <br/>
        <span>No appointments scheduled</span>
    </div>
    <div class="Column">
        <span class="Header">Care Team:</span>
        <br/>
        <span>Name Here</span>
    </div>
</div>
<div class="Container">
    <span class="Header">Referrals:</span>
    <br/>
    <span>No referrals available</span>
</div>

新的 CSS

*
{
    margin: 0;
    padding: 0;
}
.Container
{
    margin-bottom: 5px;
    border-top: 1px solid #000000;
    font-size: 0;
}
    .Container *
    {
        font-size: medium;
    }
.Container .Column
{
    display: inline-block;
    width: 50%;
    vertical-align: top;
}
    .Container .Header
    {
        font-weight: bold;
    }

编辑: 出于某种原因,我放弃了你的填充物。所以here 是一个在容器中填充填充的小提琴(其余的都和以前一样)

编辑 2 行内样式

<div style="margin-bottom: 5px;padding: 5px;border-top: 1px solid #000000;font-size: 0;">
    <div style="display: inline-block;width: 50%;vertical-align: top;font-size: medium;">
        <span style="font-weight: bold;">Provider:</span>
        <span>Name here</span>
    </div>
    <div style="display: inline-block;width: 50%;vertical-align: top;font-size: medium;">
        <span style="font-weight: bold;">Location:</span>
        <span>Name</span>
        <br/>
        <span>Street Address</span>
        <br/>
        <span>City, State Zip</span>
        <br/>
        <span>Phone</span>
    </div>
</div>
<div style="margin-bottom: 5px;padding: 5px;border-top: 1px solid #000000;font-size: 0;">
    <div style="display: inline-block;width: 50%;vertical-align: top;font-size: medium;">
        <span style="font-weight: bold;">Appointments:</span>
        <br/>
        <span>No appointments scheduled</span>
    </div>
    <div style="display: inline-block;width: 50%;vertical-align: top;font-size: medium;">
        <span style="font-weight: bold;">Care Team:</span>
        <br/>
        <span>Name Here</span>
    </div>
</div>
<div style="margin-bottom: 5px;padding: 5px;border-top: 1px solid #000000;">
    <span style="font-weight: bold;">Referrals:</span>
    <br/>
    <span>No referrals available</span>
</div>

内联样式 V2

所以,它可能是对您不起作用的字体修复。我很难调试,因为它对我来说工作正常。所以让我们尝试另一种方法。 这一次,我们将通过从标记中删除新行来消除列之间的间距。试试这个新标记。

<div style="margin-bottom: 5px;padding: 5px;border-top: 1px solid #000000;">
    <div style="display: inline-block;width: 50%;vertical-align: top;">
        <span style="font-weight: bold;">Provider:</span>
        <span>Name here</span>
    </div><div style="display: inline-block;width: 50%;vertical-align: top;">
        <span style="font-weight: bold;">Location:</span>
        <span>Name</span>
        <br/>
        <span>Street Address</span>
        <br/>
        <span>City, State Zip</span>
        <br/>
        <span>Phone</span>
    </div>
</div>
<div style="margin-bottom: 5px;padding: 5px;border-top: 1px solid #000000;">
    <div style="display: inline-block;width: 50%;vertical-align: top;">
        <span style="font-weight: bold;">Appointments:</span>
        <br/>
        <span>No appointments scheduled</span>
    </div><div style="display: inline-block;width: 50%;vertical-align: top;">
        <span style="font-weight: bold;">Care Team:</span>
        <br/>
        <span>Name Here</span>
    </div>
</div>
<div style="margin-bottom: 5px;padding: 5px;border-top: 1px solid #000000;">
    <span style="font-weight: bold;">Referrals:</span>
    <br/>
    <span>No referrals available</span>
</div>

【讨论】:

  • 不幸的是,我必须拥有内嵌样式。这是 .xslt 文件的一部分,它读取 xml 并影响屏幕显示的布局。此外,可以下载 xml 文件,我们希望将 xslt 连同它一起发送。我知道我不能使用外部 .css 文件,但可以在 .xslt 顶部定义样式(不要引用我的话)。但是,为了安全起见,我使用的是内联样式。我将尝试实现它,看看它是否有效
  • 如果您在将解决方案移植到内联样式方面需要进一步帮助,请告诉我。
  • 我将样式属性从你这里得到的 css 中提取出来,并将它们内联到适当的位置。我想我把所有的东西都放对了,但是现在当我打印时,右边的列最终在左边的列下面
  • 我得到了 font-size: 0;在容器样式中是的。我将字体大小介质放在容器/列样式中。我应该如何应用它以使其在线工作?其他一切都在工作(顶部边框线都在正确的位置,间距现在与填充很好)
  • 签出更新的解决方案。适用于我之前提到的所有浏览器+打印。如果您需要 IE7 支持,我们需要进行一些修复。
【解决方案2】:

media="print" 像这样:

<link rel="stylesheet" href="print.css" type="text/css" media="print" />

这样做应该使它看起来和网页一样

是的,就像 isherwood 所说的那样依赖于浏览器,如果这就是你所指的。

【讨论】:

  • 不幸的是,我必须使用内联样式来做到这一点。如果我切换到浮动左侧部分的表格布局,那么它可以工作,但如果可以的话,我想避免表格布局。我也不能在 div 标签(容器或浮动)上设置高度,因为它可以变化。
猜你喜欢
  • 2012-05-29
  • 2021-06-12
  • 2020-01-23
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多