+2

Tailwind CSS is so guud

Mở đầu

Tailwind Css là xây dựng dựa trên PostCss - một preprocessor css. Không giống như sass, PostCss là một tool để transform css syntax giúp bạn viết css theo cách của riêng mình ✌✌ và sau đó biên dịch thành file css cuối

Chính vì vậy nên với tailwind chúng ta có thể viết ít, ít đến không tưởng mà vẫn generate ra những đoạn code css phức tạp 👀👀 . Khi sử dụng tailwind trong dự án chúng ta cũng chỉ cần cài dưới dạng dev dependency tiết kiệm được chút effort khi build 👌👌. Thời điểm mình viết là version 3 khi mà JIT mode (just-in-time) đã release

Thinking in tailwind

Với các framework frontend hiện nay, chúng ta thường chia nhỏ ứng dụng thành các component để tái sử dụng. Trong việc viết css cũng không ngoại lệ, tailwind xây dựng các bộ corePlugins ví dụ như margin , padding , float , ... giúp cho việc viết css chỉ còn đơn giản là gọi tên và lắp ghép các plugin lại với nhau 💁💁. Tailwind cũng giới thiệu các layer trong việc viết css của mình với AtRule @layer

  • @layer base : dành cho các plain HTML element
  • @layer components : dành cho các class base ví dụ như card , button , heading , ... và có thể được override bằng utilities layer
  • @layer utilities : dành cho các trường hợp đặc biệt và cần có độ ưu tiên hơn cả

Khi sử dụng @layer những class không dùng đến sẽ không được compile. Và hơn thể nữa mọi thứ trong tailwind là linh hoạt, người dùng có thể dễ dàng cấu hình theo design của bản thân

Cấu hình

Trong thư mục root, tạo file tailwind.config.js để cấu hình

Postcss follow

Content : nơi mà postCss sẽ quét các class names, vậy nên càng quét rộng càng load lâu, càng chỉ định rõ ràng path càng tốt

Content config

Theme : là nơi định nghĩa bộ color pallet , fonts , breakpoint , ... của dự án. Mặc định tailwind đã cung cấp cho chúng ta bộ default theme, do vậy nếu muốn kế thừa các giá trị mặc định hãy viết trong extends, nếu không tailwind hiểu là chúng ta đang ghi đè

extend default theme

override default break point

Plugins : plugin là bộ css cho các mục đích phổ biến nhưng vì một lý do nào đó không được tích hợp trong core, nhưng có thể cài đặt bằng npm và thêm vào trong file config. Hiện tại offical plugin có 5 plugin lần lượt là Typography , Forms , Aspect ratio , Line Clamp , Container queries

offical plugin

Presets : cho phép import mảng các file config khác, không nên dùng nên không viết thêm 🙂

Dark mode : xác định strategy toggle dark mode , có hai mode là "media": tương ứng với media mode system của máy và "class" : trigger các element bên trong class "dark"

dark mode

Important : nếu set là true thì mọi class của tailwind sẽ đều là import , không nên dùng! Có nhiều cách để apply import tý mình sẽ giới thiệu ở phần sau

Prefix : add một tiền tố cho các classname của tailwind sau khi compile

Seperator: ký tự sẽ để tailwind hiểu là dấu cách khi compile, mặc định là "_" bạn biết hàm calc() chứ

width: calc(100vw - 100px) // work
height: calc(100vh-100px) // don't work

nên khi viết class để tailwind hiểu sẽ phải là

<div className="w-[calc(100vw_-_100px)]"> A </div>

CorePlugin : cho phép on/off các core plugin trong dự án

disable plugin trong dự án

Tiện lợi mà TailwindCss mang lại

Responsive design : khi đã config breakpoint trong file cấu hình các điều sau đây là tương đương

//config 
screens : {
    tablet : {max : 1024px},
    mobile : {max : 768px}
}
//    
<div className = "w-10 tablet:w-8 mobile:w-6"> hello </div> 
    
// same with 
@media (max-width: 1024px){
  width : 32px
}
@media (max-width : 768px){
  width : 24px
}  

Responsive chưa bao giờ dễ dàng đến thế 😃😃

Arbitrary values ⭐⭐⭐ : bình thường khi design sẽ thường lấy khoảng cách là các bội số của 4, nhưng cũng thường hay xảy ra việc có những phần tử có margin , padding đặc biệt, ... . Đó là lúc sử dụng giá trị tùy ý ( tính năng của JIT mode mình nói ở trên )

<div className="w-[11px] bg-[#a1b2c3]">a</div>
// same with 
{ 
   width : 11px
   background-color : #a1b2c3
}

Code nhanh hơn gấp 1000 lần đúng không ạ

Dark Mode , pseudo class , hover , focus : tất cả chỉ cần gọi qua classname, quá nhanh quá tiện

Kiểm soát biến :

Refer to theme variable in css file

Thay vì sử dụng biến này kia , thì mình thích dùng kiểu này hơn 😉 . Hàm theme() refer đến các giá trị config của tailwind, cho nên dễ dàng quản lý

Kết bài

Bài viết của mình không có hướng dẫn setup, bạn có thể xem trên trang chủ https://tailwindcss.com/docs/installation.

Bên cạnh việc viết css kiểu truyền thống rồi module hoặc css-in-js đang nổi thì cá nhân mình thấy sử dụng tailwind thích hơn nhiều. Cá nhân mình cũng có một lần đáng nhớ khi dự án đổi design, nguyên một bộ color pallet bị đổi luôn, nhưng may mà dự án đó sử dụng tailwind cho nên mọi việc được xử lý trong phút mốt, đến anh lead của mình cũng phải há hốc mồm. Đó, dị nên không ngoa đâu, bạn nên thử đi 😚😚


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí