Tham chiếu CSS nguyên tử
funcssion không thực hiện bất kỳ loại thiết lập lại nào đối với các phần tử HTML. Việc sử dụng nó, cùng với các khung/thư viện CSS khác hoặc mã của riêng bạn, là không xâm phạm, do đó hoàn toàn khả thi. Tất cả các lớp chỉ đặt một hoặc hai thuộc tính. Hầu hết chỉ đặt một Show Hầu hết các lớp được đặt tên bằng cách sử dụng tiền tố và sự kết hợp của những điều sau đây. hướng, dấu gạch ngang (-), giá trị có thể có của thuộc tính hoặc hậu tố (đơn vị). Một số ví dụ Các lớp khác chỉ đơn giản là giá trị của các thuộc tính rõ ràng và khá phổ biến trong CSS, chẳng hạn như Với việc triển khai sản xuất gần đây từ Facebook và Twitter, tôi nghĩ rằng một xu hướng mới đang dần phát triển. CSS-in-JS nguyên tử Trong bài đăng này, chúng ta sẽ xem CSS nguyên tử là gì, nó liên quan như thế nào đến CSS ưu tiên chức năng/tiện ích như TailwindCSS và những người chơi lớn đang áp dụng nó trong cơ sở mã React hiện đại của họ Vì tôi không phải là chuyên gia về chủ đề này, đừng mong đợi tìm hiểu sâu về những ưu và nhược điểm. Tôi chỉ hy vọng bạn có một ý tưởng về những gì nó nói về Ghi chú. CSS nguyên tử không thực sự liên quan đến thiết kế nguyên tửTrước khi bắt đầu, hãy đăng ký React trong tuần này 😜 CSS nguyên tử là gì?Bạn có thể đã nghe nói về các phương pháp CSS khác nhau như BEM, OOCSS… Copy Ngày nay, mọi người thực sự thích Tailwind CSS và khái niệm ưu tiên tiện ích của nó. Điều này gần với CSS chức năng và Tachyon Copy Với một bảng định kiểu của một loạt các lớp tiện ích, bạn có thể đi một chặng đường dài CSS nguyên tử giống như một phiên bản cực đoan của CSS ưu tiên tiện ích. tất cả các lớp CSS có một quy tắc CSS duy nhất, duy nhất. Copy2 lần đầu tiên được sử dụng bởi Thierry Koblentz (Yahoo. ), trong Các phương pháp hay nhất về CSS đầy thách thức năm 2013 Copy Với tiện ích/CSS nguyên tử, chúng tôi thừa nhận rằng có thể kết hợp các lớp cấu trúc và trình bày. khi chúng tôi cần thay đổi màu nút, chúng tôi sửa đổi HTML, không phải CSS. Sự kết hợp chặt chẽ này cũng được thừa nhận trong các cơ sở mã CSS-in-JS React hiện đại, nhưng có vẻ như thế giới CSS trước tiên đã phát hiện ra rằng “sự tách biệt giữa các mối quan tâm” của web không đúng. Tính cụ thể cũng ít gặp vấn đề hơn, vì chúng tôi sử dụng các bộ chọn lớp đơn giản Chúng tôi hiện đang tạo kiểu thông qua đánh dấu, có một số thuộc tính thú vị
Chắc chắn, html cồng kềnh hơn một chút. Đây có thể là mối lo ngại đối với các ứng dụng web do máy chủ kết xuất, nhưng độ dư thừa cao trong tên lớp sẽ nén tốt với gzip, giống như cách nó hoạt động tốt đối với các quy tắc css trùng lặp được tìm thấy trước đây trong các tệp CSS của bạn Bạn không cần sử dụng tiện ích/CSS nguyên tử cho mọi trường hợp, chỉ cần sử dụng các mẫu kiểu dáng phổ biến nhất Khi tiện ích/CSS nguyên tử của bạn đã sẵn sàng, nó sẽ không thay đổi hoặc phát triển nhiều. Có thể lưu vào bộ nhớ cache một cách tích cực hơn (ví dụ: bạn có thể thêm nó vào Copy3 và hy vọng nó không bị vô hiệu hóa trên các lần triển khai lại ứng dụng). Nó cũng khá di động và bạn có thể sử dụng nó trong các ứng dụng khác Giới hạn của tiện ích/CSS nguyên tửTiện ích/CSS nguyên tử có vẻ thú vị, nhưng chúng cũng đi kèm với một vài thách thức Mọi người thường viết tiện ích/CSS nguyên tử bằng tay, cẩn thận tạo ra các quy ước đặt tên. Có thể khó đảm bảo quy ước dễ sử dụng, nhất quán và không cồng kềnh theo thời gian. Nhiều người có thể làm việc trên CSS này và giữ cho nó nhất quán không? Bạn cũng cần làm việc trên một biểu định kiểu nguyên tử/tiện ích tốt trước khi có thể lặp lại các tính năng sẽ sử dụng nó Nếu tiện ích/CSS nguyên tử được tạo bởi người khác, trước tiên bạn sẽ phải tìm hiểu các quy ước đặt tên lớp (ngay cả khi bạn biết mọi thứ về CSS). Quy ước này bị phản đối và có thể bạn không thích nó Đôi khi, bạn cần thêm một số CSS không được cung cấp bởi tiện ích/CSS nguyên tử của bạn. Không có cách duy nhất nào để cung cấp các kiểu dùng một lần còn lại Tailwind để giải cứuCách tiếp cận của Tailwind rất thuận tiện và giải quyết được một số vấn đề này Nó không thực sự cung cấp một tệp CSS tiện ích duy nhất cho tất cả các trang web. Thay vào đó, nó chỉ cung cấp phạm vi chia sẻ và quy ước đặt tên. Từ tệp cấu hình, nó cho phép bạn tạo CSS tiện ích tùy chỉnh của riêng mình Kiến thức về Tailwind có thể di chuyển đến các ứng dụng khác, ngay cả khi chúng không sử dụng chính xác các tên lớp giống nhau. Nó gợi cho tôi một chút về triết lý “Học một lần, viết mọi nơi” của React Tôi đã thấy mọi người báo cáo rằng các lớp học Tailwind đáp ứng khoảng 90% hoặc 95% nhu cầu của họ. Có vẻ như phạm vi đủ lớn và chúng tôi không thường xuyên cần sử dụng kiểu một lần Tại thời điểm này, bạn có thể tự hỏi Copy4. Bạn sẽ đạt được gì khi thực thi quy tắc CSS nguyên tử của Copy5? Vì vậy, chúng ta có nên từ bỏ ý tưởng về CSS nguyên tử và chỉ sử dụng Tailwind không? Tailwind là một giải pháp tuyệt vời, nhưng vẫn còn một số vấn đề chưa được giải quyết
CSS nguyên tử viết tay có thể không thuận tiện nhất so với Tailwind So sánh với CSS-in-JSCó mối quan hệ với CSS-in-JS và tiện ích/CSS nguyên tử. Cả hai cách tiếp cận đều ủng hộ việc tạo kiểu từ đánh dấu, bằng cách nào đó cố gắng mô phỏng các kiểu nội tuyến hiệu quả, mang lại cho chúng nhiều thuộc tính tương tự (như khả năng di chuyển mọi thứ xung quanh một cách tự tin) Christopher Chedeau đã giúp rất nhiều trong việc truyền bá ý tưởng về CSS-in-JS trong hệ sinh thái React. Trong nhiều cuộc nói chuyện, anh ấy giải thích các vấn đề của CSS Tiện ích/CSS nguyên tử cũng giải quyết một số vấn đề này, nhưng chắc chắn không phải là tất cả (đặc biệt là độ phân giải kiểu không xác định) Nếu chúng có những điểm tương đồng, chúng ta có thể sử dụng cả hai cùng nhau không? Nhập CSS-in-JS nguyên tửAtomic CSS-in-JS có thể được coi là “CSS nguyên tử tự động”
Tôi không biết về tất cả các thư viện CSS-in-JS hiện có hỗ trợ CSS nguyên tử. Hỗ trợ nó thực sự là một chi tiết triển khai của thư viện CSS-in-JS. Hỗ trợ có thể đến và đi, hoặc thậm chí có thể được thực hiện tùy chọn Tôi sẽ nêu bật 2 giải pháp cụ thể, gần đây đã dẫn đến 2 triển khai CSS-in-JS nguyên tử quy mô lớn, sử dụng 2 cuộc thảo luận làm nguồn
Xem thêm
Vui lòng ping tôi nếu bạn muốn có tên trong danh sách React-Native-WebReact-Native-Web là một thư viện rất thú vị. nó cho phép hiển thị các nguyên hàm React-Native trên web. Chúng tôi không thực sự nói về phát triển web/di động đa nền tảng ở đây (xem các cuộc nói chuyện để biết thêm chi tiết) Là một nhà phát triển web, bạn chỉ cần hiểu rằng React-Native-Web là một thư viện CSS-in-JS thông thường, đi kèm với một tập hợp nhỏ các thành phần React nguyên thủy. Bất cứ nơi nào bạn nhìn thấy Copy0, bạn có thể thay thế nó trong đầu bằng Copy1, và bạn đã sẵn sàng để đi React-Native-Web đã được tạo bởi Nicolas Gallagher, hoạt động trên Twitter di động. Họ dần dần triển khai nó trên thiết bị di động, không chắc chính xác khi nào nhưng có lẽ vào khoảng năm 2017/2018. Kể từ đó, nó đã được sử dụng bởi các công ty khác (Major League Soccer, Flipkart, Uber, The Times…), nhưng triển khai quan trọng nhất là ứng dụng Twitter dành cho máy tính để bàn năm 2019 mới do một nhóm do Paul Armstrong lãnh đạo. phong cáchxStylex là một thư viện CSS-in-JS mới được phát triển tại Facebook để viết lại Facebook vào năm 2020 (hiện đang trong giai đoạn thử nghiệm). Có vẻ như họ dự định mã nguồn mở vào một ngày nào đó, có thể dưới một cái tên khác Điều đáng nói là Nicolas Gallagher, tác giả của React-Native-Web, đã được Facebook thuê cách đây 2 năm. Không có gì ngạc nhiên khi thấy một số khái niệm của nó được Facebook sử dụng lại Không giống như React-Native-Web, Stylex dường như không tập trung vào phát triển đa nền tảng Tất cả các thông tin tôi có là từ cuộc nói chuyện. ) Chúng ta sẽ phải chờ thêm chi tiết khả năng mở rộngNhư mong đợi với CSS nguyên tử, cả Twitter và Facebook đều thấy CSS của họ giảm đi rất nhiều, vì giờ đây nó đi theo một đường cong logarit. Có một mức giá ban đầu để trả cho các ứng dụng đơn giản Facebook chia sẻ con số cụ thể
Nguồn và đầu ra2 thư viện dường như có API giống nhau và khá đơn giản, nhưng thật khó để nói, vì chúng tôi không biết nhiều về Stylex Điều đáng chú ý là React-Native-Web sẽ mở rộng các cú pháp rút gọn CSS như Copy2 kiểm tra sản xuấtHãy xem đánh dấu trông như thế nào trên Twitter Bây giờ, hãy xem Facebook mới Nhiều người có thể sẽ kinh hoàng khi nhìn thấy điều này, nhưng nó thực sự hoạt động và vẫn có thể truy cập được Việc điều hướng các kiểu trong trình kiểm tra Chrome có thể khó hơn một chút, nhưng devtools có thể giúp ích. Thứ tự quy tắc CSSKhông giống như tiện ích viết tay/CSS nguyên tử, JS lib có thể làm cho kiểu dáng không phụ thuộc vào thứ tự chèn quy tắc CSS. Như bạn có thể biết, trong trường hợp có các quy tắc xung đột, không phải lớp cuối cùng của thuộc tính lớp sẽ chiến thắng mà là quy tắc được chèn cuối cùng trong biểu định kiểu. Các vấn đề về tính đặc hiệu được giải quyết chỉ bằng cách sử dụng các bộ chọn dựa trên lớp đơn giản Trong thực tế, các thư viện này tránh xuất ra các lớp có quy tắc xung đột trên cùng một phần tử. Họ đảm bảo rằng kiểu cuối cùng được khai báo trong đánh dấu luôn thắng. "Các lớp bị ghi đè" được lọc và thậm chí không đưa nó vào DOM Copy Ghi chú. Hành vi có thể dự đoán này chỉ có thể thực hiện được nhờ sử dụng CSS nguyên tử nghiêm ngặt nhất Nếu một lớp có nhiều quy tắc và chỉ một trong số chúng bị ghi đè, thư viện CSS-in-JS sẽ không thể lọc lớp đó mà không xóa các quy tắc không bị ghi đè Nếu một lớp có một quy tắc tốc ký duy nhất như Copy2 và giá trị ghi đè là Copy4, thì đó cũng là một vấn đề. Cú pháp tốc ký như Copy2 được mở rộng thành 4 lớp riêng biệt và thư viện có thể lọc các lớp bị ghi đè không xuất hiện trong DOM với độ chi tiết cao hơn Bạn vẫn thích Tailwind chứ?Sau khi biết tất cả các quy ước đặt tên của Tailwind, bạn có thể viết mã giao diện người dùng rất nhanh. Có thể cảm thấy kém hiệu quả hơn khi quay lại viết mọi quy tắc CSS bằng tay, giống như bạn làm trong CSS-in-JS Không có gì ngăn cản bạn xây dựng các bản tóm tắt của riêng bạn trên khung CSS-in-JS nguyên tử. Hệ thống kiểu dáng có thể chạy một số thư viện CSS-in-JS hỗ trợ CSS nguyên tử. Bạn thậm chí có thể sử dụng lại các quy ước đặt tên cho Tailwind trong JS nếu bạn cảm thấy mình làm việc hiệu quả với nó Hãy lấy một số mã Tailwind Copy0 Bây giờ, hãy lấy một giải pháp ngẫu nhiên (react-native-web-tailwindcss) tôi vừa tìm thấy trên google Copy1 Về năng suất, điều này không khác lắm. Và bạn có thể tránh lỗi chính tả với TypeScript Sự kết luậnĐó gần như là tất cả những gì tôi phải nói về CSS-in-JS nguyên tử Tôi chưa bao giờ sử dụng CSS nguyên tử, CSS-in-JS nguyên tử hoặc Tailwind trong bất kỳ triển khai sản xuất lớn nào. Tôi có thể sai ở một số phần, vui lòng sửa cho tôi trên Twitter Tôi nghĩ rằng CSS-in-JS nguyên tử là một xu hướng đáng xem trong hệ sinh thái React và tôi hy vọng bạn đã học được điều gì đó hữu ích với bài đăng này Vì tôi không thể tìm thấy bất kỳ bài viết nào về CSS-in-JS nguyên tử, tôi đã viết bài này chủ yếu cho bản thân mình. Tôi muốn có một tài nguyên để liên kết đến khi tôi đề cập đến CSS-in-JS nguyên tử trong các bài đăng trên blog sắp tới (Tôi dự định viết thêm các bài viết về React-Native-Web và đa nền tảng, hãy chú ý theo dõi) |