CSS Wrapped: 2023!
Chuyển đến phần nội dung:
- Thiết kế thích ứng
- Cụm từ tìm kiếm vùng chứa
- Truy vấn kiểu
- :has bộ chọn
- Cập nhật truy vấn nội dung nghe nhìn
- Truy vấn nội dung đa phương tiện bằng tập lệnh
- Truy vấn nội dung nghe nhìn minh bạch
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
Chrome 111 đã hỗ trợ thêm các hàm lượng giác sin()
, cos()
, tan()
, asin()
, acos()
, atan()
và 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.
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
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()
và :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.
Tìm hiểu thêm về các lựa chọn phức tạp nth-*.
Phạm vi
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
Bản minh hoạ trực tiếp về phạm vi
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
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
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ụ
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
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
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
Bản minh hoạ chữ cái đầu tiên
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 có 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
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)
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
Tìm hiểu thêm về Color 4 và không gian màu.
hàm color-mix
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 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
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
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
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
Bản minh hoạ truy vấn kiểu
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()
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()
Bản minh hoạ trực tiếp về :has()
Vì :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()
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
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
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
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
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
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
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
Đừ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.
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
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
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
Ả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
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
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
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 đó.
Bản ghi màn hình minh hoạ
Bản minh hoạ trực tiếp
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 display
và content-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
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ủ
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ư popover
và dialog
) 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
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 popover
và id
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
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
:user-valid
và :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
và :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
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.
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,