ปัญหาที่ยากที่สุดของวิทยาการคอมพิวเตอร์: การจัดองค์ประกอบให้อยู่กึ่งกลาง (centering things)
(tonsky.me)- ในแอปพลิเคชันของหลายบริษัท องค์ประกอบ UI อย่างข้อความ ไอคอน ฯลฯ มักไม่ได้ถูกจัดให้อยู่กึ่งกลางอย่างถูกต้อง
- ทั้งที่สามารถใช้ flex และ grid ของ CSS เพื่อจัดให้อยู่กึ่งกลางได้อย่างง่ายดาย
display: flex
justify-content: center /* จัดกึ่งกลางแนวนอน */
align-items: center /* จัดกึ่งกลางแนวตั้ง */
หรือ
display: grid
justify-items: center /* จัดกึ่งกลางแนวนอน */
align-items: center /* จัดกึ่งกลางแนวตั้ง */
ปัจจัยที่ทำให้การจัดกึ่งกลางเป็นเรื่องยาก
- metrics ของฟอนต์มีบทบาทสำคัญ ฟอนต์ยอดนิยมส่วนใหญ่มีช่องว่างใน bounding box ที่ไม่ได้พอดีกับตัวอักษรเป๊ะ ๆ ทำให้จัดกึ่งกลางได้ยาก
- ผลจากการตั้งค่า line-height ทำให้แทบเป็นไปไม่ได้เลยที่จะจัดแนวองค์ประกอบสองชิ้นที่อยู่คนละคอนเทนเนอร์ให้ตรงกัน
- การจัดไอคอนให้อยู่ข้างข้อความก็เป็นงานที่ยากมากเช่นกัน โดยใช้คุณสมบัติ
vertical-alignของ CSS จัดไอคอนให้มีความหมายเชิงสายตาไม่ได้ - icon font ที่นำไอคอนไปใส่ไว้ในไฟล์ฟอนต์ยิ่งทำให้การจัดแนวยากขึ้น เพราะควบคุมขนาดและ padding ไม่ได้
- แม้แต่นักออกแบบเองก็อาจพลาดด้วยการจัดกึ่งกลางแบบกลไกโดยไม่คำนึงถึงรูปร่างของไอคอน
- แม้แต่การจัดแนวนอนก็อาจผิดพลาดได้หากไม่ใส่ใจในรายละเอียด
แนวทางแก้ไข
นักออกแบบ
- หากปรับ bounding box ของฟอนต์ให้พอดีกับข้อความเป๊ะ ๆ การจัดกึ่งกลางจะง่ายขึ้นมาก
- Figma รองรับฟีเจอร์นี้ (แต่ไม่ได้เปิดเป็นค่าเริ่มต้น)
- Vertical Trim : Cap Height to baseline
นักออกแบบฟอนต์
- หากตั้งค่า font metrics ให้พื้นที่ระหว่าง ascender และ descender มีขนาดเป็น 2 เท่าของ cap-height นักพัฒนาจะจัดกึ่งกลางได้ง่ายขึ้น
- ไม่จำเป็นต้องยืด ascender/descender จริงไปจนสุดขอบ แค่ให้ค่าตัวเลขตรงกันก็พอ
นักพัฒนาเว็บ
- ต้องรู้ล่วงหน้าว่าจะใช้ฟอนต์ใด (จะใช้ไม่ได้เมื่อมีการแทนที่ฟอนต์)
- สามารถเพิ่มค่า
padding-bottomที่คำนวณจาก font metrics เพื่อปรับการจัดกึ่งกลางแนวตั้งให้ตรงได้ - สำหรับไอคอนก็สามารถจัดแนวได้เช่นกันโดยตั้ง
vertical-align: baselineแล้วเลื่อนลงตามค่าที่คำนวณจาก font metrics และขนาดไอคอน
icon font
- ได้โปรด เลิกใช้ icon font แล้วหันไปใช้ฟอร์แมตภาพทั่วไปแทน
- ไม่มีอะไรจะง่ายไปกว่าการจัดแนวสี่เหลี่ยมสองอันที่มีความกว้างและความสูง
การชดเชยด้วยสายตา
- นักพัฒนาจัดแนวได้เฉพาะสี่เหลี่ยมที่สมบูรณ์แบบทางคณิตศาสตร์เท่านั้น ส่วนสิ่งที่ต้องปรับด้วยมือคือการวางไอคอนให้ดูสมดุลทางสายตาภายในสี่เหลี่ยม
ความเห็นของ GN⁺
- แสดงให้เห็นว่าการใส่ใจรายละเอียดเล็ก ๆ สามารถยกระดับคุณภาพของ UI ได้มาก แม้แต่เรื่องเล็กน้อยอย่างการจัดกึ่งกลางเพียงอย่างเดียวก็ทำให้ความรู้สึกโดยรวมเปลี่ยนไปได้
- สะท้อนว่าแนวคิดแบบ "นักออกแบบดูแค่งานออกแบบ นักพัฒนาดูแค่งานพัฒนา" นั้นไม่พอ แต่ต้องเข้าใจขอบเขตงานของกันและกันและร่วมมือกันจึงจะได้ผลลัพธ์ที่ดี
- ตั้งแต่ขั้นตอนออกแบบก็ควรจัด font metrics และทำต้นแบบโดยคำนึงถึงการนำไปใช้งานจริง เพื่อให้ไม่เกิดความต่างของการเรนเดอร์ระหว่างเบราว์เซอร์และทำให้พัฒนาออกมาตามเจตนาของนักออกแบบได้ง่ายขึ้น
- แม้แต่ในผลิตภัณฑ์ของบริษัทใหญ่ ๆ อย่าง Apple, MS, Google ก็ยังพบปัญหาแบบนี้ แต่คนส่วนใหญ่มักมองข้ามไปโดยไม่ทันสังเกต ยิ่งตอกย้ำว่าการสร้างงานด้วยความหมกมุ่นในรายละเอียดนั้นสำคัญมาก
- โดยเฉพาะช่วงหลังที่มีการใช้เครื่องมือทดสอบ UI อัตโนมัติมากขึ้น จนขั้นตอนการตรวจด้วยสายตาของมนุษย์ถูกละไป ปัญหาลักษณะนี้จึงอาจเกิดบ่อยขึ้นและควรระวัง
3 ความคิดเห็น
ก็น่าคิดเหมือนกันว่าการจัดให้อยู่กึ่งกลางแบบกลไกนั้นดีจริงหรือเปล่า เหมือนกับที่เมาส์ซึ่งออกแบบตามหลักสรีรศาสตร์ให้ซ้ายขวาไม่สมมาตรกันเล็กน้อยกลับใช้งานได้สบายกว่า จึงอาจเป็นองค์ประกอบที่ควรตัดสินจากภาพรวมของการใช้งานทั้งหมดก็ได้
ดูเหมือนว่าประเด็นสำคัญคือผลลัพธ์อาจออกมาไม่ตรงกับที่ตั้งใจไว้ เช่น สถานการณ์ที่การคลิกเมาส์ไปเกิดที่ส่วนหางของเคอร์เซอร์บนหน้าจอ แทนที่จะเป็นที่ปลายลูกศร
ความคิดเห็นจาก Hacker News
สรุปเนื้อหา:
justifyและalignของ CSS แบบโต้ตอบได้