25/04/2026 02:47น.

EP 2: Utility-First คืออะไร? เข้าใจระบบคลาสของ Tailwind แบบเซียน
#Utility-First CSS
#Tailwind CSS
#ระบบคลาส Tailwind
#Tailwind CSS Classes
หลังจาก EP 1 ที่เราได้รู้จักกับ Tailwind CSS และเข้าใจว่าทำไมมันถึงได้รับความนิยม วันนี้เราจะมาลงลึกถึงหัวใจสำคัญของ Tailwind CSS ที่ทำให้มันแตกต่างจาก CSS Framework อื่นๆ นั่นคือ "Utility-First"
คุณเคยสงสัยไหมว่าทำไม Tailwind CSS ถึงใช้แนวคิด Utility-First? มันดีกว่าการเขียน CSS แบบเดิมยังไง? และที่สำคัญ - เราจะจำคลาสเยอะขนาดนี้ได้ยังไง?
วันนี้เราจะมาตอบคำถามเหล่านี้กัน พร้อมกับเทคนิคการจำคลาสแบบเซียน และเคล็ดลับที่จะทำให้คุณเขียน Tailwind CSS ได้อย่างมืออาชีพ!
Utility-First คืออะไร? ทำไมถึงเป็นจุดเปลี่ยนของ CSS
หลักการพื้นฐานของ Utility-First
Utility-First เป็นแนวคิดการออกแบบ CSS ที่ใช้คลาสขนาดเล็กที่มีหน้าที่เฉพาะเจาะจง (Single-purpose) มาประกอบกันเพื่อสร้างการออกแบบที่ซับซ้อน
แทนที่จะเขียนแบบนี้:
/* แบบเดิม (Component-First) */
.hero-section {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 4rem 2rem;
text-align: center;
color: white;
}
.hero-title {
font-size: 3rem;
font-weight: bold;
margin-bottom: 1rem;
line-height: 1.2;
}
.hero-button {
background-color: #ffffff;
color: #667eea;
padding: 0.75rem 2rem;
border-radius: 0.5rem;
border: none;
font-weight: 600;
transition: all 0.3s ease;
}
.hero-button:hover {
background-color: #f1f5f9;
transform: translateY(-2px);
}
เราจะเขียนแบบนี้:
<!-- แบบใหม่ (Utility-First) -->
<section class="bg-gradient-to-br from-indigo-500 to-purple-600 py-16 px-8 text-center text-white">
<h1 class="text-5xl font-bold mb-4 leading-tight">
ยินดีต้อนรับสู่อนาคต
</h1>
<button class="bg-white text-indigo-500 px-8 py-3 rounded-lg font-semibold hover:bg-gray-100 hover:-translate-y-0.5 transition-all duration-300">
เริ่มต้นเลย
</button>
</section>
ทำไม Utility-First ถึงแตกต่าง?
1. ความรวดเร็วในการพัฒนา
- ไม่ต้องคิดชื่อคลาส
- ไม่ต้องสลับไฟล์ไปมา
- เปลี่ยนแปลงได้ทันที
2. ความยืดหยุ่น
- สร้างการออกแบบได้ไม่จำกัด
- ไม่ติดอยู่กับ Component ที่กำหนดไว้
- ปรับแต่งได้ในระดับรายละเอียด
3. ความสอดคล้อง
- ใช้ Design System ที่สม่ำเสมอ
- ระบบสีและขนาดที่เป็นมาตรฐาน
- ลดความผิดพลาดในการออกแบบ
ลองดูตัวอย่างการสร้างการ์ดที่ซับซ้อน:
<div class="max-w-sm mx-auto bg-white rounded-xl shadow-lg overflow-hidden md:max-w-2xl">
<div class="md:flex">
<div class="md:shrink-0">
<img class="h-48 w-full object-cover md:h-full md:w-48" src="/img/building.jpg" alt="Modern building architecture">
</div>
<div class="p-8">
<div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">Company retreat</div>
<a href="#" class="block mt-1 text-lg leading-tight font-medium text-black hover:underline">Incredible accommodation for your team</a>
<p class="mt-2 text-slate-500">Looking to take your team away on a retreat to enjoy awesome food and take in some sunshine? We have a list of places to do just that.</p>
</div>
</div>
</div>
ระบบการจัดหมวดหมู่คลาสใน Tailwind CSS
1. Layout Classes - จัดการโครงสร้าง
Container และ Display
<!-- Container -->
<div class="container mx-auto">กำหนดความกว้างสูงสุดและจัดกึ่งกลาง</div>
<!-- Display -->
<div class="block">display: block</div>
<div class="inline-block">display: inline-block</div>
<div class="inline">display: inline</div>
<div class="flex">display: flex</div>
<div class="grid">display: grid</div>
<div class="hidden">display: none</div>
Flexbox System
<!-- Flex Direction -->
<div class="flex flex-row">แนวนอน (default)</div>
<div class="flex flex-col">แนวตั้ง</div>
<div class="flex flex-row-reverse">แนวนอนกลับด้าน</div>
<!-- Justify Content -->
<div class="flex justify-start">จัดชิดซ้าย</div>
<div class="flex justify-center">จัดกึ่งกลาง</div>
<div class="flex justify-between">กระจายห่าง</div>
<div class="flex justify-around">กระจายรอบ</div>
<!-- Align Items -->
<div class="flex items-start">จัดชิดบน</div>
<div class="flex items-center">จัดกึ่งกลางแนวตั้ง</div>
<div class="flex items-end">จัดชิดล่าง</div>
Grid System
<!-- Grid Template Columns -->
<div class="grid grid-cols-1">1 คอลัมน์</div>
<div class="grid grid-cols-2">2 คอลัมน์</div>
<div class="grid grid-cols-3">3 คอลัมน์</div>
<div class="grid grid-cols-12">12 คอลัมน์</div>
<!-- Grid Gap -->
<div class="grid grid-cols-3 gap-4">ช่องว่าง 1rem</div>
<div class="grid grid-cols-3 gap-x-4 gap-y-2">ช่องว่างแยกแนวนอน-ตั้ง</div>
<!-- Grid Span -->
<div class="col-span-2">ขยายครอบ 2 คอลัมน์</div>
<div class="row-span-3">ขยายครอบ 3 แถว</div>
2. Spacing Classes - จัดการระยะห่าง
Padding และ Margin System
<!-- Padding (p = padding) -->
<div class="p-4">padding: 1rem (ทุกด้าน)</div>
<div class="px-4">padding: 0 1rem (ซ้าย-ขวา)</div>
<div class="py-4">padding: 1rem 0 (บน-ล่าง)</div>
<div class="pt-4">padding-top: 1rem</div>
<div class="pr-4">padding-right: 1rem</div>
<div class="pb-4">padding-bottom: 1rem</div>
<div class="pl-4">padding-left: 1rem</div>
<!-- Margin (m = margin) -->
<div class="m-4">margin: 1rem (ทุกด้าน)</div>
<div class="mx-auto">margin: 0 auto (จัดกึ่งกลาง)</div>
<div class="my-8">margin: 2rem 0 (บน-ล่าง)</div>
<div class="mt-4">margin-top: 1rem</div>
<div class="-mt-4">margin-top: -1rem (ค่าติดลบ)</div>
ระบบขนาดมาตรฐาน
0 = 0px
0.5 = 0.125rem (2px)
1 = 0.25rem (4px)
1.5 = 0.375rem (6px)
2 = 0.5rem (8px)
2.5 = 0.625rem (10px)
3 = 0.75rem (12px)
3.5 = 0.875rem (14px)
4 = 1rem (16px)
5 = 1.25rem (20px)
6 = 1.5rem (24px)
7 = 1.75rem (28px)
8 = 2rem (32px)
9 = 2.25rem (36px)
10 = 2.5rem (40px)
11 = 2.75rem (44px)
12 = 3rem (48px)
14 = 3.5rem (56px)
16 = 4rem (64px)
20 = 5rem (80px)
24 = 6rem (96px)
28 = 7rem (112px)
32 = 8rem (128px)
36 = 9rem (144px)
40 = 10rem (160px)
44 = 11rem (176px)
48 = 12rem (192px)
52 = 13rem (208px)
56 = 14rem (224px)
60 = 15rem (240px)
64 = 16rem (256px)
72 = 18rem (288px)
80 = 20rem (320px)
96 = 24rem (384px)
3. Color System - ระบบสี
ประเภทสีหลัก
<!-- Background Colors -->
<div class="bg-red-500">พื้นหลังสีแดง</div>
<div class="bg-blue-600">พื้นหลังสีน้ำเงิน</div>
<div class="bg-green-400">พื้นหลังสีเขียว</div>
<!-- Text Colors -->
<p class="text-gray-800">ข้อความสีเทาเข้ม</p>
<p class="text-indigo-500">ข้อความสีม่วงน้ำเงิน</p>
<!-- Border Colors -->
<div class="border border-red-300">เส้นขอบสีแดงอ่อน</div>
ระดับความเข้มของสี
<!-- สีเทา (Gray) -->
<div class="bg-gray-50">สีเทาอ่อนมาก</div>
<div class="bg-gray-100">สีเทาอ่อน</div>
<div class="bg-gray-200">สีเทาอ่อนปานกลาง</div>
<div class="bg-gray-300">สีเทาปานกลาง</div>
<div class="bg-gray-400">สีเทาปานกลางเข้ม</div>
<div class="bg-gray-500">สีเทาเข้ม</div>
<div class="bg-gray-600">สีเทาเข้มมาก</div>
<div class="bg-gray-700">สีเทาเข้มมากพิเศษ</div>
<div class="bg-gray-800">สีเทาเข้มที่สุด</div>
<div class="bg-gray-900">สีเทาดำ</div>
<!-- สีฟ้า (Blue) -->
<div class="bg-blue-50">สีฟ้าอ่อนมาก</div>
<div class="bg-blue-100">สีฟ้าอ่อน</div>
<div class="bg-blue-500">สีฟ้ามาตรฐาน</div>
<div class="bg-blue-900">สีฟ้าเข้มที่สุด</div>
สีพิเศษและ Gradient
<!-- สีขาว-ดำ -->
<div class="bg-white">พื้นหลังสีขาว</div>
<div class="bg-black">พื้นหลังสีดำ</div>
<div class="bg-transparent">พื้นหลังโปร่งใส</div>
<!-- Gradient -->
<div class="bg-gradient-to-r from-purple-500 to-pink-500">Gradient ซ้าย-ขวา</div>
<div class="bg-gradient-to-br from-green-400 to-blue-600">Gradient มุมล่างขวา</div>
<div class="bg-gradient-to-t from-yellow-400 via-red-500 to-pink-500">Gradient 3 สี</div>
4. Typography Classes - จัดการข้อความ
ขนาดและน้ำหนักตัวอักษร
<!-- Font Size -->
<p class="text-xs">12px - ข้อความเล็กที่สุด</p>
<p class="text-sm">14px - ข้อความเล็ก</p>
<p class="text-base">16px - ข้อความปกติ (default)</p>
<p class="text-lg">18px - ข้อความใหญ่</p>
<p class="text-xl">20px - ข้อความใหญ่มาก</p>
<p class="text-2xl">24px - หัวข้อเล็ก</p>
<p class="text-3xl">30px - หัวข้อกลาง</p>
<p class="text-4xl">36px - หัวข้อใหญ่</p>
<p class="text-5xl">48px - หัวข้อใหญ่มาก</p>
<p class="text-6xl">60px - หัวข้อยักษ์</p>
<!-- Font Weight -->
<p class="font-thin">100 - บางมาก</p>
<p class="font-light">300 - บาง</p>
<p class="font-normal">400 - ปกติ</p>
<p class="font-medium">500 - กลาง</p>
<p class="font-semibold">600 - หนา</p>
<p class="font-bold">700 - หนามาก</p>
<p class="font-black">900 - หนาที่สุด</p>
การจัดตำแหน่งและระยะห่าง
<!-- Text Alignment -->
<p class="text-left">จัดชิดซ้าย</p>
<p class="text-center">จัดกึ่งกลาง</p>
<p class="text-right">จัดชิดขวา</p>
<p class="text-justify">จัดเต็มแถว</p>
<!-- Line Height -->
<p class="leading-tight">ระยะห่างบรรทัดแน่น</p>
<p class="leading-normal">ระยะห่างบรรทัดปกติ</p>
<p class="leading-loose">ระยะห่างบรรทัดหลวม</p>
<!-- Letter Spacing -->
<p class="tracking-tight">ระยะห่างตัวอักษรแน่น</p>
<p class="tracking-normal">ระยะห่างตัวอักษรปกติ</p>
<p class="tracking-wide">ระยะห่างตัวอักษรกว้าง</p>
การตกแต่งข้อความ
<!-- Text Decoration -->
<p class="underline">ขีดเส้นใต้</p>
<p class="line-through">ขีดฆ่า</p>
<p class="no-underline">ไม่มีขีดเส้นใต้</p>
<!-- Text Transform -->
<p class="uppercase">ตัวพิมพ์ใหญ่ทั้งหมด</p>
<p class="lowercase">ตัวพิมพ์เล็กทั้งหมด</p>
<p class="capitalize">ตัวแรกของแต่ละคำพิมพ์ใหญ่</p>
<!-- Text Style -->
<p class="italic">ตัวเอียง</p>
<p class="not-italic">ไม่เอียง</p>
5. Border และ Radius Classes
เส้นขอบ (Border)
<!-- Border Width -->
<div class="border">เส้นขอบ 1px ทุกด้าน</div>
<div class="border-2">เส้นขอบ 2px ทุกด้าน</div>
<div class="border-4">เส้นขอบ 4px ทุกด้าน</div>
<div class="border-t">เส้นขอบด้านบนเท่านั้น</div>
<div class="border-r">เส้นขอบด้านขวาเท่านั้น</div>
<div class="border-b">เส้นขอบด้านล่างเท่านั้น</div>
<div class="border-l">เส้นขอบด้านซ้ายเท่านั้น</div>
<!-- Border Style -->
<div class="border border-solid">เส้นทึบ</div>
<div class="border border-dashed">เส้นประ</div>
<div class="border border-dotted">เส้นจุด</div>
<div class="border-none">ไม่มีเส้นขอบ</div>
มุมโค้ง (Border Radius)
<!-- Rounded Corners -->
<div class="rounded-none">ไม่มีมุมโค้ง</div>
<div class="rounded-sm">มุมโค้งเล็ก (2px)</div>
<div class="rounded">มุมโค้งปกติ (4px)</div>
<div class="rounded-md">มุมโค้งกลาง (6px)</div>
<div class="rounded-lg">มุมโค้งใหญ่ (8px)</div>
<div class="rounded-xl">มุมโค้งใหญ่มาก (12px)</div>
<div class="rounded-full">มุมโค้งเต็ม (วงกลม)</div>
<!-- Specific Corners -->
<div class="rounded-t-lg">มุมโค้งด้านบน</div>
<div class="rounded-r-lg">มุมโค้งด้านขวา</div>
<div class="rounded-tl-lg">มุมโค้งบนซ้าย</div>
<div class="rounded-tr-lg">มุมโค้งบนขวา</div>
เทคนิคการจำคลาสแบบเซียน
1. จำตามรูปแบบ (Pattern Recognition)
รูปแบบการตั้งชื่อ
[property]-[direction]-[size]
[property]-[color]-[shade]
[breakpoint]:[property]-[value]
ตัวอย่าง:
mt-4= margin-top: 1rempx-6= padding-left: 1.5rem, padding-right: 1.5rembg-blue-500= background-color: #3b82f6md:text-lg= @media (min-width: 768px) { font-size: 1.125rem }
2. กลุ่มคลาสที่ใช้บ่อย
Layout Combo
<!-- กึ่งกลางทั้งหมด -->
<div class="flex items-center justify-center">
<!-- การ์ดพื้นฐาน -->
<div class="bg-white rounded-lg shadow-md p-6">
<!-- Container responsive -->
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<!-- Grid responsive -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
Typography Combo
<!-- หัวข้อหลัก -->
<h1 class="text-3xl md:text-4xl font-bold text-gray-900">
<!-- ข้อความรอง -->
<p class="text-lg text-gray-600 leading-relaxed">
<!-- ปุ่ม -->
<button class="bg-blue-500 hover:bg-blue-600 text-white font-medium px-6 py-3 rounded-lg transition-colors">
3. เทคนิค Mnemonics (การจำด้วยสัญลักษณ์)
ทิศทาง (Direction)
t= Top (บน)r= Right (ขวา)b= Bottom (ล่าง)l= Left (ซ้าย)x= X-axis (ซ้าย-ขวา)y= Y-axis (บน-ล่าง)
ขนาด (Size)
0= ไม่มี1-3= เล็ก4-6= กลาง8-12= ใหญ่16+= ใหญ่มาก
4. สร้างระบบจำของตัวเอง
การจัดกลุ่มตามหน้าที่
/* ใช้ @apply เพื่อสร้างคลาสกลุ่ม */
@layer components {
.layout-center {
@apply flex items-center justify-center;
}
.layout-container {
@apply max-w-7xl mx-auto px-4 sm:px-6 lg:px-8;
}
.text-heading {
@apply text-3xl font-bold text-gray-900;
}
.text-body {
@apply text-base text-gray-600 leading-relaxed;
}
.btn-primary {
@apply bg-blue-500 hover:bg-blue-600 text-white font-medium px-6 py-3 rounded-lg transition-colors;
}
.card-basic {
@apply bg-white rounded-lg shadow-md p-6;
}
}
Responsive Design ด้วย Breakpoint System
ระบบ Breakpoint ใน Tailwind
<!-- Default (Mobile First) -->
<div class="text-sm">ขนาดเล็กในทุกขนาดหน้าจอ</div>
<!-- sm: >= 640px -->
<div class="text-sm sm:text-base">เล็กในมือถือ, ปกติในแท็บเล็ต</div>
<!-- md: >= 768px -->
<div class="text-sm md:text-lg">เล็กในมือถือ, ใหญ่ในแท็บเล็ต</div>
<!-- lg: >= 1024px -->
<div class="text-sm lg:text-xl">เล็กในมือถือ, ใหญ่มากใน Desktop</div>
<!-- xl: >= 1280px -->
<div class="text-sm xl:text-2xl">เล็กในมือถือ, ใหญ่มากใน Desktop ใหญ่</div>
<!-- 2xl: >= 1536px -->
<div class="text-sm 2xl:text-3xl">เล็กในมือถือ, ยักษ์มากใน Desktop ยักษ์</div>
ตัวอย่างการใช้งานจริง
Navigation Responsive
<nav class="bg-white shadow-lg">
<div class="max-w-7xl mx-auto px-4">
<div class="flex justify-between items-center py-4">
<!-- Logo -->
<div class="flex items-center">
<img class="h-8 w-auto" src="/logo.svg" alt="Logo">
</div>
<!-- Desktop Menu -->
<div class="hidden md:flex space-x-8">
<a href="#" class="text-gray-600 hover:text-gray-900">Home</a>
<a href="#" class="text-gray-600 hover:text-gray-900">About</a>
<a href="#" class="text-gray-600 hover:text-gray-900">Contact</a>
</div>
<!-- Mobile Menu Button -->
<div class="md:hidden">
<button class="text-gray-600 hover:text-gray-900 focus:outline-none">
<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>
</div>
</nav>
Hero Section Responsive
<section class="bg-gradient-to-r from-blue-600 to-purple-600 text-white">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 sm:py-16 lg:py-24">
<div class="text-center">
<h1 class="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold mb-4 sm:mb-6">
สร้างเว็บไซต์สุดเจ๋ง
</h1>
<p class="text-lg sm:text-xl md:text-2xl mb-6 sm:mb-8 max-w-3xl mx-auto">
ด้วย Tailwind CSS Framework ที่ทำให้การพัฒนาเว็บไซต์เร็วขึ้น 10 เท่า
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<button class="bg-white text-blue-600 px-6 sm:px-8 py-3 rounded-lg font-medium hover:bg-gray-100 transition-colors">
เริ่มต้นฟรี
</button>
<button class="border-2 border-white text-white px-6 sm:px-8 py-3 rounded-lg font-medium hover:bg-white hover:text-blue-600 transition-colors">
ดูตัวอย่าง
</button>
</div>
</div>
</div>
</section>
State Variants - จัดการสถานะต่างๆ
Hover, Focus, และ Active States
<!-- Hover Effects -->
<button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded">
Hover เปลี่ยนสี
</button>
<div class="transform hover:scale-105 transition-transform">
Hover ขยายขนาด
</div>
<a href="#" class="text-blue-500 hover:text-blue-700 hover:underline">
Hover เปลี่ยนสีและขีดเส้นใต้
</a>
<!-- Focus Effects -->
<input class="border border-gray-300 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 px-3 py-2 rounded"
type="text" placeholder="Focus เปลี่ยนสี">
<button class="bg-green-500 focus:bg-green-600 focus:outline-none focus:ring-4 focus:ring-green-200 text-white px-4 py-2 rounded">
Focus Button
</button>
<!-- Active Effects -->
<button class="bg-red-500 active:bg-red-700 text-white px-4 py-2 rounded">
Active เปลี่ยนสี
</button>
<!-- Group Hover (เอฟเฟ็กต์เมื่อ hover parent) -->
<div class="group bg-white p-6 rounded-lg hover:bg-gray-50">
<h3 class="text-gray-900 group-hover:text-blue-600">หัวข้อ</h3>
<p class="text-gray-600 group-hover:text-gray-700">รายละเอียด</p>
</div>
Responsive States
<!-- Responsive Hover (hover เฉพาะใน desktop) -->
<button class="bg-blue-500 md:hover:bg-blue-600 text-white px-4 py-2 rounded">
Hover เฉพาะ Desktop
</button>
<!-- Combined Responsive + State -->
<div class="text-sm md:text-base hover:text-lg md:hover:text-xl">
ขนาดเปลี่ยนตาม breakpoint และ hover
</div>
Dark Mode Support
⚠️ หมายเหตุ: Dark Mode ต้องเปิดใช้งานใน tailwind.config.js ก่อน:
// tailwind.config.js
module.exports = {
darkMode: 'class', // หรือ 'media'
// ... config อื่นๆ
}
<!-- ธีมมืด-สว่าง -->
<div class="bg-white dark:bg-gray-800 text-gray-900 dark:text-white p-6">
<h2 class="text-xl font-bold">หัวข้อ</h2>
<p class="text-gray-600 dark:text-gray-300">เนื้อหาที่รองรับ Dark Mode</p>
</div>
<!-- ปุ่มสำหรับ Dark Mode -->
<button class="bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 hover:bg-gray-300 dark:hover:bg-gray-600 px-4 py-2 rounded">
ปุ่ม Dark Mode
</button>
Animation และ Transition Classes
Transition Effects
<!-- Transition พื้นฐาน -->
<div class="transition-colors duration-300 bg-blue-500 hover:bg-blue-600">
เปลี่ยนสีอย่างนุ่มนวล
</div>
<div class="transition-all duration-500 transform hover:scale-110 hover:rotate-3">
เปลี่ยนทุกอย่าง + หมุน + ขยาย
</div>
<!-- Transition เฉพาะ Property -->
<div class="transition-opacity duration-300 opacity-50 hover:opacity-100">
เปลี่ยนความโปร่งใส
</div>
<div class="transition-transform duration-200 hover:-translate-y-1">
เลื่อนขึ้น
</div>
Animation Classes
<!-- Animation พื้นฐาน -->
<div class="animate-spin w-8 h-8 border-4 border-blue-500 border-t-transparent rounded-full">
หมุนไม่หยุด
</div>
<div class="animate-pulse bg-gray-200 h-4 rounded">
กระพริบ
</div>
<div class="animate-bounce">
เด้งๆ
</div>
<!-- Custom Animation ด้วย arbitrary values (JIT Mode) -->
<div class="animate-[fadeIn_0.5s_ease-in-out]">
Fade In Animation (ต้องกำหนด @keyframes fadeIn เอง)
</div>
Transform Classes
<!-- Scale (ขยาย-ย่อ) -->
<div class="transform scale-50">ย่อเหลือ 50%</div>
<div class="transform scale-110 hover:scale-125">ขยาย 110% และ hover ขยาย 125%</div>
<!-- Rotate (หมุน) -->
<div class="transform rotate-45">หมุน 45 องศา</div>
<div class="transform hover:rotate-180 transition-transform">หมุนเมื่อ hover</div>
<!-- Translate (เลื่อน) -->
<div class="transform translate-x-4">เลื่อนขวา 1rem</div>
<div class="transform -translate-y-2">เลื่อนขึ้น 0.5rem</div>
<div class="transform hover:translate-x-2 hover:-translate-y-1 transition-transform">
เลื่อนขวาและขึ้นเมื่อ hover
</div>
<!-- Skew (เอียง) -->
<div class="transform skew-x-12">เอียงแนวนอน</div>
<div class="transform skew-y-6">เอียงแนวตั้ง</div>
เทคนิคการใช้งานขั้นสูง
1. JIT Mode และ Arbitrary Values
ใช้ค่าที่กำหนดเอง (JIT Mode เปิดอยู่ตามค่าเริ่มต้น)
<!-- ขนาดและระยะห่างที่กำหนดเอง -->
<div class="w-[350px]">ความกว้าง 350px</div>
<div class="h-[calc(100vh-64px)]">ความสูงคำนวณจาก viewport</div>
<div class="mt-[18px]">margin-top 18px</div>
<!-- สีที่กำหนดเอง -->
<div class="bg-[#bada55]">สีพื้นหลังที่กำหนดเอง</div>
<div class="text-[rgb(123,45,67)]">สีข้อความ RGB</div>
<!-- ขนาดตัวอักษรที่กำหนดเอง -->
<div class="text-[22px]">ขนาดตัวอักษร 22px</div>
<div class="text-[1.375rem]">ขนาดตัวอักษร 1.375rem</div>
<!-- Grid columns ที่กำหนดเอง -->
<div class="grid-cols-[1fr_2fr_1fr]">Grid 3 คอลัมน์ แบบ fraction</div>
⚠️ คำเตือน: Arbitrary values จะทำงานได้เฉพาะเมื่อ JIT Mode เปิดใช้งาน
2. การใช้ CSS Variables
<!-- ต้องมี CSS Variables กำหนดไว้ก่อน -->
<style>
:root {
--primary-color: #3b82f6;
--secondary-color: #64748b;
}
</style>
<div class="bg-[var(--primary-color)]">ใช้ CSS Variable</div>
<div class="text-[var(--secondary-color)]">ข้อความใช้ CSS Variable</div>
3. การใช้ Pseudo-elements และ Pseudo-selectors
<!-- First และ Last Child -->
<ul>
<li class="first:mt-0 last:mb-0 mt-4 mb-4">รายการที่ 1</li>
<li class="first:mt-0 last:mb-0 mt-4 mb-4">รายการที่ 2</li>
<li class="first:mt-0 last:mb-0 mt-4 mb-4">รายการที่ 3</li>
</ul>
<!-- Odd และ Even -->
<table class="w-full">
<tbody>
<tr class="odd:bg-gray-50 even:bg-white">
<td class="px-4 py-2">แถวคี่จะมีพื้นหลังสีเทา</td>
</tr>
<tr class="odd:bg-gray-50 even:bg-white">
<td class="px-4 py-2">แถวคู่จะมีพื้นหลังสีขาว</td>
</tr>
</tbody>
</table>
<!-- Disabled State -->
<button class="bg-blue-500 text-white px-4 py-2 rounded disabled:bg-gray-300 disabled:cursor-not-allowed disabled:opacity-50"
disabled>
Disabled Button
</button>
<!-- Before และ After (ต้องใช้ content) -->
<div class="before:content-['→'] before:mr-2 after:content-['←'] after:ml-2">
ข้อความมีเครื่องหมายก่อนหลัง
</div>
ข้อผิดพลาดที่ควรหลีกเลี่ยง
1. การใช้คลาสซ้ำซ้อน
<!-- ❌ ผิด: ใช้คลาสที่ซ้ำกัน -->
<div class="p-4 px-6 py-2">
<!-- px-6 และ py-2 จะ override p-4 -->
<!-- ผลลัพธ์: padding: 0.5rem 1.5rem (ไม่ใช่ 1rem ทั้งหมด) -->
</div>
<!-- ✅ ถูก: ใช้คลาสที่เฉพาะเจาะจง -->
<div class="px-6 py-2">
<!-- ใช้เฉพาะ px และ py ตามที่ต้องการ -->
</div>
2. ไม่เข้าใจลำดับความสำคัญของคลาส
<!-- ❌ ปัญหา: คลาสหลังจะ override คลาสแรก -->
<div class="text-red-500 text-blue-500">
<!-- จะเป็นสีน้ำเงิน เพราะ text-blue-500 มาทีหลัง -->
</div>
<!-- ✅ แก้ไข: ใช้คลาสเดียว -->
<div class="text-blue-500">
<!-- ชัดเจนว่าเป็นสีน้ำเงิน -->
</div>
<!-- ✅ หรือใช้ important (หลีกเลี่ยงถ้าไม่จำเป็น) -->
<div class="!text-red-500 text-blue-500">
<!-- จะเป็นสีแดง เพราะมี !important -->
</div>
3. การลืมใช้ Responsive Classes
<!-- ❌ ไม่ responsive -->
<div class="grid grid-cols-4 gap-4">
<!-- 4 คอลัมน์ในทุกขนาดหน้าจอ (เกินไปสำหรับมือถือ) -->
</div>
<!-- ✅ Responsive -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<!-- 1 คอลัมน์ในมือถือ, 2 ในแท็บเล็ต, 4 ใน desktop -->
</div>
4. การไม่ใช้ Transition
<!-- ❌ เปลี่ยนแปลงแบบกะทันหัน -->
<button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded">
Button แบบกะทันหัน
</button>
<!-- ✅ เปลี่ยนแปลงแบบนุ่มนวล -->
<button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded transition-colors duration-200">
Button แบบนุ่มนวล
</button>
เครื่องมือช่วยเหลือและ Resources
1. Browser Extensions
Tailwind CSS DevTools
- ตรวจสอบคลาสที่ใช้
- แสดงค่า CSS ที่แท้จริง
- Debug Responsive breakpoints
2. VS Code Extensions
Tailwind CSS IntelliSense
// settings.json
{
"tailwindCSS.includeLanguages": {
"html": "html",
"javascript": "javascript",
"vue": "vue",
"react": "javascriptreact",
"typescript": "typescript"
},
"tailwindCSS.classAttributes": [
"class",
"className",
"classList",
"ngClass"
],
"editor.quickSuggestions": {
"strings": true
}
}
Headwind (Class Sorter)
- จัดเรียงคลาสให้เป็นระเบียบ
- ทำให้โค้ดอ่านง่ายขึ้น
- ใช้ลำดับมาตรฐานของ Tailwind
3. Online Tools
Tailwind CSS Playground
- https://play.tailwindcss.com
- ทดลองเขียนออนไลน์
- ไม่ต้องติดตั้งอะไร
Tailwind UI Components
- https://tailwindui.com
- ตัวอย่าง Component สำเร็จรูป
- เรียนรู้จากโค้ดคุณภาพสูง
Official Documentation
- https://tailwindcss.com/docs
- Documentation ที่ครบถ้วน
- มีตัวอย่างทุกคลาส
โปรเจ็กต์ปฏิบัติ: สร้าง Feature Card
มาลองสร้าง Component ที่ครอบคลุมการใช้งานหลายๆ เทคนิค:
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Feature Card Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-50 p-8">
<div class="max-w-md mx-auto">
<!-- Feature Card -->
<div class="group bg-white rounded-2xl shadow-lg hover:shadow-xl transition-all duration-300 overflow-hidden border border-gray-100">
<!-- Header Image -->
<div class="relative h-48 bg-gradient-to-br from-blue-500 to-purple-600 overflow-hidden">
<div class="absolute inset-0 bg-black bg-opacity-20 group-hover:bg-opacity-10 transition-all duration-300"></div>
<div class="relative h-full flex items-center justify-center">
<div class="w-16 h-16 bg-white bg-opacity-20 rounded-2xl flex items-center justify-center group-hover:scale-110 transition-transform duration-300">
<svg class="w-8 h-8 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
</svg>
</div>
</div>
</div>
<!-- Content -->
<div class="p-6">
<div class="flex items-center justify-between mb-3">
<span class="inline-block bg-blue-100 text-blue-800 text-xs font-semibold px-2.5 py-0.5 rounded-full">
เทคโนโลยี
</span>
<span class="text-sm text-gray-500">2 นาทีในการอ่าน</span>
</div>
<h3 class="text-xl font-bold text-gray-900 mb-2 group-hover:text-blue-600 transition-colors duration-200">
ประสิทธิภาพสูงสุด
</h3>
<p class="text-gray-600 text-sm leading-relaxed mb-4">
เพิ่มความเร็วและประสิทธิภาพของเว็บไซต์ด้วยเทคนิคที่ทันสมัย รองรับการใช้งานบนทุกอุปกรณ์
</p>
<!-- Stats -->
<div class="flex items-center justify-between mb-4 p-3 bg-gray-50 rounded-lg">
<div class="text-center">
<div class="text-lg font-bold text-gray-900">99%</div>
<div class="text-xs text-gray-500">Uptime</div>
</div>
<div class="text-center">
<div class="text-lg font-bold text-gray-900">< 1s</div>
<div class="text-xs text-gray-500">Loading</div>
</div>
<div class="text-center">
<div class="text-lg font-bold text-gray-900">A+</div>
<div class="text-xs text-gray-500">Security</div>
</div>
</div>
<!-- Action Buttons -->
<div class="flex gap-2">
<button class="flex-1 bg-blue-500 hover:bg-blue-600 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2">
เรียนรู้เพิ่ม
</button>
<button class="p-2 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg transition-all duration-200">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" />
</svg>
</button>
</div>
</div>
<!-- Footer -->
<div class="px-6 py-3 bg-gray-50 border-t border-gray-100">
<div class="flex items-center justify-between">
<div class="flex items-center space-x-2">
<div class="w-6 h-6 bg-blue-500 rounded-full flex items-center justify-center">
<span class="text-xs font-bold text-white">T</span>
</div>
<span class="text-sm text-gray-600">โดย Team Tailwind</span>
</div>
<span class="text-xs text-gray-400">อัพเดทเมื่อ 2 ชม. ที่แล้ว</span>
</div>
</div>
</div>
</div>
</body>
</html>
สรุป
ใน EP 2 นี้ เราได้เรียนรู้เกี่ยวกับหัวใจสำคัญของ Tailwind CSS ที่ทำให้มันแตกต่างจาก CSS Framework อื่นๆ:
สิ่งสำคัญที่เราได้เรียนรู้:
- Utility-First คือการใช้คลาสเล็กๆ หลายคลาสมาประกอบกัน แทนการเขียน CSS แยกไฟล์
- ระบบการจัดหมวดหมู่คลาส ที่ครอบคลุม Layout, Spacing, Colors, Typography, และอื่นๆ
- เทคนิคการจำคลาสแบบเซียน ด้วยการจำ Pattern และสร้างระบบของตัวเอง
- Responsive Design ที่ใช้งานง่ายด้วย Breakpoint System
- State Variants สำหรับ Hover, Focus, และสถานะต่างๆ
- Animation และ Transition ที่ทำให้เว็บไซต์มีชีวิตชีวา
- JIT Mode และการใช้ Arbitrary Values สำหรับความยืดหยุ่น
จุดสำคัญที่ต้องจำ:
- Mobile-First: เริ่มจากมือถือแล้วขยายไป Desktop
- คลาสหลังชนะ: เมื่อมีคลาสที่ conflict กัน คลาสที่มาทีหลังจะชนะ
- ใช้ Transition: ทำให้การเปลี่ยนแปลงนุ่มนวล
- JIT Mode: ใช้ arbitrary values ได้แบบไม่จำกัด
- Dark Mode: ต้องเปิดใช้งานใน config ก่อน
EP 3 เรื่อง "เล่นสีและฟอนต์ให้เก่ง: เทคนิคสร้าง Design System ด้วย Tailwind" เราจะมาเรียนรู้เทคนิคการใช้สีและ Typography อย่างมืออาชีพ การสร้าง Design System ที่สม่ำเสมอ และการปรับแต่ง Tailwind ให้เข้ากับแบรนด์ของเรา
พร้อมที่จะก้าวสู่การเป็นมือโปร Tailwind CSS แล้วใช่ไหม? ติดตาม Superdev School เพื่อไม่พลาดเทคนิคเด็ดๆ ในตอนต่อไป!
มาสร้างเว็บไซต์สวยๆ ด้วย Tailwind CSS กันเถอะ! 🚀
อ่านบทความ Series อื่นๆ
🔵 Facebook: Superdev School (Superdev)
📸 Instagram: superdevschool
🎬 TikTok: superdevschool
🌐 Website: www.superdev.school