HTMLImageElement: sizes 屬性

Baseline 已廣泛支援

此特性已經非常成熟,並且適用於許多裝置和瀏覽器版本。自 2016 年 3 月以來,它已在所有瀏覽器中可用。

HTMLImageElement 屬性 sizes 允許您為一組媒體條件中的 影像指定佈局寬度。這提供了在文件狀態發生變化以匹配不同媒體條件時,自動選擇不同影像(甚至不同方向或縱橫比的影像)的能力。

每個條件都使用 媒體查詢使用的相同條件格式指定。

一個字串,包含逗號分隔的源大小描述符列表,後跟一個可選的備用大小。每個源大小描述符由媒體條件組成,然後是至少一個空格字元,然後是當媒體條件評估為 true 時要用於影像的源大小值。您可以使用值 auto 來替換整個大小列表或列表中的第一個條目。有關 sizes 屬性語法的更多資訊,請參閱 <img>

示例

選擇適合視窗寬度的影像

在此示例中,建立了一個類似部落格的佈局,顯示了一些文字和一個影像,該影像根據視窗的寬度指定了三個大小點。還提供了影像的三個版本,並指定了它們的寬度。瀏覽器會獲取所有這些資訊,並選擇一個最能滿足指定值的影像和寬度。

影像的確切使用方式可能取決於瀏覽器和使用者顯示器的畫素密度。

示例底部的按鈕可以讓您實際修改 sizes 屬性,在 40em 和 50em 之間切換影像的最大三個寬度。

HTML

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="(50em <= width <= 60em) 50em,
              (30em <= width < 50em) 30em,
              (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

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",
    "Helvetica",
    "Arial",
    sans-serif;
}

article img {
  display: block;
  max-width: 100%;
  border: 1px solid #888888;
  box-shadow: 0 0.5em 0.3em #888888;
  margin-bottom: 1.25em;
}

JavaScript

JavaScript 程式碼處理了兩個按鈕,它們允許您在 40em 和 50em 之間切換第三個寬度選項;這是透過處理 click 事件來完成的,使用 JavaScript 字串 replace() 方法替換 sizes 字串的相關部分。

js
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

瀏覽器相容性

另見