[CSS] overflow 导致网页打印时候错误分页.

2 篇文章 0 订阅

最近做一个问答试卷的东西. 在页面上选择问题库里的问题, 然后罗列在页面上, 放在 UL/LI 里就自动生成题号并生成缩进, 页面顶端加点标题啥的, 然后打印页面 (Ctrl + P) 即可. 本来一个很简单的功能, 到功能快做完的时候却发现了一个棘手的问题:

如果题目(LI标签)太多或者其中某些LI内容太高, 就会有分页的问题. 如果说正常的分页还好, 可是不知为何, 页面中的题目区域竟然整体被分到第二页去了! 首页只留下一个标题, 下面是一大片的空白.


代码类似于这样(除了floatLeft写有一行靠左浮动以外其他 class 只是用来解释这是干嘛用的, 没内容):

 

<div style="....">
 标题标题标题标题标题标题标题标题
 <br />
 标题标题标题标题标题标题标题标题
 <br />
 标题标题标题标题标题标题标题标题
 <br />
 标题标题标题标题标题标题标题标题
 <br />
 标题标题标题标题标题标题标题标题
 <br />
</div>
<div class="allQuestions">
 <ul>
  <li>
   <div class="question">
    <div class="questionBody">
     张三的性别是
    </div>
    <div class="questionAnswers">
     <div class="floatLeft">
      A: 男
     </div>
     <div class="floatLeft">
      B: 女
     </div>
     <div class="floatLeft">
      C: 秀吉
     </div>
    </div>
   </div>
  </li>
  <li>
   <!-- question -->
  </li>
  <!-- other questions-->
 </ul>
</div>

 

---------------------------------------
看起来很普通的一段代码, 为什么会导致如此显示效果? 不解. page-break-before 和 page-break-after 都试了, 无效. 度娘忙着吞贴没工夫理我. 通过上色法发现被挤到第二页的竟然是 allQuestions 下面的那个 UL. 这让我更迷惑了. 后从Google上搜索到一篇文章, 提到了这个问题:
http://www.appnovation.com/how_avoid_your_web_printing_page_being_cut
(How to avoid your web printing page being cut off)

里面有段话引起了我的注意:
......Third, if overflow element is set to 'hidden' in your style.css, it may cause your text to get cut off as well. In print.css, set “overflow: visible” instead of “overflow: auto” or “overflow: hidden” on div. The definition of overflow auto is: “If overflow is clipped, a scroll-bar should be added to see the rest of the content” —but scroll bars don't exist on printed pages......

译:
第三,如果一个元素在你的 style.css 中 被设置了"overflow:hidden", 有可能导致你的文本内容被切断. 应在 print.css 中为 DIV 标签设置 "overflow: visible" 而不是 "auto" 或者 "hidden". "overflow" 的定义是: "如果溢出的内容被裁剪, 应显示滚动条以显示其余的内容" —— 但是在纸上是没有滚动条的......
---------------------------------------

呵呵, 突然想起来, 正常情况下 元素的 overflow 是 auto. 那么好办了, 把 CSS 类 allQuestions 给设置成 overflow: visible. 刷新, 问题解决了.

可是依然还有不明白的地方:
为何只有 UL 才有这个问题? DIV却没有?
Html List 控件的打印行为逻辑到底是怎样的?

这两个问题还得继续细细研究.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值