- ไลบรารีคอมโพเนนต์ UI น้ำหนักเบามากที่สร้างบน HTML และ CSS โดยมีโครงสร้างที่ไม่มีขั้นตอน build หรือการพึ่งพาเฟรมเวิร์กใด ๆ เลย
- ประกอบด้วยเพียง CSS 6KB และ JS 2.2KB (หลังบีบอัดและ gzip) ทำให้สามารถใช้องค์ประกอบ UI หลักที่จำเป็นสำหรับเว็บแอปพลิเคชันได้ทันที
- จัดสไตล์ให้ semantic HTML elements โดยตรง เช่น
<button>, <input>, <dialog> และลดการใช้คลาสให้น้อยที่สุดเพื่อลดความรกของโค้ด
- รองรับ การเข้าถึง (Accessibility) โดยคำนึงถึง ARIA roles และ keyboard navigation เป็นค่าเริ่มต้น
- มุ่งเป้าไปที่ การประกอบ UI ที่เรียบง่าย อิงมาตรฐาน และใช้งานได้ระยะยาว โดยหลีกออกจาก dependency ของระบบนิเวศ JS ที่ซับซ้อนและการออกแบบเกินความจำเป็น
ภาพรวมของ Oat
- Oat เป็น ไลบรารีคอมโพเนนต์ UI แบบ semantic ที่เบามากบนพื้นฐาน HTML + CSS ในรูปแบบที่ไม่มี dependency ภายนอกเลย
- ไม่ต้องใช้เฟรมเวิร์ก เครื่องมือ build หรือการตั้งค่าสภาพแวดล้อมพัฒนา
- เพียงใส่ไฟล์ CSS และ JS ขนาดเล็กก็ใช้งานได้ทันที
- มีขนาดประมาณ 8KB (6KB CSS + 2.2KB JS) ช่วยให้สามารถประกอบ UI พื้นฐานของเว็บแอปพลิเคชันได้อย่างรวดเร็ว
- คอมโพเนนต์หลักประกอบด้วย Button, Card, Dialog, Table, Tabs, Tooltip, Toast, Sidebar เป็นต้น
Semantic HTML และการเข้าถึง
- สไตล์จะถูกนำไปใช้โดยอัตโนมัติตาม semantic tags และ attributes ทำให้คงดีไซน์ที่สม่ำเสมอได้แม้ไม่ต้องระบุคลาส
- ตัวอย่าง: ใช้สไตล์กับองค์ประกอบ HTML พื้นฐานอย่าง
<button>, <input>, <dialog> โดยตรง
- รับรู้ semantic attributes อย่าง
role="button" ได้โดยอัตโนมัติด้วย
- รองรับ ARIA roles และ keyboard navigation ในทุกองค์ประกอบ
- ช่วยยกระดับประสบการณ์ผู้ใช้ด้วยการบังคับใช้มาตรฐานด้านการเข้าถึง
Zero dependency และความเรียบง่าย
- ไม่มี dependency ต่อเฟรมเวิร์กหรือลไลบรารี JS หรือ CSS
- ตัดปัญหาความซับซ้อนของระบบนิเวศ Node.js และปัญหา dependency ที่ไม่จำเป็นออกไปทั้งหมด
- ใช้งานได้ทันทีโดยไม่ต้องมีขั้นตอน build หรือจัดการแพ็กเกจ
- คอมโพเนนต์แบบไดนามิกบางส่วนถูกสร้างด้วย WebComponents จึงใช้ JS เพียงเล็กน้อย
การปรับแต่งและธีม
- สามารถปรับสีธีมและสไตล์ได้ง่ายผ่าน ตัวแปร CSS
- หากเพิ่มแอตทริบิวต์
data-theme="dark" ลงใน body ระบบจะใช้ธีมมืดโดยอัตโนมัติ
- งานออกแบบโดยรวมได้รับอิทธิพลจาก สุนทรียะแบบ shadcn
ที่มาของการสร้าง
- เริ่มต้นจากความไม่พอใจต่อ ความซับซ้อนเกินไปและปัญหา dependency ของ JavaScript UI frameworks เดิม
- มีจุดประสงค์เพื่อหลีกเลี่ยงปัญหา “dependency hell” และ “lock-in” ในระบบนิเวศ Node.js
- ถูกสร้างขึ้นเพื่อให้สามารถใช้งาน ไลบรารี UI ที่ดูแลรักษาได้ในระยะยาว ซึ่งเรียบง่ายและอิงมาตรฐาน ได้ด้วยตนเอง
- นักพัฒนาสามารถใช้ Oat เพื่อสร้าง ชุด UI ที่พร้อมใช้งานได้ทันทีโดยไม่ต้องผ่านขั้นตอน build ที่ไม่จำเป็น
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉันคิดว่าความพยายามที่จะทำให้เว็บแอปให้ผลลัพธ์ที่ถูกต้องโดยใช้แค่ semantic HTML elements นั้นเจ๋งมาก
ฉันก็ชอบที่มันมุ่งไปสู่แนวคิด “classless CSS” ด้วย แต่พอไปดู component catalog แล้วกลับเห็นทั้ง semantic elements, basic elements, data tags, aria attributes และ CSS classes ปะปนกันอยู่ เลยดูไม่ค่อยสม่ำเสมอเท่าไร
ถึงอย่างนั้น การที่ CSS ตอบสนองและจัดสไตล์ตาม aria attributes ก็ยังน่าประทับใจ น่าจะเป็นแบบฝึกที่ดีในการฝึกคิดแบบ aria-first approach แทนที่จะพึ่ง component libraries หนัก ๆ อย่าง React
โดยเฉพาะอย่างยิ่ง ฉันชอบที่ component library นี้มี native sidebar รวมอยู่ด้วย ไลบรารีส่วนใหญ่จะเน้นแต่คอมโพเนนต์เล็ก ๆ ที่นำกลับมาใช้ซ้ำได้ แต่ตัวนี้วางข้าง
mainอย่างเป็นธรรมชาติด้วยโครงสร้าง aside > nav > ul เลยดูสะอาดดีฉันตกใจกับเว็บนี้มาก แตะลิงก์ปุ๊บหน้าก็ โหลดทันที จนรู้สึกเร็วแบบสะบัดแส้
ฉันลืมความเร็วแบบนี้ของอินเทอร์เน็ตไปแล้ว ตอนนี้เลยอยากลองทำเว็บดูอีกครั้ง
โปรเจกต์นี้ให้ความรู้สึกเหมือนสิ่งที่ฉันเคยหวังจาก DaisyUI แต่มีคนทำความเรียบง่ายนั้นออกมาจริง ๆ
ถ้าเอาไปจับคู่กับ Datastar ก็น่าจะกลายเป็นชุดผสมที่ทรงพลังบนพื้นฐานของ web standards เป็นแนวทางที่พึ่งพาเทคโนโลยีเว็บจริง ๆ มากกว่า “ecosystem”
fosiao/rclone-webui-oat ดูเหมือนจะ
เข้ามาแทน rclone-webui-react เดิมที่ทั้งหนักและไม่ได้รับการดูแลรักษาแล้ว
บทความบล็อกที่ลิงก์ไว้หน้าแรกน่าจะชวนให้เกิดการถกเถียงที่น่าสนใจกว่าตัว framework เองเสียอีก
ในงานฉันต้องใช้ทั้ง Angular และ Next.js และยิ่งนานก็ยิ่งเห็นด้วยกับมุมมองของบทความนี้
บทความที่เกี่ยวข้อง: JavaScript ecosystem is a hot mess
ตอนนั้นมีการคุยกันไว้ที่: HN thread
<aside>ไม่ได้เป็น semantic element ที่เหมาะกับ sidebar เสมอไปเดิมทีมันมีไว้สำหรับเนื้อหาที่เกี่ยวข้องกับเนื้อหาหลักแบบทางอ้อม บางครั้ง sidebar ก็เข้ากับคำนิยามนี้ แต่ก็ไม่ใช่ทุกครั้ง
มี semantic drop-in CSS library แบบนี้อยู่เยอะมาก การได้เห็นโปรเจกต์ใหม่ ๆ ก็สนุกดี
คุณภาพนั้นต่างกันไป แต่เว็บไซต์นี้รวบรวม drop-in stylesheets สำหรับ semantic HTML ไว้มากกว่า 50 แบบ
ลิงก์: รวม Drop-in Minimal CSS
โปรเจกต์นี้ทำให้ฉันนึกถึง Bootstrap เวอร์ชันแรก ๆ เมื่อ 10 ปีก่อน
ถึง Bootstrap ตอนนี้จะ ใหญ่เทอะทะขึ้นมาก แต่ยังให้ความรู้สึกเรียบง่ายแบบในยุคนั้น
ดูเพิ่ม: เว็บไซต์ทางการของ Bootstrap
ขอบคุณที่ยังทดสอบกับเบราว์เซอร์รุ่นเก่าด้วย เป็น ไลบรารีที่มินิมอลสุด ๆ จริง ๆ
ภาพหน้าจอ: ภาพ1, ภาพ2
ฉันเองก็เคยลองทำอะไรคล้าย ๆ กันในแอป และพบว่า semantic/functional tags บางตัวก็ยังไม่ได้รับการรองรับที่ดีจากเบราว์เซอร์
ตัวอย่างเช่น ใน Safari ถ้าใช้
showModalของแท็ก dialog มันจะคำนวณ layout ใหม่ทั้งหน้า ทำให้ ช้ากว่า Chromium 59 เท่าถึงอย่างนั้น ฉันก็ยังชอบแนวทางแบบนี้อยู่ดี