Ra mắt Tailwind CSS v4.0
(tailwindcss.com)- Tailwind CSS v4.0 là bản phát hành đã viết lại framework từ đầu, giúp tăng mạnh hiệu năng build và chuyển luồng cấu hình, tùy biến sang hướng lấy CSS làm trung tâm
- Theo chuẩn Catalyst, build đầy đủ đã nhanh hơn 3,78 lần, từ 378ms ở v3.4 xuống 100ms ở v4.0; còn incremental build không có CSS mới được cải thiện 182 lần, từ 35ms xuống 192µs
- Việc cài đặt được đơn giản hóa với một dòng
@import "tailwindcss"và mặc định không cần cấu hình; người dùng Vite có thể dùng@tailwindcss/vitethay cho PostCSS - v4.0 tận dụng các tính năng CSS hiện đại như cascade layers,
@property,color-mix(), logical properties, đồng thời bổ sung tự động phát hiện nội dung và xử lý@importtích hợp sẵn - Container query, 3D transform, API gradient mở rộng,
@starting-style,not-*,field-sizing,color-scheme,inert... đã trở thành tính năng lõi, giúp giảm phụ thuộc vào plugin riêng
Cỗ máy hiệu năng cao được viết lại từ đầu
- Tailwind CSS v4.0 là phiên bản được viết lại hoàn toàn từ đầu dựa trên nhiều năm kinh nghiệm về kiến trúc
- Trong benchmark nội bộ của dự án, full rebuild nhanh hơn hơn 3,5 lần và incremental build nhanh hơn hơn 8 lần
- Thời gian build trung vị theo chuẩn Catalyst như sau
- Build đầy đủ: v3.4 378ms → v4.0 100ms, cải thiện 3,78 lần
- Incremental rebuild có CSS mới: 44ms → 5ms, cải thiện 8,8 lần
- Incremental rebuild không có CSS mới: 35ms → 192µs, cải thiện 182 lần
- Những incremental build không cần biên dịch CSS mới nay nhanh hơn 100 lần, hoàn thành ở mức micro giây
- Càng làm việc lâu trên một dự án, bạn càng thường tái sử dụng các class đã dùng như
flex,col-span-2,font-bold, nên loại build này sẽ xuất hiện thường xuyên
- Càng làm việc lâu trên một dự án, bạn càng thường tái sử dụng các class đã dùng như
Tận dụng nền tảng CSS hiện đại
- v4.0 chủ động khai thác các khả năng của nền tảng web đã phát triển kể từ Tailwind CSS v3.0
- Các tính năng CSS nền tảng chính gồm có
- Native cascade layers: kiểm soát chi tiết hơn cách các quy tắc style khác nhau tương tác với nhau
- Registered custom properties: cho phép animate gradient và cải thiện mạnh hiệu năng trên các trang lớn
color-mix(): có thể điều chỉnh độ mờ của mọi giá trị màu, bao gồm CSS variables vàcurrentColor- Logical properties: đơn giản hóa hỗ trợ RTL và giảm kích thước CSS được tạo ra
- Các tính năng này cũng giúp đơn giản hóa cách Tailwind được triển khai nội bộ, giảm bề mặt phát sinh lỗi và giúp bảo trì dễ hơn
Đơn giản hóa cài đặt và tích hợp build
- Quy trình cài đặt được tinh gọn để giảm số bước và phần boilerplate
npm i tailwindcss @tailwindcss/postcss- Thêm
@tailwindcss/postcssvào plugin PostCSS - Dùng
@import "tailwindcss"trong file CSS
- Trong v4.0, bạn có thể import và dùng Tailwind chỉ bằng một dòng CSS thay vì chỉ thị
@tailwind - Bản v4.0 cung cấp luồng làm việc không cần cấu hình, có thể bắt đầu mà không cần bất kỳ thiết lập nào, kể cả đường dẫn file template
- Không cần plugin bên ngoài riêng để bundle quy tắc
@import; đồng thời Lightning CSS được dùng nội bộ cho vendor prefixing và chuyển đổi cú pháp hiện đại - Người dùng Vite có thể chọn
@tailwindcss/vitethay cho PostCSS- Tailwind CSS v4.0 đã nhanh khi dùng dưới dạng plugin PostCSS, nhưng plugin Vite còn cho hiệu năng tốt hơn nữa
Tự động phát hiện nội dung và import tích hợp
- Thiết lập mảng
contenttừng cần ở v3 nay được thay bằng heuristic tự động phát hiện trong v4.0 - Các mục có trong
.gitignoresẽ tự động bị bỏ qua để không quét dependency hoặc các file sinh ra nhưng không được quản lý phiên bản- Ví dụ:
/node_modules,/coverage,/.next,/build
- Ví dụ:
- Các phần mở rộng nhị phân như ảnh, video,
.zipcũng tự động bị bỏ qua - Khi cần chủ động thêm các nguồn vốn mặc định bị loại trừ, bạn có thể dùng chỉ thị
@sourcengay trong file CSS@source "../node_modules/@my-company/ui-lib";@sourcecũng dùng cùng heuristic nên các loại file nhị phân vẫn bị loại trừ mà không cần khai báo phần mở rộng riêng
- Trước v4.0, muốn inline file CSS khác bằng
@importthì cần plugin riêng nhưpostcss-import, nhưng giờ đã có hỗ trợ import tích hợp sẵn, không cần thêm công cụ khác- Hệ thống import được xây riêng cho Tailwind CSS và tích hợp chặt với engine nên chạy nhanh hơn
Cấu hình CSS-first và theme variables
- Một thay đổi lớn của v4.0 là cấu hình dự án được thực hiện trực tiếp trong CSS thay vì bằng JavaScript
- Thay vì file
tailwind.config.js, bạn có thể dùng@themetrong file CSS import Tailwind để tùy biến- Thiết lập design token
- Định nghĩa utility tùy chỉnh
- Định nghĩa variant tùy chỉnh
- Các design token định nghĩa trong
@thememặc định sẽ được xuất ra dưới dạng CSS variables- Ví dụ:
--font-display,--breakpoint-3xl,--color-avocado-500,--ease-fluid
- Ví dụ:
- Các CSS variables được tạo ra như vậy có thể được tham chiếu trong CSS thông thường ở runtime
- Tái sử dụng trong inline style
- Truyền vào các thư viện như Motion để xử lý animation
Giá trị utility động và variant
- v4.0 đơn giản hóa để nhiều utility và variant có thể nhận các giá trị tùy ý mà không cần thiết lập trước
- Grid có thể dùng kích thước mong muốn mà không cần cấu hình riêng
- Ví dụ:
grid grid-cols-15
- Ví dụ:
- Các boolean data attribute tùy chỉnh cũng có thể được target mà không cần định nghĩa trước
- Ví dụ:
data-current:opacity-100
- Ví dụ:
- Các utility spacing như
px-*,mt-*,w-*,h-*được suy ra động từ một biến spacing scale duy nhất- Ví dụ:
--spacing: 0.25rem w-17sẽ được tạo dưới dạngcalc(var(--spacing) * 17)
- Ví dụ:
- Công cụ nâng cấp đi kèm v4.0 cũng sẽ tự động đơn giản hóa trong hầu hết trường hợp khi phát hiện cú pháp giá trị tùy ý không còn cần thiết
Bảng màu và container query
- Toàn bộ bảng màu mặc định đã được nâng cấp từ
rgbsangoklch- Vượt qua giới hạn của không gian màu sRGB để tận dụng gamut rộng hơn, giúp màu sắc rực rỡ hơn
- Vì vẫn cố giữ cân bằng giữa các màu như ở v3, nên khi nâng cấp dự án cũ sẽ không có cảm giác như một breaking change
- Hỗ trợ container query đã trở thành tính năng lõi trong v4.0, nên không còn cần plugin
@tailwindcss/container-queries - Variant
@max-*mới cho phép dùng max-width container query - Có thể xếp chồng
@min-*và@max-*để định nghĩa phạm vi container query giống như với các breakpoint variant thông thường
3D transform và API gradient mở rộng
- v4.0 bổ sung API cho 3D transform
rotate-x-*rotate-y-*scale-z-*translate-z-*
- Tính năng gradient cũng được mở rộng để tạo đa dạng hiệu ứng hơn mà không cần CSS tùy chỉnh
- Linear gradient có thể nhận góc làm giá trị
- Ví dụ:
bg-linear-45 bg-gradient-*trước đây đã được đổi tên thànhbg-linear-*
- Ví dụ:
- Chế độ nội suy màu của gradient có thể được điều khiển bằng modifier
bg-linear-to-r/srgbbg-linear-to-r/oklch- Mặc định nội suy trong v4.0 là OKLAB, và bạn cũng có thể dùng modifier cho các không gian màu khác
- Các utility
bg-conic-*,bg-radial-*mới cho phép tạo conic gradient và radial gradient- Hoạt động cùng với
from-*,via-*,to-*hiện có - Bao gồm hỗ trợ giá trị tùy ý để điều khiển chi tiết như cách nội suy màu và vị trí gradient
- Hoạt động cùng với
Variant và utility mới
- Variant
startingmới hỗ trợ CSS@starting-style- Có thể tạo transition thuộc tính khi phần tử xuất hiện lần đầu
- Có thể animate các phần tử xuất hiện trên trang mà không cần JavaScript
- Mức hỗ trợ trình duyệt có thể vẫn chưa đủ với đa số team, nhưng đang đến rất gần
- Variant
not-*mới hỗ trợ pseudo-class CSS:not()- Ví dụ:
not-hover:opacity-75 - Cũng có thể phủ định media query và
@supportsquery
- Ví dụ:
- v4.0 cũng bổ sung các utility và variant sau
inset-shadow-*,inset-ring-*: có thể xếp tối đa 4 lớp box shadow trên một phần tửfield-sizing: hỗ trợ tự động thay đổi kích thước textarea mà không cần JavaScriptcolor-scheme: có thể loại bỏ scrollbar sáng trong dark modefont-stretch: điều chỉnh variable font hỗ trợ nhiều độ rộng khác nhauinert: style cho các phần tử không tương tác được đánh dấu bằng thuộc tínhinertnth-*: hỗ trợ style theo họ nthin-*: hoạt động tương tựgroup-*mà không cần classgroup:popover-open: variantopenhiện có cũng target được popover đang mở- descendant variant: style cho mọi phần tử con
Bắt đầu và lộ trình nâng cấp
- Với dự án mới, có thể dùng Tailwind CSS v4.0 theo tài liệu cài đặt
- Nếu muốn thử ngay trong trình duyệt, có thể dùng Tailwind Play
- Với dự án hiện có, đã có hướng dẫn nâng cấp và công cụ nâng cấp tự động
1 bình luận
Ý kiến trên Hacker News
Từng có thời tôi chỉ trích mạnh mẽ nhiều khiếm khuyết của Tailwind và việc nó thực sự không tương thích với cách làm web “thuần” hiện đại, nhưng bước tiến lớn của v4 là điều rất đáng mừng
Việc có thể truy cập theme của Tailwind dưới dạng biến CSS native, và trong tài liệu thậm chí có ví dụ component nút được viết bằng biến native trong stylesheet bên ngoài, là một thay đổi rất lớn
Việc có thể cấu hình chỉ bằng CSS cũng rất tuyệt, và giờ Tailwind không còn giống một framework kiểu JavaScript có tính “lan truyền” nuốt chửng kiến trúc hợp lý nữa, mà giống một tiện ích có thể thêm vào bất kỳ dự án nào
Dù những lời chỉ trích vài năm qua đã có tác dụng, hay họ tự đi đến kết luận đúng, thì phần lớn tranh luận ủng hộ/phản đối Tailwind giờ có vẻ đã bớt liên quan, và đó là một điều rất tốt. Giờ có thể tập trung vào việc xây sản phẩm
Vì có thể biểu đạt mọi thứ một cách có hệ thống nên nó hoạt động rất tốt, và trong đó có một điều gì đó cực kỳ hữu ích
Thứ nhất, các kỹ sư JavaScript/Tailwind đã chiếm lĩnh các cuộc thảo luận về thiết kế. Họ tập trung vào “utility-first”, “loại bỏ code không dùng”, “CSS an toàn kiểu” hơn là hệ thống thiết kế, chẳng hạn trong typography nên dùng Perfect Fifth hay Perfect Fourth
Thứ hai, Tailwind khiến việc tham gia vào quy trình sản xuất thực tế trở nên khó khăn. Các quyết định thiết kế bị chôn trong những biểu thức component React khó hiểu như
flex items-center shadow-lg p-6 hover:bg-gray-50 dark:bg-gray-800 py-[calc(theme(spacing[2.5])-1px)]Với kỹ sư JavaScript thì có thể hiểu được, nhưng với thiết kế có hệ thống thì đó là rào cản. Thay vì biểu đạt các quan hệ toán học chính xác bằng CSS, về cơ bản là dùng inline style tiện hơn
CSS đã dễ dùng hơn trước rất nhiều, và hầu hết trình duyệt giờ cũng hoạt động nhất quán
Nó đáng để học vì không cần bước build và không làm markup rối tung bằng quá nhiều code
Cũng có thể viết trực tiếp thuộc tính
styletrong HTML, điều mà trước đây người ta tránh để tách biệt các mối quan tâm. Nhưng tôi thắc mắc tại sao lại muốn đưa một cách tương tự trở lại. Có phải chỉ để giảm vài ký tự khôngThuộc tính
stylethậm chí còn trực quan hơn vì không cần phải chuyển đổi code trong đầu. Tôi không hiểu sức hấp dẫn của nóstyle. Ví dụ như pseudo-class:hover,:focus, pseudo-element::before,::after, media query, keyframe và animationTrải nghiệm lập trình viên trong dự án lớn cũng không tốt
Ngược lại,
@scopesắp trở thành tiêu chuẩn là một bổ sung tốt để đặt style gần nơi sử dụng: https://developer.mozilla.org/en-US/docs/Web/CSS/@scopeTrừu tượng hóa component giúp tách ý nghĩa và style mạnh hơn. Trong cả hai trường hợp đều phải tìm abstraction “hero”, nhưng trong thế giới component, không chỉ style mà cả tên thẻ HTML cũng được trừu tượng hóa
Dù theo cách nào, “chi tiết style” cũng được tách khỏi “nội dung” là file source của trang. Có thể chấp nhận bước build để tách biệt mối quan tâm tốt hơn, tức tách nội dung và trình bày tốt hơn
Cũng giảm nhu cầu quản lý file riêng và xóa các component không dùng
Có thể dùng media query, điều mà thẻ
stylekhông làm được, và không có nguy cơ sửa nhầm class đang được dùng ở nơi khác. Phạm vi toàn cục của CSS có ưu điểm nhưng cũng nguy hiểmStyle được xem là thuộc về component chứ không phải hệ thống thiết kế. Hệ sinh thái kỹ thuật ưu tiên JavaScript cần thêm nhiều công ty dẫn dắt bởi thiết kế hiểu sức mạnh của CSS hiện đại và thiết kế có hệ thống
Cách
.cssthông thường tạo ra tên gọi kỳ lạ, trùng lặp và khả năng xung đột.css modulescũng là một lựa chọn, nhưng số file trên mỗi component/trang trên thực tế gần như tăng gấp đôisasshaylesscó cảm giác như trộn lẫn các vấn đề củacss modulesvà.cssthông thườngTôi không thực chất thích hay ghét Tailwind; ban đầu tôi rất ghét nó, nhưng trong một dự án gồm component và trang với hơn 200 file, tôi thấy được giá trị của nó
Phản ứng đầu tiên với Tailwind là “phiền phức”. Tôi đã biết CSS rồi, giờ lại có cảm giác phải học lại CSS
Trông giống tình huống phụ huynh cố giúp con làm bài tập toán, nhưng cách dạy ở trường đã hoàn toàn khác ngày xưa; cách giải của mình vẫn đúng nhưng không được chấp nhận, còn đứa trẻ thì bực bội vì phải khớp hai hệ thống với nhau
Tôi hiểu bầu không khí kiểu “trong team nó chạy tốt và mở rộng tốt nên cứ dùng thôi”, và cũng đã trải nghiệm rồi
Nhưng tôi vẫn thích stylesheet bình thường nhắm vào class hoặc tag hơn. Đặc biệt là giờ CSS đã hỗ trợ selector lồng nhau thì càng vậy
Vấn đề quản lý stylesheet thì có, và tôi thích cách định nghĩa rồi áp dụng file CSS ở cấp route như Remix/React Router. Nếu như thế vẫn chưa đủ, hoặc style động trở nên quá phức tạp trong file
.css, thìstyle={{...}}luôn là một lựa chọnCSS mạnh mẽ, linh hoạt và có thể mở rộng, nên Tailwind với tôi giống một sự giới hạn hơn là cải tiến. Tôi không rõ vì sao nó vẫn phổ biến, nhưng tôi nghĩ 3–4 năm nữa mọi người lại chuyển sang thứ khác
Nhưng khi đóng góp cho một dự án mã nguồn mở dùng Tailwind, tôi dần quen với nó, và giờ cảm nhận đã khác
Về bản chất, Tailwind khá gần với một cách viết tắt của
style={{…}}. Những thứ cần nhiều dòng trong file.csshoặc object style thì một utility có thể giải quyết trong khoảng 15 ký tựThời gian tìm những thứ như “visual text replacement css”, tra cheat sheet CSS hay lục lại bài CSS-Tricks từ 8 năm trước giảm đi rất nhiều. Thay vào đó, tôi luôn xem tài liệu Tailwind và nhanh chóng tìm utility class làm đúng việc mình muốn
Nhiều thứ đáng ngạc nhiên đã nằm trong “cache” trong đầu, và cảm giác tốt hơn nhiều so với việc cố ghi nhớ mọi CSS cần cho công việc layout
Không cần đụng riêng đến CSS, style nằm ngay trên phần tử được áp dụng nên không cần đối chiếu qua lại
Chỉ dùng thuộc tính
csscũng làm được, nhưng vấn đề là ai cũng đã được dạy rằng đó là cách làm sai, và danh sách chuỗi chứa nhiều utility cũng dễ dùng hơn object CSS thuầnNó là một lớp bọc module hóa, có thể tổ hợp và được chuẩn hóa đặt lên trên một hệ thống khổng lồ, phức tạp, nên đó là một bước tiến lớn
Trong khi đó trên mạng xã hội có những bài trộn lẫn phép nhân và phép chia rồi bảo chỉ có một đáp án đúng. Tailwind không tệ đến mức đó, nhưng với góc nhìn của người già, nó có vẻ gần hướng đó hơn
Tôi thích Tailwind. Trong 4 năm qua tôi đã dùng nó ở 3 dự án, và nó trực quan, tài liệu tốt, đơn giản
Tôi không nhớ thời emotion và styled-components, khi phải đặt tên cho mọi
divcó style trong dự ánTrong Tailwind, container chỉ là
divvới vài class. Tranh luận đặt tên ít đi, bớt tốn chất xám và thời gian review cho việc đặt têndiv, nhưng hơi thấy lạTôi gần như chưa từng phải nghĩ quá 1 giây để đặt tên cho thứ gì đó. Với một số người, đây thật sự là điểm bị kẹt sao? Tôi tò mò liệu họ có thực sự bị tê liệt ở chỗ đó không
Những người tôi từng gặp thường chỉ định vô tận mọi chi tiết có thể. Họ đối xử với form web như dự án cải tạo HGTV cá nhân của mình
Lần tôi thử dùng Tailwind, số class nhiều hơn markup ít nhất cả một bậc, và rất nhanh trở nên khó đọc
Hiện tôi hài lòng với workflow CSS-in-JS. Đó là cách viết CSS kiểu cũ với sự trợ giúp của LLM. Cho LLM xem ảnh và yêu cầu component thì nó xuất ra ngay, kèm cả tên phù hợp
Styling trong React không hay, và dù dùng Tailwind thì cũng chỉ là lựa chọn đỡ tệ hơn
Nếu dùng framework frontend và bước build, tùy mục đích thì Svelte và Astro rất tốt. Có thể style bằng CSS bình thường, và nếu giữ component nhỏ thì hầu như không cần dùng tên class
Chỉ cần dùng selector phần tử và để framework scope style tại thời điểm build
Tôi đã thử dùng Tailwind cho site của mình và khá thích, nhưng có thể vì lý do hơi khác những gì thường được nói
Giá trị thật sự của Tailwind là có thể đọc mọi style ảnh hưởng đến một phần tử ở cùng một chỗ
Tên class có thể dài, nhưng đọc một dòng dài vẫn nhanh hơn nhiều so với việc lần nào cũng mở devtools của trình duyệt hoặc nhảy lên xuống qua một hay nhiều stylesheet
Khi quay lại đoạn code đó sau này, tôi có thể tự tin sửa mà không lo vô tình thay đổi phần tử khác
Tính cascading của CSS vẫn hữu ích, nhưng thường thì tôi chỉ muốn giới hạn style cho một phần tử. Phần còn lại quay về CSS, nhưng CSS tôi thực sự viết rất ít. Phần lớn chỉ là muốn căn chỉnh khoảng cách
Tôi cũng thích việc “làm X thế nào?” không còn là một cuộc điều tra 30 phút, mà chỉ là tìm nhanh trong tài liệu
So với vậy, các đoạn Tailwind trong bài HN này trông khá đáng sợ
Nếu thêm
text-xlvào mộtdivvà bên trong códivcùngspanlồng nhau, tất cả sẽ kế thừatext-xl; vì vậy để xem điều gì gây ratext-xlở phần tử lồng nhau, cuối cùng vẫn phải lần ngược lên cây phần tửDù vậy, nhìn chung thì vẫn dễ hơn một chút
Những cụm như “rút ngắn thời gian build”, “không còn chỉ thị
@tailwindnữa”, “không cần cấu hình JavaScript”, “được thiết kế cho web hiện đại” nghe như thế nàyCSS giờ đã có thể tự làm hết những gì trước đây chúng ta làm thủ công, nhưng ta vẫn cứ giả vờ rằng mình còn cần thiết
stylevà dễ tối ưu hơn nhiều”Tailwind chẳng phải gần như ánh xạ 1:1 với CSS sao?
Không thích Tailwind thì tôi hiểu, nhưng thay vì dựng người rơm để công kích, tốt hơn là nói rõ bạn không thích điểm nào của Tailwind
Hạ thấp dự án mã nguồn mở của người khác và những người đang dùng nó hữu ích cũng không hay
Muốn hỏi những người hiểu rõ CSS. Tôi thì không rành
Tôi đang nâng một dự án Phoenix cá nhân lên 1.7, và vì Phoenix giờ mặc định dùng Tailwind nên tôi định thử dùng thay Bootstrap
Từ trước đến nay phiên bản Bootstrap trông “cũng ổn”, còn phiên bản Tailwind thì trông như một mớ hỗn độn
Cách dễ nhất để có các giá trị mặc định trông ổn mà không cần cố làm designer là gì? Hay cứ cài lại Bootstrap cho xong?
Tailwind cho bạn công cụ khi muốn kiểm soát thiết kế, nhưng cuối cùng bạn vẫn phải tự kiểm soát thiết kế
Nếu chỉ cần trông đẹp và có cảm giác kiểu Bootstrap là được thì Bootstrap là đúng
Về lý thuyết có các dự án tái triển khai Bootstrap trên Tailwind, có thể cho bạn điểm xuất phát kiểu Bootstrap cùng sức mạnh của Tailwind, nhưng thực tế tôi chưa thấy cái nào hoạt động tốt hơn việc cứ dùng Bootstrap
Tài liệu DaisyUI ở đây: https://daisyui.com
Tailwind cũng có component trả phí, và chỉ cần sao chép rồi dán là dùng được. Khi quen rồi, điểm hay là bạn có thể chỉnh dần các component của Flowbite
Nếu công việc ổn định và muốn vọc vạch đủ thứ thì cứ chơi với Tailwind. Những người hay chạy theo xu hướng và nói lớn tiếng nhìn chung có vẻ thích Tailwind
Nhưng nếu là dự án của chính bạn, tự bỏ vốn, hoặc có deadline, thì tốt hơn là dùng Bootstrap bạn đã biết và tập trung hoàn thành việc, thay vì sa vào cuộc chiến tiêu hao với UI
Tailwind cung cấp các class để bạn chồng lên nhau nhằm tạo component
Nếu dùng kèm mã nguồn UI component thì sẽ dễ hơn. Trước đây tôi từng dùng TailwindUI nhưng nó trả phí, chắc cũng có lựa chọn miễn phí tốt
Trong cuộc trò chuyện “Tailwind hay không Tailwind” có một mô thức rất rõ. Nó lặp lại mỗi khi Tailwind được nhắc đến
Có những người chưa từng dùng nghiêm túc quá 30 phút, chỉ thử qua loa hoặc lướt tài liệu. Họ ghét Tailwind và thích những thứ như “CSS thuần”
Ngược lại có những người đã dùng trong dự án thực tế, trong đội ngũ có hơn một người. Họ hiểu giá trị, chấp nhận đánh đổi, và thích nó
Tôi đã thấy nhiều người chuyển từ nhóm thứ nhất sang nhóm thứ hai, nhưng hầu như không thấy ai từ nhóm thứ hai quay lại nhóm thứ nhất
Đó là lý do Tailwind thành công. Trong mắt người theo chủ nghĩa thuần túy nó có thể không đẹp, nhưng trong mắt người xây dựng sản phẩm và người thực dụng thì nó thật sự tuyệt vời
Tôi không phản đối Tailwind, nhưng lý do tôi chưa dùng là vì chưa thấy rõ tại sao nó là cách tiếp cận tốt hơn những lựa chọn khác như Web Components hay React Styled Components
Vấn đề lớn nhất là Tailwind làm HTML rối lên với vô số utility class, khiến khó đọc và khó bảo trì
Tôi hiểu nó tốt hơn một file CSS toàn cục khổng lồ và CSS cổ điển dựa trên tên thẻ, nhưng đã có cách dùng CSS được scope theo component mà không làm ô nhiễm namespace toàn cục. Web Components và Styled Components là ví dụ
Cả hai đều gắn style trực tiếp với component, hoặc nói chung hơn là với một nhóm thẻ HTML cụ thể, nên dễ thấy style nào áp dụng ở đâu
Cũng không cần tên class toàn cục, giảm lo về tác dụng phụ hay xung đột không mong muốn. Khi xóa component thì style liên quan cũng bị xóa theo, nên không phải lo CSS không dùng đến còn sót lại. Nhờ shadow DOM, cũng không có nguy cơ style của một component vô tình ảnh hưởng đến component khác
Tôi coi trọng việc giữ HTML ngắn gọn và dễ đọc bằng cách không trộn trực tiếp style trình bày vào markup. Khi mọi style đều nằm trong thuộc tính
classnhư Tailwind, một dòng sẽ có danh sách class dài, và nếu còn phải dùng cả tên class thật thì HTML trở nên lộn xộnKhó nắm bắt ngay style nào đang được áp dụng, và cũng khó thụt lề cho tử tế. Nó làm tôi nhớ đến nhiều lý do vì sao trước đây chúng ta rời bỏ thuộc tính
styleinline trong HTMLTôi không ghét Tailwind, nhưng về khả năng đọc, khả năng bảo trì và tách biệt mối quan tâm, tôi chưa thấy lợi thế rõ ràng so với Web Components hay Styled Components, và vẫn còn nhiều lo ngại chưa được giải đáp
Tôi đã đọc tài liệu nhưng chưa dùng thử, và khó hiểu vì sao nên chọn Tailwind thay vì các lựa chọn khác. Việc có quá nhiều class ngay giữa HTML bình thường khiến với tôi cả hai đều khó đọc
Tôi thừa nhận có những người dùng Tailwind một cách hữu ích và làm việc rất hiệu quả, nhưng giờ Tailwind xuất hiện ở khắp nơi nên đâu đâu cũng thấy vẻ ngoài gọn gàng nhưng phổ biến
Nhìn chung, Tailwind không ảnh hưởng đến style nhiều hơn CSS thông thường. Có một vài ngoại lệ. Những thứ như shadow được chuẩn hóa hơn một chút, và bảng màu indigo gần đây cũng phần nào ảnh hưởng ra bên ngoài
Chỉ là mọi người có xu hướng thiết kế site theo một cách nhất định. Đặc biệt là khi dùng cùng ShadCn
Tôi nhìn nhận nó giống như việc Inter được dùng làm phông chữ website như một Helvetica mới. Nếu nhiều người dùng và trông đẹp thì có lý do gì để cố tránh dùng nó đâu
Từ rất lâu trước Tailwind, Bootstrap đã cung cấp nhiều utility class hơn hẳn, giúp tiết kiệm rất nhiều thời gian và không ép buộc một ngoại hình cụ thể
Chỉ cần nạp những class mình muốn là được. Tất nhiên, nếu bạn không tải các file nguồn Sass xuống thì lại là chuyện khác, nhưng đó hẳn sẽ là một lựa chọn ngớ ngẩn
Vì vậy đa số dự án dùng một số rất ít framework. Nếu có thêm 4–5 dự án UI chất lượng cao nữa, đặc biệt là với hướng style khác biệt hơn, thì sự đa dạng sẽ tăng lên
Thiết kế, cũng như nhiều công việc sáng tạo khác, dường như có một số lượng người ít đến đáng ngạc nhiên quyết định xu hướng
Tôi mong nhiều người biết điều này hơn. Có lẽ có những người tài năng không làm vì nghĩ rằng “dù mình có làm thì cũng chẳng ai nghe”
Nhưng nếu một phần trong số họ thử sức, tôi nghĩ họ có thể mở ra những UI mới cho một phần lớn của web
Tailwind là bằng chứng cho thấy ưu điểm của inline style, tức là cách style một thứ gì đó mà không cần đặt tên, tính phổ quát của chuỗi, và cả giới hạn của chuỗi
Tôi mong chờ thứ sẽ đến tiếp theo, và cho đến lúc đó thì sẽ miễn cưỡng dùng Tailwind