image-set()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2023.
Ký hiệu hàm image-set() trong CSS là phương pháp cho phép trình duyệt chọn hình ảnh CSS phù hợp nhất từ một tập hợp cho trước, chủ yếu dành cho màn hình có mật độ điểm ảnh cao.
Độ phân giải và băng thông khác nhau tùy theo thiết bị và kết nối mạng. Hàm image-set() cung cấp độ phân giải hình ảnh phù hợp nhất cho thiết bị của người dùng, bằng cách đưa ra một tập hợp các tùy chọn hình ảnh — mỗi tùy chọn kèm theo khai báo độ phân giải — để trình duyệt chọn lựa phù hợp nhất với thiết bị và cài đặt của người dùng. Độ phân giải có thể được dùng làm đại diện cho kích thước file — một trình duyệt trên kết nối di động chậm với màn hình độ phân giải cao có thể ưu tiên nhận hình ảnh độ phân giải thấp hơn thay vì chờ tải hình ảnh độ phân giải cao.
image-set() cho phép tác giả cung cấp các lựa chọn thay vì phải xác định những gì mỗi người dùng cần.
Cú pháp
/* Chọn hình ảnh dựa trên độ phân giải */
image-set(
"image1.jpg" 1x,
"image2.jpg" 2x
);
image-set(
url("image1.jpg") 1x,
url("image2.jpg") 2x
);
/* Chọn gradient dựa trên độ phân giải */
image-set(
linear-gradient(blue, white) 1x,
linear-gradient(blue, green) 2x
);
/* Chọn hình ảnh dựa trên định dạng được hỗ trợ */
image-set(
url("image1.avif") type("image/avif"),
url("image2.jpg") type("image/jpeg")
);
Giá trị
<image>-
Giá trị
<image>có thể là bất kỳ loại hình ảnh nào ngoại trừ image set. Hàmimage-set()không thể lồng bên trong một hàmimage-set()khác. <string>-
URL đến một hình ảnh.
<resolution>Optional-
Các đơn vị
<resolution>bao gồmxhoặcdppx, cho đơn vị chấm trên mỗi điểm ảnh,dpicho chấm trên inch, vàdpcmcho chấm trên centimét. Mỗi hình ảnh trong mộtimage-set()phải có độ phân giải duy nhất. type(<string>)Optional-
Chuỗi MIME type hợp lệ, ví dụ "image/jpeg".
Cú pháp chính thức
<image-set()> =
image-set( <image-set-option># )
<image-set-option> =
[ <image> | <string> ] [ <resolution> || type( <string> ) ]?
<image> =
<url> |
<image()> |
<image-set()> |
<cross-fade()> |
<element()> |
<gradient>
<image()> =
image( <image-tags>? [ <image-src>? , <color>? ]! )
<cross-fade()> =
cross-fade( <cf-image># )
<element()> =
element( <id-selector> )
<image-tags> =
ltr |
rtl
<image-src> =
<url> |
<string>
<cf-image> =
[ <image> | <color> ] &&
<percentage [0,100]>?
<id-selector> =
<hash-token>
Khả năng tiếp cận
Trình duyệt không cung cấp bất kỳ thông tin đặc biệt nào về hình ảnh nền cho công nghệ hỗ trợ. Điều này quan trọng chủ yếu đối với trình đọc màn hình, vì trình đọc màn hình sẽ không thông báo sự hiện diện của hình ảnh và do đó không truyền đạt gì cho người dùng. Nếu hình ảnh chứa thông tin quan trọng để hiểu mục đích tổng thể của trang, tốt hơn là mô tả nó một cách ngữ nghĩa trong tài liệu.
Ví dụ
>Sử dụng image-set() để cung cấp các tùy chọn background-image thay thế
Ví dụ này cho thấy cách sử dụng image-set() để cung cấp hai tùy chọn background-image thay thế, được chọn tùy theo độ phân giải cần thiết: phiên bản thông thường và phiên bản độ phân giải cao.
<div class="box"></div>
.box {
width: 400px;
height: 200px;
background-repeat: no-repeat;
background-size: cover;
background-image: image-set(
url("https://mdn.github.io/shared-assets/images/examples/balloons-small.jpg")
1x,
url("https://mdn.github.io/shared-assets/images/examples/balloons-landscape.jpg")
2x
);
}
Sử dụng image-set() để cung cấp các định dạng hình ảnh thay thế
Trong ví dụ tiếp theo, hàm type() được dùng để phục vụ hình ảnh ở định dạng AVIF và JPEG. Nếu trình duyệt hỗ trợ avif, nó sẽ chọn phiên bản đó. Nếu không, nó sẽ sử dụng phiên bản jpeg.
<div class="box"></div>
.box {
width: 400px;
height: 200px;
background-repeat: no-repeat;
background-size: cover;
background-image: image-set(
"https://mdn.github.io/shared-assets/images/examples/balloons-landscape.avif"
type("image/avif"),
"https://mdn.github.io/shared-assets/images/examples/balloons-landscape.jpg"
type("image/jpeg")
);
}
Thông số kỹ thuật
| Specification |
|---|
| CSS Images Module Level 4> # image-set-notation> |