2 คะแนน โดย GN⁺ 2025-01-06 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • CSS Flexbox Playground เป็นเครื่องมือเรียนรู้สำหรับปรับ คุณสมบัติของ Flexbox แบบเรียลไทม์และดูการเปลี่ยนแปลงของเลย์เอาต์
  • เมื่อปรับคอนโทรล จะสามารถเปรียบเทียบได้ทันทีว่า การตั้งค่า flex ส่งผลต่อการจัดวางบนหน้าจออย่างไร
  • ตัวอย่างพื้นฐานเริ่มต้นด้วยชุดค่าผสม display: flex, flex-direction: row, justify-content: space-around, align-items: flex-start, flex-wrap: nowrap
  • รายการตั้งแต่ 1 ถึง 5 บนหน้าจอจะขยับตามการเปลี่ยนแปลงของการตั้งค่า ทำให้เห็น ผลลัพธ์ของเลย์เอาต์ ได้ง่ายด้วยตา
  • สามารถคัดลอก โค้ด CSS ที่สร้างขึ้นได้ จึงเหมาะสำหรับนำการตั้งค่าที่ทดลองไปใช้ในโค้ดจริง

เครื่องมือทดลอง Flexbox แบบเรียลไทม์

  • CSS Flexbox Playground เป็นเครื่องมืออินเทอร์แอคทีฟสำหรับเรียนรู้และทดลอง คุณสมบัติของ Flexbox
  • เมื่อปรับคอนโทรล การเปลี่ยนแปลงของเลย์เอาต์จะสะท้อนผลแบบ เรียลไทม์
  • สามารถคัดลอกโค้ด CSS ที่สร้างจากผลการทดลองได้

การตั้งค่าตัวอย่างพื้นฐาน

  • การตั้งค่าตัวอย่างของ .container ใช้ CSS ต่อไปนี้
.container {
  display: flex;
  flex-direction: row;
  justify-content: space-around;
  align-items: flex-start;
  flex-wrap: nowrap;
}
  • บนหน้าจอจะแสดงรายการ 1, 2, 3, 4, 5 เพื่อให้ตรวจสอบผลลัพธ์การจัดวางของ Flexbox ได้

1 ความคิดเห็น

 
GN⁺ 2025-01-06
ความคิดเห็นจาก Hacker News
  • ตัว Flexbox เองนั้นเรียบง่ายและสมเหตุสมผล แต่ชื่อพร็อพเพอร์ตีและค่าต่าง ๆ ถูกตั้งแบบคณะกรรมการ ทำให้ไม่ค่อยเป็นธรรมชาติ
    พยายามจำว่า justify-content กับ align-items อันไหนคืออะไร สุดท้ายก็ยอมแพ้ แล้วลองเปลี่ยนไปเรื่อย ๆ จนกว่าจะได้ผล

    • สุดท้ายต้องเปิด คู่มือ Flexbox ของ CSS-Tricks https://css-tricks.com/snippets/css/a-guide-to-flexbox/ ทุกครั้ง
      มีคู่มือคล้าย ๆ กันสำหรับ Grid ด้วย และอันนั้นก็ยอดเยี่ยมเช่นกัน
    • ใน Flexbox มันยากมากที่จะจำการตั้งค่าที่จำเป็นสำหรับกล่องซ้อนกล่อง ว่าคอนเทนต์จะเติมเต็มกล่องหรือกล่องจะครอบคอนเทนต์
      สำคัญเป็นพิเศษใน SPA เมื่อต้องให้กล่องต่าง ๆ เติมเต็มหน้าจอแต่ไม่ล้นออกไป สุดท้ายก็ต้องใส่ค่าที่ไม่เป็นธรรมชาติเลยอย่าง min-width: 0 ไว้หลายจุด แล้วปรับอย่างอื่นอีกนิดหน่อย ก็พอจะออกมาใช้ได้
      เหมือนน่าจะสร้าง CSS class สักไม่กี่ตัวที่ครอบคลุมเรื่องทั้งหมดนี้ได้ แต่ยังหาวิธีที่ใช้ได้กับทุกกรณีไม่ได้
    • ใน Chrome CSS inspector ถ้ากดไอคอนข้างกฎ display: flex จะเห็นพร็อพเพอร์ตี Flexbox หลายอย่างถูก แสดงเป็นไอคอนให้เห็นภาพ และคลิกเพื่อตั้งค่าได้ทันที
      แทบจะทำให้ทุกหน้าเว็บกลายเป็นสนามทดลองได้เลย
    • น่าประทับใจที่ Tailwind ทำให้เรื่องนี้ยิ่งสับสนขึ้นไปอีก
      justify-content: center คือ justify-center ส่วน align-items: center คือ items-center ไม่รู้ว่าทำไมถึงทำแบบนี้
    • justify-content ควรถูกเรียกว่า main-axis และ align-items ควรถูกเรียกว่า cross-axis
      ถ้าเข้าใจตรงนี้ Flexbox ทั้งหมดก็จะง่ายขึ้น
  • ถึงจะมีคนพูดถึงกันเยอะแล้ว แต่ขอแนะนำ Flexbox Froggy https://flexboxfroggy.com/ และคนอื่น ๆ ก็เรียนรู้ได้เร็วเช่นกัน
    ถ้าจะเรียน CSS Grid, https://cssgridgarden.com/ ก็เยี่ยมเหมือนกัน

    • ชอบการทำให้เป็น เกม ของ cssgridgarden
      คล้ายกับ https://www.codemonkey.com/ ที่ค่อนข้างเหมาะกับเด็ก ๆ
    • มีไซต์ Flexbox ที่บุ๊กมาร์กไว้ซึ่งคล้ายกับของ OP มาก คือ https://flexbox.tech/
      เวลาสร้างโค้ด Bootstrap, https://build.layoutit.com/ มีประโยชน์ และสำหรับ CSS Grid ก็มี https://grid.layoutit.com/ แต่เสียดายที่ตัวแรกซัพพอร์ตถึงแค่ Bootstrap 4 ไม่ใช่ Bootstrap 5
    • เคยลองใช้ flexboxfroggy แล้ว แนวคิดดีและทำออกมาได้ดี แต่ ไม่มี autocomplete สำหรับไวยากรณ์ ซึ่งค่อนข้างกวนใจ
  • ขอแนะนำไกด์ของ Josh อย่างยิ่ง https://www.joshwcomeau.com/css/interactive-guide-to-flexbox/
    อธิบายกับดักและเคล็ดลับขั้นสูงอย่าง flex-basis, margin อัตโนมัติ, min-width ไว้อย่างละเอียด

    • เป็นหนึ่งในบทความที่ดีที่สุดเท่าที่เคยอ่านมา
      คิดว่าตัวเองรู้จัก Flexbox และ คอมโพเนนต์ของ Tailwind CSS ค่อนข้างดีแล้ว แต่บทความนี้ช่วยตอบโจทย์ความอยากเข้าใจพื้นฐานเชิงทฤษฎีได้ดีมาก
  • เป็น playground ที่ดี
    เมื่อหลายปีก่อนเคยทำไกด์แบบ interactive ที่ใส่ playground คล้าย ๆ กันไว้ช่วงท้าย: https://lik.ai/guides/an-interactive-guide-to-flexbox/
    มีประโยชน์เวลาต้องรื้อฟื้นความจำเป็นครั้งคราว

  • ตอนนี้ก็ปี 2025 แล้ว ผ่านมา 2 ปีและ tutorial อีก 3 อัน แต่ก็ยังใช้ Flexbox ได้ไม่คล่องอยู่ดี
    https://flexboxfroggy.com/ ก็ไม่ได้ช่วยอะไรมาก

    • หลังใช้ Flexbox มาหลายปี ก็รู้ว่า Flexbox คล้ายกับการเสียบ USB-A
      justify กับ align มักจะสลับกันเสมอในการลองครั้งแรก
    • ไม่รู้ว่าทำไมมันถึงจำยากขนาดนี้
      เรื่องสารพัดอย่างรวมถึงเลย์เอาต์แบบ CSS float ยังจำได้เป็นปี ๆ แต่ถ้าไม่ได้ใช้ Flexbox ไม่กี่เดือน ก็ลืมไป 80% แล้วต้องกลับไปอ่านใหม่ตั้งแต่ต้นและเสียเวลาใน playground อีก
      ปัญหาคือชื่อพร็อพเพอร์ตีมีมากเกินไป และหลายชื่อไม่เป็นธรรมชาติ หรือรู้สึกเหมือนตั้งชื่อผิดไปเลย ต่อให้ตั้งเป็นชื่อสัญลักษณ์สั้น ๆ หนึ่งหรือสองตัวอักษรก็คงพอ ๆ กัน
    • รู้จัก flexboxfroggy อยู่แล้ว แต่ชอบเรียนแบบ “เล่นไปด้วย” มากกว่าอ่านและเขียน ดังนั้นไซต์นั้นจึงไม่ค่อยมีประโยชน์
      หวังว่าเครื่องมือนี้จะช่วยได้ และถ้ามีอะไรที่ขาดไปก็อยากให้บอก
  • ทำไมถึงตั้งชื่อพร็อพเพอร์ตีนี้ว่า justify-content, align-items กันนะ
    main-axis-arrangement กับ cross-axis-alignment น่าจะสมเหตุสมผลกว่าไม่ใช่หรือ

    • คงมีคำอธิบายอยู่แหละ แต่โดยรวมแล้วพร็อพเพอร์ตีของ CSS มีหลายอย่างที่ชวนสับสนและไม่ค่อยเป็นธรรมชาติ
      อย่าง color, text-align, position: absolute กับ position: fixed ก็เช่นกัน และ absolute เองในเชิงเทคนิคก็ยังเป็นแบบสัมพันธ์อยู่ดี
    • ถ้ามองในแง่การอภิปราย ชื่อนี้ ใช้ได้ทั้งกับ Grid และ Flexbox และยังสอดคล้องกับธรรมเนียมของ justify-items, justify-self จึงมีความสม่ำเสมออยู่
      แต่ก็ยังสับสนกับ align-content อยู่ดี
    • รูปย่อ grid-template ที่ เขียนแกน y ก่อน ก็ชวนสับสน: y1 / x1 / y2 / x2
      แถมยังไม่ได้เริ่มจาก 0 อีก เลยลืมทุกที
    • ไม่รู้ว่าเป็นเพราะ Google มัวแต่ทุ่มเทให้ LLM เล่าสปอยล์ Encanto 2 จนความสามารถในการค้นหาถดถอยไปแล้ว หรือว่าการแปลกใจที่ยังไม่มีปลั๊กอิน Tailwind แบบนี้นั้นสมเหตุสมผลแล้วกันแน่
      ปลั๊กอิน alias สำหรับ Tailwind ที่แมป cross-axis-center ไปเป็น align-items: center และ main-axis-between ไปเป็น justify-content: space-between อะไรแบบนี้ น่าจะทำได้เร็วมาก
    • ผมใช้วิธีจำว่า “การ justify ข้อความในภาษาของผมคือแนวนอน” เลยไม่สับสน
      แน่นอนว่ามันเปลี่ยนได้ แต่พฤติกรรมเริ่มต้นของ Flexbox ใช้วิธีจำนี้ครอบคลุมได้
  • ตอนเรียน Flexbox ผมทำชีตสรุปไว้เพื่อเปิดดูพร็อพเพอร์ตี
    น่าจะเป็นประโยชน์กับคนอื่นด้วย: https://darekkay.com/flexbox-cheatsheet/

    • ชอบตรงที่เห็นผลได้ทันทีแม้ยังไม่ได้เลือก และมี ลิงก์ MDN แนบไว้ด้วย
  • ถ้าเป็นชีตสรุปแบบภาพสำหรับดูเร็ว ๆ ก็ถือว่าดี แต่สุดท้ายผมคิดว่าต้องลองใช้ตามจุดต่าง ๆ ในโปรเจกต์จริง ถึงจะจำขึ้นมือ
    ไวยากรณ์ส่วนใหญ่ค่อนข้างอธิบายตัวเองได้ ยกเว้น row กับ column
    ผมไม่เคยติดขัดกับ Flexbox หรือ Grid ส่วนใหญ่มากนัก แต่เห็นได้ว่าหลายคนสับสนกันเยอะ การเข้าใจ box model และใช้ เครื่องมือนักพัฒนาของ Firefox ช่วยได้มากตอนเรียนรู้โมเดล Flexbox มันแสดงภาพคอนเทนเนอร์ได้ค่อนข้างดี และตอนนี้เครื่องมือนักพัฒนาของ Chrome ก็ดูเหมือนจะทำได้คล้ายกันแล้ว
    flexboxfroggy กับ cssgridgarden ก็มีประโยชน์สำหรับฝึกเหมือนกัน ถึงอย่างนั้นเวลาจะดูไวยากรณ์ ผมก็ยังเปิดชีตสรุปของ CSS-Tricks ทุกครั้ง และไม่มีทางเดาถูกตั้งแต่ครั้งแรกว่าเป็น row หรือ column

    • Chrome/Edge มีฟีเจอร์ดี ๆ ที่ดูเหมือน Firefox จะไม่มี
      สามารถสลับ โหมด Flex ได้อย่างรวดเร็ว https://imgur.com/a/17iy1eN
  • เครื่องมือนี้ดูจำกัดเกินไป เพราะครอบคลุมแค่พร็อพเพอร์ตีของคอนเทนเนอร์ 4 รายการ
    พร็อพเพอร์ตีของรายการลูก ซึ่งค่อนข้างสำคัญใน Flexbox ถูกละไว้ทั้งหมด

  • ถ้ามีชุดโจทย์ที่น่าสนใจสำหรับฝึกเลย์เอาต์ CSS ก็คงดี
    อยากให้มีคำเฉลยและคำอธิบายที่เขียนดี ๆ รวมถึง โจทย์ดีบัก แบบ “ทำไมโค้ดชิ้นนี้ถึงสร้างเลย์เอาต์ที่ต้องการไม่ได้” ด้วย
    ChatGPT ช่วยได้ค่อนข้างมากในการดีบักปัญหา CSS แม้จะไม่ได้ถูกเสมอไป แต่โดยรวมช่วยชี้ทิศทางที่ถูกต้องได้ ถึงอย่างนั้นผมก็ยังอยากเข้าใจให้ลึกขึ้นว่า CSS ทำงานจริง ๆ อย่างไร ผมอ่านหนังสือกับบทเรียนมาบ้าง และเข้าใจว่าท้ายที่สุดมันคือชุดของกฎ แต่การนำไปใช้อย่างแม่นยำยังยากอยู่

    • ผมก็ใช้ Claude คล้าย ๆ กัน
      มักจะถามให้ช่วยแก้ CSS แล้วเขียนใหม่ให้ได้หน้าตาตามที่ต้องการ ซึ่งเร็วกว่าการคุ้ยเอกสารมาก