Kết thúc CSS: năm 2023!

Tiêu đề được gói bằng CSS

CSS Wrapped: 2023!

Rất ấn tượng! 2023 là một năm quan trọng đối với CSS!

Từ #Interop2023 đến nhiều trang đích mới trong không gian CSS và giao diện người dùng, cho phép các tính năng mà nhà phát triển từng nghĩ là không thể thực hiện trên nền tảng web. Giờ đây, mọi trình duyệt hiện đại đều hỗ trợ truy vấn vùng chứa, lưới con, bộ chọn :has() và rất nhiều hàm và không gian màu mới. Chrome hỗ trợ ảnh động do cuộn chỉ dành cho CSS và tạo ảnh động mượt mà giữa các thành phần hiển thị web bằng hiệu ứng chuyển đổi thành phần hiển thị. Và trên hết, có rất nhiều thành phần gốc mới đã ra mắt để mang lại trải nghiệm tốt hơn cho nhà phát triển, chẳng hạn như lồng CSS và kiểu có giới hạn.

Vậy là một năm đã trôi qua! Vì vậy, chúng tôi muốn kết thúc năm đầy dấu mốc này bằng cách tôn vinh và ghi nhận tất cả những nỗ lực của các nhà phát triển trình duyệt và cộng đồng web đã giúp chúng tôi đạt được những thành tựu này.

Nền tảng kiến trúc

Hãy bắt đầu với các nội dung cập nhật về ngôn ngữ và chức năng cốt lõi của CSS. Đây là những tính năng cơ bản cho cách bạn tạo và sắp xếp kiểu, đồng thời mang lại sức mạnh to lớn cho nhà phát triển.

Hàm lượng giác

Hỗ trợ trình duyệt

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 108.
  • Safari: 15.4.

Nguồn

Chrome 111 đã hỗ trợ thêm các hàm lượng giác sin(), cos(), tan(), asin(), acos(), atan()atan2(), cung cấp các hàm này trên tất cả các công cụ chính. Các hàm này rất hữu ích cho mục đích tạo ảnh động và bố cục. Ví dụ: giờ đây, bạn có thể dễ dàng bố trí các phần tử trên một vòng tròn xung quanh tâm đã chọn.

Bản minh hoạ hàm lượng giác

Tìm hiểu thêm về các hàm lượng giác trong CSS.

Lựa chọn phức tạp thứ n-*

Hỗ trợ trình duyệt

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 9.

Với bộ chọn lớp giả :nth-child(), bạn có thể chọn các phần tử trong DOM theo chỉ mục của các phần tử đó. Khi sử dụng ngữ pháp vi mô An+B, bạn có thể kiểm soát chính xác những phần tử mà bạn muốn chọn.

Theo mặc định, các phần tử giả lập :nth-*() sẽ tính đến tất cả phần tử con. Kể từ Chrome 111, bạn có thể tuỳ ý truyền danh sách bộ chọn vào :nth-child():nth-last-child(). Bằng cách đó, bạn có thể lọc trước danh sách phần tử con trước khi An+B thực hiện việc của nó.

Trong bản minh hoạ sau, logic 3n+1 chỉ được áp dụng cho các búp bê nhỏ bằng cách lọc trước các búp bê đó bằng of .small. Sử dụng trình đơn thả xuống để tự động thay đổi bộ chọn đã sử dụng.

Bản minh hoạ lựa chọn phức tạp thứ n-*

Tìm hiểu thêm về các lựa chọn phức tạp nth-*.

Phạm vi

Hỗ trợ trình duyệt

  • Chrome: 118.
  • Edge: 118.
  • Firefox: phía sau một cờ.
  • Safari: 17.4.

Nguồn

Chrome 118 đã hỗ trợ thêm @scope, một quy tắc at cho phép bạn so khớp bộ chọn theo phạm vi với một cây con cụ thể của tài liệu. Với tính năng tạo kiểu theo phạm vi, bạn có thể chọn các phần tử cụ thể mà không cần phải viết bộ chọn quá cụ thể hoặc ghép nối chặt chẽ các phần tử đó với cấu trúc DOM.

Cây con trong phạm vi được xác định bằng gốc phạm vi (ranh giới trên) và giới hạn phạm vi (ranh giới dưới) không bắt buộc.

@scope (.card) {  } /* scoping root */
@scope (.card) to (.card__content) {  } /* scoping root + scoping limit*/

Các quy tắc kiểu được đặt bên trong một khối phạm vi sẽ chỉ nhắm đến các phần tử trong cây con được tách ra. Ví dụ: quy tắc kiểu trong phạm vi sau đây chỉ nhắm đến các phần tử <img> nằm giữa phần tử .card và bất kỳ thành phần lồng nhau nào được bộ chọn [data-component] so khớp.

@scope (.card) to ([data-component]) {
  img {  }
}

Trong bản minh hoạ sau, các phần tử <img> trong thành phần băng chuyền không khớp do giới hạn phạm vi được áp dụng.

Ảnh chụp màn hình minh hoạ phạm vi

Ảnh chụp màn hình tham khảo cho bản minh hoạ @scope

Bản minh hoạ trực tiếp về phạm vi

Bản minh hoạ @scope CSS

Tìm hiểu thêm về @scope trong bài viết "Cách sử dụng @scope để giới hạn phạm vi tiếp cận của bộ chọn". Trong bài viết này, bạn sẽ tìm hiểu về bộ chọn :scope, cách xử lý độ cụ thể, phạm vi không có phần mở đầu và cách @scope ảnh hưởng đến trình tự.

Lồng ghép

Hỗ trợ trình duyệt

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 117.
  • Safari: 17.2.

Nguồn

Trước khi lồng, bạn cần khai báo rõ ràng từng bộ chọn, tách biệt với nhau. Điều này dẫn đến việc lặp lại, tệp kiểu lớn và trải nghiệm soạn thư bị phân tán. Giờ đây, bạn có thể tiếp tục với các bộ chọn có các quy tắc kiểu liên quan được nhóm lại với nhau.

dl {
  /* dt styles */
  
  dt {
    /* dl dt styles */
  }

  dd {
    /* dl dd styles */
  }
}

/* same as */
dt {
  /* dt styles */
}

dl dt {
  /* dl dt styles */
}

dl dd {
  /* dl dd styles */
}

Lồng ghép bản ghi màn hình

Bản minh hoạ trực tiếp về cách lồng

Thay đổi bộ chọn lồng ghép linh hoạt để quyết định người chiến thắng trong cuộc đua

Việc lồng có thể làm giảm trọng lượng của một tệp kiểu, giảm hao tổn của các bộ chọn lặp lại và tập trung các kiểu thành phần. Cú pháp ban đầu được phát hành với một giới hạn yêu cầu sử dụng & ở nhiều nơi, nhưng sau đó đã được gỡ bỏ bằng cập nhật cú pháp nhúng thoải mái.

Tìm hiểu thêm về lồng ghép.

Lưới phụ

Hỗ trợ trình duyệt

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 71.
  • Safari: 16.

Nguồn

CSS subgrid cho phép bạn tạo lưới phức tạp hơn với khả năng căn chỉnh tốt hơn giữa các bố cục con. Phương thức này cho phép một lưới nằm bên trong một lưới khác sử dụng các hàng và cột của lưới bên ngoài làm của riêng mình bằng cách sử dụng subgrid làm giá trị cho các hàng hoặc cột lưới.

Bản ghi màn hình về lưới con

Bản minh hoạ trực tiếp về lưới con

Đầu trang, nội dung và chân trang căn chỉnh theo kích thước động của các thành phần đồng cấp.

Lưới con đặc biệt hữu ích khi căn chỉnh các thành phần đồng cấp với nội dung động của nhau. Nhờ đó, các nhà văn bản quảng cáo, nhà văn bản trải nghiệm người dùng và người dịch không cần phải cố gắng tạo văn bản dự án "phù hợp" với bố cục. Với lưới con, bạn có thể điều chỉnh bố cục cho phù hợp với nội dung.

Tìm hiểu thêm về lưới phụ.

Kiểu chữ

Kiểu chữ trên web đã có một số điểm cập nhật chính trong năm 2023. Một tính năng nâng cao dần đặc biệt thú vị là thuộc tính text-wrap. Thuộc tính này cho phép điều chỉnh bố cục kiểu chữ, được soạn trong trình duyệt mà không cần thêm tập lệnh. Tạm biệt những dòng có độ dài khó chịu và chào đón kiểu chữ dễ dự đoán hơn!

Initial-letter

Hỗ trợ trình duyệt

  • Chrome: 110.
  • Edge: 110.
  • Firefox: không được hỗ trợ.
  • Safari: 9.

Nguồn

Ra mắt vào đầu năm trong Chrome 110, thuộc tính initial-letter là một tính năng CSS nhỏ nhưng mạnh mẽ, giúp thiết lập kiểu cho vị trí đặt chữ cái đầu tiên. Bạn có thể định vị các chữ cái ở trạng thái thả xuống hoặc nâng lên. Thuộc tính này chấp nhận hai đối số: đối số đầu tiên cho biết độ sâu thả chữ cái vào đoạn văn tương ứng và đối số thứ hai cho biết độ cao để nâng chữ cái lên trên đoạn văn đó. Bạn thậm chí có thể kết hợp cả hai, chẳng hạn như trong bản minh hoạ sau.

Ảnh chụp màn hình có chữ cái đầu tiên

Ảnh chụp màn hình minh hoạ chữ cái đầu tiên

Bản minh hoạ chữ cái đầu tiên

Thay đổi giá trị của initial-letter cho phần tử giả ::first-letter để xem phần tử này thay đổi.

Tìm hiểu thêm về initial-letter.

text-wrap: cân bằng và đẹp mắt

Là nhà phát triển, bạn không biết kích thước cuối cùng, kích thước phông chữ hoặc thậm chí là ngôn ngữ của dòng tiêu đề hoặc đoạn văn. Tất cả các biến cần thiết để xử lý hiệu quả và thẩm mỹ việc ngắt dòng văn bản đều nằm trong trình duyệt. Vì trình duyệt biết tất cả các yếu tố, chẳng hạn như kích thước phông chữ, ngôn ngữ và vùng được phân bổ, nên trình duyệt là một ứng cử viên tuyệt vời để xử lý bố cục văn bản nâng cao và chất lượng cao.

Đây là nơi hai kỹ thuật ngắt dòng văn bản mới xuất hiện, một kỹ thuật có tên là balance và kỹ thuật còn lại là pretty. Giá trị balance tìm cách tạo một khối văn bản hài hòa, trong khi pretty tìm cách ngăn chặn các dòng thừa và đảm bảo việc xuống dòng hợp lý. Cả hai nhiệm vụ này trước đây đều được thực hiện theo cách thủ công. Thật tuyệt vời khi bạn có thể giao việc này cho trình duyệt và trình duyệt có thể thực hiện công việc này cho mọi ngôn ngữ được dịch.

Bản ghi màn hình có văn bản xuống dòng tự động

Bản minh hoạ trực tiếp về tính năng xuống dòng tự động

Trong bản minh hoạ sau, bạn có thể so sánh bằng cách kéo thanh trượt, hiệu ứng của balancepretty trên một tiêu đề và một đoạn văn. Hãy thử dịch bản minh hoạ sang một ngôn ngữ khác!

Tìm hiểu thêm về text-wrap: balance.

Màu

2023 là năm của màu sắc cho nền tảng web. Với các không gian màu và hàm mới cho phép tạo giao diện màu động, bạn có thể tạo giao diện sống động, phong phú mà người dùng xứng đáng được hưởng, đồng thời giúp họ tuỳ chỉnh giao diện đó!

Không gian màu HD (Cấp màu 4)

Hỗ trợ trình duyệt

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 15.

Nguồn

Hỗ trợ trình duyệt

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 15.

Nguồn

Từ phần cứng đến phần mềm, CSS đến đèn nhấp nháy; máy tính có thể phải mất nhiều công sức để cố gắng thể hiện màu sắc giống như mắt người nhìn thấy. Năm 2023, chúng tôi có các màu mới, nhiều màu hơn, không gian màu mới, hàm màu và các tính năng mới.

CSS và màu sắc hiện có thể: – Kiểm tra xem phần cứng màn hình của người dùng có hỗ trợ màu HDR gam màu rộng hay không. – Kiểm tra xem trình duyệt của người dùng có hiểu cú pháp màu như Oklch hoặc Display P3 hay không. – Chỉ định màu HDR trong Oklab, Oklch, HWB, Display P3, Rec.2020, XYZ, v.v. – Tạo hiệu ứng chuyển màu bằng màu HDR, – Nội suy hiệu ứng chuyển màu trong không gian màu thay thế. – Pha trộn màu sắc bằng color-mix(). – Tạo biến thể màu bằng cú pháp màu tương đối.

Bản ghi màn hình Color 4

Bản minh hoạ Color 4

Trong bản minh hoạ sau, bạn có thể so sánh bằng cách kéo thanh trượt, các hiệu ứng của "balance" (cân bằng) và "pretty" (đẹp) trên một tiêu đề và một đoạn văn. Hãy thử dịch bản minh hoạ sang một ngôn ngữ khác!

Tìm hiểu thêm về Color 4 và không gian màu.

hàm color-mix

Hỗ trợ trình duyệt

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 16.2.

Nguồn

Việc pha trộn màu sắc là một nhiệm vụ kinh điển và trong năm 2023, CSS cũng có thể thực hiện việc này. Bạn không chỉ có thể pha màu trắng hoặc đen với một màu khác, mà còn có thể pha độ trong suốt và thực hiện tất cả việc này trong bất kỳ không gian màu nào mà bạn chọn. Đây đồng thời là một tính năng màu cơ bản và một tính năng màu nâng cao.

Bản ghi màn hình color-mix()

Bản minh hoạ color-mix()

Bản minh hoạ cho phép bạn chọn hai màu bằng công cụ chọn màu, không gian màu và tỷ lệ phần trăm của mỗi màu trong tổ hợp.

Bạn có thể coi color-mix() là một thời điểm trong một độ dốc. Trong khi hiệu ứng chuyển màu cho thấy tất cả các bước cần thiết để chuyển từ màu xanh dương sang màu trắng, thì color-mix() chỉ cho thấy một bước. Mọi thứ sẽ trở nên nâng cao hơn khi bạn bắt đầu tính đến không gian màu và tìm hiểu sự khác biệt giữa không gian màu kết hợp với kết quả.

Tìm hiểu thêm về color-mix().

Cú pháp màu tương đối

Cú pháp màu tương đối (RCS) là một phương thức bổ sung cho color-mix() để tạo biến thể màu. Hàm này mạnh hơn một chút so với color-mix() nhưng cũng là một chiến lược khác để xử lý màu. color-mix() có thể pha màu trắng để làm sáng màu, trong đó RCS cấp quyền truy cập chính xác vào kênh độ sáng và khả năng sử dụng calc() trên kênh để giảm hoặc tăng độ sáng theo phương thức lập trình.

Bản ghi màn hình RCS

Bản minh hoạ trực tiếp về RCS

Thay đổi màu sắc, thay đổi cảnh. Mỗi màu sử dụng cú pháp màu tương đối để tạo các biến thể từ màu cơ sở.

RCS cho phép bạn thực hiện các thao tác tương đối và tuyệt đối đối với một màu. Thay đổi tương đối là thay đổi mà bạn lấy giá trị hiện tại của độ bão hoà hoặc độ sáng và sửa đổi giá trị đó bằng calc(). Thay đổi tuyệt đối là thay thế một giá trị kênh bằng một giá trị hoàn toàn mới, chẳng hạn như đặt độ mờ thành 50%. Cú pháp này cung cấp cho bạn các công cụ có ý nghĩa để tạo giao diện, biến thể đúng thời điểm và nhiều tính năng khác.

Tìm hiểu thêm về ngữ pháp màu tương đối.

Thiết kế thích ứng

Thiết kế thích ứng đã phát triển vào năm 2023. Năm đột phá này đã mang đến các tính năng mới thay đổi hoàn toàn cách chúng ta xây dựng trải nghiệm web thích ứng, đồng thời mở ra một mô hình thiết kế thích ứng mới dựa trên thành phần. Sự kết hợp giữa truy vấn vùng chứa và :has() hỗ trợ các thành phần sở hữu kiểu dáng thích ứng và hợp lý dựa trên kích thước của thành phần mẹ, cũng như sự hiện diện hoặc trạng thái của bất kỳ thành phần con nào. Điều đó có nghĩa là cuối cùng bạn có thể tách bố cục cấp trang khỏi bố cục cấp thành phần và viết logic một lần để sử dụng thành phần của mình ở mọi nơi!

Truy vấn kích thước vùng chứa

Hỗ trợ trình duyệt

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 110.
  • Safari: 16.

Nguồn

Thay vì sử dụng thông tin kích thước chung của khung nhìn để áp dụng kiểu CSS, truy vấn vùng chứa hỗ trợ truy vấn phần tử mẹ trong trang. Điều này có nghĩa là các thành phần có thể được tạo kiểu một cách linh động trên nhiều bố cục và trong nhiều chế độ xem. Các truy vấn về kích thước vùng chứa đã ổn định trong tất cả trình duyệt hiện đại vào Ngày lễ tình nhân năm nay (ngày 14 tháng 2).

Để sử dụng tính năng này, trước tiên, hãy thiết lập vùng chứa trên phần tử mà bạn đang truy vấn, sau đó, tương tự như truy vấn nội dung đa phương tiện, hãy sử dụng @container với các tham số kích thước để áp dụng kiểu. Cùng với các truy vấn vùng chứa, bạn sẽ nhận được kích thước truy vấn vùng chứa. Trong bản minh hoạ sau, kích thước truy vấn vùng chứa cqi (thể hiện kích thước của vùng chứa nội tuyến) được dùng để định cỡ tiêu đề thẻ.

@container Screencast

Bản minh hoạ @container

Tìm hiểu thêm về cách sử dụng truy vấn vùng chứa.

Truy vấn vùng chứa kiểu

Hỗ trợ trình duyệt

  • Chrome: 111.
  • Edge: 111.
  • Firefox: không được hỗ trợ.
  • Safari: 18.

Nguồn

Truy vấn kiểu đã ra mắt với một phần triển khai trong Chrome 111. Với các truy vấn kiểu hiện tại, bạn có thể truy vấn giá trị của các thuộc tính tuỳ chỉnh trên phần tử mẹ khi sử dụng @container style(). Ví dụ: truy vấn xem giá trị thuộc tính tuỳ chỉnh có tồn tại hay không hoặc được đặt thành một giá trị nhất định, chẳng hạn như @container style(--rain: true).

Ảnh chụp màn hình truy vấn về kiểu

Ảnh chụp màn hình minh hoạ cho truy vấn vùng chứa kiểu thẻ thời tiết

Bản minh hoạ truy vấn kiểu

Thay đổi màu sắc, thay đổi cảnh. Mỗi màu sử dụng cú pháp màu tương đối để tạo các biến thể từ màu cơ sở.

Mặc dù cách này nghe có vẻ tương tự như việc sử dụng tên lớp trong CSS, nhưng truy vấn kiểu có một số ưu điểm. Thứ nhất, với các truy vấn kiểu, bạn có thể cập nhật giá trị trong CSS nếu cần cho các trạng thái giả. Ngoài ra, trong các phiên bản triển khai trong tương lai, bạn sẽ có thể truy vấn các dải giá trị để xác định kiểu được áp dụng, chẳng hạn như style(60 <= --weather <= 70) và kiểu dựa trên các cặp thuộc tính-giá trị như style(font-style: italic).

Tìm hiểu thêm về cách sử dụng truy vấn kiểu.

Bộ chọn :has()

Hỗ trợ trình duyệt

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 121.
  • Safari: 15.4.

Nguồn

Trong gần 20 năm, các nhà phát triển đã yêu cầu có một " bộ chọn mẹ" trong CSS. Giờ đây, bạn có thể thực hiện việc này bằng bộ chọn :has() được cung cấp trong Chrome 105. Ví dụ: việc sử dụng .card:has(img.hero) sẽ chọn các phần tử .card có hình ảnh chính làm phần tử con.

Ảnh chụp màn hình minh hoạ :has()

Ảnh chụp màn hình tham khảo cho bản minh hoạ :has()

Bản minh hoạ trực tiếp về :has()

Bản minh hoạ :has() CSS: Thẻ không có/có hình ảnh

:has() chấp nhận danh sách bộ chọn tương đối làm đối số, nên bạn có thể chọn nhiều phần tử hơn phần tử mẹ. Khi sử dụng nhiều bộ kết hợp CSS, bạn không chỉ có thể di chuyển lên cây DOM mà còn có thể chọn theo chiều ngang. Ví dụ: li:has(+ li:hover) sẽ chọn phần tử <li> đứng trước phần tử <li> đang được di chuột qua.

:has() Bản ghi màn hình

Bản minh hoạ :has()

Bản minh hoạ :has() CSS: Dock

Tìm hiểu thêm về bộ chọn :has() CSS.

Cập nhật truy vấn nội dung nghe nhìn

Hỗ trợ trình duyệt

  • Chrome: 113.
  • Edge: 113.
  • Firefox: 102.
  • Safari: 17.

Nguồn

Truy vấn nội dung đa phương tiện update giúp bạn điều chỉnh giao diện người dùng cho phù hợp với tốc độ làm mới của thiết bị. Tính năng này có thể báo cáo giá trị fast, slow hoặc none liên quan đến chức năng của các thiết bị khác nhau.

Hầu hết các thiết bị mà bạn thiết kế đều có thể có tốc độ làm mới nhanh. Bao gồm cả máy tính và hầu hết thiết bị di động. Máy đọc sách điện tử và các thiết bị như hệ thống thanh toán có công suất thấp có thể có tốc độ làm mới chậm. Khi biết rằng thiết bị không thể xử lý ảnh động hoặc các bản cập nhật thường xuyên, bạn có thể tiết kiệm mức sử dụng pin hoặc các bản cập nhật chế độ xem bị lỗi.

Cập nhật bản ghi màn hình

Bản minh hoạ cập nhật

Mô phỏng (bằng cách chọn một tuỳ chọn chọn) giá trị tốc độ cập nhật và xem giá trị này ảnh hưởng như thế nào đến vịt.

Tìm hiểu thêm về @media (bản cập nhật).

Truy vấn nội dung đa phương tiện bằng tập lệnh

Hỗ trợ trình duyệt

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 113.
  • Safari: 17.

Nguồn

Bạn có thể dùng truy vấn nội dung đa phương tiện bằng tập lệnh để kiểm tra xem có JavaScript hay không. Điều này rất hữu ích cho việc cải tiến dần. Trước truy vấn nội dung đa phương tiện này, chiến lược để phát hiện xem có JavaScript hay không là đặt một lớp nojs trong HTML và xoá lớp đó bằng JavaScript. Bạn có thể xoá các tập lệnh này vì CSS hiện có cách phát hiện JavaScript và điều chỉnh cho phù hợp.

Tìm hiểu cách bật và tắt JavaScript trên một trang để kiểm thử thông qua Công cụ của Chrome cho nhà phát triển tại đây.

Ghi lại chuyển động trên màn hình bằng tập lệnh

Bản minh hoạ về tập lệnh

Hãy xem xét một nút chuyển đổi giao diện trên trang web, truy vấn nội dung đa phương tiện tập lệnh có thể hỗ trợ việc chuyển đổi theo lựa chọn ưu tiên của hệ thống vì không có JavaScript. Hoặc hãy cân nhắc thành phần nút chuyển – nếu có JavaScript, bạn có thể vuốt nút chuyển bằng cử chỉ thay vì chỉ bật và tắt. Có rất nhiều cơ hội tuyệt vời để nâng cấp trải nghiệm người dùng nếu có thể viết tập lệnh, đồng thời cung cấp trải nghiệm cơ bản có ý nghĩa nếu tắt tính năng viết tập lệnh.

Tìm hiểu thêm về tập lệnh.

Truy vấn nội dung nghe nhìn có mức độ minh bạch thấp

Hỗ trợ trình duyệt

  • Chrome: 118.
  • Edge: 118.
  • Firefox: phía sau một cờ.
  • Safari: không được hỗ trợ.

Nguồn

Giao diện không mờ có thể gây đau đầu hoặc gây khó khăn về thị giác cho nhiều loại khiếm thị. Đó là lý do Windows, macOS và iOS có các tuỳ chọn hệ thống có thể giảm hoặc xoá độ trong suốt khỏi giao diện người dùng. Truy vấn nội dung nghe nhìn này cho prefers-reduced-transparency phù hợp với các truy vấn nội dung nghe nhìn ưu tiên khác, cho phép bạn sáng tạo trong khi vẫn điều chỉnh cho người dùng.

Bản ghi màn hình có độ trong suốt giảm

Bản minh hoạ về việc giảm độ trong suốt

Trong một số trường hợp, bạn có thể cung cấp một bố cục thay thế không có nội dung phủ lên nội dung khác. Trong các trường hợp khác, bạn có thể điều chỉnh độ mờ của một màu để trở nên mờ hoặc gần như mờ. Bài đăng trên blog sau đây có nhiều bản minh hoạ đầy cảm hứng hơn, phù hợp với lựa chọn ưu tiên của người dùng. Hãy xem các bản minh hoạ này nếu bạn muốn biết những thời điểm truy vấn nội dung nghe nhìn này có giá trị.

Tìm hiểu thêm về @media (prefers-reduced-transparency).

Số lượt tương tác

Tính tương tác là nền tảng của trải nghiệm kỹ thuật số. Tính năng này giúp người dùng nhận được phản hồi về nội dung họ đã nhấp vào và vị trí của họ trong không gian ảo. Năm nay, chúng tôi đã ra mắt nhiều tính năng thú vị giúp bạn dễ dàng soạn và triển khai các hoạt động tương tác, mang đến trải nghiệm web tinh tế hơn và hành trình người dùng suôn sẻ hơn.

Xem hiệu ứng chuyển đổi

Hỗ trợ trình duyệt

  • Chrome: 111.
  • Edge: 111.
  • Firefox: không được hỗ trợ.
  • Safari: 18.

Nguồn

Hiệu ứng chuyển đổi chế độ xem có tác động rất lớn đến trải nghiệm người dùng trên một trang. Với View Transitions API, ​​bạn có thể tạo hiệu ứng chuyển đổi hình ảnh giữa hai trạng thái trang của Ứng dụng trang đơn. Các hiệu ứng chuyển đổi này có thể là hiệu ứng chuyển đổi toàn trang hoặc các hiệu ứng nhỏ hơn trên trang, chẳng hạn như thêm hoặc xoá một mục mới vào danh sách.

Cốt lõi của API Chuyển đổi khung hiển thị là hàm document.startViewTranstion. Truyền vào một hàm cập nhật DOM thành trạng thái mới và API sẽ xử lý mọi thứ cho bạn. Tính năng này thực hiện việc này bằng cách chụp ảnh nhanh trước và sau đó chuyển đổi giữa hai ảnh. Khi sử dụng CSS, bạn có thể kiểm soát nội dung được chụp và tuỳ ý tuỳ chỉnh cách tạo ảnh động cho các ảnh chụp nhanh này.

VT Screencast

Bản minh hoạ về VT

Xem bản minh hoạ về hiệu ứng chuyển cảnh

API Chuyển đổi khung hiển thị cho Ứng dụng một trang được cung cấp trong Chrome 111. Tìm hiểu thêm về Chuyển đổi khung hiển thị.

Hàm làm mượt tuyến tính

Hỗ trợ trình duyệt

  • Chrome: 113.
  • Edge: 113.
  • Firefox: 112.
  • Safari: 17.2.

Đừng để tên của hàm này đánh lừa bạn. Hàm linear() (đừng nhầm với từ khoá linear) cho phép bạn tạo các hàm làm dịu phức tạp theo cách đơn giản, với sự đánh đổi là mất một số độ chính xác.

Trước linear() (được phát hành trong Chrome 113), bạn không thể tạo hiệu ứng nảy hoặc lò xo trong CSS. Nhờ linear(), bạn có thể ước chừng các hiệu ứng làm dịu này bằng cách đơn giản hoá chúng thành một loạt các điểm, sau đó nội suy tuyến tính giữa các điểm này.

Biểu đồ của một đường cong giảm độ nảy với một số dấu chấm được thêm vào
Đường cong tỷ lệ thoát ban đầu màu xanh dương được đơn giản hoá bằng một tập hợp các điểm chính hiển thị màu xanh lục. Hàm linear() sử dụng các điểm này và nội suy tuyến tính giữa các điểm đó.

Bản ghi màn hình có hiệu ứng làm mượt tuyến tính

Bản minh hoạ hiệu ứng làm mượt tuyến tính

Bản minh hoạ linear() CSS.

Tìm hiểu thêm về linear(). Để tạo các đường cong linear(), hãy sử dụng trình tạo hiệu ứng làm dịu tuyến tính.

Kết thúc cuộn

Hỗ trợ trình duyệt

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 109.
  • Safari: không được hỗ trợ.

Nguồn

Nhiều giao diện bao gồm các hoạt động tương tác cuộn và đôi khi giao diện cần đồng bộ hoá thông tin liên quan đến vị trí cuộn hiện tại hoặc tìm nạp dữ liệu dựa trên trạng thái hiện tại. Trước sự kiện scrollend, bạn phải sử dụng phương thức hết thời gian chờ không chính xác có thể kích hoạt trong khi ngón tay của người dùng vẫn còn trên màn hình. Với sự kiện scrollend, bạn có một sự kiện cuộn kết thúc đúng thời điểm để biết liệu người dùng có đang thực hiện cử chỉ hay không.

Video ghi lại chuyển động trên màn hình có cuộn

Bản minh hoạ Scrollend

Điều này rất quan trọng đối với trình duyệt vì JavaScript không thể theo dõi sự hiện diện của ngón tay trên màn hình trong khi cuộn, thông tin này đơn giản là không có. Giờ đây, bạn có thể xoá và thay thế các đoạn mã thử kết thúc cuộn không chính xác bằng một sự kiện có độ chính xác cao do trình duyệt sở hữu.

Tìm hiểu thêm về scrollend.

Ảnh động do cuộn

Hỗ trợ trình duyệt

  • Chrome: 115.
  • Edge: 115.
  • Firefox: phía sau một cờ.
  • Safari: không được hỗ trợ.

Nguồn

Ảnh động do cuộn là một tính năng thú vị có trong Chrome 115. Các lớp này cho phép bạn lấy một ảnh động CSS hoặc ảnh động được tạo bằng API Ảnh động trên web hiện có và ghép nối ảnh động đó với độ dời cuộn của thanh cuộn. Khi bạn cuộn lên và xuống – hoặc sang trái và phải trong thanh cuộn ngang – ảnh động được liên kết sẽ quét qua lại để phản hồi trực tiếp.

Với ScrollTimeline, bạn có thể theo dõi tiến trình tổng thể của một thanh cuộn, như minh hoạ trong bản minh hoạ sau. Khi bạn cuộn đến cuối trang, văn bản sẽ hiển thị từng ký tự.

Bản ghi màn hình SDA

Bản minh hoạ SDA

Bản minh hoạ ảnh động do cuộn CSS điều khiển: tiến trình cuộn

Với ViewTimeline, bạn có thể theo dõi một phần tử khi phần tử đó vượt qua cổng cuộn. Cách này hoạt động tương tự như cách IntersectionObserver theo dõi một phần tử. Trong bản minh hoạ sau, mỗi hình ảnh sẽ tự hiển thị từ thời điểm hình ảnh đó đi vào cuộn cho đến khi hình ảnh đó ở giữa.

Bản ghi màn hình minh hoạ SDA

Bản minh hoạ trực tiếp về SDA

Bản minh hoạ ảnh động do cuộn CSS: xem tiến trình

Vì ảnh động do cuộn hoạt động với ảnh động CSS và API Ảnh động trên web, nên bạn có thể hưởng lợi từ tất cả các lợi thế mà các API này mang lại. Điều này bao gồm cả khả năng chạy các ảnh động này trên luồng chính. Giờ đây, bạn có thể có ảnh động mượt mà, do thao tác cuộn điều khiển, chạy trên luồng chính chỉ với một vài dòng mã bổ sung – còn gì tuyệt hơn?

Để tìm hiểu thêm về ảnh động do cuộn điều khiển, hãy xem bài viết này có đầy đủ thông tin chi tiết hoặc truy cập vào scroll-driven-animations.style có nhiều bản minh hoạ.

Tệp đính kèm bị hoãn trong dòng thời gian

Hỗ trợ trình duyệt

  • Chrome: 116.
  • Edge: 116.
  • Firefox: không được hỗ trợ.
  • Safari: không được hỗ trợ.

Nguồn

Khi áp dụng ảnh động do cuộn qua CSS, cơ chế tra cứu để tìm thanh cuộn điều khiển luôn đi lên cây DOM, khiến ảnh động chỉ được giới hạn ở các thành phần cuộn cấp trên. Tuy nhiên, rất thường thì phần tử cần tạo ảnh động không phải là phần tử con của thanh cuộn mà là phần tử nằm trong một cây con hoàn toàn khác.

Để cho phép phần tử ảnh động tìm thấy một tiến trình cuộn có tên của một phần tử không phải là phần tử gốc, hãy sử dụng thuộc tính timeline-scope trên phần tử mẹ dùng chung. Điều này cho phép scroll-timeline hoặc view-timeline đã xác định có tên đó đính kèm vào, giúp mở rộng phạm vi của tệp. Khi đó, mọi thành phần con của thành phần mẹ dùng chung đó đều có thể sử dụng tiến trình có tên đó.

Hình ảnh trực quan của một cây con DOM có phạm vi dòng thời gian được sử dụng trên một phần tử mẹ dùng chung
Khi timeline-scope được khai báo trên phần tử mẹ dùng chung, phần tử sử dụng timeline-scope làm animation-timeline
có thể tìm thấy scroll-timeline được khai báo trên thanh cuộn.

Bản ghi màn hình minh hoạ

Bản minh hoạ trực tiếp

Bản minh hoạ ảnh động do cuộn CSS tạo: tệp đính kèm tiến trình bị trì hoãn

Tìm hiểu thêm về timeline-scope.

Ảnh động thuộc tính riêng biệt

Một tính năng mới khác trong năm 2023 là khả năng tạo ảnh động riêng biệt, chẳng hạn như tạo ảnh động đến và đi từ display: none. Kể từ Chrome 116, bạn có thể sử dụng displaycontent-visibility trong các quy tắc khung hình chính. Bạn cũng có thể chuyển đổi bất kỳ thuộc tính riêng biệt nào tại điểm 50% thay vì tại điểm 0%. Bạn có thể thực hiện việc này bằng thuộc tính transition-behavior sử dụng từ khoá allow-discrete hoặc trong thuộc tính transition dưới dạng viết tắt.

Ảnh động rời rạc. Ghi màn hình

Ảnh động rời rạc. Bản minh hoạ

Tìm hiểu thêm về chuyển đổi ảnh động rời.

@starting-style

Hỗ trợ trình duyệt

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 129.
  • Safari: 17.5.

Nguồn

Quy tắc CSS @starting-style dựa trên các tính năng web mới để tạo ảnh động đến và đi từ display: none. Quy tắc này cung cấp cách để cung cấp cho một phần tử kiểu "trước khi mở" mà trình duyệt có thể tra cứu trước khi phần tử đó mở trên trang. Điều này rất hữu ích cho ảnh động nhập và để tạo ảnh động trong các phần tử như cửa sổ bật lên hoặc hộp thoại. Lớp này cũng có thể hữu ích bất cứ khi nào bạn tạo một phần tử và muốn tạo ảnh động cho phần tử đó. Hãy xem ví dụ sau đây về cách tạo ảnh động cho thuộc tính popover (xem phần tiếp theo) vào khung hiển thị và vào lớp trên cùng một cách mượt mà từ bên ngoài khung nhìn.

@starting-style Screencast

Bản minh hoạ @starting-style

Tìm hiểu thêm về @starting-style và các ảnh động mục nhập khác.

Lớp phủ

Hỗ trợ trình duyệt

  • Chrome: 117.
  • Edge: 117.
  • Firefox: không được hỗ trợ.
  • Safari: không được hỗ trợ.

Nguồn

Bạn có thể thêm thuộc tính overlay CSS mới vào hiệu ứng chuyển đổi để cho phép các phần tử có kiểu lớp trên cùng (chẳng hạn như popoverdialog) tạo ảnh động ra khỏi lớp trên cùng một cách mượt mà. Nếu bạn không chuyển đổi lớp phủ, phần tử của bạn sẽ ngay lập tức quay lại trạng thái bị cắt, biến đổi và che khuất, đồng thời bạn sẽ không thấy quá trình chuyển đổi diễn ra. Tương tự, overlay cho phép ::backdrop tạo ảnh động một cách mượt mà khi được thêm vào phần tử lớp trên cùng.

Video ghi lại chuyển động trên màn hình có lớp phủ

Bản minh hoạ trực tiếp về lớp phủ

Tìm hiểu thêm về lớp phủ và các ảnh động thoát khác.

Thành phần

Năm 2023 là một năm quan trọng đối với sự giao thoa giữa kiểu và các thành phần HTML, với trang đích popover và nhiều công việc đang được thực hiện xung quanh việc định vị neo và tương lai của kiểu trình đơn thả xuống. Các thành phần này giúp bạn dễ dàng xây dựng các mẫu giao diện người dùng phổ biến mà không cần dựa vào các thư viện bổ sung hoặc xây dựng hệ thống quản lý trạng thái của riêng mình từ đầu mỗi lần.

Cửa sổ bật lên

Hỗ trợ trình duyệt

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 125.
  • Safari: 17.

Nguồn

Popover API giúp bạn tạo các thành phần nằm trên phần còn lại của trang. Các thành phần này có thể bao gồm trình đơn, lựa chọn và chú giải công cụ. Bạn có thể tạo một cửa sổ bật lên đơn giản bằng cách thêm thuộc tính popoverid vào phần tử bật lên, đồng thời kết nối thuộc tính id của phần tử đó với nút gọi bằng popovertarget="my-popover". Popover API hỗ trợ:

  • Được quảng bá lên lớp cao nhất. Cửa sổ bật lên sẽ xuất hiện trên một lớp riêng biệt phía trên phần còn lại của trang, vì vậy, bạn không cần phải điều chỉnh chỉ mục z.
  • Chức năng đóng nhẹ. Thao tác nhấp vào bên ngoài vùng cửa sổ bật lên sẽ đóng cửa sổ bật lên và trả về tiêu điểm.
  • Quản lý tiêu điểm mặc định. Khi mở cửa sổ bật lên, thẻ tiếp theo sẽ dừng bên trong cửa sổ bật lên.
  • Các liên kết bàn phím hỗ trợ tiếp cận. Việc nhấn phím esc hoặc bật/tắt hai lần sẽ đóng cửa sổ bật lên và trả về tiêu điểm.
  • Liên kết thành phần hỗ trợ tiếp cận. Kết nối phần tử popover với trình kích hoạt popover theo ngữ nghĩa.

Bản ghi màn hình cửa sổ bật lên

Bản minh hoạ trực tiếp về cửa sổ bật lên

Quy tắc dòng ngang trong lựa chọn

Một thay đổi nhỏ khác đối với HTML đã ra mắt trong Chrome và Safari trong năm nay là khả năng thêm các phần tử đường kẻ ngang (thẻ <hr>) vào các phần tử <select> để giúp phân chia nội dung một cách trực quan. Trước đây, việc đặt thẻ <hr> vào một phần tử select sẽ không hiển thị. Nhưng năm nay, cả Safari và Chrome đều hỗ trợ tính năng này, cho phép phân tách nội dung tốt hơn trong các phần tử <select>.

Chọn Ảnh chụp màn hình

ảnh chụp màn hình của giờ trong phần chọn có giao diện sáng và tối trong Chrome

Chọn Bản minh hoạ trực tiếp

Tìm hiểu thêm về cách sử dụng hr trong select

:các lớp giả hợp lệ và không hợp lệ của người dùng

Hỗ trợ trình duyệt

  • Chrome: 119.
  • Edge: 119.
  • Firefox: 88.
  • Safari: 16.5.

Nguồn

:user-valid:user-invalid hoạt động ổn định trong tất cả trình duyệt trong năm nay, hoạt động tương tự như các lớp giả :valid:invalid, nhưng chỉ so khớp với một thành phần điều khiển biểu mẫu sau khi người dùng tương tác đáng kể với dữ liệu đầu vào. Một thành phần điều khiển biểu mẫu bắt buộc và trống sẽ khớp với :invalid ngay cả khi người dùng chưa bắt đầu tương tác với trang. Chế độ điều khiển tương tự sẽ không khớp với :user-invalid cho đến khi người dùng thay đổi dữ liệu đầu vào và để dữ liệu đó ở trạng thái không hợp lệ.

Với các bộ chọn mới này, bạn không cần phải viết mã trạng thái để theo dõi dữ liệu đầu vào mà người dùng đã thay đổi.

:user-* Bản ghi màn hình

:user-* Bản minh hoạ trực tiếp

Tìm hiểu thêm về cách sử dụng các phần tử giả lập xác thực biểu mẫu user-*.

Bảng điều khiển độc quyền

Hỗ trợ trình duyệt

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 130.
  • Safari: 17.2.

Một mẫu giao diện người dùng phổ biến trên web là thành phần xếp nếp. Để triển khai mẫu này, bạn kết hợp một vài phần tử <details>, thường nhóm các phần tử đó lại với nhau để cho biết rằng các phần tử đó thuộc cùng một nhóm.

Tính năng mới trong Chrome 120 là hỗ trợ thuộc tính name trên các phần tử <details>. Khi sử dụng thuộc tính này, nhiều phần tử <details> có cùng giá trị name sẽ tạo thành một nhóm ngữ nghĩa. Mỗi lần chỉ có thể mở tối đa một phần tử trong nhóm: khi bạn mở một trong các phần tử <details> của nhóm, phần tử đã mở trước đó sẽ tự động đóng. Loại accordion này được gọi là accordion độc quyền.

Bản minh hoạ độc quyền về trình đơn accordion

Các phần tử <details> thuộc một ngăn xếp độc quyền không nhất thiết phải là phần tử đồng cấp. Các phần tử này có thể nằm rải rác trong tài liệu.

CSS đã có một sự hồi sinh như vậy trong vài năm qua, đặc biệt là trong năm 2023. Nếu bạn mới sử dụng CSS hoặc chỉ muốn ôn lại kiến thức cơ bản, hãy tham khảo khoá học miễn phí Tìm hiểu CSS cùng với các khoá học miễn phí khác tại web.dev.

Chúng tôi chúc bạn một mùa lễ vui vẻ và hy vọng bạn sớm có cơ hội đưa một số tính năng CSS và giao diện người dùng mới tuyệt vời này vào công việc của mình!

Nhóm DevRel của Giao diện người dùng Chrome,