Bài 1. Tailwind CSS là gì? Tư duy utility-first

Tailwind CSS là framework CSS theo hướng utility-first: thay vì viết CSS riêng hay dùng thành phần có sẵn, bạn ghép các lớp tiện ích nhỏ (p-4, text-lg, bg-green-600) ngay trong HTML. Bài này giải thích triết lý, ưu nhược điểm và so sánh với CSS thuần, Bootstrap.

35 phútCơ bản
Bạn sẽ học được
  • Hiểu khái niệm utility-first
  • So sánh Tailwind với CSS thuần và Bootstrap
  • Đọc hiểu một đoạn giao diện viết bằng Tailwind
  • Biết các điểm mới của Tailwind CSS v4
Thuật ngữ cần biết
Utility class
Lớp làm đúng một việc: p-4 = padding 1rem.
Design token
Thang giá trị dùng chung: màu, khoảng cách, cỡ chữ.
Variant
Tiền tố điều kiện: hover:, md:, dark:.

Một số khái niệm

Với CSS thuần bạn phải đặt tên class (.the-khoa-hoc) rồi viết CSS ở tệp khác; với Bootstrap bạn dùng thành phần dựng sẵn (.card). Tailwind cho bạn các viên gạch nhỏ theo một hệ thống thiết kế thống nhất (khoảng cách bội số 0.25rem, bảng màu 50–950, cỡ chữ xs–9xl) để tự ghép bất kỳ giao diện nào mà không rời HTML. Công cụ chỉ sinh ra CSS cho những lớp bạn thực sự dùng nên tệp CSS rất nhỏ.

Tailwind CSS v4 (2025, hiện là 4.x) viết lại hoàn toàn: engine Oxide nhanh hơn nhiều lần, cấu hình ngay trong CSS bằng @theme thay cho tailwind.config.js, chỉ cần một dòng @import "tailwindcss";, tự dò tệp nguồn, dùng tính năng CSS hiện đại (cascade layers, biến CSS, color-mix, container query).

So sánh ba cách viết cùng một nút

<!-- CSS thuần -->
<button class="nut">Đăng ký</button>
<style>.nut { padding: .5rem 1rem; background: #16a34a; color: #fff; border-radius: .5rem; font-weight: 600; }
.nut:hover { background: #15803d; }</style>

<!-- Bootstrap -->
<button class="btn btn-success">Đăng ký</button>

<!-- Tailwind CSS -->
<button class="px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg font-semibold">Đăng ký</button>
<div class="flex flex-wrap gap-3 items-center">
  <button class="px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg font-semibold">Đăng ký</button>
  <button class="px-4 py-2 border-2 border-sky-600 text-sky-700 rounded-full hover:bg-sky-50">Xem thêm</button>
  <span class="inline-flex items-center gap-1 rounded-md bg-amber-100 px-2 py-1 text-xs font-medium text-amber-800">Mới</span>
</div>
Kết quả hiển thị

Ưu và nhược điểm

Ưu điểmNhược điểm
Không phải nghĩ tên class, không chuyển qua lại giữa tệpHTML dài, nhiều lớp
Thiết kế nhất quán nhờ thang giá trị chungCần thời gian làm quen tên lớp
CSS đầu ra rất nhỏ, không bị phình theo thời gianKhông có thành phần JS sẵn như Bootstrap
Responsive, trạng thái, chế độ tối ngay trong classLặp lớp nếu không tách thành phần (component)

Vấn đề “HTML dài” được giải quyết bằng cách tách thành phần trong framework (React, Vue, Blade, PHP include) hoặc bằng vòng lặp, nên Tailwind đặc biệt hợp với React/Next.js.

Đọc một thẻ giao diện

<div class="max-w-sm rounded-2xl bg-white p-5 shadow-lg ring-1 ring-slate-200">
  <div class="flex items-center gap-3">
    <div class="grid size-12 place-items-center rounded-xl bg-green-100 text-xl font-bold text-green-700">TW</div>
    <div><h3 class="font-semibold text-slate-900">Tailwind CSS</h3><p class="text-sm text-slate-500">12 bài · Cơ bản đến nâng cao</p></div>
  </div>
  <p class="mt-4 text-slate-600">Thiết kế giao diện bằng lớp tiện ích, nhanh và nhất quán.</p>
  <a href="#" class="mt-4 inline-block rounded-lg bg-slate-900 px-4 py-2 text-sm font-medium text-white hover:bg-slate-700">Học ngay →</a>
</div>
Kết quả hiển thị

Đọc lớp như đọc câu: max-w-sm chiều rộng tối đa nhỏ, rounded-2xl bo góc lớn, p-5 padding 1.25rem, shadow-lg bóng lớn, ring-1 viền mảnh, size-12 rộng cao 3rem.

Mẹo hay

Cài tiện ích Tailwind CSS IntelliSense cho VS Code: gợi ý tên lớp, xem CSS tương ứng khi rê chuột, cảnh báo lớp xung đột.

Lưu ý

Tailwind không thay thế việc hiểu CSS; mỗi lớp tương ứng một thuộc tính CSS. Học trước loạt CSS (ít nhất bài 1–15) sẽ giúp bạn dùng Tailwind hiệu quả hơn nhiều.

Thực hành
  1. Viết lại một nút và một thẻ từ bài CSS bằng lớp Tailwind.
  2. Mở tailwindcss.com/docs, tìm lớp tương ứng của 5 thuộc tính CSS bạn hay dùng.
  3. Đọc và giải thích từng lớp trong ví dụ thẻ ở trên.
Tóm tắt bài học
  • Utility-first: ghép lớp nhỏ ngay trong HTML.
  • Hệ thống thiết kế thống nhất, CSS đầu ra nhỏ.
  • v4: cấu hình bằng CSS (@theme), engine Oxide, @import "tailwindcss".
  • Rất hợp với framework thành phần như React, Next.js.