- การเพิ่ม เส้นคั่น ระหว่างเซกชันบนหน้าเว็บเป็นเทคนิคการออกแบบที่ใช้กันทั่วไปเพื่อ จัดระเบียบเนื้อหาให้ชัดเจน และเพิ่ม ความอ่านง่าย
- แม้จะสามารถใช้เทคนิค CSS แบบเดิมอย่าง
border เพื่อเพิ่มเส้นคั่นได้ แต่ก็มีข้อจำกัด เช่น การเปลี่ยนขนาดและความจำเป็นต้องเขียนโค้ดเพิ่มเติม
- CSS Gap Decorations แก้ปัญหาเหล่านี้ด้วยการเพิ่มพร็อพเพอร์ตีอย่าง
column-rule และ row-rule
เทคนิคเส้นคั่นใน CSS แบบเดิมและข้อจำกัด
- พร็อพเพอร์ตี
border เป็นวิธีทั่วไปในการเพิ่มเส้นคั่น แต่ก็อาจเกิดปัญหาดังต่อไปนี้
- เมื่อเพิ่ม
border ขนาดขององค์ประกอบอาจเปลี่ยนไป
- ต้องเขียนโค้ดเพิ่มเติมสำหรับองค์ประกอบแรกและองค์ประกอบสุดท้าย
- หากมีการตัดบรรทัดในเลย์เอาต์ Flexbox เส้นคั่นอาจครอบคลุมพื้นที่ได้ไม่เต็มทั้งหมด
- สามารถใช้ pseudo-element อย่าง
::before และ ::after เพื่อเพิ่มเส้นคั่นได้ แต่มีข้อจำกัดดังนี้
- ต้องเขียนโค้ดเพิ่มเติมสำหรับองค์ประกอบแรกและองค์ประกอบสุดท้าย
- ต้องใช้โค้ดกำหนดตำแหน่งแบบ absolute ที่ซับซ้อน
- สามารถทำให้ดูเหมือนมีเส้นคั่นได้โดยกำหนดสีพื้นหลังให้กับกริดคอนเทนเนอร์ และกำหนดสีพื้นหลังให้กับไอเท็ม
- ปรับความยาวของเส้นคั่นไม่ได้
- หากมีเซลล์ว่าง สีพื้นหลังจะมองเห็นได้
- หากไอเท็มเติมเต็มเซลล์ไม่ครบ สีพื้นหลังจะมองเห็นได้
- ใช้งานไม่ได้หากพื้นหลังของหน้าไม่ใช่สีเดียวล้วน
- ในเลย์เอาต์หลายคอลัมน์ สามารถใช้พร็อพเพอร์ตี
column-rule เพื่อเพิ่มเส้นคั่นได้ แต่มีข้อจำกัดดังนี้
- ใช้งานได้เฉพาะกับเลย์เอาต์หลายคอลัมน์เท่านั้น
- ไม่สามารถควบคุมทิศทางอินไลน์ของเนื้อหาได้
ข้อเสนอ CSS Gap Decorations
- CSS Gap Decorations เป็นข้อเสนอใหม่เพื่อแก้ปัญหาข้างต้น
- ประเด็นสำคัญของข้อเสนอ
- ขยายการรองรับพร็อพเพอร์ตี
column-rule ให้ใช้ได้กับเลย์เอาต์กริดและฟเล็กซ์บ็อกซ์
- เพิ่มพร็อพเพอร์ตีใหม่
row-rule
- สามารถกำหนดเส้นคั่นต่างกันในแต่ละส่วนของคอนเทนเนอร์ได้
- สามารถเปลี่ยนสีของเส้นคั่นได้ด้วยพร็อพเพอร์ตี
row-rule-color
.alternate-red-blue {
display: grid;
grid-template: repeat(auto-fill, 30px) / repeat(6, 100px);
gap: 10px;
row-rule: 1px solid;
row-rule-color: red blue;
}
- สามารถกำหนดเส้นคั่นที่มีความหนาและสีแตกต่างกันได้
.varying-widths {
display: grid;
grid-template: repeat(auto-fill, 30px) / repeat(6, 100px);
row-gap: 10px;
row-rule: 5px solid black / repeat(auto, 1px solid #666) / 3px solid black;
}
- สามารถควบคุมพฤติกรรมของเส้นคั่นที่จุดตัดได้
- ใช้พร็อพเพอร์ตี
*-rule-break และ *-rule-outset ได้
- ควบคุมตำแหน่งเริ่มต้นและสิ้นสุดของเส้นคั่นที่จุดตัดได้
- ปรับความยาวและออฟเซ็ตของเส้นคั่นได้อย่างละเอียด
การขอฟีดแบ็กต่อข้อเสนอ
- ข้อเสนอ CSS Gap Decorations จะได้รับการปรับปรุงต่อไปโดยอิงจากฟีดแบ็กของนักพัฒนา
- ดูรายละเอียดเพิ่มเติมได้ใน explainer อย่างเป็นทางการ
- สามารถส่งฟีดแบ็กผ่าน GitHub issue ได้
- โดยเฉพาะอย่างยิ่ง ยินดีรับฟีดแบ็กเกี่ยวกับพฤติกรรมของเส้นคั่นที่จุดตัด
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อยากมี pseudo-element แบบใหม่:
.container:gap { background-color: red; }{ padding: 2px }เพื่อตั้งระยะว่างที่ปลายของตัวคั่นได้:gap-horzและ:gap-vertเพื่อตั้งค่าระยะห่างแนวตั้งและแนวนอนแยกกันได้.container:gap:nth-gap(2n) { color: blue; }เพื่อให้ได้สีสลับกันการออกแบบโดยคณะกรรมการไม่ใช่สิ่งที่ดีที่สุด แต่ในฐานะคนที่ไม่ได้เป็นเจ้าของภาษา ชื่อพร็อพเพอร์ตีที่เสนอมาดูเหมือนจะสื่อความหมายได้ไม่ดีนัก
อยากให้พิจารณากรณีใช้งานของพาเนลที่ปรับขนาดได้ด้วย
การเพิ่มเส้นขอบทำให้ขนาดของรายการเปลี่ยนไป ซึ่งอาจไม่เป็นที่ต้องการ
* { box-sizing: border-box; }น่าสนใจ ช่วงนี้ทำงาน UI ใน QML เป็นหลัก และมันจัดการปัญหาแบบนี้ได้แทบทั้งหมด
เป็นไอเดียที่ใช้ได้ แต่คิดว่าน่าจะมีประโยชน์กว่านี้ถ้ามีมาตั้งแต่ราว 10 ปีก่อน
.things .thing:not(:last-child) { border-bottom: 1px solid gray; }เป็นปัญหาที่น่าปวดหัวมานาน ดีที่ได้เห็นใครสักคนลงมือทำอะไรบางอย่าง
display: gridเท่านั้น และไม่ครอบคลุมองค์ประกอบที่ความกว้างไม่ตายตัว|ระหว่างลิงก์อาจไปโผล่ท้ายบรรทัดแรกหรือต้นบรรทัดที่สองได้ทำให้นึกถึงคำกล่าวของดีไซเนอร์ชาวเยอรมัน: "เมื่อดีไซเนอร์ไม่มีไอเดียเหลือแล้ว ก็จะเพิ่มเส้นเข้าไปอีกสองสามเส้น"
เจอปัญหานี้บ่อย และอยากได้วิธีที่ดีกว่า
<hr/>หวังว่าสิ่งนี้จะผ่าน... การใช้ AI มาอุดช่องว่างความรู้เรื่อง flexbox เป็นพรจริง ๆ แต่สิ่งนี้ให้ความรู้สึกเหมือนเป็นวิธีแก้ที่แท้จริง