HTMLImageElement:sizes 属性
HTMLImageElement
属性sizes
允许您为媒体条件列表中的每个条件指定图像的布局宽度。这提供了在不同图像之间自动选择的能力——即使是不同方向或纵横比的图像——因为文档状态会更改以匹配不同的媒体条件。
每个条件都使用与媒体查询相同的条件格式指定。
值
一个字符串,包含以逗号分隔的源大小描述符列表,后跟一个可选的回退大小。每个源大小描述符都包含一个媒体条件,然后至少一个空格字符,然后是当媒体条件计算结果为true
时用于图像的源大小值。
媒体条件
源大小值
源大小值是 CSS <length>
。可以使用字体相关的单位(例如em
或ex
)、绝对单位(例如px
或cm
)或vw
单位来指定,这允许您将宽度指定为视口宽度的百分比(1vw
为视口宽度的 1%)。
注意:源大小值不能指定为容器大小的百分比;也就是说,不允许使用诸如50%
或100%
之类的长度,因为对于指定值是哪个容器的百分比存在不确定性。
示例
选择适合窗口宽度的图像
在此示例中,创建了一个类似博客的布局,显示了一些文本和一个图像,该图像根据窗口宽度指定了三个尺寸点。三个版本的图像也可用,并指定了它们的宽度。浏览器获取所有这些信息并选择最符合指定值的图像和宽度。
图像的确切使用方法可能取决于浏览器和用户显示器的像素密度。
示例底部的按钮实际上允许您稍微修改sizes
属性,在图像的三个宽度中切换最大的宽度,在 40em 和 50em 之间切换。
HTML
<article>
<h1>An amazing headline</h1>
<div class="test"></div>
<p>
This is even more amazing content text. It's really spectacular. And
fascinating. Oh, it's also clever and witty. Award-winning stuff, I'm sure.
</p>
<img
src="new-york-skyline-wide.jpg"
srcset="
new-york-skyline-wide.jpg 3724w,
new-york-skyline-4by3.jpg 1961w,
new-york-skyline-tall.jpg 1060w
"
sizes="((min-width: 50em) and (max-width: 60em)) 50em,
((min-width: 30em) and (max-width: 50em)) 30em,
(max-width: 30em) 20em"
alt="The New York City skyline on a beautiful day, with the One World Trade Center building in the middle." />
<p>
Then there's even more amazing stuff to say down here. Can you believe it? I
sure can't.
</p>
<button id="break40">Last Width: 40em</button>
<button id="break50">Last Width: 50em</button>
</article>
CSS
article {
margin: 1em;
max-width: 60em;
min-width: 20em;
border: 4em solid #880e4f;
border-radius: 7em;
padding: 1.5em;
font:
16px "Open Sans",
Verdana,
Arial,
Helvetica,
sans-serif;
}
article img {
display: block;
max-width: 100%;
border: 1px solid #888;
box-shadow: 0 0.5em 0.3em #888;
margin-bottom: 1.25em;
}
JavaScript
JavaScript 代码处理两个按钮,这些按钮允许您在 40em 和 50em 之间切换第三个宽度选项;这是通过处理click
事件来完成的,使用 JavaScript 字符串replace()
方法替换sizes
字符串的相关部分。
const image = document.querySelector("article img");
const break40 = document.getElementById("break40");
const break50 = document.getElementById("break50");
break40.addEventListener(
"click",
() => (image.sizes = image.sizes.replace(/50em,/, "40em,")),
);
break50.addEventListener(
"click",
() => (image.sizes = image.sizes.replace(/40em,/, "50em,")),
);
结果
最好在它自己的窗口中查看该页面,以便您可以完全调整大小。
规范
规范 |
---|
HTML 标准 # dom-img-sizes |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。