CSS text-wrap: balance

เทคนิคการจัดตัวอักษรแบบคลาสสิกในการเขียนบรรทัดใหม่ด้วยตนเองเพื่อให้บล็อกข้อความมีความสมดุลได้มาอยู่ใน CSS แล้ว

ค่า balance สำหรับ text-wrap เป็นส่วนหนึ่งของ CSS Text Level 4 ดูตัวอย่างในโพสต์นี้เพื่อเรียนรู้วิธีที่ CSS เพียงบรรทัดเดียวนี้สามารถปรับปรุงเลย์เอาต์ข้อความได้อย่างมาก

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 121.
  • Safari: 17.5.

ลองใช้เวอร์ชันเดโม

หากไม่มี text-wrap: balance นักออกแบบ ผู้แก้ไขเนื้อหา และผู้เผยแพร่โฆษณาจะมี เครื่องมือเพียงไม่กี่อย่าง ในการเปลี่ยนวิธีจัดบรรทัดให้สมดุล ตัวเลือกที่ดีที่สุดที่มีอยู่คือการใช้ <wbr> หรือ &shy; เพื่อช่วย แนะนำเลย์เอาต์ข้อความให้ตัดสินใจได้ดีขึ้นว่าจะขึ้นบรรทัดใหม่และตัดคำที่ใด

ในฐานะนักพัฒนาเว็บ คุณไม่ทราบขนาดสุดท้าย ขนาดแบบอักษร หรือแม้แต่ภาษาของบรรทัดแรกหรือย่อหน้า ตัวแปรทั้งหมดที่จำเป็นสำหรับการจัดบรรทัดข้อความอย่างมีประสิทธิภาพและสวยงามอยู่ในเบราว์เซอร์ นี่คือเหตุผลที่เราเห็นการจัดบรรทัดแรกดังที่แสดงในรูปภาพต่อไปนี้

บรรทัดแรกไฮไลต์ด้วยเครื่องมือสำหรับนักพัฒนาเว็บ ครอบคลุมความกว้างทั้งหมดของพื้นที่ในบรรทัด และมีคำ 2 คำที่ค้างไว้ในบรรทัดที่ 2
ลองใช้เวอร์ชันเดโม
.unbalanced {
  max-inline-size: 50ch;
}

ด้วย text-wrap: balance จาก CSS Text 4 คุณสามารถขอให้เบราว์เซอร์ ค้นหาโซลูชันการจัดบรรทัดข้อความที่สมดุลที่สุด เบราว์เซอร์ทราบ ปัจจัยทั้งหมด เช่น ขนาดแบบอักษร ภาษา และพื้นที่ที่จัดสรร ผลลัพธ์ของการตัดข้อความที่สมดุลของเบราว์เซอร์จะมีลักษณะดังนี้

ส่วนหัวจะไฮไลต์เหมือนเครื่องมือสำหรับนักพัฒนาเว็บก่อนหน้านี้ แต่ครั้งนี้จะไม่ครอบคลุมความกว้างทั้งหมด โดยจะขึ้นบรรทัดใหม่ก่อนจบประโยค จึงเป็นบล็อกข้อความที่สมดุล
ลองใช้เวอร์ชันเดโม
.balanced {
  max-inline-size: 50ch;
  text-wrap: balance;
}

การดูตัวอย่างแบบเคียงข้างกัน แบบคงที่ และไม่มีข้อมูลการแก้ไขข้อผิดพลาดซ้อนทับจะเป็นประโยชน์

ตัวอย่าง 2 รายการก่อนหน้าจะแสดงร่วมกัน โดยรายการหนึ่งจะทำเครื่องหมายว่าไม่สมดุล และอีกรายการหนึ่งจะทำเครื่องหมายว่าสมดุล

คุณจะพึงพอใจกับบล็อกข้อความที่สมดุลมากขึ้น เพราะดึงดูดความสนใจได้ดีขึ้นและอ่านง่ายขึ้นโดยรวม

ค้นหาสมดุล

บรรทัดแรกเป็นสิ่งแรกที่ผู้อ่านเห็น จึงควรดึงดูดสายตาและอ่านง่าย ซึ่งจะดึงดูดความสนใจของผู้ใช้และให้ความรู้สึกถึงคุณภาพและความมั่นใจ การจัดตัวอักษรที่ดีจะสร้างความมั่นใจให้ผู้อ่านและกระตุ้นให้ผู้อ่านอ่านต่อ

โดยปกติแล้วงานนี้จะทำด้วยมือหรือด้วยสายตา เนื่องจากนักออกแบบที่จัดข้อความให้สมดุลต้องการให้ดึงดูดสายตา ไม่ใช่ให้เป็นไปตามหลักคณิตศาสตร์ หัวข้อนี้มักเรียกว่าการจัดแนวตามเมตริกเทียบกับการจัดแนวด้วยสายตา สำหรับการเผยแพร่ขนาดใหญ่ เช่น New York Times, การจัดบรรทัดแรกให้สมดุลเป็นรายละเอียดที่สำคัญมากสำหรับประสบการณ์ของผู้ใช้

ลองใช้เวอร์ชันเดโม

การจัดข้อความให้สมดุลในการจัดตัวอักษรมีมาตั้งแต่ยุคแรกๆ ของการพิมพ์ เมื่อช่างพิมพ์จะวางตัวอักษรด้วยมือ เมื่อเครื่องมือและเทคนิคพัฒนาขึ้น ผลลัพธ์ก็พัฒนาขึ้นด้วย ปัจจุบัน นักออกแบบมีสี ความหนา ขนาด และอื่นๆ เพื่อจัดข้อความให้สมดุลในการออกแบบ

อย่างไรก็ตาม ในเว็บมีการควบคุมน้อยกว่าเนื่องจากเอกสารจะเปลี่ยนขนาดและสีตามผู้ใช้ text-wrap: balance นำศิลปะการจัดข้อความให้สมดุลมาสู่เว็บในลักษณะอัตโนมัติ โดยอิงตามงานและประเพณีของนักออกแบบจากอุตสาหกรรมการพิมพ์

จัดบรรทัดแรกให้สมดุล

นี่จะเป็นและควรเป็น Use Case หลักสำหรับ text-wrap: balance ดึงดูดสายตาด้วยขนาดและทำให้สมมาตรและอ่านง่าย ตั้งค่าพาดหัวทั้งหมดเป็นการตัดข้อความให้สมดุลด้วย CSS ต่อไปนี้

h1,h2,h3,h4,h5,h6 {
  text-wrap: balance;
}

การใช้สไตล์นี้เพียงอย่างเดียวอาจไม่ให้ผลลัพธ์ตามที่คุณคาดหวัง เนื่องจากข้อความต้องจัดบรรทัดและจึงต้องมีความยาวบรรทัดสูงสุดที่ใช้จากที่ใดที่หนึ่ง คุณจะเห็น max-inline-size ที่ตั้งไว้ในตัวอย่างในโพสต์นี้ ซึ่งสไตล์นี้คล้ายกับ max-width แต่ตั้งค่าได้ ครั้งเดียวสำหรับทุกภาษา

ข้อจำกัด

การจัดข้อความให้สมดุลไม่ใช่เรื่องง่าย เบราว์เซอร์ต้องวนซ้ำหลายครั้งเพื่อค้นหาโซลูชันการจัดบรรทัดที่สมดุลที่สุด ค่าใช้จ่ายด้านประสิทธิภาพนี้จะลดลงด้วยกฎที่ว่า ใช้ได้กับบรรทัดที่จัดบรรทัดแล้ว 6 บรรทัดและน้อยกว่าเท่านั้น

ลองใช้เวอร์ชันเดโม

ข้อพิจารณาด้านประสิทธิภาพ

การใช้การจัดข้อความให้สมดุลกับทั้งการออกแบบไม่ใช่ความคิดที่ดี เนื่องจากเป็นการขอที่ไม่จำเป็นเพราะมีขีดจำกัด 6 บรรทัด และอาจส่งผลต่อความเร็วในการแสดงผลหน้าเว็บ

ไม่ควรทำ
* {
  text-wrap: balance;
}
พิจารณาใช้สิ่งต่อไปนี้แทน
h1, h2, h3, h4, h5, h6, blockquote {
  text-wrap: balance;
}

ข้อดีอย่างมากของฟีเจอร์นี้คือคุณไม่จำเป็นต้องรอและกำหนดเวลาการจัดข้อความให้สมดุลกับการโหลดแบบอักษร เหมือนกับที่คุณอาจทำกับ JavaScript ในปัจจุบัน เบราว์เซอร์จะจัดการให้เอง

การโต้ตอบกับพร็อพเพอร์ตี้ white-space

การจัดข้อความให้สมดุลจะขัดแย้งกับ white-space พร็อพเพอร์ตี้ เนื่องจากพร็อพเพอร์ตี้หนึ่งขอไม่ให้จัดบรรทัด ส่วนอีกพร็อพเพอร์ตี้ขอให้จัดบรรทัดให้ สมดุล แก้ไขปัญหานี้ได้โดยยกเลิกการตั้งค่าพร็อพเพอร์ตี้ช่องว่าง แล้วการจัดบรรทัดให้สมดุลจะใช้ได้อีกครั้ง

.balanced {
  white-space: unset;
  text-wrap: balance;
}

การจัดข้อความให้สมดุลจะไม่เปลี่ยน `inline-size` ขององค์ประกอบ

โซลูชัน JavaScript บางอย่างสำหรับการจัดข้อความให้สมดุลมีข้อดีตรงที่โซลูชันเหล่านั้นจะเปลี่ยน max-width ขององค์ประกอบที่บรรจุเอง ซึ่งมีข้อดีเพิ่มเติมคือ "หด" ให้พอดีกับบล็อกที่สมดุล text-wrap: balance ไม่มีผลลัพธ์นี้และดูได้ในตัวอย่างนี้

ส่วนหัวจะไฮไลต์เหมือนเครื่องมือสำหรับนักพัฒนาเว็บก่อนหน้านี้ แต่ครั้งนี้จะไม่ครอบคลุมความกว้างทั้งหมด โดยจะขึ้นบรรทัดใหม่ก่อนจบประโยค จึงเป็นบล็อกข้อความที่สมดุล

ดูว่าความกว้างที่แสดงจากเครื่องมือสำหรับนักพัฒนาเว็บมีพื้นที่ว่างเพิ่มเติมที่ส่วนท้ายหรือไม่ เนื่องจากเป็นเพียงสไตล์การจัดบรรทัด ไม่ใช่สไตล์การเปลี่ยนขนาด ด้วยเหตุนี้ จึงมีบางสถานการณ์ที่ text-wrap: balance ไม่เหมาะนัก อย่างน้อยก็ในความคิดของฉัน เช่น ส่วนหัวภายในการ์ด (หรือคอนเทนเนอร์ที่มีเส้นขอบหรือเงา)

การจัดข้อความให้สมดุลจะสร้างความไม่สมดุลให้กับองค์ประกอบที่บรรจุอย่างน่าขัน

คำอธิบายสั้นๆ เกี่ยวกับเทคนิคที่เบราว์เซอร์ใช้

เบราว์เซอร์จะทำการค้นหาแบบไบนารีอย่างมีประสิทธิภาพสำหรับความกว้างที่เล็กที่สุดซึ่งไม่ทำให้เกิดบรรทัดเพิ่มเติม โดยหยุดที่ 1 พิกเซล CSS (ไม่ใช่พิกเซลที่แสดง) เพื่อลดขั้นตอนในการค้นหาแบบไบนารีเพิ่มเติม เบราว์เซอร์จะเริ่มต้นด้วยความกว้างของเส้นเฉลี่ย 80%