Skip to content

Tailwind CSS Framework (Utility first)

Published: at 12:00 PM (3 min read)

ในวงการ CSS เราคุ้นเคยกับชื่อ Bootstrap ที่เคยโด่งดังมาก่อน หรือแม้แต่ Bulma CSS ที่เป็นที่นิยมในยุค Flexbox ทว่าปัจจุบัน ความนิยมของทั้งสองเฟรมเวิร์คนี้ลดลง โดยมี Tailwind CSS เข้ามาแทนที่ ดังนั้น แม้ว่าคุณอาจไม่ได้ใช้ Tailwind CSS โดยตรงในงานของคุณ แต่ในฐานะนักพัฒนา การรู้จักและเข้าใจ Tailwind CSS ก็เป็นสิ่งสำคัญในยุคปัจจุบัน

Table of contents

Open Table of contents

Tailwind Concept

Tailwind CSS ใช้แนวคิด “Utility-First” ซึ่งประกอบด้วย CSS class ขนาดเล็กที่มีหน้าที่เฉพาะเจาะจง สามารถนำมาประกอบกันเพื่อสร้างสไตล์ที่ต้องการ ตัวอย่างเช่น mt-2 หมายถึง margin-top: 8px; แนวคิดนี้คล้ายกับ functional programming ในการเขียนโปรแกรม

นอกจากนี้ Tailwind ยังรองรับการทำ responsive design, active และ focus state รวมถึง pseudo-classes อื่นๆ อีกทั้งยังอนุญาตให้ใช้ค่า arbitrary ผ่าน class ได้ เช่น หากต้องการกำหนดความสูงเฉพาะ สามารถใช้ h-[32px] เพื่อกำหนด height: 32px;

Height

สามารถดูได้ที่ทั้งหมดได้ที่ Tailwind-height

ClassProperties
h-0height: 0px;
h-pxheight: 1px;
h-0.5height: 0.125rem; / 2px /
h-1height: 0.25rem; / 4px /
h-1.5height: 0.375rem; / 6px /
h-2height: 0.5rem; / 8px /
h-2.5height: 0.625rem; / 10px /
h-3height: 0.75rem; / 12px /
h-3.5height: 0.875rem; / 14px /
h-4height: 1rem; / 16px /
h-5height: 1.25rem; / 20px /
h-6height: 1.5rem; / 24px /
h-7height: 1.75rem; / 28px /
h-8height: 2rem; / 32px /
h-9height: 2.25rem; / 36px /
h-10height: 2.5rem; / 40px /
h-11height: 2.75rem; / 44px /
h-12height: 3rem; / 48px /
h-14height: 3.5rem; / 56px /
h-16height: 4rem; / 64px /
h-20height: 5rem; / 80px /
h-autoheight: auto;
h-1/2height: 50%;
h-1/3height: 33.333333%;
h-2/3height: 66.666667%;
h-1/4height: 25%;
h-2/4height: 50%;
h-3/4height: 75%;
h-1/5height: 20%;
h-2/5height: 40%;
h-3/5height: 60%;
h-4/5height: 80%;
h-fullheight: 100%;
h-screenheight: 100vh;
h-svhheight: 100svh;
h-lvhheight: 100lvh;
h-dvhheight: 100dvh;
h-minheight: min-content;
h-maxheight: max-content;
h-fitheight: fit-content;

Width

สามารถดูได้ที่ทั้งหมดได้ที่ Tailwind-width

ClassProperties
w-0width: 0px;
w-pxwidth: 1px;
w-1width: 0.25rem; / 4px /
w-2width: 0.5rem; / 8px /
w-3width: 0.75rem; / 12px /
w-4width: 1rem; / 16px /
w-5width: 1.25rem; / 20px /
w-6width: 1.5rem; / 24px /
w-7width: 1.75rem; / 28px /
w-8width: 2rem; / 32px /
w-9width: 2.25rem; / 36px /
w-10width: 2.5rem; / 40px /
w-11width: 2.75rem; / 44px /
w-12width: 3rem; / 48px /
w-14width: 3.5rem; / 56px /
w-16width: 4rem; / 64px /
w-20width: 5rem; / 80px /
w-24width: 6rem; / 96px /
w-28width: 7rem; / 112px /
w-32width: 8rem; / 128px /
w-autowidth: auto;
w-1/2width: 50%;
w-1/3width: 33.333333%;
w-2/3width: 66.666667%;
w-1/4width: 25%;
w-2/4width: 50%;
w-3/4width: 75%;
w-1/5width: 20%;
w-2/5width: 40%;
w-3/5width: 60%;
w-4/5width: 80%;
w-fullwidth: 100%;
w-screenwidth: 100vw;
w-svwwidth: 100svw;
w-lvwwidth: 100lvw;
w-dvwwidth: 100dvw;
w-minwidth: min-content;
w-maxwidth: max-content;
w-fitwidth: fit-content;

Example

ต่อไปเราจะทดลองสร้าง Card Component โดยมีข้อกำหนดดังต่อไปนี้

โดยที่ถ้าเริ่มต้นเราจะเห็นได้เลยว่าจริงๆแล้วสำหรับ Tailwind คือการเอา utility class มารวมกัน

SpecClass
width 128pxw-32
height 80pxh-20
padding 8 pxp-2
margin 8 pxm-2
border-width 1 pxborder
border-style solidborder-solid
border-color grayborder-gray-500

เมื่อรวมกันแล้วใส่ลงใน classname ของ react component เราจะได้แบบ code ตัวอย่างด้านล่าง

const Card: FC<PropsWithChildren> = ({ children }) => {
  return (
    <div className="m-2 h-20 w-32 border border-solid border-gray-500 p-2">
      {children}
    </div>
  );
};

card-basic-example

ต่อมาเราบอกว่า อยากให้ Card นี้มีขอบ

const Card: FC<PropsWithChildren> = ({ children }) => {
  // เพิ่ม rounded-lg
  return (
    <div className="m-2 h-20 w-32 rounded-lg border border-solid border-gray-500 p-2">
      {children}
    </div>
  );
};

card-border-radius-example

Responsive

ต่อไปเราจะทดลองสร้าง Card Component โดยมีข้อกำหนดดังต่อไปนี้

ใน Tailwind มี responsive class อยู่ ตาม Responsive-design

BreakpointMinimum width CSS
smmin-width: 640px
mdmin-width: 768px
lgmin-width: 1024px
xlmin-width: 1280px
2xlmin-width: 1536px
const Card: FC<PropsWithChildren> = ({ children }) => {
  return (
    <div className="m-2 h-20 w-32 rounded-lg border border-solid border-gray-500 bg-slate-700 p-2 text-white md:bg-stone-700 lg:bg-white lg:text-black">
      {children}
    </div>
  );
};

🎉🎉 ผลลัพธ์ที่ได้ก็คือ

card-responsive-example

Developer Extension

Conclusion from writer

Tailwind CSS ไม่ได้ยากที่จะใช้งาน แต่อาจมีช่วงการเรียนรู้ (Learning Curve) ในระยะแรก เมื่อเรายังไม่คุ้นเคยกับชื่อ class ที่ตรงกับ CSS ที่ต้องการ อย่างไรก็ตาม ปัญหานี้จะหมดลงเมื่อใช้งานบ่อยขึ้น จนสามารถจดจำได้

การใช้งาน Tailwind คล้ายกับแนวคิดของ Functional Programming ซึ่งถือเป็นจุดแข็งหลักของ framework นี้ ทำให้การพัฒนาเป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นอีกด้วย


Next Post
เครื่องมือช่วยนักพัฒนาเว็บ React-Scan