Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> CSS

สร้าง Line Break โดยไม่ใช้ <br> ใน HTML: เทคนิค CSS Pseudo-elements

สามารถเพิ่ม line break ให้元素 HTML โดยไม่ใช้ <br> ได้ โดยใช้ pseudo-elements — ใช้จัดสไตล์ส่วนเฉพาะของ元素 ที่นี่ใช้ ::after เพื่อเพิ่ม line break

<!DOCTYPE html> <html lang="en"> <head> <style> span { padding: 1px 8px; } span::after { content: '\a'; white-space: pre; } </style> </head> <body> <div> <span>Dumbledore</span> <span>McGonagall</span> <span>Snape</span> <span>Trelawney</span> </div> </body> </html>

โค้ดข้างต้นใช้ pseudo-element ::after บน元素 inline (span) เพื่อเพิ่ม carriage return (แทนด้วย \a) หลังข้อความของแต่ละ span

::after มีคุณสมบัติ content (สตริงที่จะแทรก) และ white-space: pre (รักษา whitespace) — ถ้าไม่มี white-space: pre จะไม่ทำงานเพราะ span เป็น inline-block

ข้อจำกัดและทางเลือกอื่น

หากเพิ่ม padding และ background จะพบว่า background เริ่มจากบรรทัดก่อนแล้วขึ้นบรรทัดใหม่ — ไม่ได้ผลเหมือนที่คาดหวัง

span { padding: 1px 8px; background: pink; } span::before { content: "\A"; white-space: pre; }

มีทางเลือกอื่น เช่น box-decoration-break: clone แต่ก็ไม่ให้ผลลัพธ์ที่ต้องการพอดี

การใช้ block-level elements เช่น <p> หรือ <div> เป็นทางเลือกง่าย แต่ถ้าต้องการค่า display อื่น?

ทางเลือก: Table Layout

ใน CSS selector ของ span ให้ใช้ display: table แทน — ทำให้โค้ดสะอาดและได้เลย์เอาต์ที่ต้องการ ไม่ได้ใช้ table แบบเดิมแต่ได้ผลลัพธ์ที่ต้องการ

สรุป

เทคนิค ::after กับ content: '\a'; white-space: pre สร้าง line break ได้โดยไม่ใช้ <br> แต่มีข้อจำกัดกับ background/padding — display: table เป็นทางเลือกที่ดีกว่าในหลายกรณี