วิธีจัดกึ่งกลางองค์ประกอบ
- การวางองค์ประกอบให้อยู่กึ่งกลางภายในองค์ประกอบแม่เป็นปัญหาที่ชวนปวดหัวมาอย่างยาวนาน
- เมื่อ CSS พัฒนาขึ้น ก็มีทางแก้หลากหลายมากขึ้น และตอนนี้ก็มีตัวเลือกให้ใช้อย่างกว้างขวาง
- บทช่วยสอนนี้จะช่วยให้เข้าใจ trade-off ระหว่างแนวทางต่าง ๆ และมอบกลยุทธ์สำหรับการจัดกึ่งกลางในทุกสถานการณ์
การจัดกึ่งกลางด้วย auto margin
- เมื่อต้องการวางองค์ประกอบให้อยู่กึ่งกลางในแนวนอน สามารถใช้ margin ที่มีค่า
auto ได้
- ต้องกำหนดความกว้างขององค์ประกอบให้มีขอบเขต และ
fit-content จะช่วยปรับขนาดองค์ประกอบให้พอดีกับเนื้อหา
- หากใช้พร็อพเพอร์ตี
margin-inline ก็จะตั้งค่า margin-left และ margin-right เป็น auto พร้อมกันได้
การจัดกึ่งกลางด้วย Flexbox
- Flexbox ให้การควบคุมอย่างมากในการจัดวางกลุ่มไอเท็มตามแกนหลัก
- สามารถจัดองค์ประกอบเดี่ยวให้อยู่กึ่งกลางทั้งแนวนอนและแนวตั้งได้ และยังคงการจัดกึ่งกลางไว้ได้แม้เมื่อลูกองค์ประกอบไม่พอดีกับคอนเทนเนอร์
- สามารถใช้พร็อพเพอร์ตี
flex-direction เพื่อควบคุมทิศทางการเรียงซ้อนของลูกองค์ประกอบหลายตัวได้
การจัดกึ่งกลางภายใน viewport
- บางกรณีจำเป็นต้องวางองค์ประกอบให้อยู่กึ่งกลางภายใน viewport แทนที่จะอิงกับคอนเทนเนอร์แม่
- สามารถใช้
position: fixed และ inset: 0px เพื่อตรึงองค์ประกอบไว้กับ viewport แล้วใช้ margin: auto เพื่อจัดให้อยู่กึ่งกลางทั้งแนวนอนและแนวตั้ง
การจัดกึ่งกลางองค์ประกอบที่ไม่ทราบขนาด
- หากไม่ทราบขนาดขององค์ประกอบอย่างชัดเจน สามารถใช้
fit-content เพื่อย่อองค์ประกอบให้พอดีกับเนื้อหาได้
การจัดกึ่งกลางด้วย CSS Grid
- วิธีที่กระชับที่สุดในการใช้ CSS Grid เพื่อจัดองค์ประกอบให้อยู่กึ่งกลางทั้งแนวนอนและแนวตั้งคือการใช้พร็อพเพอร์ตี
place-content: center
ความแตกต่างจาก Flexbox
- CSS Grid ใช้อัลกอริทึมการจัดเลย์เอาต์ที่ต่างออกไป และในบางครั้งความซับซ้อนเพิ่มเติมอาจกลายเป็นปัญหาได้
- Flexbox คำนวณเปอร์เซ็นต์โดยอิงจากองค์ประกอบแม่ ขณะที่ CSS Grid คำนวณโดยอิงจาก grid cell
การจัดกึ่งกลางสแตกขององค์ประกอบ
- สามารถใช้ CSS Grid เพื่อกำหนดหลายองค์ประกอบให้อยู่ในเซลล์เดียวกันได้ ซึ่งจะทำให้องค์ประกอบซ้อนทับกันจากด้านหลังมาด้านหน้า
การจัดกึ่งกลางข้อความ
- ข้อความได้รับการจัดการแบบพิเศษใน CSS และสามารถใช้พร็อพเพอร์ตี
text-align เพื่อจัดข้อความให้อยู่กึ่งกลางได้
อนาคตของการจัดกึ่งกลาง
- พร็อพเพอร์ตี
align-content กำลังถูกนำมาใช้ใน Flow layout ด้วย ซึ่งใช้ควบคุมการจัดแนวเนื้อหาตามทิศทางบล็อก
ไปไกลกว่าการจำแพตเทิร์น
- เมื่อเข้าใจ CSS อย่างลึกซึ้ง ก็จะสามารถใช้สัญชาตญาณแก้ปัญหาได้แทนการพึ่งการจดจำ
การตัดสินใจว่าจะใช้วิธีไหน
- หากต้องการจัดองค์ประกอบเดี่ยวให้อยู่กึ่งกลางในแนวนอน สามารถใช้กลยุทธ์ auto margin ของ Flow layout ได้
- หากต้องการจัดกึ่งกลาง UI แบบลอยตัว เช่น modal หรือ banner สามารถใช้ Positioned layout ร่วมกับ auto margin ได้
- หากต้องการจัดกึ่งกลางสแตกขององค์ประกอบ สามารถใช้ CSS Grid ได้
- หากต้องการจัดกึ่งกลางข้อความ สามารถใช้
text-align ได้ และสามารถใช้ร่วมกับวิธีอื่นได้ด้วย
- สำหรับสถานการณ์อื่น ๆ ส่วนใหญ่สามารถใช้ Flexbox ได้ เพราะเป็นวิธีที่ยืดหยุ่นที่สุด และสามารถจัดลูกองค์ประกอบหนึ่งตัวหรือหลายตัวให้อยู่กึ่งกลางในแนวนอน/แนวตั้งได้
ความเห็นของ GN⁺
- ประเด็นสำคัญที่สุดของบทความนี้คือการช่วยให้เข้าใจวิธีจัดกึ่งกลางด้วย CSS ที่หลากหลาย
- ด้วยพัฒนาการของ CSS งานจัดกึ่งกลางที่เมื่อก่อนซับซ้อนมากได้กลายเป็นเรื่องง่ายขึ้นมาก ซึ่งเป็นประโยชน์อย่างมากต่อเว็บดีเวลอปเปอร์
- การเข้าใจและใช้งานเทคโนโลยี CSS สมัยใหม่อย่าง Flexbox และ CSS Grid กลายเป็นทักษะสำคัญอย่างยิ่งสำหรับงานออกแบบและจัดเลย์เอาต์บนเว็บ
3 ความคิดเห็น
พอนึกดูแล้ว อยู่ ๆ ก็รู้สึกขัดตาเหมือนกันว่า GeekNews เองก็ยังไม่ได้จัดบทความให้อยู่กึ่งกลาง ฮือ 555
ผมใช้
place-items: center;บ่อยอยู่แล้ว แต่ก็มีอีกหลายวิธีเหมือนกันนะความคิดเห็นจาก Hacker News
สรุปความคิดเห็นแรก:
<table>เพื่อจัดให้อยู่กึ่งกลางได้ง่าย แต่ใน CSS กลับทำให้รู้สึกว่ายากสรุปความคิดเห็นที่สอง:
สรุปความคิดเห็นที่สาม:
displayและpositionเป็นพื้นฐานในการเรียนรู้การจัดวางตำแหน่งสรุปความคิดเห็นที่สี่:
สรุปความคิดเห็นที่ห้า:
สรุปความคิดเห็นที่หก:
สรุปความคิดเห็นที่เจ็ด:
สรุปความคิดเห็นที่แปด:
สรุปความคิดเห็นที่เก้า:
position: absolute,left: 50%,transform: translateX(-50%)สรุปความคิดเห็นที่สิบ:
divให้อยู่กึ่งกลางใน CSS ยากมาก จนเป็นเหตุผลที่ทำให้เลิกพัฒนาเว็บ