การดู : 0

12/04/2026 18:15น.

EP 4: Flexbox และ Grid ใน Tailwind: สร้าง Layout ระดับโปรได้ภายใน 10 นาที

EP 4: Flexbox และ Grid ใน Tailwind: สร้าง Layout ระดับโปรได้ภายใน 10 นาที

#Flexbox Tailwind

#CSS Grid Tailwind

#Layout Tailwind CSS

#CSS Layout Patterns

ถ้าคุณเคยปวดหัวกับการสร้าง Layout แล้วล่ะก็ คุณไม่ได้เป็นคนเดียว! การจัดวางองค์ประกอบในหน้าเว็บดูเหมือนง่าย แต่เวลาทำจริงๆ กลับยากและซับซ้อนกว่าที่คิด

"ทำไม Layout ถึงพังบนมือถือ?" "ทำไมของถึงไม่อยู่กึ่งกลาง?" "ทำไมขนาดไม่เท่ากัน?" - เสียงร้องเรียนที่นักพัฒนาเว็บทุกคนเคยพบเจอ

แต่วันนี้จะเป็นวันสุดท้ายที่คุณจะมีปัญหาเหล่านี้! เพราะเราจะมาเรียนรู้ Flexbox และ CSS Grid ใน Tailwind CSS อย่างเป็นระบบ ตั้งแต่พื้นฐานสุดที่มือใหม่ต้องรู้ ไปจนถึงเทคนิคขั้นสูงที่จะทำให้คุณสร้าง Layout ระดับมืออาชีพได้อย่างง่ายดาย

พร้อมแล้วเหรอ? มาเริ่มต้นการเดินทางสู่การเป็นมาสเตอร์ Layout กันเลย!

 

พื้นฐานที่ต้องรู้: ความแตกต่างระหว่าง Flexbox และ Grid

ก่อนที่เราจะลงลึกถึงเทคนิคต่างๆ เรามาเข้าใจพื้นฐานสำคัญกันก่อน

Flexbox คือ Layout แบบ 1 มิติ

Flexbox เหมาะสำหรับการจัดเรียงองค์ประกอบในแนว หนึ่งทิศทาง - ไม่ว่าจะเป็นแนวนอนหรือแนวตั้ง

<!-- Flexbox: จัดเรียงแนวนอน -->
<div class="flex space-x-4">
  <div class="bg-blue-500 text-white p-4">Item 1</div>
  <div class="bg-green-500 text-white p-4">Item 2</div>
  <div class="bg-red-500 text-white p-4">Item 3</div>
</div>

<!-- Flexbox: จัดเรียงแนวตั้ง -->
<div class="flex flex-col space-y-4">
  <div class="bg-blue-500 text-white p-4">Item 1</div>
  <div class="bg-green-500 text-white p-4">Item 2</div>
  <div class="bg-red-500 text-white p-4">Item 3</div>
</div>

CSS Grid คือ Layout แบบ 2 มิติ

CSS Grid เหมาะสำหรับการสร้าง Layout ที่ซับซ้อน ที่ต้องการควบคุม ทั้งแนวนอนและแนวตั้ง พร้อมกัน

<!-- Grid: สร้าง Layout 2 มิติ -->
<div class="grid grid-cols-3 gap-4">
  <div class="bg-blue-500 text-white p-4">1</div>
  <div class="bg-green-500 text-white p-4">2</div>
  <div class="bg-red-500 text-white p-4">3</div>
  <div class="bg-purple-500 text-white p-4">4</div>
  <div class="bg-pink-500 text-white p-4">5</div>
  <div class="bg-indigo-500 text-white p-4">6</div>
</div>

เลือกใช้อย่างไรให้ถูก?

สถานการณ์ใช้ Flexboxใช้ Grid
Navigation Menu✅ เหมาะมาก❌ ซับซ้อนเกินไป
Button Groups✅ เหมาะมาก❌ ซับซ้อนเกินไป
Card Layouts❌ จำกัด✅ เหมาะมาก
Full Page Layout❌ ยุ่งยาก✅ เหมาะมาก
Form Controls✅ เหมาะมาก❌ ซับซ้อนเกินไป

 

ส่วนที่ 1: Flexbox - เชี่ยวชาญใน 5 ขั้นตอน

ขั้นตอนที่ 1: เข้าใจ Flex Container และ Flex Items

<!-- สร้าง Flex Container -->
<div class="flex bg-gray-100 p-4">
  <!-- Flex Items -->
  <div class="bg-blue-500 text-white p-4">Flex Item 1</div>
  <div class="bg-green-500 text-white p-4">Flex Item 2</div>
  <div class="bg-red-500 text-white p-4">Flex Item 3</div>
</div>

หลักการพื้นฐาน:

  • ใส่ flex ใน parent element = เปลี่ยนเป็น Flex Container
  • child elements จะกลายเป็น Flex Items โดยอัตโนมัติ
  • Flex Items จะเรียงกันในแนวนอน (default)

ขั้นตอนที่ 2: ควบคุมทิศทางด้วย Flex Direction

<div class="space-y-8">
  <!-- แนวนอน (default) -->
  <div class="flex space-x-4 bg-gray-100 p-4">
    <div class="bg-blue-500 text-white p-4">1</div>
    <div class="bg-green-500 text-white p-4">2</div>
    <div class="bg-red-500 text-white p-4">3</div>
  </div>
  
  <!-- แนวตั้ง -->
  <div class="flex flex-col space-y-4 bg-gray-100 p-4">
    <div class="bg-blue-500 text-white p-4">1</div>
    <div class="bg-green-500 text-white p-4">2</div>
    <div class="bg-red-500 text-white p-4">3</div>
  </div>
  
  <!-- แนวนอนกลับด้าน -->
  <div class="flex flex-row-reverse space-x-reverse space-x-4 bg-gray-100 p-4">
    <div class="bg-blue-500 text-white p-4">1</div>
    <div class="bg-green-500 text-white p-4">2</div>
    <div class="bg-red-500 text-white p-4">3</div>
  </div>
</div>

ขั้นตอนที่ 3: จัดตำแหน่งแนวนอนด้วย Justify Content

<div class="space-y-6">
  <!-- justify-start: ชิดซ้าย -->
  <div class="flex justify-start bg-gray-100 p-4">
    <div class="bg-blue-500 text-white px-4 py-2">Start</div>
  </div>
  
  <!-- justify-center: กึ่งกลาง -->
  <div class="flex justify-center bg-gray-100 p-4">
    <div class="bg-green-500 text-white px-4 py-2">Center</div>
  </div>
  
  <!-- justify-end: ชิดขวา -->
  <div class="flex justify-end bg-gray-100 p-4">
    <div class="bg-red-500 text-white px-4 py-2">End</div>
  </div>
  
  <!-- justify-between: กระจายห่าง -->
  <div class="flex justify-between bg-gray-100 p-4">
    <div class="bg-purple-500 text-white px-4 py-2">Left</div>
    <div class="bg-purple-500 text-white px-4 py-2">Right</div>
  </div>
  
  <!-- justify-around: กระจายรอบ -->
  <div class="flex justify-around bg-gray-100 p-4">
    <div class="bg-indigo-500 text-white px-4 py-2">1</div>
    <div class="bg-indigo-500 text-white px-4 py-2">2</div>
    <div class="bg-indigo-500 text-white px-4 py-2">3</div>
  </div>
  
  <!-- justify-evenly: กระจายเท่ากัน -->
  <div class="flex justify-evenly bg-gray-100 p-4">
    <div class="bg-pink-500 text-white px-4 py-2">1</div>
    <div class="bg-pink-500 text-white px-4 py-2">2</div>
    <div class="bg-pink-500 text-white px-4 py-2">3</div>
  </div>
</div>

ขั้นตอนที่ 4: จัดตำแหน่งแนวตั้งด้วย Align Items

<div class="space-y-6">
  <!-- items-start: ชิดบน -->
  <div class="flex items-start bg-gray-100 p-4 h-32">
    <div class="bg-blue-500 text-white px-4 py-2">Start</div>
    <div class="bg-blue-600 text-white px-4 py-8">Tall Item</div>
  </div>
  
  <!-- items-center: กึ่งกลางแนวตั้ง -->
  <div class="flex items-center bg-gray-100 p-4 h-32">
    <div class="bg-green-500 text-white px-4 py-2">Center</div>
    <div class="bg-green-600 text-white px-4 py-8">Tall Item</div>
  </div>
  
  <!-- items-end: ชิดล่าง -->
  <div class="flex items-end bg-gray-100 p-4 h-32">
    <div class="bg-red-500 text-white px-4 py-2">End</div>
    <div class="bg-red-600 text-white px-4 py-8">Tall Item</div>
  </div>
  
  <!-- items-stretch: ยืดเต็มความสูง -->
  <div class="flex items-stretch bg-gray-100 p-4 h-32">
    <div class="bg-purple-500 text-white px-4 py-2">Stretch</div>
    <div class="bg-purple-600 text-white px-4 py-2">Me Too</div>
  </div>
</div>

ขั้นตอนที่ 5: ควบคุมขนาดด้วย Flex Properties

<div class="space-y-6">
  <!-- flex-1: แบ่งพื้นที่เท่าๆ กัน -->
  <div class="flex space-x-4 bg-gray-100 p-4">
    <div class="flex-1 bg-blue-500 text-white p-4 text-center">Equal 1</div>
    <div class="flex-1 bg-green-500 text-white p-4 text-center">Equal 2</div>
    <div class="flex-1 bg-red-500 text-white p-4 text-center">Equal 3</div>
  </div>
  
  <!-- flex-none: ขนาดคงที่ -->
  <div class="flex space-x-4 bg-gray-100 p-4">
    <div class="flex-none w-32 bg-purple-500 text-white p-4 text-center">Fixed</div>
    <div class="flex-1 bg-pink-500 text-white p-4 text-center">Flexible</div>
    <div class="flex-none w-24 bg-indigo-500 text-white p-4 text-center">Fixed</div>
  </div>
  
  <!-- การผสมผสาน -->
  <div class="flex space-x-4 bg-gray-100 p-4">
    <div class="flex-none w-20 bg-gray-500 text-white p-4 text-center text-xs">Menu</div>
    <div class="flex-1 bg-blue-500 text-white p-4 text-center">Main Content</div>
    <div class="flex-none w-32 bg-gray-600 text-white p-4 text-center text-xs">Sidebar</div>
  </div>
</div>

เทคนิคพิเศษ: Perfect Center ด้วย Flexbox

<!-- วิธีง่ายที่สุดในการจัดกึ่งกลาง -->
<div class="flex items-center justify-center min-h-screen bg-blue-50">
  <div class="bg-white p-8 rounded-lg shadow-lg max-w-md">
    <h2 class="text-2xl font-bold text-center mb-4">Perfect Center!</h2>
    <p class="text-gray-600 text-center">
      การจัดกึ่งกลางที่ง่ายที่สุดด้วย Flexbox
    </p>
    <button class="w-full mt-4 bg-blue-500 text-white py-2 rounded hover:bg-blue-600 transition-colors">
      Click Me
    </button>
  </div>
</div>

 

ส่วนที่ 2: CSS Grid - สร้าง Layout ขั้นสูงอย่างมืออาชีพ

เริ่มต้นด้วย Grid พื้นฐาน

<!-- Grid 3 คอลัมน์พื้นฐาน -->
<div class="grid grid-cols-3 gap-4 bg-gray-100 p-4">
  <div class="bg-blue-500 text-white p-4 text-center">1</div>
  <div class="bg-green-500 text-white p-4 text-center">2</div>
  <div class="bg-red-500 text-white p-4 text-center">3</div>
  <div class="bg-purple-500 text-white p-4 text-center">4</div>
  <div class="bg-pink-500 text-white p-4 text-center">5</div>
  <div class="bg-indigo-500 text-white p-4 text-center">6</div>
</div>

ระบบ Grid Columns ใน Tailwind

<div class="space-y-8">
  <!-- 1 คอลัมน์ -->
  <div class="grid grid-cols-1 gap-4">
    <div class="bg-blue-500 text-white p-4 text-center">Single Column</div>
    <div class="bg-green-500 text-white p-4 text-center">Layout</div>
  </div>
  
  <!-- 2 คอลัมน์ -->
  <div class="grid grid-cols-2 gap-4">
    <div class="bg-red-500 text-white p-4 text-center">Column 1</div>
    <div class="bg-purple-500 text-white p-4 text-center">Column 2</div>
  </div>
  
  <!-- 4 คอลัมน์ -->
  <div class="grid grid-cols-4 gap-4">
    <div class="bg-yellow-500 text-white p-4 text-center">1</div>
    <div class="bg-pink-500 text-white p-4 text-center">2</div>
    <div class="bg-indigo-500 text-white p-4 text-center">3</div>
    <div class="bg-cyan-500 text-white p-4 text-center">4</div>
  </div>
  
  <!-- 12 คอลัมน์ (เหมือน Bootstrap) -->
  <div class="grid grid-cols-12 gap-2">
    <div class="bg-gray-500 text-white p-2 text-center text-xs">1</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">2</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">3</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">4</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">5</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">6</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">7</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">8</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">9</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">10</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">11</div>
    <div class="bg-gray-500 text-white p-2 text-center text-xs">12</div>
  </div>
</div>

Grid Span - ขยายพื้นที่แบบเซียน

<div class="space-y-8">
  <!-- Column Spanning -->
  <div class="grid grid-cols-4 gap-4">
    <div class="col-span-2 bg-blue-500 text-white p-4 text-center">
      ขยาย 2 คอลัมน์
    </div>
    <div class="bg-green-500 text-white p-4 text-center">1</div>
    <div class="bg-red-500 text-white p-4 text-center">2</div>
    
    <div class="bg-purple-500 text-white p-4 text-center">3</div>
    <div class="col-span-3 bg-pink-500 text-white p-4 text-center">
      ขยาย 3 คอลัมน์
    </div>
  </div>
  
  <!-- Row และ Column Spanning -->
  <div class="grid grid-cols-4 grid-rows-3 gap-4 h-64">
    <div class="col-span-2 row-span-2 bg-blue-500 text-white p-4 flex items-center justify-center">
      2x2 พื้นที่
    </div>
    <div class="bg-green-500 text-white p-4 text-center">A</div>
    <div class="bg-red-500 text-white p-4 text-center">B</div>
    
    <div class="bg-purple-500 text-white p-4 text-center">C</div>
    <div class="row-span-2 bg-pink-500 text-white p-4 flex items-center justify-center">
      แนวตั้ง
    </div>
    
    <div class="col-span-2 bg-indigo-500 text-white p-4 text-center">
      กว้าง 2 คอลัมน์
    </div>
    <div class="bg-yellow-500 text-white p-4 text-center">D</div>
  </div>
</div>

Grid Gap - จัดการระยะห่าง

<div class="space-y-8">
  <!-- ไม่มี Gap -->
  <div class="grid grid-cols-3">
    <div class="bg-blue-500 text-white p-4 border border-white text-center">1</div>
    <div class="bg-green-500 text-white p-4 border border-white text-center">2</div>
    <div class="bg-red-500 text-white p-4 border border-white text-center">3</div>
  </div>
  
  <!-- Gap เท่ากัน -->
  <div class="grid grid-cols-3 gap-4">
    <div class="bg-purple-500 text-white p-4 text-center">1</div>
    <div class="bg-pink-500 text-white p-4 text-center">2</div>
    <div class="bg-indigo-500 text-white p-4 text-center">3</div>
  </div>
  
  <!-- Gap แยกแนวนอน-ตั้ง -->
  <div class="grid grid-cols-3 gap-x-8 gap-y-2">
    <div class="bg-yellow-500 text-white p-4 text-center">1</div>
    <div class="bg-cyan-500 text-white p-4 text-center">2</div>
    <div class="bg-orange-500 text-white p-4 text-center">3</div>
    <div class="bg-lime-500 text-white p-4 text-center">4</div>
    <div class="bg-emerald-500 text-white p-4 text-center">5</div>
    <div class="bg-teal-500 text-white p-4 text-center">6</div>
  </div>
</div>

 

ส่วนที่ 3: Responsive Layout ที่ใช้งานได้จริง

Mobile-First Strategy

<!-- Layout ที่เปลี่ยนตามขนาดหน้าจอ -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6 p-6">
  <div class="bg-blue-500 text-white p-6 rounded-lg">
    <h3 class="font-bold mb-2">Card 1</h3>
    <p class="text-blue-100">
      1 คอลัมน์ในมือถือ<br>
      2 คอลัมน์ในแท็บเล็ต<br>
      3 คอลัมน์ใน laptop<br>
      4 คอลัมน์ใน desktop
    </p>
  </div>
  
  <div class="bg-green-500 text-white p-6 rounded-lg">
    <h3 class="font-bold mb-2">Card 2</h3>
    <p class="text-green-100">
      ระบบ Responsive<br>
      ที่ยืดหยุ่น
    </p>
  </div>
  
  <div class="bg-red-500 text-white p-6 rounded-lg">
    <h3 class="font-bold mb-2">Card 3</h3>
    <p class="text-red-100">
      ใช้งานง่าย<br>
      ด้วย Tailwind
    </p>
  </div>
  
  <div class="bg-purple-500 text-white p-6 rounded-lg">
    <h3 class="font-bold mb-2">Card 4</h3>
    <p class="text-purple-100">
      Professional<br>
      Layout
    </p>
  </div>
</div>

Navigation Layout ที่ Responsive

<!-- Responsive Navigation -->
<header class="bg-white shadow-lg">
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
    <div class="flex justify-between items-center h-16">
      <!-- Logo -->
      <div class="flex items-center">
        <h1 class="text-xl font-bold text-gray-900">MyWebsite</h1>
      </div>
      
      <!-- Desktop Navigation -->
      <nav class="hidden md:flex space-x-8">
        <a href="#" class="text-gray-600 hover:text-gray-900 transition-colors">Home</a>
        <a href="#" class="text-gray-600 hover:text-gray-900 transition-colors">About</a>
        <a href="#" class="text-gray-600 hover:text-gray-900 transition-colors">Services</a>
        <a href="#" class="text-gray-600 hover:text-gray-900 transition-colors">Contact</a>
      </nav>
      
      <!-- Mobile Menu Button -->
      <button class="md:hidden p-2 rounded-md text-gray-600 hover:text-gray-900 hover:bg-gray-100">
        <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
        </svg>
      </button>
    </div>
  </div>
</header>

 

ส่วนที่ 4: Layout Patterns ที่ใช้บ่อย

Pattern 1: Holy Grail Layout

<!-- Layout คลาสสิก: Header + Sidebar + Content + Footer -->
<div class="min-h-screen flex flex-col">
  <!-- Header -->
  <header class="bg-blue-600 text-white p-4">
    <div class="max-w-7xl mx-auto">
      <h1 class="text-xl font-bold">Holy Grail Layout</h1>
    </div>
  </header>
  
  <!-- Main Content Area -->
  <main class="flex-1 max-w-7xl mx-auto w-full grid grid-cols-1 lg:grid-cols-4 gap-6 p-6">
    <!-- Left Sidebar -->
    <aside class="lg:col-span-1 bg-gray-100 p-4 rounded-lg">
      <h3 class="font-bold mb-3">Navigation</h3>
      <ul class="space-y-2">
        <li><a href="#" class="text-blue-600 hover:text-blue-800">หน้าแรก</a></li>
        <li><a href="#" class="text-blue-600 hover:text-blue-800">เกี่ยวกับเรา</a></li>
        <li><a href="#" class="text-blue-600 hover:text-blue-800">บริการ</a></li>
        <li><a href="#" class="text-blue-600 hover:text-blue-800">ติดต่อ</a></li>
      </ul>
    </aside>
    
    <!-- Main Content -->
    <section class="lg:col-span-2 bg-white p-6 rounded-lg shadow-sm">
      <h2 class="text-2xl font-bold mb-4">เนื้อหาหลัก</h2>
      <p class="text-gray-700 mb-4">
        นี่คือพื้นที่เนื้อหาหลักที่จะขยายตามความยาวของเนื้อหา 
        Layout นี้เรียกว่า Holy Grail เพราะเป็น Layout ที่หลายคนพยายามทำมานาน
      </p>
      
      <div class="space-y-4">
        <div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
          <h3 class="font-semibold text-blue-800">ข้อดี</h3>
          <p class="text-blue-700">Layout ที่ยืดหยุ่นและใช้งานได้จริง</p>
        </div>
        
        <div class="bg-green-50 border border-green-200 rounded-lg p-4">
          <h3 class="font-semibold text-green-800">การใช้งาน</h3>
          <p class="text-green-700">เหมาะสำหรับเว็บไซต์ข่าว, บล็อก, เอกสาร</p>
        </div>
      </div>
    </section>
    
    <!-- Right Sidebar -->
    <aside class="lg:col-span-1 bg-gray-50 p-4 rounded-lg">
      <h3 class="font-bold mb-3">โฆษณา</h3>
      <div class="space-y-3">
        <div class="bg-yellow-100 border border-yellow-300 rounded p-3 text-center">
          <p class="text-sm text-yellow-800">Ad Space 1</p>
        </div>
        <div class="bg-green-100 border border-green-300 rounded p-3 text-center">
          <p class="text-sm text-green-800">Ad Space 2</p>
        </div>
        <div class="bg-blue-100 border border-blue-300 rounded p-3 text-center">
          <p class="text-sm text-blue-800">Ad Space 3</p>
        </div>
      </div>
    </aside>
  </main>
  
  <!-- Footer -->
  <footer class="bg-gray-800 text-white p-4">
    <div class="max-w-7xl mx-auto text-center">
      <p>&copy; 2025 Holy Grail Layout. สร้างด้วย Tailwind CSS</p>
    </div>
  </footer>
</div>

Pattern 2: Card Grid Layout

<!-- Responsive Card Grid -->
<div class="max-w-7xl mx-auto p-6">
  <div class="mb-8">
    <h2 class="text-3xl font-bold text-gray-900 mb-2">สินค้าแนะนำ</h2>
    <p class="text-gray-600">เลือกสรรสินค้าคุณภาพเพื่อคุณ</p>
  </div>
  
  <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
    <!-- Product Card 1 -->
    <div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-lg transition-shadow group">
      <div class="h-48 bg-gradient-to-br from-blue-400 to-blue-600 flex items-center justify-center">
        <span class="text-white text-lg font-medium">รูปสินค้า</span>
      </div>
      <div class="p-4">
        <h3 class="font-semibold text-gray-900 mb-2 group-hover:text-blue-600 transition-colors">
          MacBook Pro M3
        </h3>
        <p class="text-gray-600 text-sm mb-3">Laptop สำหรับมืออาชีพ</p>
        <div class="flex items-center justify-between">
          <span class="text-xl font-bold text-gray-900">฿89,900</span>
          <button class="bg-blue-600 text-white px-4 py-2 rounded-md text-sm hover:bg-blue-700 transition-colors">
            เพิ่มลงตะกร้า
          </button>
        </div>
      </div>
    </div>
    
    <!-- Product Card 2 -->
    <div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-lg transition-shadow group">
      <div class="h-48 bg-gradient-to-br from-green-400 to-green-600 flex items-center justify-center">
        <span class="text-white text-lg font-medium">รูปสินค้า</span>
      </div>
      <div class="p-4">
        <h3 class="font-semibold text-gray-900 mb-2 group-hover:text-blue-600 transition-colors">
          iPhone 15 Pro
        </h3>
        <p class="text-gray-600 text-sm mb-3">สมาร์ทโฟนล่าสุด</p>
        <div class="flex items-center justify-between">
          <span class="text-xl font-bold text-gray-900">฿42,900</span>
          <button class="bg-blue-600 text-white px-4 py-2 rounded-md text-sm hover:bg-blue-700 transition-colors">
            เพิ่มลงตะกร้า
          </button>
        </div>
      </div>
    </div>
    
    <!-- Product Card 3 -->
    <div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-lg transition-shadow group">
      <div class="h-48 bg-gradient-to-br from-purple-400 to-purple-600 flex items-center justify-center">
        <span class="text-white text-lg font-medium">รูปสินค้า</span>
      </div>
      <div class="p-4">
        <h3 class="font-semibold text-gray-900 mb-2 group-hover:text-blue-600 transition-colors">
          iPad Air
        </h3>
        <p class="text-gray-600 text-sm mb-3">แท็บเล็ตเพื่อความสร้างสรรค์</p>
        <div class="flex items-center justify-between">
          <span class="text-xl font-bold text-gray-900">฿23,900</span>
          <button class="bg-blue-600 text-white px-4 py-2 rounded-md text-sm hover:bg-blue-700 transition-colors">
            เพิ่มลงตะกร้า
          </button>
        </div>
      </div>
    </div>
    
    <!-- Product Card 4 -->
    <div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-lg transition-shadow group">
      <div class="h-48 bg-gradient-to-br from-red-400 to-red-600 flex items-center justify-center">
        <span class="text-white text-lg font-medium">รูปสินค้า</span>
      </div>
      <div class="p-4">
        <h3 class="font-semibold text-gray-900 mb-2 group-hover:text-blue-600 transition-colors">
          Apple Watch
        </h3>
        <p class="text-gray-600 text-sm mb-3">นาฬิกาอัจฉริยะ</p>
        <div class="flex items-center justify-between">
          <span class="text-xl font-bold text-gray-900">฿12,900</span>
          <button class="bg-blue-600 text-white px-4 py-2 rounded-md text-sm hover:bg-blue-700 transition-colors">
            เพิ่มลงตะกร้า
          </button>
        </div>
      </div>
    </div>
  </div>
</div>

Pattern 3: Dashboard Layout

<!-- Modern Dashboard -->
<div class="min-h-screen bg-gray-100">
  <!-- Top Navigation -->
  <nav class="bg-white shadow-sm border-b border-gray-200">
    <div class="max-w-full mx-auto px-4 sm:px-6 lg:px-8">
      <div class="flex justify-between h-16">
        <div class="flex items-center">
          <h1 class="text-xl font-bold text-gray-900">Dashboard</h1>
        </div>
        <div class="flex items-center space-x-4">
          <button class="p-2 rounded-full bg-gray-100 text-gray-600 hover:text-gray-900">
            <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
              <path d="M10 12a2 2 0 100-4 2 2 0 000 4z"/>
              <path fill-rule="evenodd" d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z" clip-rule="evenodd"/>
            </svg>
          </button>
          <div class="w-8 h-8 bg-blue-500 rounded-full flex items-center justify-center">
            <span class="text-white text-sm font-medium">JS</span>
          </div>
        </div>
      </div>
    </div>
  </nav>
  
  <div class="flex">
    <!-- Sidebar -->
    <aside class="w-64 bg-white shadow-sm min-h-screen">
      <nav class="mt-5 px-2">
        <a href="#" class="bg-blue-100 text-blue-700 group flex items-center px-2 py-2 text-sm font-medium rounded-md mb-1">
          <svg class="text-blue-500 mr-3 h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2V7z" />
          </svg>
          Dashboard
        </a>
        <a href="#" class="text-gray-600 hover:bg-gray-50 hover:text-gray-900 group flex items-center px-2 py-2 text-sm font-medium rounded-md mb-1">
          <svg class="text-gray-400 mr-3 h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
          </svg>
          Analytics
        </a>
        <a href="#" class="text-gray-600 hover:bg-gray-50 hover:text-gray-900 group flex items-center px-2 py-2 text-sm font-medium rounded-md mb-1">
          <svg class="text-gray-400 mr-3 h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z" />
          </svg>
          Users
        </a>
      </nav>
    </aside>
    
    <!-- Main Content -->
    <main class="flex-1 p-6">
      <!-- Stats Grid -->
      <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
        <div class="bg-white overflow-hidden shadow rounded-lg">
          <div class="p-5">
            <div class="flex items-center">
              <div class="flex-shrink-0">
                <div class="w-8 h-8 bg-blue-500 rounded-full flex items-center justify-center">
                  <span class="text-white font-bold">$</span>
                </div>
              </div>
              <div class="ml-5 w-0 flex-1">
                <dl>
                  <dt class="text-sm font-medium text-gray-500 truncate">รายได้รวม</dt>
                  <dd class="text-lg font-medium text-gray-900">฿2,847,500</dd>
                </dl>
              </div>
            </div>
          </div>
          <div class="bg-gray-50 px-5 py-3">
            <div class="text-sm">
              <span class="text-green-600 font-medium">+12.5%</span>
              <span class="text-gray-500"> จากเดือนที่แล้ว</span>
            </div>
          </div>
        </div>
        
        <div class="bg-white overflow-hidden shadow rounded-lg">
          <div class="p-5">
            <div class="flex items-center">
              <div class="flex-shrink-0">
                <div class="w-8 h-8 bg-green-500 rounded-full flex items-center justify-center">
                  <span class="text-white font-bold">↗</span>
                </div>
              </div>
              <div class="ml-5 w-0 flex-1">
                <dl>
                  <dt class="text-sm font-medium text-gray-500 truncate">การเติบโต</dt>
                  <dd class="text-lg font-medium text-gray-900">+18.2%</dd>
                </dl>
              </div>
            </div>
          </div>
          <div class="bg-gray-50 px-5 py-3">
            <div class="text-sm">
              <span class="text-green-600 font-medium">+8.1%</span>
              <span class="text-gray-500"> จากสัปดาห์ที่แล้ว</span>
            </div>
          </div>
        </div>
        
        <div class="bg-white overflow-hidden shadow rounded-lg">
          <div class="p-5">
            <div class="flex items-center">
              <div class="flex-shrink-0">
                <div class="w-8 h-8 bg-yellow-500 rounded-full flex items-center justify-center">
                  <span class="text-white font-bold">👥</span>
                </div>
              </div>
              <div class="ml-5 w-0 flex-1">
                <dl>
                  <dt class="text-sm font-medium text-gray-500 truncate">ผู้ใช้ใหม่</dt>
                  <dd class="text-lg font-medium text-gray-900">2,845</dd>
                </dl>
              </div>
            </div>
          </div>
          <div class="bg-gray-50 px-5 py-3">
            <div class="text-sm">
              <span class="text-red-600 font-medium">-2.3%</span>
              <span class="text-gray-500"> จากเดือนที่แล้ว</span>
            </div>
          </div>
        </div>
        
        <div class="bg-white overflow-hidden shadow rounded-lg">
          <div class="p-5">
            <div class="flex items-center">
              <div class="flex-shrink-0">
                <div class="w-8 h-8 bg-red-500 rounded-full flex items-center justify-center">
                  <span class="text-white font-bold">⚡</span>
                </div>
              </div>
              <div class="ml-5 w-0 flex-1">
                <dl>
                  <dt class="text-sm font-medium text-gray-500 truncate">ประสิทธิภาพ</dt>
                  <dd class="text-lg font-medium text-gray-900">98.3%</dd>
                </dl>
              </div>
            </div>
          </div>
          <div class="bg-gray-50 px-5 py-3">
            <div class="text-sm">
              <span class="text-green-600 font-medium">+0.8%</span>
              <span class="text-gray-500"> จากสัปดาห์ที่แล้ว</span>
            </div>
          </div>
        </div>
      </div>
      
      <!-- Chart Section -->
      <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
        <div class="bg-white shadow rounded-lg">
          <div class="p-6">
            <h3 class="text-lg font-medium text-gray-900 mb-4">แนวโน้มรายได้</h3>
            <div class="h-64 bg-gradient-to-br from-blue-50 to-indigo-100 rounded-lg flex items-center justify-center">
              <div class="text-center">
                <div class="text-4xl mb-2">📈</div>
                <p class="text-gray-600">กราฟแสดงรายได้</p>
              </div>
            </div>
          </div>
        </div>
        
        <div class="bg-white shadow rounded-lg">
          <div class="p-6">
            <h3 class="text-lg font-medium text-gray-900 mb-4">กิจกรรมผู้ใช้</h3>
            <div class="h-64 bg-gradient-to-br from-green-50 to-emerald-100 rounded-lg flex items-center justify-center">
              <div class="text-center">
                <div class="text-4xl mb-2">👥</div>
                <p class="text-gray-600">กราฟผู้ใช้งาน</p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </main>
  </div>
</div>

 

ส่วนที่ 5: เทคนิคขั้นสูงและ Best Practices

เทคนิค 1: Place Items และ Place Content

<div class="space-y-8 p-6">
  <!-- Place Items - จัดตำแหน่ง items แต่ละตัว -->
  <div>
    <h3 class="text-lg font-semibold mb-4">Place Items (จัดตำแหน่งแต่ละ item)</h3>
    <div class="grid grid-cols-3 gap-4 place-items-center h-32 bg-gray-100 p-4">
      <div class="bg-blue-500 text-white p-2 w-16 h-16 flex items-center justify-center">1</div>
      <div class="bg-green-500 text-white p-2 w-20 h-20 flex items-center justify-center">2</div>
      <div class="bg-red-500 text-white p-2 w-12 h-12 flex items-center justify-center">3</div>
    </div>
  </div>
  
  <!-- Place Content - จัดตำแหน่ง grid ทั้งหมด -->
  <div>
    <h3 class="text-lg font-semibold mb-4">Place Content (จัดตำแหน่ง grid ทั้งหมด)</h3>
    <div class="grid grid-cols-2 gap-4 place-content-center h-64 bg-gray-100 p-4">
      <div class="bg-purple-500 text-white p-4 text-center">A</div>
      <div class="bg-pink-500 text-white p-4 text-center">B</div>
      <div class="bg-indigo-500 text-white p-4 text-center">C</div>
      <div class="bg-cyan-500 text-white p-4 text-center">D</div>
    </div>
  </div>
</div>

เทคนิค 2: Aspect Ratio Utilities

<div class="space-y-8 p-6">
  <h3 class="text-lg font-semibold mb-4">Aspect Ratio Control</h3>
  
  <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
    <!-- 16:9 Video -->
    <div class="aspect-video bg-gradient-to-br from-blue-400 to-blue-600 rounded-lg flex items-center justify-center">
      <span class="text-white font-medium">16:9 Video</span>
    </div>
    
    <!-- 1:1 Square -->
    <div class="aspect-square bg-gradient-to-br from-green-400 to-green-600 rounded-lg flex items-center justify-center">
      <span class="text-white font-medium">1:1 Square</span>
    </div>
    
    <!-- 4:3 Traditional -->
    <div class="aspect-[4/3] bg-gradient-to-br from-purple-400 to-purple-600 rounded-lg flex items-center justify-center">
      <span class="text-white font-medium">4:3 Traditional</span>
    </div>
  </div>
</div>

เทคนิค 3: Order Utilities สำหรับ Flexbox

<div class="space-y-8 p-6">
  <h3 class="text-lg font-semibold mb-4">Flexbox Order Control</h3>
  
  <!-- Desktop Order -->
  <div class="flex flex-col md:flex-row gap-4 bg-gray-100 p-4 rounded-lg">
    <div class="flex-1 bg-blue-500 text-white p-4 order-3 md:order-1">
      <h4 class="font-bold">Main Content</h4>
      <p class="text-blue-100">ลำดับที่ 1 บน desktop, ลำดับที่ 3 บน mobile</p>
    </div>
    
    <div class="w-full md:w-64 bg-green-500 text-white p-4 order-1 md:order-2">
      <h4 class="font-bold">Sidebar</h4>
      <p class="text-green-100">ลำดับที่ 2 บน desktop, ลำดับที่ 1 บน mobile</p>
    </div>
    
    <div class="w-full md:w-48 bg-red-500 text-white p-4 order-2 md:order-3">
      <h4 class="font-bold">Ads</h4>
      <p class="text-red-100">ลำดับที่ 3 บน desktop, ลำดับที่ 2 บน mobile</p>
    </div>
  </div>
</div>

เทคนิค 4: Layout Animation ที่เหมาะสม

<div class="space-y-8 p-6">
  <h3 class="text-lg font-semibold mb-4">Performance-Optimized Layout Animations</h3>
  
  <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
    <!-- Transform-based Animation -->
    <div class="bg-blue-500 text-white p-6 rounded-lg transform hover:scale-105 transition-transform duration-300 cursor-pointer">
      <h4 class="font-bold mb-2">Scale Transform</h4>
      <p class="text-blue-100">ใช้ transform สำหรับ performance ที่ดี</p>
    </div>
    
    <!-- Translate Animation -->
    <div class="bg-green-500 text-white p-6 rounded-lg transform hover:-translate-y-2 transition-transform duration-300 cursor-pointer">
      <h4 class="font-bold mb-2">Translate Movement</h4>
      <p class="text-green-100">ใช้ translate สำหรับการเคลื่อนไหวที่นุ่มนวล</p>
    </div>
    
    <!-- Opacity Animation -->
    <div class="bg-purple-500 text-white p-6 rounded-lg hover:opacity-80 transition-opacity duration-300 cursor-pointer">
      <h4 class="font-bold mb-2">Opacity Change</h4>
      <p class="text-purple-100">เปลี่ยน opacity แทนการซ่อน/แสดง</p>
    </div>
  </div>
</div>

 

ข้อผิดพลาดที่ควรหลีกเลี่ยง

❌ ผิด: ใช้ Flexbox สำหรับ Layout ที่ซับซ้อน

<!-- ไม่แนะนำ: ใช้ Flexbox สำหรับ Layout 2 มิติ -->
<div class="flex flex-wrap">
  <div class="w-full">
    <div class="flex">
      <div class="w-1/4">Sidebar</div>
      <div class="flex-1">
        <div class="h-32">Header</div>
        <div class="flex-1">Content</div>
      </div>
    </div>
  </div>
</div>

✅ ถูก: ใช้ Grid สำหรับ Layout ที่ซับซ้อน

<!-- แนะนำ: ใช้ Grid สำหรับ Layout 2 มิติ -->
<div class="grid grid-cols-4 grid-rows-[auto_1fr] h-screen gap-4">
  <header class="col-span-4 bg-blue-500 text-white p-4">Header</header>
  <aside class="bg-gray-100 p-4">Sidebar</aside>
  <main class="col-span-3 bg-white p-4">Content</main>
</div>

❌ ผิด: ลืมทำ Responsive

<!-- ไม่แนะนำ: Layout ที่ไม่ responsive -->
<div class="grid grid-cols-4 gap-4">
  <div>Item 1</div>
  <div>Item 2</div>
  <div>Item 3</div>
  <div>Item 4</div>
</div>

✅ ถูก: Layout ที่ Responsive

<!-- แนะนำ: Layout ที่ responsive -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
  <div>Item 1</div>
  <div>Item 2</div>
  <div>Item 3</div>
  <div>Item 4</div>
</div>

❌ ผิด: การใช้ Animation ที่กิน Performance

<!-- ไม่แนะนำ: เปลี่ยน width/height -->
<div class="w-32 hover:w-64 transition-all duration-300">Performance Heavy</div>

<!-- ไม่แนะนำ: เปลี่ยน margin/padding -->
<div class="ml-4 hover:ml-8 transition-all duration-300">Layout Thrashing</div>

✅ ถูก: การใช้ Animation ที่ Performance ดี

<!-- แนะนำ: ใช้ transform -->
<div class="transform hover:scale-150 transition-transform duration-300">Good Performance</div>

<!-- แนะนำ: ใช้ opacity -->
<div class="opacity-100 hover:opacity-50 transition-opacity duration-300">Smooth Transition</div>

 

Performance Tips และ Accessibility

1. Performance Optimization

<!-- ใช้ transform สำหรับ Animation ที่นุ่มนวล -->
<div class="transform hover:scale-105 transition-transform duration-300">
  Optimized Animation
</div>

<!-- หลีกเลี่ยงการเปลี่ยน layout properties -->
<div class="transform hover:translate-x-4 transition-transform">
  ✅ ดี: ใช้ transform
</div>

<div class="ml-4 hover:ml-8 transition-all">
  ❌ ไม่ดี: เปลี่ยน margin
</div>

2. Accessibility Best Practices

<!-- Focus States ที่ชัดเจน -->
<button class="bg-blue-500 text-white px-4 py-2 rounded focus:outline-none focus:ring-4 focus:ring-blue-300 focus:ring-opacity-50">
  Accessible Button
</button>

<!-- Skip Links สำหรับ Screen Reader -->
<a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:top-0 focus:left-0 bg-blue-600 text-white p-2 rounded">
  Skip to main content
</a>

<!-- Semantic HTML Structure -->
<main id="main-content" class="grid grid-cols-1 lg:grid-cols-3 gap-6">
  <article class="lg:col-span-2">
    <h1 class="text-2xl font-bold mb-4">Article Title</h1>
    <p>Article content...</p>
  </article>
  
  <aside class="bg-gray-100 p-4 rounded-lg">
    <h2 class="text-lg font-semibold mb-3">Related Links</h2>
    <nav aria-label="Related content">
      <ul class="space-y-2">
        <li><a href="#" class="text-blue-600 hover:text-blue-800 focus:outline-none focus:underline">Related Article 1</a></li>
        <li><a href="#" class="text-blue-600 hover:text-blue-800 focus:outline-none focus:underline">Related Article 2</a></li>
      </ul>
    </nav>
  </aside>
</main>

<!-- สีที่มี contrast เพียงพอ -->
<div class="bg-blue-600 text-white p-4">
  ✅ ดี: Contrast ratio 4.5:1+
</div>

<div class="bg-blue-300 text-blue-400 p-4">
  ❌ ไม่ดี: Contrast ไม่เพียงพอ
</div>

3. Browser Compatibility Tips

หมายเหตุสำคัญ: ฟีเจอร์ต่างๆ มีการรองรับที่แตกต่างกัน

<!-- CSS Grid - รองรับใน browser สมัยใหม่ทุกตัว -->
<div class="grid grid-cols-3 gap-4">
  <!-- Grid content -->
</div>

<!-- Flexbox - รองรับใน browser สมัยใหม่ทุกตัว -->
<div class="flex items-center justify-center">
  <!-- Flex content -->
</div>

<!-- Aspect Ratio - รองรับใน browser สมัยใหม่ -->
<div class="aspect-video bg-gray-200">
  <!-- Modern browsers -->
</div>

<!-- Fallback สำหรับ browser เก่า -->
<div class="relative w-full" style="padding-bottom: 56.25%;"> <!-- 16:9 ratio -->
  <div class="absolute inset-0 bg-gray-200">
    <!-- Legacy browsers -->
  </div>
</div>

4. Debugging Layout Issues

<!-- เพิ่ม border ชั่วคราวเพื่อ debug -->
<div class="grid grid-cols-3 gap-4 border-2 border-red-500">
  <div class="border border-blue-500">Item 1</div>
  <div class="border border-green-500">Item 2</div>
  <div class="border border-purple-500">Item 3</div>
</div>

<!-- ใช้ background สี debug -->
<div class="flex bg-yellow-100">
  <div class="flex-1 bg-red-100 p-4">Flexible</div>
  <div class="flex-none w-32 bg-blue-100 p-4">Fixed</div>
</div>

CSS สำหรับ debug (ใส่ใน development เท่านั้น)

/* Debug borders */
.debug * {
  border: 1px solid red !important;
}

/* Debug grid */
.debug-grid {
  background-image: 
    linear-gradient(rgba(255,0,0,0.1) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,0,0,0.1) 1px, transparent 1px);
  background-size: 20px 20px;
}

 


 

สรุป

ใน EP 4 นี้ เราได้เรียนรู้การสร้าง Layout ด้วย Flexbox และ Grid อย่างเป็นระบบ:

สิ่งสำคัญที่ได้เรียนรู้:

  • Flexbox เหมาะสำหรับ Layout 1 มิติ และการจัดเรียงองค์ประกอบ
  • Grid เหมาะสำหรับ Layout 2 มิติ และการสร้าง Layout ที่ซับซ้อน
  • Responsive Design ที่เริ่มจาก Mobile-First เป็นแนวปฏิบัติที่ดี
  • Layout Patterns ที่ใช้งานได้จริง ในโลกจริง
  • Performance Tips และ Accessibility ที่ควรคำนึงถึง
  • Browser Compatibility และการ debug layout issues

เทคนิคสำคัญที่ต้องจำ:

  • ใช้ Flexbox สำหรับ: Navigation, Button groups, Form controls
  • ใช้ Grid สำหรับ: Page layouts, Card grids, Dashboard layouts
  • Mobile-First Strategy: เริ่มจาก grid-cols-1 แล้วขยายไป desktop
  • Performance-first Animation: ใช้ transform และ opacity แทน layout properties
  • Accessibility: ใช้ semantic HTML, focus states, และ proper contrast

ข้อผิดพลาดที่ควรหลีกเลี่ยง:

  • ❌ ใช้ Flexbox สำหรับ Layout 2 มิติที่ซับซ้อน
  • ❌ ลืมทำ Responsive Design
  • ❌ ใช้ Animation ที่เปลี่ยน layout properties
  • ❌ ไม่คำนึงถึง Accessibility
  • ❌ ไม่ตรวจสอบ Browser Compatibility

การเชี่ยวชาญ Flexbox และ Grid จะทำให้คุณสร้าง Layout ได้อย่างมืออาชีพ ไม่ว่าจะเป็น Dashboard, E-commerce, หรือ Blog Layout ซับซ้อนแค่ไหนก็สามารถจัดการได้อย่างง่ายดาย

EP 5 เรื่อง "Responsive Design ด้วย Tailwind: จอเล็ก-จอใหญ่ สวยครบทุกขนาด" เราจะมาเรียนรู้เทคนิคการสร้าง Responsive Design ขั้นสูง การใช้ Breakpoints อย่างเซียน Mobile-First Strategy และการทำ Progressive Enhancement ที่ทำให้เว็บไซต์ใช้งานได้ดีในทุกอุปกรณ์

พร้อมที่จะเป็นมาสเตอร์ Responsive Design แล้วใช่ไหม? ติดตาม Superdev School เพื่อไม่พลาดเทคนิคการสร้าง Layout ที่ตอบสนองได้ในทุกสถานการณ์!

การเข้าใจ Layout เป็นพื้นฐานที่สำคัญของการออกแบบเว็บไซต์ ตอนนี้คุณมีเครื่องมือที่จำเป็นแล้ว มาสร้าง Layout ที่สวยงามและใช้งานง่ายด้วย Tailwind CSS กันเถอะ! 🎯

อ่านบทความ Series อื่นๆ

🔵 Facebook: Superdev School  (Superdev)

📸 Instagram: superdevschool

🎬 TikTok: superdevschool

🌐 Website: www.superdev.school