ฉันกำลังพยายามให้ Google Chrome ทำการแบ่งหน้า
ฉันได้รับแจ้งผ่านเว็บไซต์หลายแห่งที่page-break-after: always;
ใช้ได้ใน chrome แต่ดูเหมือนว่าฉันจะไม่สามารถใช้งานได้แม้จะเป็นตัวอย่างง่ายๆก็ตาม มีวิธีบังคับให้หน้าแตกเมื่อพิมพ์ใน chrome หรือไม่
ฉันกำลังพยายามให้ Google Chrome ทำการแบ่งหน้า
ฉันได้รับแจ้งผ่านเว็บไซต์หลายแห่งที่page-break-after: always;
ใช้ได้ใน chrome แต่ดูเหมือนว่าฉันจะไม่สามารถใช้งานได้แม้จะเป็นตัวอย่างง่ายๆก็ตาม มีวิธีบังคับให้หน้าแตกเมื่อพิมพ์ใน chrome หรือไม่
คำตอบ:
ฉันใช้แนวทางต่อไปนี้สำเร็จแล้วในเบราว์เซอร์หลัก ๆ ทั้งหมดรวมถึง Chrome:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Paginated HTML</title>
<style type="text/css" media="print">
div.page
{
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is Page 3</h1>
</div>
</body>
</html>
นี่คือตัวอย่างที่เรียบง่าย ในโค้ดจริง div แต่ละหน้าประกอบด้วยองค์ประกอบอื่น ๆ อีกมากมาย
position: relative
นอกจากนี้เขายังมีจุดที่ดีเกี่ยวกับ
break-after
และbreak-before
ใช้เฉพาะกับblock-level elements, table row groups, table rows (but see prose)
: drafts.csswg.org/css-break-3/#break-between - นั่นหมายความว่าไม่มีการลอยตัวหรือเทคนิคการกำหนดตำแหน่งที่สวยงาม
จริงๆแล้วมีรายละเอียดหนึ่งหายไปจากคำตอบที่เลือกว่ายอมรับ (จาก Phil Ross) ....
มันใช้งานได้ใน Chrome และการแก้ปัญหาก็โง่จริงๆ!!
ทั้งพาเรนต์และองค์ประกอบที่คุณต้องการควบคุมการแบ่งหน้าจะต้องถูกประกาศว่า:
position: relative
ตรวจสอบซอนี้: http://jsfiddle.net/petersphilo/QCvA5/5/show/
สิ่งนี้เป็นจริงสำหรับ:
page-break-before
page-break-after
page-break-inside
อย่างไรก็ตามการควบคุม page-break-inside ใน Safari ไม่ทำงาน (ใน 5.1.7 เป็นอย่างน้อย)
ฉันหวังว่านี่จะช่วยได้!!!
PS: คำถามด้านล่างทำให้เกิดความจริงที่ว่า Chrome เวอร์ชันล่าสุดไม่เคารพสิ่งนี้อีกต่อไปแม้จะมีตำแหน่ง: ญาติ; เคล็ดลับ. อย่างไรก็ตามพวกเขาดูเหมือนจะเคารพ:
-webkit-region-break-inside: avoid;
ดูซอนี้: http://jsfiddle.net/petersphilo/QCvA5/23/show
ดังนั้นฉันเดาว่าเราต้องเพิ่มตอนนี้ ...
หวังว่านี่จะช่วยได้!
page-break-inside
กับรางวัลพยายามที่จะแก้ไขสถานการณ์ที่ฉันได้ใช้ ความช่วยเหลือใด ๆ
<h7 class="page-breaker" style="display: block;position: relative;page-break-before:always">Grade <?php echo $grade;?></h7>
ฉันแค่อยากจะทราบว่า Chrome ยังละเว้นการตั้งค่า page-break- * css ใน div ที่ลอยอยู่
ฉันสงสัยว่ามีเหตุผลที่ดีสำหรับสิ่งนี้บางแห่งในข้อมูลจำเพาะ css แต่ฉันคิดว่ามันอาจช่วยใครสักคนได้ในสักวันหนึ่ง ;-)
หมายเหตุอีกประการหนึ่ง: IE7 ไม่สามารถรับทราบการตั้งค่าตัวแบ่งหน้าหากไม่มีความสูงที่ชัดเจนในองค์ประกอบบล็อกก่อนหน้า:
ฉันมีปัญหาคล้ายกับสิ่งนี้ แต่ในที่สุดฉันก็พบวิธีแก้ปัญหา ฉันมีoverflow-x: hidden; นำไปใช้กับแท็ก <html> ดังนั้นไม่ว่าฉันจะทำอะไรด้านล่างใน DOM ก็ตามจะไม่อนุญาตให้มีการแบ่งหน้า โดยการเปลี่ยนกลับเป็นoverflow-x: visible; มันทำงานได้ดี
หวังว่าสิ่งนี้จะช่วยใครสักคนได้
* { overflow-x: visible }
ฉันเพิ่งเพิ่มกฎ
ฉันประสบปัญหานี้ด้วยตัวเองหน้าของฉันหยุดทำงานได้ในทุกเบราว์เซอร์ยกเว้น Chrome - และสามารถแยกมันลงไปที่องค์ประกอบแบ่งหน้าหลังจากที่อยู่ภายในเซลล์ตาราง (เทมเพลตเก่าที่สืบทอดมาใน CMS)
เห็นได้ชัดว่า Chrome ไม่ให้เกียรติคุณสมบัติ page-break-before หรือ page-break-after ภายในเซลล์ตารางดังนั้นตัวอย่างของ Phil เวอร์ชันที่แก้ไขนี้จึงใส่บรรทัดแรกที่สองและสามไว้ในหน้าเดียวกัน:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Paginated HTML</title>
<style type="text/css" media="print">
div.page
{
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<table>
<tr>
<td>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is, sadly, still Page 2</h1>
</div>
</td>
</tr>
</table>
</body>
</html>
อนุญาตให้ใช้งาน Chrome (อย่างมีพิรุธ) ตามข้อกำหนด CSS คุณสามารถดูเพิ่มเติมได้ที่นี่: http://www.google.com/support/forum/p/Chrome/thread?tid=32f9d9629d6f6789&hl=th
ระวัง CSS: display:inline-block
เมื่อพิมพ์
ไม่มีคุณสมบัติ CCS ที่ไปที่หน้าถัดไปที่จะใช้ได้กับฉันใน Chrome และ Firefox ถ้าตารางของฉันอยู่ใน div ที่มีสไตล์ display:inline-block
ตัวอย่างเช่นสิ่งต่อไปนี้ใช้ไม่ได้:
<div style='display:inline-block'>
<table style='page-break-before:always'>
...
</table>
<table style='page-break-before:always'>
...
</table>
</div>
แต่งานต่อไปนี้:
<div>
<table style='page-break-before:always'>
...
</table>
<table style='page-break-before:always'>
...
</table>
</div>
display: flex
ฉันประสบปัญหานี้ใน chrome มาก่อนและสาเหตุของมันคือมี div ที่ตั้งค่า min-height เป็นค่า วิธีแก้ปัญหาคือรีเซ็ตความสูงต่ำสุดขณะพิมพ์ดังนี้:
@media print {
.wizard-content{
min-height: 0;
}
}
ปรับปรุง 2016:
ฉันมีปัญหานี้เมื่อฉันมี
overflow:hidden
บน div ของฉัน
หลังจากที่ทำ
@media print {
div {
overflow:initial !important
}
}
ทุกอย่างเรียบร้อยและสมบูรณ์แบบ
หากคุณใช้ Chrome กับ Bootstrap Css คลาสที่ควบคุมเค้าโครงกริดเช่น col-xs-12 และอื่น ๆ จะใช้ "float: left" ซึ่งตามที่คนอื่น ๆ ชี้ให้เห็นจะทำให้หน้าแตก นำสิ่งเหล่านี้ออกจากหน้าของคุณเพื่อพิมพ์ มันได้ผลสำหรับฉัน (ใน Chrome เวอร์ชัน = 49.0.2623.87)
มีปัญหานั้น เวลาผ่านไปนานมาก ... หากไม่มีฟิลด์ด้านข้างของหน้าจะพังเป็นปกติ แต่เมื่อฟิลด์ปรากฏขึ้นหน้าและ "พื้นที่แบ่งหน้า" จะปรับขนาด ดังนั้นด้วยฟิลด์ปกติภายในเอกสารจึงแสดงไม่ถูกต้อง ฉันแก้ไขด้วยชุด
width:100%
และใช้
div.page
{
page-break-before: always;
page-break-inside: avoid;
}
ใช้ในบรรทัดแรก
เท่าที่ฉันรู้วิธีเดียวที่จะทำให้การแบ่งหน้าถูกต้องในตารางด้วย Google Chrome คือการให้องค์ประกอบแสดง<tr>
คุณสมบัติ: inline-table (หรือ display: inline-block แต่เหมาะกว่าในกรณีอื่น ๆ ที่ไม่ใช่ตาราง ). นอกจากนี้ควรใช้คุณสมบัติ "page-break-after: always; page-break-inside: หลีกเลี่ยง;" เขียนโดย @Phil Ross
<table>
<tr style="display:inline-table;page-break-after: always; page-break-inside: avoid;">
<td></td>
<td></td>
...
</tr>
</table>
มันใช้ได้ผลสำหรับฉันเมื่อฉันใช้ช่องว่างภายในเช่น:
<div style="padding-top :200px;page-break-inside:avoid;">
<div>My content</div>
</div>