CSS Grid Level 3 หรือที่เรียกว่าเลย์เอาต์ "Masonry" ขอความคิดเห็นและความช่วยเหลือในการออกแบบ
(webkit.org)-
มีข้อเสนอให้เพิ่มเลย์เอาต์แบบ Masonry ของ CSS Grid (หรือที่เรียกกันว่าเลย์เอาต์ก่ออิฐหรือเลย์เอาต์น้ำตก) เข้าไปใน CSS Grid Level 3
- เลย์เอาต์แบบ Masonry เป็นแพตเทิร์นที่จัดวางคอนเทนต์ให้แน่นเหมือนการก่ออิฐหรือกำแพงหิน สามารถวางคอนเทนต์ที่มีขนาดต่างกันได้โดยไม่ต้องตัดทอนหรือละทิ้งเนื้อหา และปล่อยให้เนื้อหาไหลลงตามคอลัมน์
- นี่เป็นเลย์เอาต์ที่ก่อนหน้านี้ทำได้ยากด้วย CSS เพียงอย่างเดียวโดยไม่ใช้ JavaScript
-
ได้ลองทำเดโม 4 แบบเพื่อใช้สร้างกลไก Masonry ใน CSS
- สร้างเลย์เอาต์ Masonry/น้ำตกแบบดั้งเดิม
- ใช้ความสามารถในการกำหนดคอลัมน์หลากหลายรูปแบบของ Grid
- ใช้ความสามารถในการรวมคอลัมน์ของ Grid
- ใช้ Subgrid และการจัดวางแบบ explicit
-
เมื่อนำความสามารถหลากหลายของ Grid มารวมกับ Masonry จะสามารถสร้างเลย์เอาต์ที่สร้างสรรค์และมีความไดนามิกได้มากขึ้น
- กำหนดขนาดคอลัมน์ได้ยืดหยุ่นและหลากหลายด้วยหน่วย
fr,max-content,min-content, ฟังก์ชันminmax()เป็นต้น - ใช้การรวมคอลัมน์เพื่อเน้นบางไอเท็มหรือสร้างกริดที่มีสีสันหลากหลาย
- ใช้ Subgrid เพื่อให้แทร็กของกริดที่ซ้อนกันสอดคล้องกับกริดแม่
- ใช้การจัดวางแบบ explicit เพื่อกำหนดตำแหน่งของไอเท็มเฉพาะ เช่น header
- กำหนดขนาดคอลัมน์ได้ยืดหยุ่นและหลากหลายด้วยหน่วย
-
มีความเห็นอีกด้านว่าควรแยกเลย์เอาต์ Masonry ออกเป็น
displaytype ต่างหาก- มีความกังวลว่าการรวม CSS Grid กับ Masonry จะเพิ่มความซับซ้อนและอาจส่งผลลบต่อประสิทธิภาพ
- หากแยก Masonry ออกจาก Grid ก็จะสามารถพัฒนาฟีเจอร์ของแต่ละส่วนได้อย่างอิสระ
- แต่ก็มีความเห็นเช่นกันว่าควรทำ Masonry ให้เป็นเพียงเลย์เอาต์คอลัมน์ขนาดเท่ากันที่มีข้อจำกัดเท่านั้น
-
ผู้เขียนมองว่าการใส่ความสามารถของ Masonry ไว้ใน CSS Grid มีข้อดีมากกว่า
- สเปก CSS Grid Level 3 ถูกเขียนขึ้นแล้วและมีการนำไปใช้งานในเอนจินเบราว์เซอร์ 2 ตัวแล้ว
- ในอนาคตจะสามารถมอบความสามารถใหม่แบบเดียวกันให้ทั้ง Grid และ Masonry ได้ (เช่น การตกแต่งแทร็ก)
- Masonry ก็เป็นกริดรูปแบบหนึ่งอยู่แล้ว จึงเข้ากันได้ดีในเชิงแนวคิด
-
อยากฟังความคิดเห็นจากนักออกแบบและนักพัฒนาเว็บ
- Masonry ควรเป็นส่วนหนึ่งของ CSS Grid หรือไม่?
- ต้องการใช้ความสามารถทั้งหมดของ Grid เช่น การกำหนดขนาดคอลัมน์หลายแบบ การรวมคอลัมน์ การจัดวาง และ Subgrid หรือคิดว่าควรรองรับเฉพาะคอลัมน์ขนาดเท่ากันจะดีกว่า?
- จะนำฟีเจอร์นี้ไปใช้อย่างไร? จะสร้างเลย์เอาต์แบบใดได้บ้าง?
- หากมีเดโมที่ทำขึ้นเองก็อยากให้ช่วยแชร์
- มีเลย์เอาต์แบบใดหรือไม่ที่ยังทำได้ยากด้วยโมเดลนี้?
-
ชื่อ Masonry อาจไม่เหมาะนัก อาจพิจารณาไวยากรณ์อย่าง
grid-template-rows: offเพื่อสื่อความหมายว่าไม่มีแถว โปรดคำนึงด้วยว่าในอนาคตชื่ออาจเปลี่ยนแปลงได้
ความเห็นของ GN⁺
- การเพิ่มความสามารถแบบ Masonry เข้าไปใน CSS Grid น่าจะเป็นการเปลี่ยนแปลงที่มีความหมายและช่วยเพิ่มพลังในการแสดงออกของเว็บเลย์เอาต์ได้มาก โดยเฉพาะการทำกริดแบบคอลัมน์ที่จัดวางเฉพาะแนวตั้งได้ง่ายขึ้นนั้นน่าสนใจมาก
- ในอีกด้านหนึ่ง ค่อนข้างเห็นด้วยได้ยากกับแนวคิดที่จะแยก Masonry ออกเป็น
displaytype ต่างหากและจำกัดความสามารถของมัน ตรงกันข้าม เมื่อผสานเข้ากับความสามารถอันทรงพลังของ Grid แล้ว ขอบเขตการใช้งานของเลย์เอาต์ Masonry น่าจะกว้างขึ้นอีกมาก - อย่างไรก็ตาม ชื่อ Masonry ไม่ค่อยสื่อความหมายตรงไปตรงมาและอาจทำให้สับสน จึงน่าจะลองพิจารณาชื่ออื่นที่สื่อถึงกริดสำหรับคอลัมน์โดยเฉพาะ เช่นไวยากรณ์ลักษณะ
grid-template-rows: noneที่อธิบายความหมายว่าเป็น “กริดที่ไม่มีแถว” ได้ชัดเจนกว่า - คาดหวังว่าข้อเสนอนี้จะช่วยให้ CSS Grid กลายเป็นเครื่องมือที่ทรงพลังยิ่งขึ้น การทดลองกับกรณีเลย์เอาต์ที่หลากหลายและการแสดงความคิดเห็นอย่างจริงจังน่าจะเป็นสิ่งสำคัญ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สรุป:
break-inside: avoiddisplay:inline-blockเพื่อปฏิบัติต่อรูปภาพเหมือนข้อความและให้ reflow ไปขึ้นบรรทัดใหม่