Coding Gun

Tailwind CSS คืออะไร? และใช้งานยังไง?

CSS Framework คือ เครื่องมือที่จะเตรียม CSS Class ที่พร้อมใช้งานมาให้เรา เพื่อที่เราจตะได้ไม่ต้องมานั่งเขียน CSS ซ้ำๆ ซึ่งทางเลือกของ CSS Framework ที่เรานิยมใช้มีดังนี้

  1. Bootstrap
  2. Foundation
  3. Bulma
  4. Materialize

ซึ่งน้องใหม่ที่มาแรงที่สุด ณ ตอนนี้คือ Tailwind CSS ซึ่ง ณ ปัจจุบันนี้ Tailwind CSS เป็น version 3.4

Tailwind CSS คือ CSS Framework ที่ช่วยให้เราสร้าง CSS ขึ้นมาใช้งานโดยเลือกเฉพาะ CSS class ที่เราใช้ใน HTML หรือ Javascript เท่านั้น

Tailwind CSS vs Bootstrap

ปัญกาของ Bootstrap และ CSS Framework อื่นๆมีดังนี้

Tailwind CSS ทำอะไรได้บ้าง?

คราวนี้ลองมาดูประโยชน์ของการใช้งาน Tailwind CSS กันบ้าง ซึ่งข้อดีของ TailwindCSS มีดังนี้

จะเห็นว่า Tailwind CSS นั้นมีความสามารถที่ช่วยแก้ปัญหาของ CSS Framework รู่นก่อนหน้า และยังเหมาะกับการทำงานกับ Front-end Framework ยุคใหม่อย่าง React, Angular และ VueJS

Tailwind CSS ทำงานยังไง

How Tailwind CSS work
การทำงานของ Tailwind CSS

หลักการทำงานของ Tailwind CSS คือ จะมี scanner เข้าไปค้นหา TailwindCSS class ใน html, Javascript หรือ file อื่นๆที่เรากำหนดไว้ใน tailwind.config.js หลังจากนั้น render output ออกมาเป็น CSS(styles.css) และถ้าเราต้องการ custom stylesheet หรือสร้าง components ขึ้นมาใหม่เราจะเข้าไปเขียนใน style.src.css

เริ่มต้นใช้งาน Tailwind

Tailwind CSS มีทางเลือกในการใช้งานที่หลากหลายเราสามารถเลือกใช้งานได้ด้วยวิธีต่างๆ ดังนี้

Tailwind CSS Color

การอ้างถึงสีของ Tailwind CSS นั้นถือว่ามีประโยชน์ในการใข้งานมากเพราะเราสามารถระบุความเข้มของสีได้จากตัวเลขข้างหลัง เช่น

text-green-500

สีของตัวอักษรจะเป็นสีเขียวความเข้ม 500 (ใส่ได้ตั้งแต่ 50-950) ตามตารางนี้

Tailwind color palettes

เวลาเรานำไปใช้จะง่ายกว่าเดิมมากๆ เพราะเราจะปรับสีอ่อนสีเข้มได้จากตัวเลขข้างหลังได้เลย

เข้าไปดูสีทั้งหมดที่ tailwind เตรียมไว้ให้ได้ที่นี่

ส่วนข้างหน้าเราสามารถกำหนดสีให้กับจุดต่างๆได้ดังนี้

ถ้าอยากให้ backgroud เป็น transparent เราจะใช้ bg-transparent

กำหนด Opacity

นอกจากจะเลือกสีจาก color palettes แล้วเรายังสามารถกำหนดได้โดยใส่ค่าของ opacity เข้าไปด้านหลังแบบนี้

<h1 class="bg-green-950/50">header</h1>
<h1 class="bg-green-950/[0.5]">header</h1>
<h1 class="bg-green-950 opacity-50">header</h1>

ทั้ง 3 แบบนี้ให้ผลลัพธ์เหมือนกันคือ opacity เป็น 0.5

Custom สีใหม่ขึ้นมาเอง

เราสามารถใช้สีที่ tailwind ไม่ได้เตรียมไว้ให้โดยการใส่เข้าไปใน tailwind.config.js

/** @type {import('tailwindcss').Config} */
module.exports = {
  theme: {
    colors: {
      'midnight': '#121063',
      'tahiti': '#3ab7bf'
    },
  },
}

หลังจากนั้นเราสามารถเรียกใช้ใน html เหมือนสีอื่นๆได้เลย แต่จะยังกำหนดความเข้มของสีไม่ได้

<div class="bg-midnight text-tahiti">
    <!-- ... -->
</div>

ถ้าต้องการกำหนดความเข้มของสีเหมือนค่า default ให้กำหนดแบบนี้

/** @type {import('tailwindcss').Config} */
module.exports = {
  theme: {
    colors: {
      'midnight': '#121063',
      'tahiti': {
        100: '#cffafe',
        200: '#a5f3fc',
        300: '#67e8f9',
        400: '#22d3ee',
        500: '#06b6d4',
        600: '#0891b2',
        700: '#0e7490',
        800: '#155e75',
        900: '#164e63',
      },
    },
  },
}

เวลาใช้งานเราจะเรียกใช้แบบกำหนดความเข้มได้

<div class="bg-midnight text-tahiti-500">
    <!-- ... -->
</div>

หรือจะใส่เข้าไปแบบเฉพาะจุดแบบนี้ได้เลย แต่ไม่ค่อยแนะนำเพราะจำทำให้เรากลับมาแก้ไขได้ยากและนำสีนี้ไปใช้ในจุดอื่นต่อไม่ได้

<div class="bg-[#1da1f2]">
    <!-- ... -->
</div>

จัดการกับ State

Tailwind จะสามารถใส่ prefix เข้าไปข้างหน้าเพื่อจัดการเปลี่ยน style ตาม state ต่างๆได้ ซึ่งเราจะแบ่ง state ออกเป็น 3 ส่วนด้วยกันคือ

Hover และ Focus

เราจะใช้ hover: และ focus: สำหรับการเปลี่ยน style เมื่อ mouse มาวางทับ element นั้น

<div class="bg-gray-500/50 hover:bg-gray-500">
    <!-- ... -->
</div>

ในตัวอย่างนี้ div นี้่จะมี style อยู่ 2 state คือ

  1. state ปกติจะมี background สีเทา ที่มีความเข้ม 500 และมี opacity เป็น 0.5(bg-gray-500/50)
  2. เมื่อมี mouse มาวางทับ div นี้จะเปลี่ยน opacity เป็น 1(hover:bg-gray-500) ส่วน focus: ก็จะเหมือนกับ hover แต่จะใช้สำหรับ input ใน form ที่ต้องมีการเลือก เหมือนกับ event onfocus ใน javascript

Responsive Design

เช่นเดียวกับใน bootstrap เราจะมี responsive web ซึ่งจะเปลี่ยนไปตามขนาดของอุปกรณ์ที่เปิด เช่น

<img class="w-16 md:w-32 lg:w-48" src="...">

ในตัวอย่างนี้จะเริ่มจาก

Breakpoint Prefix Minimum Width CSS
sm 640px @media (min-width: 640px) { … }
md 768px @media (min-width: 768px) { … }
lg 1024px @media (min-width: 1024px) { … }
xl 1280px @media (min-width: 1280px) { … }
2xl 1536px @media (min-width: 1536px) { … }

ใน Tailwind CSS เราสามารถเปลี่ยนค่าของ breakpoint(minimum width) ใน tailwind.config.js ได้

Dark Mode

เราสามารถกำหนด style สำหรับ dark mode เพื่อให้ผู้ใช้่งานสามารถเลือกเปลี่ยน theme ไปเป็น dark mode ได้ โดยที่เราจะใส่ dark: นำหน้า style ที่ต้องการใส่ลงไป เช่น

<div class="bg-gray-100 dark:bg-gray-950">
    <!-- ... -->
</div>

เราจะใช้สีเทาที่ความเข้ม 100 เป็น background(bg-gray-100) แต่ถ้าเราเปลี่ยนเป็น dark mode เราจะใช้ bg-gray-950 เป็น background แทน

การเปลี่ยนเป็น dark mode เราสามารถใส่ class=“dark” ที่ html element ได้เลย

<!DOCTYPE html>
<html lang="th-TH" class="dark">
    <!-- ... -->
</html>

Tailwind CSS Button

การจัดการกับ style ของปุ่มกด ก็จะเหมือนกับ bootstrap แต่ใน Tailwind CSS เราจะต้องใช้ style ที่เค้าทีมาให้ตกแต่งปุ่มขึ้นมาเองไม่ได้มี btn class เหมือนใน bootstrap ในตัวอย่างนี้เราจะทำการตกแต่งปุ่มแบบง่ายๆด้วย stylesheet แบบนี้

<button type="button" 
        class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4
               focus:ring-blue-300 font-medium rounded-lg text-sm
               px-5 py-2.5 me-2 mb-2 
               focus:outline-none">
        Simple Button
</button>

ซึ่ง CSS class แต่ละตัวจะหมายถึง

rem คือ ค่าที่กำหนดคุณด้วยขนาดของตัวอักษร m ที่ root element(html หรือ body)

เราจะได้ผลลัพธ์ออกมาเป็นปุ่มหน้าตาแบบนี้

ซึ่งจะเห็นว่าเราต้องกำหนด style เยอะมากๆถึงจะได้ button ที่ต้องการ ดังนั้นเมื่อเริ่มใช้ Tailwind CSS ไปซักพักนึง เราจึงต้องสร้าง หรือหา Components มาใช้งานเพื่อที่จะไม่ต้องมาเขียน class ซ้ำไปซ้ำมาแบบนี้

Phanupong Permpimol
Follow me