Back to notes
foundations-design
Featured

Modern CSS Architecture: วางโครงสร้างสไตล์ให้โปรเจกต์ระดับล้านบรรทัด

CSS ไม่ใช่แค่เรื่องความสวยงาม แต่คือเรื่องของ Scalability เจาะลึกแนวคิด BEM, Utility-First, และ CSS-in-JS เพื่อการจัดการโปรเจกต์ขนาดใหญ่

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: วันที่ "แก้จุดนี้ พังทั้งเว็บ" (Global CSS Conflict)

ลองดูการเขียน CSS แบบจูเนียร์ที่เน้นสวยไวๆ:

HLJS CSS
/* ❌ Naive Approach: ใช้ Selectors ที่กว้างเกินไป */
.title {
  color: blue;
  font-size: 24px;
}

button {
  background-color: red; /* 🌋 พัง! ปุ่มทั้งเว็บจะกลายเป็นสีแดง แม้แต่ปุ่มใน Modal ที่ควรจะเป็นสีเขียว */
}

ปัญหา: เมื่อโปรเจกต์มี 100 หน้า การใช้ชื่อคลาสสั้นๆ อย่าง .title หรือการแต่งสไตล์ที่ Tag โดยตรงจะทำให้เกิด "CSS Collision". คุณจะเริ่มใช้ !important เพื่อแก้ทางกันไปมา จนสุดท้ายโค้ดจะกลายเป็นเส้นสปาเก็ตตี้ที่ไม่มีใครกล้าแตะ เพราะกลัวว่าแก้บรรทัดเดียวแล้วหน้าเว็บอื่นจะเละครับ


💡 2. Real-Life Analogy: การตั้งชื่อลูก vs การจัดการคลังสินค้า

  • Global CSS: เหมือนคุณอยู่ในหมู่บ้านที่ทุกคนชื่อ "แดง" (Class: .title). เวลาคุณตะโกนเรียก "แดง!" ทุกคนจะหันมาหมด (Style เปลี่ยนทั้งเว็บ)
  • BEM (Block Element Modifier): เหมือนระบบ "ระบุที่อยู่". แทนที่จะเรียก "แดง", คุณเรียก "แดงบ้านเลขที่10ห้องนอน" (Name: .card__title--active). ชัดเจน แม่นยำ และไม่กวนคนอื่น
  • Tailwind (Utility-First): เหมือนการใช้ "สติกเกอร์สำเร็จรูป". คุณไม่ต้องสั่งทำป้ายชื่อใหม่ทุกครั้ง คุณแค่เอาสติกเกอร์ "สีแดง", "ตัวหนา", "ขอบมน" มาแปะรวมกันตามใจชอบ (Class: bg-red-500 font-bold rounded)
  • CSS-in-JS: เหมือนการ "แถมคู่มือประกอบมาในกล่อง". ของแต่ละชิ้น (Component) มีสไตล์ส่วนตัวติดมาด้วย ไม่ไปปนกับของคนอื่นในโกดัง (Scoped Style)

🚀 3. Execution Journey: เส้นทางของ Cascading

เมื่อ Browser อ่าน CSS นี่คือสิ่งที่เกิดขึ้นเบื้องหลัง:

🛠 Step-by-step:

  1. Loading: Browser อ่านไฟล์ CSS ทั้งหมด (หรือ CSS ใน JS)
  2. Specificty Calculation: คำนวณว่า Selector ไหน "แรง" กว่ากัน (ID > Class > Tag)
  3. Inheritance: ค่าบางอย่าง (เช่น Font) จะไหลจากพ่อไปสู่ลูก
  4. Layout/Paint: Browser คำนวณตำแหน่งและระบายสีลงบนจอ
HLJS TSX
// ✅ Best Practice: ใช้ CSS Variables เพื่อคุม Design System ให้คงที่
:root {
  --primary-color: #3b82f6;
}

.button {
  background-color: var(--primary-color); /* 🛠 แก้ที่เดียว เปลี่ยนทั้งโปรเจกต์ */
}

🪤 4. The Junior Trap: ความหายนะของ !important

จูเนียร์มักจะใช้ !important เป็นทางออกสุดท้ายเมื่อ Override สไตล์ไม่ได้:

HLJS CSS
/* ❌ Junior Trap: สาด !important เพื่อแก้ปัญหาเฉพาะหน้า */
.header .nav .link {
  color: white !important; /* 🌋 ทางตันรอนะครับ! ครั้งหน้าถ้าอยากแก้เพิ่ม คุณต้องสาด !important ทับอีกเรื่อยๆ */
}

ระวัง: การใช้ !important คือการทำลายกลไกธรรมขาติของ CSS (Specificity) และสร้าง "หนี้ทางเทคนิค" ที่จ่ายคืนยากมหาศาล ✅ การแก้ไข: ปรับปรุงชื่อคลาส (BEM) หรือใช้ CSS Modules เพื่อจำกัดขอบเขตสไตล์ (Scope)


⚖️ 5. The Why Matrix: เลือกท่าไหนให้ทีมแฮปปี้?

เทคนิคความเร็วในงาน Devความง่ายในการดูแล (Scale)เหมาะกับสถานการณ์
BEM🐢 ช้า (ต้องคิดชื่อคลาส)⚡⚡⚡ สูงมากโปรเจกต์ที่เน้นมาตรฐานเข้มงวด
Tailwind🚀 เร็วแสง⚡⚡ สูง (ไม่มี Dead CSS)ทีมที่ต้องการความไวและ Design System แน่น
CSS-in-JS🙂 ปานกลาง⚡⚡⚡ สูง (Scoped 100%)แอปพลิเคชันที่มี Logic ของ UI ซับซ้อน
Plain CSS🙂 ปานกลาง🐢 ต่ำ (เสี่ยงชื่อซ้ำ)โปรเจกต์ขนาดเล็กมาก

🎓 6. Senior Mindset Summary

การเป็น Senior คือการมอง CSS เป็น "โครงสร้างสถาปัตยกรรม" ไม่ใช่แค่สีสัน เป้าหมายของเราคือการทำให้ดีไซน์เนอร์แฮปปี้ ในขณะที่ Developer คนอื่นสามารถลบหรือย้าย Component ได้โดยไม่มีสไตล์แปลกปลอมหลงเหลืออยู่ครับ!

Share this note

Related notes

View all notes
foundations-design
Basic

Web Interface Mastery: ออกแบบ UI อย่างไรให้ดู 'แพง' และเป็นมือโปร

ความพรีเมียมไม่ได้มาจากแค่สี แต่มาจาก 'Attention to Detail' เจาะลึกกฎเหล็กการออกแบบ Interface ที่ใช้งานลื่นไหลและดูแพงแบบ Senior Developer

January 30, 20262 min read
foundations-design
Basic

Digital Accessibility Mastery: ทำเว็บให้คนทุกคนเข้าถึงได้แบบ Senior

Accessibility ไม่ใช่แค่เรื่องคนตาบอด! เจาะลึกการสร้าง UX ที่ดีสำหรับทุกคน ผ่าน Semantic HTML, Focus Management และ ARIA ที่ถูกต้อง

January 30, 20262 min read
mastery-frontend-react
Advanced

Scalable React Architecture: จัดโครงสร้าง Folder ยังไงไม่ให้โปรเจกต์ระเบิด

เลิกกองทุุกอย่างไว้ที่ components/! เจาะลึกโครงสร้างแบบ Feature-based, เทคนิค Colocation และการออกแบบระบบให้พร้อมเติบโตได้เป็นเวลา 10 ปีโดยไม่เป็นภาระของลูกหลาน

January 30, 20262 min read

© 2026 My Notes by Seereen