ตัวแบ่งหน้า html ที่พิมพ์ได้ ตัวแบ่งหน้าสำหรับการพิมพ์โดยใช้ CSS3 เกี่ยวกับการพิมพ์หน้าที่ไม่เหมาะสม
บล็อกหน้าประกอบด้วยพื้นที่หน้าที่มีเนื้อหาและพื้นที่ขอบที่ล้อมรอบพื้นที่หน้า กฎ @page ใช้เพื่อเปลี่ยนคุณสมบัติ css บางอย่างเมื่อพิมพ์เอกสาร คุณสามารถเปลี่ยนได้เฉพาะระยะขอบขององค์ประกอบ และคุณยังสามารถตั้งค่าตัวแบ่งหน้าในตำแหน่งที่ระบุได้
@page (ระยะขอบ: 2in;)
เป็นไปได้ที่จะกำหนดระยะขอบเอกสารแต่ละรายการภายในกฎ @page เช่น ระยะขอบบน ระยะขอบขวา ระยะขอบล่าง ระยะขอบซ้าย:
2. ตัวแบ่งหน้า
คุณสามารถควบคุมตัวแบ่งหน้าโดยใช้คุณสมบัติ page-break-before, page-break-after และ page-break-Inside คุณสมบัติเหล่านี้ใช้กับองค์ประกอบบล็อกซึ่งคุณสมบัติตำแหน่งถูกตั้งค่าเป็นสัมพันธ์หรือคงที่
หน้าแตกก่อน | |
---|---|
ค่า: | |
รถยนต์ | |
เสมอ | เพิ่มตัวแบ่งหน้าก่อนองค์ประกอบเสมอ |
หลีกเลี่ยง | ยกเลิกการจัดวางตัวแบ่งหน้าองค์ประกอบ ถ้าเป็นไปได้ |
ซ้าย | เพิ่มตัวแบ่งหน้าหนึ่งหรือสองหน้าก่อนองค์ประกอบเพื่อให้หน้าถัดไปจัดรูปแบบเป็นหน้าซ้าย องค์ประกอบจะถูกพิมพ์โดยเริ่มจากด้านบนของหน้าด้านซ้ายเช่น บนหน้าที่ด้านซ้ายของกระดูกสันหลัง สำหรับการพิมพ์สองด้าน จะถูกส่งออกที่ด้านหลังของกระดาษหนึ่งแผ่น |
ขวา | เพิ่มตัวแบ่งหน้าหนึ่งหรือสองหน้าก่อนองค์ประกอบ องค์ประกอบจะถูกพิมพ์โดยเริ่มจากด้านบนสุดของขอบด้านขวา หน้าถัดไปจะถูกจัดรูปแบบเป็นหน้าขวา |
สืบทอด |
ไวยากรณ์:
@media พิมพ์ (h1 (หน้าแตกก่อน: เสมอ;))
หน้าแตกหลัง | |
---|---|
ค่า: | |
รถยนต์ | ค่าเริ่มต้นคือการตั้งค่าตัวแบ่งหน้าอัตโนมัติ |
เสมอ | เพิ่มตัวแบ่งหน้าหลังองค์ประกอบเสมอ |
หลีกเลี่ยง | ยกเลิกการเพิ่มตัวแบ่งหลังจากองค์ประกอบ ถ้าเป็นไปได้ |
ซ้าย | เพิ่มตัวแบ่งหน้าหนึ่งหรือสองหน้าหลังจากองค์ประกอบเพื่อให้หน้าถัดไปจัดรูปแบบเป็นหน้าซ้าย องค์ประกอบจะถูกพิมพ์โดยเริ่มจากด้านบนของหน้าด้านซ้ายเช่น บนหน้าที่ด้านซ้ายของกระดูกสันหลัง สำหรับการพิมพ์สองด้าน จะถูกส่งออกที่ด้านหลังของกระดาษหนึ่งแผ่น |
ขวา | เพิ่มตัวแบ่งหน้าหนึ่งหรือสองหน้าหลังจากองค์ประกอบเพื่อให้หน้าถัดไปมีรูปแบบเป็นหน้าขวา องค์ประกอบจะถูกพิมพ์โดยเริ่มจากด้านบนสุดของขอบด้านขวา |
สืบทอด | สืบทอดคุณสมบัตินี้จากองค์ประกอบหลัก |
ไวยากรณ์:
@media พิมพ์ (ส่วนท้าย (หน้าแบ่งหลัง: เสมอ;))
คุณสมบัติ page-break-inside บอกเบราว์เซอร์ว่าหน้าสามารถแตกภายในองค์ประกอบได้หรือไม่ แต่ถ้าองค์ประกอบยาวกว่าหน้า การแบ่งก็หลีกเลี่ยงไม่ได้
วิธีจัดการกับตัวแบ่งหน้าเมื่อพิมพ์ตาราง HTML ขนาดใหญ่ (8)
ฉันมีโครงการที่ต้องพิมพ์ตาราง HTML ที่มีหลายแถว
ปัญหาของฉันคือการพิมพ์ตารางในหลายหน้า บางครั้งอาจตัดครึ่งบรรทัด ทำให้อ่านไม่ได้เพราะครึ่งหนึ่งอยู่ที่ขอบของหน้า และส่วนที่เหลือจะพิมพ์ที่ด้านบนของหน้าถัดไป
วิธีแก้ปัญหาที่เป็นไปได้เพียงอย่างเดียวที่ฉันคิดได้คือการใช้ DIV ที่ซับซ้อนแทนการใช้ตารางและบังคับให้แบ่งหน้าหากจำเป็น ... แต่ก่อนที่จะทำการเปลี่ยนแปลงทั้งหมด ฉันคิดว่าฉันอาจถามที่นี่ก่อนหน้านี้
ใช้คุณสมบัติ CSS เหล่านี้:
ตัวแบ่งหน้าหลัง ตัวแบ่งหน้าก่อนตัวแบ่งหน้า
ตัวอย่างเช่น:
....
ไม่มีคำตอบใดที่ได้ผลสำหรับฉันใน Chrome AAverin บน GitHub สร้าง Javascript ที่มีประโยชน์สำหรับสิ่งนี้และมันใช้ได้ผลสำหรับฉัน:
เพียงเพิ่ม js ลงในโค้ดของคุณ และเพิ่มคลาส splitForPrint ลงในตาราง และมันจะแบ่งตารางออกเป็นหลาย ๆ หน้าอย่างเรียบร้อยและเพิ่มส่วนหัวของตารางลงในแต่ละหน้า
หมายเหตุ: เมื่อใช้ตัวแบ่งหน้า: เสมอสำหรับแท็ก ตัวแบ่งหน้าจะสร้างตัวแบ่งหน้าหลังจากบิตสุดท้ายของตาราง สร้างหน้าว่างโดยสมบูรณ์ทุกครั้ง! ในการแก้ไขปัญหานี้ ให้เปลี่ยนเป็น page-break-after: auto มันจะแตกอย่างถูกต้องและจะไม่สร้างหน้าว่างพิเศษ
....
คำตอบที่ยอมรับใช้ไม่ได้กับฉันในทุกเบราว์เซอร์ แต่หลังจาก css ใช้งานได้จริงสำหรับฉัน:
Tr (แสดง: table-row-group; page-break-inside: หลีกเลี่ยง; page-break-after: auto;)
โครงสร้าง html คือ:
ในกรณีของฉัน มีปัญหาเพิ่มเติมกับ thead tr แต่สิ่งนี้สามารถแก้ปัญหาดั้งเดิมของการถือแถวของตารางได้
เนื่องจากปัญหาในหัวข้อ ฉันจึงลงเอยด้วย:
#theTable td * (ตัวแบ่งหน้า: หลีกเลี่ยง;)
สิ่งนี้ไม่ได้หยุดอันดับจากการพังทลาย เฉพาะเนื้อหาของแต่ละเซลล์
ฉันลงเอยด้วยวิธีการของ @ vicenteherrera ด้วยการปรับแต่งบางอย่าง (ซึ่งอาจจะเป็น bootstrap 3)
โดยทั่วไป; เราไม่สามารถทำลาย tr s หรือ td s ได้เพราะพวกมันไม่ใช่องค์ประกอบระดับบล็อก ดังนั้นเราจึงใส่ div ลงในแต่ละรายการและใช้กฎตัวแบ่งหน้า * กับ div อย่างที่สอง เราเพิ่ม padding ที่ด้านบนของแต่ละ div เหล่านี้เพื่อชดเชยส่วนต่างๆ ของการจัดสไตล์
จำเป็นต้องมีการปรับแต่งและการปรับช่องว่างภายในเพื่อชดเชยความกระวนกระวายใจบางอย่างที่ได้รับการแนะนำ (จาก bootstrap ฉันเดา) ฉันไม่แน่ใจว่าฉันกำลังนำเสนอโซลูชันใหม่จากคำตอบอื่นสำหรับคำถามนี้หรือไม่ แต่อาจช่วยใครบางคนได้
ฉันเพิ่งแก้ไขปัญหานี้ด้วยวิธีแก้ปัญหาที่ดี
LeaveBreak (เส้นขอบ: 2px ทึบ; ตัวแบ่งหน้าภายใน: หลีกเลี่ยง;)
พิมพ์ฟังก์ชัน () ($ (". TableToPrint td, .tableToPrint th") แต่ละฟังก์ชัน () (ฟังก์ชัน () ($ (นี้) .css ("ความกว้าง" $ (นี่) .width () + "px")) ; $ (". tableToPrint tr") ห่อ ("
"); window.print ();)ทำงานเหมือนมีเสน่ห์!
ฉันได้ทดสอบวิธีแก้ปัญหามากมายและไม่มีใครทำงานได้ดี
ดังนั้นฉันจึงลองใช้เคล็ดลับเล็กน้อยและได้ผล:
tfoot กับสไตล์: ตำแหน่ง: คงที่; ด้านล่าง: 0px; ตำแหน่ง: คงที่; ด้านล่าง: 0px; พอดีกับด้านล่างสุดของหน้าสุดท้าย แต่ถ้าส่วนท้ายสูงเกินไป มันจะทับซ้อนกับเนื้อหาของตาราง
tfoot เท่านั้นด้วย: display: table-footer-group; ไม่ทับซ้อนกันแต่ไม่อยู่ท้ายหน้าสุดท้าย ...
มาใส่สอง tfoots:
TFOOT.placer (แสดง: table-footer-group; ความสูง: 130px;) TFOOT.contenter (แสดง: table-footer-group; ตำแหน่ง: คงที่; ด้านล่าง: 0px; ความสูง: 130px;)
หนึ่งสงวนพื้นที่บนเพจที่ไม่ใช่ด้านหลัง อีกส่วนหนึ่งอยู่ในส่วนท้ายส่วนตัวของคุณ
หัวเรื่อง |
---|
บันทึกย่อ |
NS |
NS |
NS |
แม้ว่าเราจะอยู่ในยุคดิจิทัลที่ทุกอย่างสามารถเข้าถึงได้ง่าย แต่ก็ยังมีคนอีกจำนวนมากที่ชอบอ่านข้อความยาวๆ จากกระดาษ มีโอกาสที่ผู้ใช้บางคนจะพิมพ์ข้อความจากไซต์ของคุณเพื่อให้พวกเขาสามารถอ่านนอกคอมพิวเตอร์ได้
ความสามารถในการแสดงเนื้อหาที่เหมาะสมสำหรับการพิมพ์นั้นมีมาช้านานแล้ว เราสามารถทำได้โดยใช้กฎ @media ในสไตล์ชีตดังนี้:
@สื่อพิมพ์ ( / * กฎของสไตล์ * / }
มีคุณสมบัติหลายอย่างที่ช่วยให้คุณจัดรูปแบบเนื้อหาของหน้าเว็บเพื่อให้พิมพ์ได้ และเราจะกล่าวถึงหนึ่ง: ตัวแบ่งหน้า
มันทำอะไร?
หากคุณเคยทำงานกับโปรแกรมแก้ไขข้อความ เช่น Microsoft Word และ Pages คุณควรคุ้นเคยกับเมนูตัวแบ่งหน้าที่ช่วยให้คุณตัดข้อความในหน้าถัดไปได้
โมดูลนี้ทำเช่นเดียวกัน ช่วยให้คุณสามารถควบคุมวิธีการห่อเนื้อหาของหน้าเว็บได้ทีละหน้า
การใช้ตัวแบ่งหน้า
ตัวอย่างเช่น เราได้สร้างหน้าสาธิตที่เราจะพิมพ์ เราพบว่ามีการโอนที่ไม่ถูกต้องดังที่คุณเห็นด้านล่าง
มันจะดูดีขึ้นถ้าหัวเรื่องและบรรทัดที่ไม่มีคนเริ่มในหน้าถัดไป
ในการทำเช่นนี้ เราใช้คุณสมบัติตัวแบ่งหน้าและตั้งค่าให้เป็นบังคับให้องค์ประกอบถัดไปไปที่หน้าถัดไปเสมอ
ตัวแบ่งหน้า (ตัวแบ่งหน้า: เสมอ;)
จากนั้นคุณสามารถสร้างองค์ประกอบใหม่ที่มีคลาสระหว่างองค์ประกอบหรือกำหนดคลาสให้กับองค์ประกอบก่อนหน้าด้วยวิธีนี้
กับ ยางลบ คุณลักษณะ คุณสามารถถ่ายภาพคอมโพสิต จากนั้นรวมทั้งหมดเข้าด้วยกัน เพื่อให้ได้พื้นหลังโดยไม่มีส่วนเสริมที่คุณทำไม่ได้
โทรศัพท์ที่จะเดินทางไปกับ
S นักแปล จะเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการเดินทางของคุณเป็น ...
ตอนนี้หัวเรื่องและปากด้านล่างจะเริ่มในหน้าถัดไป
เส้นห้อยบนและล่าง
วิธีการข้างต้นอาจเป็นเรื่องที่น่าเบื่อถ้าคุณมีข้อความจำนวนมาก ดังนั้น แทนที่จะบังคับให้เนื้อหาไปที่หน้าถัดไป การกำหนดเกณฑ์ขั้นต่ำสำหรับเด็กกำพร้าบนและล่างจะดีกว่า
ในทางปฏิบัติเกี่ยวกับการพิมพ์ เครื่องประดับด้านบนและด้านล่างหมายถึงคำที่เหลือและบรรทัดสั้นๆ ที่ขาดหายไปจากส่วนที่เหลือของย่อหน้าในหน้าอื่น
การใช้คุณสมบัติ เด็กกำพร้า (เด็กกำพร้าล่าง) และหญิงม่าย (เด็กกำพร้าบน) เราสามารถกำหนดเกณฑ์ขั้นต่ำได้ ในตัวอย่างด้านล่าง เรากำลังระบุว่าอย่างน้อยสามบรรทัดยังคงอยู่ที่ด้านล่างหรือที่จุดเริ่มต้นของย่อหน้าที่เกิดตัวแบ่งหน้า
P (เด็กกำพร้า: 3; ม่าย: 3;)
แหล่งข้อมูลเพิ่มเติม
เราได้ครอบคลุมพื้นฐานของการใช้ตัวแบ่งหน้าที่พิมพ์ได้สำหรับข้อความบนไซต์ของคุณ และเราหวังว่าจะเป็นแรงบันดาลใจให้คุณคิดเกี่ยวกับสไตล์สำหรับไซต์ของคุณเพื่อพิมพ์ เพื่อให้เนื้อหาของคุณดูดีทั้งบนหน้าจอและบนกระดาษ
การแปล - หน้าที่
ตัวแบ่งหน้า
ส่วนต่อไปนี้อธิบายรูปแบบการจัดรูปแบบหน้าที่ใช้ใน CSS2 ห้าคุณสมบัติที่แตกต่างกันใช้เพื่อบอกตัวแทนผู้ใช้ว่าสามารถหรือควรแบ่งหน้าและหน้า (ซ้ายหรือขวา) ที่ใดควรแสดงเนื้อหาต่อไป ตัวแบ่งหน้าแต่ละหน้าจะขัดขวางการแสดงเนื้อหาในกล่องหน้าปัจจุบัน และทำให้ส่วนที่เหลือของโครงสร้างเอกสารแสดงในกล่องหน้าใหม่
แบ่งองค์ประกอบก่อนและหลัง: "page-break-before", "page-break-after", "page-break-inside"
"หน้าแตกก่อน"
ค่าเริ่มต้น: auto
มรดก: ไม่
เปอร์เซ็นต์การมอบหมาย: N / A
ค่า: auto | เสมอ | หลีกเลี่ยง | ซ้าย | ขวา | ได้รับการถ่ายทอด
ค่าเริ่มต้น: auto
ขอบเขต: องค์ประกอบระดับโครงสร้าง
มรดก: ไม่
เปอร์เซ็นต์การมอบหมาย: N / A
อุปกรณ์: การจัดรูปแบบภาพ, แบ่งหน้า
ความคุ้มค่า: หลีกเลี่ยง | รถยนต์ | ได้รับการถ่ายทอด
ค่าเริ่มต้น: auto
ขอบเขต: องค์ประกอบระดับโครงสร้าง
มรดก: ใช่
เปอร์เซ็นต์การมอบหมาย: N / A
อุปกรณ์: การจัดรูปแบบภาพ, แบ่งหน้า
ค่าของคุณสมบัติเหล่านี้มีความหมายดังต่อไปนี้:
รถยนต์ไม่เริ่มต้นหรือไม่อนุญาตให้มีการแบ่งหน้าก่อน (หลังหรือภายใน) บล็อกที่สร้างขึ้น
เสมอเริ่มต้นการแบ่งหน้าก่อน (หลัง) บล็อกที่สร้างขึ้นเสมอ
หลีกเลี่ยงยกเลิกการแบ่งหน้าก่อน (หลังหรือภายใน) บล็อกที่สร้างขึ้น
ซ้ายเริ่มการแบ่งหน้าหนึ่งหรือสองหน้าก่อน (หลัง) บล็อกที่สร้างขึ้นเพื่อให้หน้าถัดไปจัดรูปแบบเป็นหน้าซ้าย
ขวาเริ่มการแบ่งหน้าหนึ่งหรือสองหน้าก่อน (หลัง) บล็อกที่สร้างขึ้นเพื่อให้หน้าถัดไปจัดรูปแบบเป็นหน้าขวา
ตำแหน่งที่เป็นไปได้ของการแบ่งหน้าจะถูกกำหนดโดยคุณสมบัติ "page-break-inside" ขององค์ประกอบหลัก คุณสมบัติ "page-break-after" ขององค์ประกอบก่อนหน้า และคุณสมบัติ "page-break-before" ของ องค์ประกอบที่ตามมา หากค่าของคุณสมบัติเหล่านี้ไม่ใช่ "อัตโนมัติ" ค่า "เสมอ", "ซ้าย" และ "ขวา" จะมีความสำคัญเหนือค่าของ "หลีกเลี่ยง" ส่วนเกี่ยวกับตัวแบ่งหน้าที่ยอมรับได้ให้กฎที่ชัดเจนสำหรับการเริ่มต้นหรือไม่อนุญาตตัวแบ่งหน้าโดยใช้คุณสมบัติเหล่านี้
การใช้เพจที่มีชื่อ: "page"
"หน้าหนังสือ"ความหมาย:<идентификатор>| รถยนต์
ค่าเริ่มต้น: auto
ขอบเขต: องค์ประกอบระดับโครงสร้าง
มรดก: ใช่
เปอร์เซ็นต์การมอบหมาย: N / A
อุปกรณ์: การจัดรูปแบบภาพ, แบ่งหน้า
คุณสมบัติ "หน้า" สามารถใช้เพื่อกำหนดประเภทของหน้าเฉพาะที่องค์ประกอบจะแสดง
ในตัวอย่างนี้ ตารางทั้งหมดจะถูกวางไว้ที่ด้านขวาของหน้า (เรียกว่า "หมุน") ซึ่งอยู่ในแนวนอน:
ตาราง (หน้า: หมุน; ตัวแบ่งหน้าก่อน: ขวา)
การกระทำของคุณสมบัติ "หน้า" มีดังนี้: หากค่าของคุณสมบัติ "หน้า" ของบล็อกหน้าซึ่งมีเนื้อหาอยู่ในระดับอินไลน์ แตกต่างจากค่าของคุณสมบัติที่คล้ายกันของบล็อกหน้าก่อนหน้า เนื้อหาที่อยู่ในระดับอินไลน์ด้วย จากนั้นตัวแบ่งหน้าหนึ่งหรือสองหน้าจะถูกแทรกระหว่างกัน หลังจากนั้นเอาต์พุตจะถูกสร้างขึ้นในบล็อกหน้าที่มีชื่อ ดูส่วนด้านล่างเกี่ยวกับการบังคับตัวแบ่งหน้า
ในตัวอย่างต่อไปนี้ ตารางสองตารางจะแสดงบนหน้าแนวนอน (โดยธรรมชาติจะอยู่ที่หน้าเดียวกันหากทั้งสองพอดีกับหน้า) หน้าประเภท "แคบ" จะไม่ถูกใช้เลย แม้ว่าจะตั้งค่าไว้สำหรับองค์ประกอบ DIV ก็ตาม
@เพจแคบ (ขนาด: 9ซม. 18ซม.)
@page หมุนแล้ว (ขนาด: แนวนอน)
DIV (หน้า: แคบ)
ตาราง (หน้า: หมุน)
ใช้ในเอกสาร
หน้าแบ่งภายในองค์ประกอบ: "เด็กกำพร้า", "แม่ม่าย"
"เด็กกำพร้า"ความหมาย:<целое>| ได้รับการถ่ายทอด
ค่าเริ่มต้น: 2
ขอบเขต: องค์ประกอบระดับโครงสร้าง
มรดก: ใช่
เปอร์เซ็นต์การมอบหมาย: N / A
อุปกรณ์: การจัดรูปแบบภาพ, แบ่งหน้า
ความหมาย:<целое>| ได้รับการถ่ายทอด
ค่าเริ่มต้น: 2
ขอบเขต: องค์ประกอบระดับโครงสร้าง
มรดก: ใช่
เปอร์เซ็นต์การมอบหมาย: N / A
อุปกรณ์: การจัดรูปแบบภาพ, แบ่งหน้า
คุณสมบัติ เด็กกำพร้า กำหนดจำนวนบรรทัดย่อหน้าขั้นต่ำที่ควรทิ้งไว้ที่ด้านล่างของหน้า คุณสมบัติ "แม่ม่าย" กำหนดจำนวนบรรทัดย่อหน้าขั้นต่ำที่ควรทิ้งไว้ที่ด้านบนสุดของหน้า ตัวอย่างของการใช้คุณสมบัติเหล่านี้เพื่อควบคุมตัวแบ่งหน้าแสดงไว้ด้านล่าง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดรูปแบบย่อหน้า ให้ดูส่วนในกล่องบรรทัด
ตัวแบ่งหน้าที่ยอมรับได้
ในโฟลว์ปกติ ตัวแบ่งหน้าสามารถอยู่ในตำแหน่งต่อไปนี้:
- ในพื้นที่สงวนไว้สำหรับระยะขอบแนวตั้งระหว่างบล็อคส่วนประกอบ หากตัวแบ่งหน้าเกิดขึ้น ณ จุดนี้ ค่าที่คำนวณของคุณสมบัติ "margin-top" และ "margin-bottom" ที่เกี่ยวข้องจะถูกตั้งค่าเป็น "0"
- ระหว่างบล็อกบรรทัดภายในบล็อกระดับโครงสร้าง
ความไม่ต่อเนื่องของประเภทที่พิจารณาเป็นไปตามกฎต่อไปนี้:
- กฎ A: ตัวแบ่ง (1) ได้รับอนุญาตก็ต่อเมื่อค่าของคุณสมบัติ "หน้าแตกหลัง" และ "หน้าแตกก่อน" ขององค์ประกอบทั้งหมดที่วางไข่บล็อกที่เกิดขึ้นในช่วงพักได้รับอนุญาตให้เกิดขึ้น ซึ่งเกิดขึ้นเมื่ออย่างน้อยหนึ่งรายการเป็น "เสมอ" "ซ้าย" หรือ "ขวา" หรือทั้งหมดเป็น "อัตโนมัติ" ในเวลาเดียวกัน
- กฎ B: อย่างไรก็ตาม หากคุณสมบัติทั้งหมดเหล่านี้ถูกตั้งค่าเป็น "อัตโนมัติ" และคุณสมบัติ "ตัวแบ่งหน้าภายใน" ของบรรพบุรุษร่วมที่ใกล้เคียงที่สุดขององค์ประกอบที่มีชื่อทั้งหมดถูกตั้งค่าเป็น "หลีกเลี่ยง" ตัวแบ่งหน้า ณ จุดนั้นคือ ห้าม
- กฎ B: ตัวแบ่งหน้า (2) จะได้รับอนุญาตก็ต่อเมื่อจำนวนกล่องบรรทัดระหว่างตัวแบ่งและจุดเริ่มต้นของบล็อกการปิดเท่ากับหรือมากกว่าคุณสมบัติ "orphans" และจำนวนกล่องแบบอินไลน์ระหว่างตัวแบ่งและ จุดสิ้นสุดของบล็อกเท่ากับหรือมากกว่ามูลค่าของคุณสมบัติ "แม่ม่าย" ...
- กฎ D: ยิ่งไปกว่านั้น ตัวแบ่งหน้า (2) จะได้รับอนุญาตก็ต่อเมื่อคุณสมบัติ "ตัวแบ่งหน้า" ถูกตั้งค่าเป็น "อัตโนมัติ"
หากกฎข้างต้นไม่อนุญาตให้คุณแทรกตัวแบ่งที่เพียงพอ กฎ B และ D จะถูกละเว้นเพื่อป้องกันไม่ให้เนื้อหาไหลออกจากบล็อกหน้า ซึ่งช่วยให้คุณสร้างตัวแบ่งเพิ่มเติมได้
หากหลังจากนี้ไม่สามารถบรรลุจำนวนเบรกที่เพียงพอ กฎ A และ B จะไม่นำมาพิจารณาเพื่อค้นหาจุดพักเพิ่มเติม
ตัวแบ่งหน้าไม่สามารถทำได้ในบล็อกที่มีตำแหน่งที่แน่นอน
บังคับตัวแบ่งหน้า
ตัวแบ่งหน้าจะต้องเกิดขึ้น (1) หากคุณสมบัติ "หน้าแตกหลัง" และ "ตัวแบ่งหน้าก่อน" อย่างน้อยหนึ่งคุณสมบัติขององค์ประกอบที่สร้างบล็อกที่เกิดขึ้นที่จุดพักคือ "เสมอ", "ซ้าย " หรือ "ใช่"
ตัวแบ่งหน้าจะต้องเกิดขึ้นด้วย (1) หากค่าของคุณสมบัติ "หน้า" ของกล่องบรรทัดก่อนและหลังตัวแบ่งนั้นแตกต่างกัน
ตัวแบ่งหน้า "ดีที่สุด"
CSS2 ไม่ได้ระบุว่าควรใช้ตัวแบ่งหน้าใดจากชุดของตัวแบ่งที่อนุญาต CSS2 ไม่ได้ป้องกันตัวแทนผู้ใช้จากการแทรกตัวแบ่งหน้าทุกที่หรือไม่ได้ใช้เลย แต่ข้อมูลจำเพาะ CSS2 ขอแนะนำอย่างยิ่งให้ตัวแทนผู้ใช้ปฏิบัติตามฮิวริสติกต่อไปนี้ (จนกระทั่งดูเหมือนว่าบางครั้งขัดแย้งกันเอง):
- การแบ่งหน้าควรทำไม่บ่อยเท่าที่เป็นไปได้
- หน้าทั้งหมดที่ไม่ลงท้ายด้วยตัวแบ่งแบบบังคับควรมีความสูงเท่ากัน
- ไม่ควรมีช่องว่างภายในบล็อกที่มีเส้นขอบ
- ไม่ควรมีตัวแบ่งภายในโต๊ะ
- ไม่ควรมีช่องว่างภายในวัตถุที่ย้าย
สมมติว่าสไตล์ชีตของคุณมีคุณสมบัติ "orphans: 4" และ "widows: 2" และมี 20 แถว (กล่องบรรทัด) ที่ด้านล่างของหน้าปัจจุบัน:
- หากย่อหน้าสุดท้ายของหน้าปัจจุบันมีไม่เกิน 20 บรรทัด จะต้องอยู่ในหน้าปัจจุบัน
- หากย่อหน้ามี 21 หรือ 22 บรรทัด และส่วนที่สองของย่อหน้าไม่ควรละเมิดข้อ จำกัด ที่กำหนดโดยคุณสมบัติ "แม่ม่าย" ดังนั้นโดยอาศัยสิ่งนี้ส่วนที่สองควรประกอบด้วยสองบรรทัด
- หากย่อหน้ามีมากกว่า 23 บรรทัด ส่วนแรกควรยาว 20 บรรทัด และส่วนที่สองควรรวมบรรทัดอื่นๆ ทั้งหมด
ตอนนี้ สมมติว่าค่าของคุณสมบัติ "เด็กกำพร้า" คือ "10" ค่าของคุณสมบัติ "หม้าย" คือ "20" และมี 8 แถวที่สามารถใช้ได้ที่ด้านล่างของหน้าปัจจุบัน:
- หากย่อหน้าที่ท้ายหน้าปัจจุบันมีไม่เกิน 8 บรรทัด จะต้องอยู่ในหน้าปัจจุบัน
- หากย่อหน้ามีมากกว่า 9 บรรทัด จะแบ่งไม่ได้ (เนื่องจากจะเป็นการละเมิดข้อจำกัดที่กำหนดโดยคุณสมบัติ "เด็กกำพร้า") ดังนั้นจึงควรย้ายไปยังหน้าถัดไปเป็นบล็อก