Nâng cấp CSS attr()

Ngày xuất bản: 15 tháng 1 năm 2025

Hàm attr() được thiết kế lại

Với CSS attr(), bạn có thể sử dụng giá trị của một thuộc tính HTML trong CSS. Cho đến nay, attr() chỉ hoạt động trong thuộc tính content của các phần tử giả và chỉ có thể phân tích cú pháp các giá trị thành <string> CSS.

Hàm attr() được thiết kế lại (có trong Chrome 133) mở ra nhiều chức năng hơn. Giờ đây, bạn có thể sử dụng attr() với bất kỳ thuộc tính CSS nào (bao gồm cả thuộc tính tuỳ chỉnh) và thuộc tính này có thể phân tích cú pháp các giá trị thành các loại dữ liệu khác ngoài <string>.

Ví dụ

Trong ví dụ sau, giá trị của thuộc tính color cho div sử dụng giá trị từ thuộc tính data-color. Giá trị thuộc tính này được phân tích cú pháp thành <color> bằng attr()type(). Giá trị dự phòng được đặt thành red.

<div data-foo="blue">test</div>
div {
  color: attr(data-foo type(<color>), red);
}

Trong ví dụ tiếp theo, thuộc tính view-transition-name được xác định bởi thuộc tính id của phần tử. Thuộc tính này được phân tích cú pháp thành <custom-ident>, là loại bắt buộc cho view-transition-name. Nếu không có attr(), bạn phải khai báo view-transition-name cho từng thẻ, nhưng giờ đây, bạn có thể thực hiện việc này cùng một lúc.

<div class="cards">
  <div class="card" id="card-1"></div>
  <div class="card" id="card-2"></div>
  <div class="card" id="card-3"></div>
  <div class="card" id="card-4"></div>
</div>
.card {
  view-transition-name: attr(id type(<custom-ident>), none); /* card-1, card-2, card-3, etc. */
  view-transition-class: card;
}

Bạn cũng có thể phân tích cú pháp các giá trị thành độ dài bằng cách đặt loại thành bất kỳ giá trị nhận dạng nào khớp với đơn vị kích thước CSS hoặc ký tự %. Trong ví dụ sau, thuộc tính data-size được phân tích cú pháp thành giá trị pixel.

<div data-size="10">test</div>
div {
  font-size: attr(data-size px);
}

Khi sử dụng attr() mà không có bất kỳ loại nào, thuộc tính này sẽ phân tích cú pháp thuộc tính thành một chuỗi CSS, giống như hành vi trước đó.

Tìm hiểu thêm

Tìm thêm thông tin về attr() trong quy cách và trên MDN.