Phông chữ vectơ gradient màu COLRv1 trong Chrome 98

Dominik Röttsches
Dominik Röttsches
Rod Sheeter
Rod Sheeter

Phông chữ vectơ màu sắc, nhỏ gọn, dễ nén với tất cả các màu chuyển màu mà bạn yêu thích.

Trong Chrome 98, nhóm Chrome và Phông chữ đã thêm tính năng hỗ trợ cho COLRv1, một sự phát triển của định dạng phông chữ COLRv0 nhằm phổ biến phông chữ màu bằng cách thêm hiệu ứng chuyển màu, kết hợp và pha trộn, đồng thời cải thiện khả năng sử dụng lại hình dạng nội bộ cho các tệp phông chữ sắc nét và nhỏ gọn có khả năng nén tốt.

Tô màu ngay

Trên web, văn bản thường được vẽ bằng màu được chỉ định trong CSS. Phông chữ không xác định bất kỳ màu cụ thể nào mà chỉ cho biết vị trí nên đặt pixel. Điều đó thường là một điều tốt. CSS cho phép tác giả linh hoạt chọn màu. Tuy nhiên, đôi khi một ký tự chứa nhiều màu sắc cùng nhau có ý nghĩa. Ví dụ: cờ Cờ người chuyển giới gồm các sọc màu xanh dương nhạt và hồng nhạt. này có các sọc màu xanh dương nhạt, hồng và trắng sẽ không truyền tải được ý nghĩa tương tự nếu chỉ được vẽ bằng màu văn bản hiện tại.

Ngày nay, đối với hầu hết người dùng, biểu tượng cảm xúc là phông chữ màu duy nhất mà họ thấy. Biểu tượng cảm xúc thường xuất hiện trên web thông qua phông chữ biểu tượng cảm xúc của hệ thống hoặc bằng cách chèn hình ảnh (có các chức năng riêng, Biểu tượng cảm xúc gấu trúc với biểu cảm khuôn mặt buồn.). Kích thước tệp lớn, đặc biệt là đối với phông chữ màu dựa trên bitmap, khiến việc sử dụng phông chữ web cho biểu tượng cảm xúc trở nên khó khăn. Bằng cách hỗ trợ COLRv1, chúng tôi hy vọng sẽ thấy sự gia tăng của việc sử dụng phông chữ màu sáng tạo trên web và nhiều nơi khác.

Cho tôi xem màu của bạn

Chúng tôi đã tạo một vài ví dụ để bạn thử nghiệm:

Các thành phần mẫu từ Google Fonts được sử dụng trong ví dụ này đang hoạt động trong API web Google Fonts. Các phông chữ này không được liệt kê trong thư mục tại fonts.google.com vì chỉ hoạt động trên Chrome 98 trở lên và giới thiệu công việc thử nghiệm.

Giờ đây, bạn có thể tạo phông chữ COLRv1 của riêng mình bằng các công cụ miễn phí và nguồn mở. Hãy xem trình biên dịch phông chữ nanoemoji. Trình biên dịch này cho phép bạn tạo phông chữ COLRv1 từ hình ảnh nguồn SVG, sau đó thử phông chữ đó trong Chrome 98 trở lên. Hãy thử tạo phiên bản Bungee Spice của riêng bạn bằng cách thay đổi màu chuyển tiếp theo hướng dẫn này.

Ví dụ: bạn có thể sửa đổi phông chữ Bungee Spice để có độ dốc màu xanh dương và đỏ như sau:

Từ dune (dune) trong phông chữ màu Bungee Spice, được điều chỉnh theo tông màu chuyển màu xanh dương và đỏ.

Hãy tweet kết quả của bạn đến @googlefonts 🙂 Tại sao không thử hiệu ứng chuyển màu dạng hình tròn hoặc quét?

Mới có trong COLRv1

Định dạng phông chữ hỗ trợ nhiều cách để hỗ trợ màu sắc, tất cả đều có các yếu tố đánh đổi khác nhau – nhưng cho đến nay, chưa có cách nào thành công trên web. (Để tìm hiểu thêm về ưu và nhược điểm, hãy xem bài nói chuyện trong hội nghị BlinkOn 15 của Dominik.) Chrome 98 hỗ trợ COLRv1, một sự phát triển của COLRv0. Chúng tôi hy vọng rằng sự kết hợp giữa khả năng đồ hoạ và tệp nhỏ gọn của COLRv1 sẽ là lựa chọn phù hợp cho nhiều trường hợp sử dụng phông chữ màu. COLRv1 thêm hiệu ứng chuyển màu, kết hợp và pha trộn, đồng thời cải thiện khả năng sử dụng lại hình dạng nội bộ để tạo tệp nhỏ gọn hơn nữa.

COLRv1 có khả năng biểu đạt gần tương đương với SVG Native cộng với kết hợp và kết hợp được thêm vào trên cùng. Có 4 loại màu tô: màu đồng nhất, kiểu chuyển màu tuyến tính, kiểu chuyển màu xuyên tâm và kiểu chuyển màu quét/hình nón. COLRv1 cho phép bạn đặt lại vị trí và biến đổi các phần tử ghi hình bằng cách sử dụng một tập hợp đầy đủ các thao tác dịch, xoay, tuyệt đối và chuyển tỷ lệ. Ngoài ra, phông chữ này còn hỗ trợ các biến thể phông chữ và sử dụng lại các định dạng định nghĩa hình dạng hiện có trong phông chữ.

Biểu tượng cảm xúc quả cầu pha lê màu xanh dương và màu tím với các ngôi sao được sử dụng lại trên nền màu nâu.
Sử dụng lại hình dạng trong biểu tượng cảm xúc quả cầu pha lê

Hãy lấy biểu tượng quả cầu pha lê làm ví dụ: Các điểm nổi bật hình ngôi sao có cùng hình dạng nhưng kích thước khác nhau, tức là chỉ một hình dạng có thể được định vị lại và sử dụng lại mà không bị trùng lặp bên trong tệp. Định dạng này cho phép bạn sử dụng lại một ký tự đầy đủ trong một ký tự mới mà không cần phải mã hoá lại cùng một hình dạng cho mỗi ký tự. Hãy tưởng tượng một phông chữ màu trang trí với các hoa văn trang trí hoa, trong đó cùng một hình dạng hoa được đặt trên các chữ cái khác nhau chỉ bằng cách tham chiếu các ký tự màu hiện có. Đối với trường hợp sử dụng phông chữ web, COLRv1 nén tốt trong woff2. Ví dụ: bản dựng thử nghiệm của Twemoji sử dụng COLRv1 chiếm khoảng 1,2 MB khi tăng cường, nhưng chỉ khoảng 0,6 MB ở dạng woff2. Một bản dựng của bộ ký tự biểu tượng cảm xúc Noto đầy đủ được giảm từ 9 MB cho phiên bản bitmap xuống còn 1,85 MB ở dạng COLRv1+woff2.

Biểu đồ thanh so sánh Noto Emoji dưới dạng phông chữ Bitmap và phông chữ COLRv1, khoảng 9MB
so với 1,85MB
Kích thước phông chữ Noto Emoji CBDT/CBLC so với COLRv1 sau khi nén WOFF2.

Các trường hợp sử dụng phông chữ màu

Dòng tiêu đề hấp dẫn

Phông chữ có màu sắc tươi mới giúp các điểm nổi bật, dòng tiêu đề và biểu ngữ trở nên thật nổi bật.

Plakato Color Happy 2022 có các hiệu ứng chuyển màu quét tràn đầy năng lượng, do nhà sản xuất phông chữ sáng tạo Underware (Twitter: @underware, Instagram: @underwarefoundry) tạo ra. Hãy đọc thêm về bản phát hành COLRv1 đầu tiên của Underware trong bài đăng trên blog của họ.

Không thay thế hình ảnh nữa: phông chữ biểu tượng cảm xúc

Nếu bạn hỗ trợ nội dung do người dùng tạo, thì người dùng có thể sử dụng biểu tượng cảm xúc. Ngày nay, việc quét văn bản và thay thế mọi biểu tượng cảm xúc gặp phải bằng hình ảnh là rất phổ biến để đảm bảo khả năng kết xuất nhất quán trên nhiều nền tảng và khả năng hỗ trợ các biểu tượng cảm xúc mới hơn so với hệ điều hành hỗ trợ. Sau đó, những hình ảnh đó phải được chuyển trở lại thành văn bản trong các hoạt động bảng nhớ tạm. Sau đây là một ví dụ thực tế:

Một đoạn mã hiển thị hình ảnh cùng dòng dưới dạng thẻ img và siêu dữ liệu trong nhật ký trò chuyện
Thay thế hình ảnh trong Google Chat

Nếu có phông chữ biểu tượng cảm xúc, bạn chỉ cần hiển thị văn bản ở phông chữ đó, như sau:

<style>
@import url(https://fonts.googleapis.com/css2?family=Noto+Color+Emoji);

.emoji {
  font-family: "Noto Color Emoji", sans-serif;
}
</style>
<span class="emoji">🙂</span>

Tương tự, trong thành phần phản ứng bằng biểu tượng cảm xúc, COLRv1 mang đến cơ hội sử dụng tệp phông chữ nhỏ gọn thay vì danh mục thành phần hình ảnh.

Giao diện người dùng bộ chọn biểu tượng cảm xúc được sử dụng trên GitHub
Bộ chọn phản ứng bằng biểu tượng cảm xúc trên GitHub

Hãy tưởng tượng bạn phải tìm nạp bao nhiêu hình ảnh để có một bộ chọn biểu tượng cảm xúc hoàn chỉnh!

Màu trong phông chữ biểu tượng

Việc sử dụng màu trong phông chữ biểu tượng giúp tăng độ rõ ràng và giúp các ký tự dễ hiểu hơn.

Ba biểu tượng màu xanh lục có đường viền màu đen
Biểu tượng hai tông màu Material từ https://fonts.google.com/icons

Biểu đạt nghệ thuật

Phông chữ màu tiết kiệm không gian cho phép các hình thức thể hiện nghệ thuật mới trong văn bản trên web. Ví dụ về phông chữ Ả Rập kiểu Kufi này sử dụng hiệu ứng chuyển màu làm cách diễn giải nghệ thuật về dòng mực của thư pháp truyền thống có thể trông như thế nào khi áp dụng cho kiểu chữ Kufi của chữ viết Ả Rập, bắt nguồn từ việc không được viết bằng ngòi và mực mà được khắc trên đá.

Chữ Ả Rập có hiệu ứng chuyển màu từ đen sang đỏ.
Reem Kufi Ink, phông chữ Ả Rập của Khaled Hosny

Phát hiện tính năng

Hiện tại, bạn có thể tìm hiểu xem công cụ trình duyệt có hỗ trợ một định dạng phông chữ màu cụ thể hay không bằng cách đánh hơi tác nhân người dùng hoặc bằng cách tìm kiếm trong thư viện như ChromaCheck của @PixelAmbacht để kiểm thử kết xuất các ký tự màu trên Canvas. Cả hai giải pháp đều không tối ưu. Việc kiểm thử tính năng chỉ nên phát hiện chính một tính năng cụ thể và tránh phát hiện tác nhân người dùng. Thư viện ChromaCheck không cần thực hiện các thao tác canvas 2D tốn nhiều tài nguyên để xác định khả năng hỗ trợ.

Nhóm Chrome muốn cải thiện vấn đề này và đã bắt đầu một loạt cuộc thảo luận [1, 2] trong nhóm làm việc CSS để cung cấp thông tin về việc hỗ trợ công nghệ phông chữ của trình duyệt trong JavaScript và khai báo trong CSS. Nhóm nghiên cứu dự định phát hành tính năng phát hiện tính năng hiệu quả cho phông chữ màu và các công nghệ phông chữ khác trong một phiên bản Chrome trong tương lai.

Nếu muốn sử dụng phông chữ màu trong dự án ngay bây giờ khi tính năng hỗ trợ COLRv1 chỉ giới hạn ở Chrome, bạn có thể làm theo hai cách: Yêu cầu nhà cung cấp phông chữ cung cấp phông chữ COLRv1 cũng chứa các ký tự đơn sắc. Các tác nhân người dùng không hỗ trợ COLRv1 sẽ quay lại kết xuất các ký tự đơn sắc. Ngoài ra, bạn có thể sử dụng thư viện ChromaCheck hoặc tính năng đánh hơi tác nhân người dùng để xác định xem có hỗ trợ COLRv1 hay không. Sau đó, bạn phân phối CSS tải phông chữ COLRv1 trong các tác nhân người dùng hỗ trợ và sử dụng định dạng phông chữ thay thế như COLRv0, định dạng phông chữ bitmap hoặc OpenType SVG trong các trình duyệt khác.

Hỗ trợ bảng phông chữ CSS

Việc này sẽ cực kỳ hữu ích nếu việc sử dụng một nhóm màu khác không đòi hỏi phông chữ mới. Rất may là có một cơ chế tồn tại: thuộc tính CSS của phông chữ. Nhóm Chrome đang nỗ lực hỗ trợ bảng điều khiển phông chữ trong Chrome.

Phông chữ COLRv1 và bạn

Nếu bạn quan tâm đến phông chữ COLRv1, hãy hỏi nhà cung cấp phông chữ về phông chữ màu COLRv1 để sử dụng trong dự án của bạn, thử các ví dụ và bản minh hoạ ở trên hoặc tại sao không thử ngay và thử nghiệm với việc tạo phông chữ của riêng bạn?

Nếu bạn có ý kiến phản hồi về COLRv1 trong Chrome, hãy đăng lên danh sách gửi thư blink-dev hoặc gửi vấn đề trong công cụ theo dõi lỗi của chúng tôi. Nếu bạn có ý kiến phản hồi về định dạng phông chữ COLRv1, hãy gửi vấn đề tại kho lưu trữ GitHub về thông số kỹ thuật COLRv1.

Với Chrome 98, chúng tôi rất vui mừng khi COLRv1 mang đến một cấp độ sáng tạo hoàn toàn mới về kiểu chữ cho web.

Tìm hiểu thêm

Nếu bạn muốn biết thêm thông tin chi tiết, chúng tôi có một số tài nguyên khác dành cho bạn:

Để tìm hiểu cách hoạt động và cách triển khai COLRv1 trong Chrome, hãy xem bài nói chuyện của Dominik tại hội nghị BlinkOn 15.

Lời cảm ơn

Cảm ơn rất nhiều Behdad Esfahbod, Cosimo Lupo, Peter Constable, Ben Wagner, Werner Lemberg, Dave Crossland, Vladimir Levantovsky, Jonathan Kew, Laurence Penney, Chris Lilley, David Jonathan Ross, Underware, Just van Rossum, Roel Nieskens và những người khác đã đóng góp cho COLRv1.