- matcha.css là thư viện giúp làm đẹp các phần tử HTML ngay như stylesheet mặc định của trình duyệt, giảm bớt công việc viết CSS thủ công cho prototyping nhanh, HTML tĩnh và tài liệu tạo từ Markdown
- Có thể áp dụng chỉ với một dòng `` mà không cần bước build, dependency, JavaScript hay cấu hình, với kích thước mặc định sau gzip khoảng 8.81kB
- Tận dụng cấu trúc tài liệu và các phần tử ngữ nghĩa để xử lý chỉ bằng CSS những hành vi như submenu trong ``, dấu
*cho trường bắt buộc, hay màu viền theo trạng thái kiểm tra hợp lệ của input - Cung cấp các preset Default, Lite, Utility classes, Istanbul coverage cùng custom builder, đồng thời cũng có thể import trực tiếp từng thư mục style chi tiết
- Đây là mã nguồn mở theo giấy phép MIT; các utility class và tính năng layout tuy tiện lợi nhưng vì thêm class vào tài liệu nên có thể làm lệch khỏi cách dùng dựa trên ngữ nghĩa
CSS drop-in để làm đẹp tài liệu HTML ngay lập tức
- matcha.css là thư viện drop-in dùng CSS thuần để tạo kiểu cho các phần tử HTML
- Thư viện tập trung vào việc giúp các phần tử HTML trông đẹp mắt tương tự stylesheet mặc định của trình duyệt mà không yêu cầu người dùng phải chỉnh sửa trực tiếp tài liệu
- Phù hợp cho prototyping nhanh, trang HTML tĩnh, tài liệu sinh từ Markdown, và các nhà phát triển muốn tận dụng toàn bộ phạm vi phần tử HTML mà không phải đi sâu vào chi tiết CSS
- Chính trang này cũng được tạo kiểu bằng matcha.css
Triển khai chỉ với một dòng và có thể hoàn tác dễ dàng
- Có thể sử dụng mà không cần bước build, dependency, JavaScript, cấu hình hay refactor tài liệu
- Kích thước bản build mặc định theo gzip là
~8.81kB - Chỉ cần thêm một dòng sau vào `` của tài liệu là áp dụng được
- Khi gỡ bỏ cũng chỉ cần bỏ `` đó đi, được thiết kế để không cần refactor hay dọn dẹp tài liệu
- Tài nguyên được host trên Vercel, đồng thời cũng có thể dùng qua JSdelivr, dịch vụ CDN phân phối gói npm
- Mọi phiên bản công khai đều được cung cấp trong thư mục /v/, và mặc định nhánh
mainsẽ được phục vụ
Tạo kiểu dựa trên cấu trúc ngữ nghĩa
- matcha.css điều chỉnh style dựa trên cấu trúc tài liệu và phân cấp phần tử
-
Ví dụ về hành vi tự động
- Lồng các phần tử `` sẽ tạo ra submenu ngầm định
- Khi
được dùng cùngthì sẽ tự động thêm dấu*cho trường bắt buộc [data-color-scheme="light"]ép dùng chế độ sáng, còn[data-color-scheme="dark"]ép dùng chế độ tối[data-color-scheme]có thể áp dụng cho một phần tử cụ thể để ép color scheme có chọn lọc:rootthiết lập biến CSS, còn@media (prefers-color-scheme)thiết lập chế độ theo tùy chọn của người dùng- Không dùng quy tắc
!importantnên khi cần có thể override style dễ dàng
Tùy chọn build và triển khai
- Ngoài bản build mặc định còn có các preset build theo mục đích sử dụng
- Default
~8.81kB: toàn bộ tạo kiểu ngữ nghĩa và tính năng bổ sung, trừ@istanbul-coverage - Lite
~5.59kB: toàn bộ tạo kiểu ngữ nghĩa,@break-words,@discrete-scrollbars - Utility classes
~3.43kB:@root,@utilities - Istanbul coverage
~1.94kB:@root,@syntax-highlighting,@istanbul-coverage
- Default
- Nếu chỉ muốn chọn những tính năng cần thiết thì có thể dùng custom builder
- Với nhu cầu tùy biến phức tạp hơn, cũng có thể fork rồi tự vá trực tiếp
- Mỗi thư mục con trong github.com/lowlighter/matcha/styles đều được website phục vụ trực tiếp
- Ví dụ, nếu chỉ muốn dùng
@syntax-highlightingthì có thể nhúng trực tiếpmod.csstương ứng - Nếu không tự cung cấp biến CSS riêng thì nhiều khả năng sẽ cần gói
@root - Tất cả các file
mod.csscũng được cung cấp thêm dưới dạng alias của thư mục cha để tiện sử dụng
- Ví dụ, nếu chỉ muốn dùng
Phạm vi các phần tử HTML được tạo kiểu
-
Cấu trúc tài liệu
- Tạo kiểu cho
section,article,header,footer,aside,nav,menu,hgroup, các phần tử tiêu đề và nhiều phần tử khác - `` được thiết kế để hòa hợp tự nhiên khi container cha dùng
display: flex bên trongsẽ hiển thị giống breadcrumb, còn `` sẽ hiển thị như danh sách điều hướng
- Tạo kiểu cho
-
Văn bản và phần tử inline
- Cung cấp style cho
,,,,,,,,,,,,,,,,,, `` và nhiều phần tử khác - Vì tooltip mặc định của trình duyệt không thể được tạo kiểu, nên tooltip bằng CSS được khuyến nghị dùng thuộc tính
[data-title]thay vì[title]
- Cung cấp style cho
-
Phần tử form
- Tạo kiểu cho
,,,,,,,, `` - Các phần tử input không thực hiện kiểm tra bổ sung ngoài phần kiểm tra do trình duyệt đảm nhiệm
:user-validáp dụng viền--success, còn:user-invalidáp dụng viền--danger- Mẫu
có thể tự động nhận biết trạng thái required, nhưng mẫuthì không thể
- Tạo kiểu cho
-
Bảng và media
- `` áp dụng
border collapse, và nếu phần tử cha có giới hạn chiều rộng thì sẽ tự động dùng overflow - Có thể bọc bằng container
.table-responsive ,, `` được áp dụng style bo góc
- `` áp dụng
-
vàvàcũng nằm trong phạm vi được tạo kiểu mặc định::backdropcủa `` sẽ hiển thị khi dùngdialog.showModal()- Khuyến nghị dùng `` để trình duyệt có thể đóng dialog khi submit mà không cần JavaScript
Sự tiện lợi và cái giá của tính năng layout
- matcha.css cũng cung cấp các tùy chọn layout cho tài liệu
- Thêm class
.layout-simplevào phần tử để kích hoạt layout đơn giản - Cấu trúc yêu cầu bao gồm
.layout-simple,header:first-of-type,main:only-of-type,aside,nav,footer:last-of-typevà các phần tử liên quan - Cấu trúc sẽ thay đổi theo điều kiện media
- Ở màn hình mặc định, bố cục tập trung vào
headervàmain - Với
min-width: 960px, bố cục sẽ dùngasidevàmain - Với
min-width: 1280px, bố cục dùng haiasidevàmain
- Ở màn hình mặc định, bố cục tập trung vào
- Trên màn hình nhỏ,
aside:nth-of-type(1)sẽ bị ẩn; có thể hiện lại bằngdata-expandhoặc cho phép thu gọn bằngdata-expandable - Việc dùng layout có thể đòi hỏi refactor tài liệu, và sau này nếu ngừng dùng matcha.css thì có thể lại phải refactor lần nữa
Utility class mang tính hỗ trợ nhiều hơn
- matcha.css cũng cung cấp một số utility class để thuận tiện sử dụng
- Các class liên quan đến màu gồm có
.default,.muted,.accent,.active,.variant,.success,.attention,.severe,.dangerbd-*đổi màu viền,bg-*đổi màu nền,fg-*đổi kiểu foreground
.flashtạo ra một block thu hút sự chú ý và có thể kết hợp với các class màu sắc- Cung cấp utility cho text, kích thước, vị trí, display, flex, overflow, cursor, selection, pointer-events, sizing, resize, shadow, và SVG fill/stroke
- Margin và padding dùng các class dạng số dựa trên các giá trị
0,.125,.25,.5,.75,1,1.25,1.5,1.75,2,3,4 - Vì utility class yêu cầu thêm class vào tài liệu nên có thể khiến việc rời khỏi matcha.css sau này trở nên khó hơn
- Nếu utility được cung cấp là chưa đủ hoặc còn hạn chế, nên cân nhắc dùng hoặc chuyển sang framework CSS ưu tiên utility
- matcha.css không nhắm tới mục tiêu trở thành một CSS framework hoàn chỉnh
Hiển thị mã, giao diện trình soạn thảo và Shadow DOM
- matcha.css cung cấp các class syntax highlighting tuân theo
@media (prefers-color-scheme) - Cũng bao gồm class để tạo giao diện kiểu code editor
- Cấu trúc yêu cầu là
.editor,> textarea,> div.highlight - Phần style bổ sung này không tự thực hiện syntax highlighting, mà chỉ tạo kiểu giống trình soạn thảo mã
- Để highlight thực tế vẫn cần thư viện syntax highlighting như highlight.js
- Cấu trúc yêu cầu là
- matcha.css cũng định nghĩa biến CSS bằng pseudo-class
:hostnên tương thích với Shadow DOM - Bên trong Shadow DOM, có thể import lại matcha.css và áp dụng custom styles riêng mà vẫn được cô lập để không xung đột với phần còn lại của tài liệu
Hỗ trợ trình duyệt và giấy phép
- matcha.css cho biết nó được xây dựng để tương thích với mọi trình duyệt hiện đại
- Bảng hỗ trợ bao gồm Chrome 92%, Edge 96%, Safari 94%, Firefox 95%, Opera 95%, Android Chrome 96%, iOS Safari 93%, Samsung Internet 96% và nhiều nền tảng khác
- Dự án được phát hành dưới dạng mã nguồn mở và sử dụng MIT License
- Kho mã nguồn nằm tại github.com/lowlighter/matcha
1 bình luận
Ý kiến trên Hacker News
Tôi thích ý tưởng khôi phục HTML thành nguồn chân lý duy nhất cho bố cục tài liệu, và có vẻ nó có thể rất hiệu quả với các tài liệu không cần thiết kế phức tạp.
Tuy nhiên, các lựa chọn thiết kế mặc định, đặc biệt là màu sắc và độ hoàn thiện, thì hơi đáng tiếc. Tôi không phải nhà thiết kế chuyên nghiệp, nhưng đã có đủ kinh nghiệm nghe người dùng phàn nàn về phần mềm mình tự làm, nên tôi có thể cảm nhận được điều gì đó hơi gượng khi so với sản phẩm do một nhà thiết kế giỏi, có nền tảng về lý thuyết màu sắc, mật độ thông tin, gradient, v.v. tạo ra.
Nếu tác giả đang đọc, tôi tò mò liệu bạn đã cân nhắc tận dụng thẩm mỹ của các dự án FOSS khác như Bulma hay Tailwind, hoặc hợp tác với một nhà thiết kế chuyên nghiệp chưa. Tôi nhớ jgthms thỉnh thoảng cũng có mặt trên trang này.
Tôi không phải lập trình viên frontend cũng không phải nhà thiết kế, nên có thể lộ rõ sự thiếu hiểu biết về lý thuyết màu sắc, khả năng tiếp cận và những yếu tố có thể là hiển nhiên với người khác. Có lẽ vì vậy mà nó cũng mang cảm giác thủ công.
Tôi sẽ tìm hiểu thêm những điểm bạn nhắc đến. Về việc hợp tác với nhà thiết kế chuyên nghiệp, tôi sẵn sàng nhận lời khuyên, nhưng vì đây là dự án phụ nên không có kế hoạch thuê riêng ai cả. Hiện tại tôi nghĩ đối tượng chính không phải là giới chuyên nghiệp, mà có lẽ sẽ hấp dẫn người dùng làm vì sở thích hơn.
Càng nhìn lâu thì tổng thể càng thấy đẹp hơn, nhưng đồng thời cảm giác hơi gượng cũng mạnh hơn, khá thú vị.
Sửa: Có lẽ màu của tách trà khiến tôi thấy hơi lạ. Tôi thích logo nói chung, nhưng tự hỏi nếu đổi màu tách trà gần với màu nền phía trên hơn thì sao.
Chữ đen trên nền tối không hợp cả về thẩm mỹ lẫn khả năng tiếp cận. Nếu các thiết lập mặc định được trau chuốt hơn thì sẽ càng tuyệt.
Tuy nhiên, nếu là nhà thiết kế muốn khớp với diện mạo thiết kế của doanh nghiệp thì họ có thể dành hàng giờ chỉ cho những thứ như khoảng cách, và công cụ này có vẻ không dành cho những người như vậy.
Tôi thích những thư viện nhỏ như thế này. Hiện tôi đang dùng pico.css, nhưng cũng sẽ xem thử cái này. Tôi nghĩ các phần tử DOM chuẩn của trình duyệt lẽ ra nên trông như thế này.
Nhưng thực tế thì không, nên những thư viện như vậy mới tồn tại. Sau khi đọc bình luận của người khác, tôi tìm hiểu “classless” trong thư viện này nghĩa là gì và tìm thấy một danh sách các thư viện tương tự.
https://github.com/dbohdan/classless-css
Từ lâu tôi đã nghĩ sẽ thật tốt nếu có cách chuyển đổi giữa style chrome và style nội dung. Ví dụ thanh điều hướng hay các phần trực quan hoá/tương tác được nhúng chỉ nhận style mặc định tối thiểu ở chế độ chrome, còn phần nội dung bài viết thì nhận style người dùng ưa thích.
Bộ Flask + HTMX + AlpineJS + PicoCSS hiện là “All Python and HTML SPA” của tôi.
Trông có vẻ thú vị, nhưng bỏ gạch chân liên kết và trước khi hover chỉ dựa vào màu sắc là rất tệ về mặt khả năng tiếp cận.
Người khiếm thị dùng trình đọc màn hình hoặc màn hình chữ nổi, nên không cần gạch chân. Vậy còn ai cần gạch chân nữa?
Có vẻ đầy hứa hẹn. Tôi đã dùng Simple.css: https://simplecss.org/
Nhìn lướt qua thì matcha.css có vẻ tiến xa hơn một chút, nên tôi định dùng thử.
Ví dụ có https://andybrewer.github.io/mvp/, https://oxal.org/projects/sakura/, https://yegor256.github.io/tacit/, https://chimera-demo.vercel.app/, https://watercss.kognise.dev/, https://missing.style/, v.v.
Đáng tiếc là matcha trông cũng không hứa hẹn lắm. Không có trang demo để xem nhanh các phần tử đã được style, bảng màu thì quá nổi, còn hover mặc định của nút là chữ tối trên nền tối nên khó đọc. Rõ ràng cần được trau chuốt thêm.
Có lẽ cần một công cụ tạo ra các CSS framework không cần class như thế này. Như vậy mỗi người có thể tinh chỉnh chi tiết bảng màu, padding, cỡ chữ, v.v.
Suốt 30 năm, chúng ta đã dùng thanh cuộn tỷ lệ làm điều khiển chuẩn. Ta có thể biết cửa sổ hiện tại đang hiển thị bao nhiêu phần của tài liệu, và có thể bấm vào thanh cuộn để dễ dàng nhảy tới vị trí tương ứng với kích thước tài liệu.
Ta cũng có thể dùng các nút mũi tên ở trên/dưới thanh cuộn, hoặc tab tới đó rồi thao tác bằng bàn phím. Nếu có hạn chế về thị giác hoặc vận động, ta có thể tăng độ tương phản hoặc phóng to hơn trong cài đặt hệ điều hành.
Nhưng trên web năm 2024, người ta thường xuyên phá hỏng thanh cuộn và biến nó thành cơn ác mộng trải nghiệm người dùng. Thật đáng xấu hổ khi CSS cho phép làm hỏng hoàn toàn các điều khiển chuẩn do hệ điều hành cung cấp vốn đang hoạt động tốt, khiến UI/UX của trình duyệt trở nên tệ hại.
Xin đừng dùng thứ này.
Các điều khiển chuẩn do hệ điều hành cung cấp cũng đã tệ đi theo thời gian. Ví dụ như thanh cuộn biến mất và checkbox bo tròn của Apple.
Những thứ đó không dễ thay đổi, nhưng với CSS thì ít nhất ta có thể cải thiện các điều khiển chuẩn như vậy.
Tôi thích chức năng xem trước cho biết nó sẽ trông như thế nào trên các website khác. Rất trực quan và phù hợp với một trang CSS.
Không thể thiếu kho Spark Joy của Swyx:
https://github.com/swyxio/spark-joy?tab=readme-ov-file#drop-...
Một danh sách khác được nhắc tới trong cuộc thảo luận đó, có kèm ảnh chụp màn hình: https://github.com/dbohdan/classless-css
Thực sự có rất nhiều lựa chọn. Thông tin đáng giá nhất lúc này là mức độ dễ dùng ra sao khi thực sự dùng thử.
Tại sao đến giờ vẫn liên tục có CSS framework mới được tạo ra? Tại sao chuyện này vẫn chưa phải là vấn đề đã được giải quyết?
Chừng nào các nghệ sĩ còn muốn thể hiện bản thân trên phương tiện web, các stylesheet và “framework” mới sẽ vẫn tiếp tục xuất hiện.