AMP

建立回應式 AMP 頁面

簡介

回應式網頁設計旨在建構可回應使用者需求的流暢網頁,也就是能配合使用者裝置螢幕尺寸和方向的網頁。您可以在 AMP 中輕鬆達成此目的。AMP 支援所有螢幕和裝置類別,並提供內建的回應式元件。

在本指南中,我們將向您展示如何在 AMP 中輕鬆實作這些回應式基本概念

從這部影片瞭解 AMP 中的回應式設計。

控制視口

為了最佳化您的網頁,使內容能縮放並符合任何裝置的瀏覽器視窗,您需要指定 meta 視口元素。視口元素會指示瀏覽器如何縮放和調整網頁的可見區域 (視口) 的大小。

但是,您應該使用哪些值?在 AMP 中,這已經為您明確說明。作為 AMP 頁面的必要標記的一部分,您需要指定以下視口

<meta name="viewport" content="width=device-width" />

這些是您通常會用於回應式網站的典型視口設定。雖然有效的 AMP 頁面不需要 initial-scale=1,但建議使用,因為它會在頁面首次載入時將縮放比例設定為 1。

建立回應式版面配置

在回應式設計中,您可以使用 CSS @media 查詢,為各種螢幕尺寸量身打造網頁樣式,而無需變更頁面內容。在 AMP 中,您可以繼續使用相同的 CSS @media 查詢。此外,為了更精細地控制 AMP 元素,您可以在元素上指定 media 屬性。當您需要根據媒體查詢顯示或隱藏元素時,這特別有用。請參閱變更圖片的美術方向章節,以取得使用 media 屬性的範例。

讓每個元素調整大小以符合螢幕可能很棘手。但是,在 AMP 中,您只需指定 "layout=responsive" 屬性以及元素的 widthheight 屬性,即可輕鬆讓元素具有回應性。當您將 responsive 版面配置套用至元素時,該元素會自動調整大小以符合其容器元素的寬度,而高度會根據元素 widthheight 指定的長寬比變更。幾乎所有 AMP 元素都支援 responsive 版面配置;請參閱元素的參考文件,以瞭解支援哪些版面配置。

即使您可以使用 "layout=responsive" 輕鬆地讓元素具有回應性,您仍然必須考慮元素在所有螢幕尺寸 (包括桌上型電腦和平板電腦) 上的外觀。常見的錯誤是允許圖片佔據螢幕的完整寬度,這會將圖片拉伸超出其預期大小,為寬螢幕使用者帶來不良體驗。根據預設,具有 layout=responsive 的元素會佔據元素容器的完整寬度,而容器的寬度通常不受限制 (即 width=100%)。您可以透過簡單地限制圖片容器的寬度來改善圖片的外觀。例如,透過在「body」或「main」上設定「max-width」規則,您可以將所有圖片限制為特定的最大寬度。

範例:限制回應式圖片的寬度

在以下範例中,我們有一張花朵圖片 (640 x 427 像素),我們想要在所有螢幕尺寸上顯示,因此我們指定了 widthheight,並將版面配置設定為 responsive

<div class="resp-img">
  <amp-img
    alt="flowers"
    src="/static/inline-examples/images/flowers.jpg"
    layout="responsive"
    width="640"
    height="427"
  ></amp-img>
</div>
在 Playground 中開啟此程式碼片段

但是,我們不希望圖片拉伸超出其預期大小,因此我們透過自訂 CSS 將容器上的 max-width 設定為 700 像素

<style amp-custom>
  .resp-img {
    max-width: 700px;
  }
</style>

繼續閱讀 – 若要深入瞭解 AMP 中不同的版面配置,請參閱版面配置與媒體查詢指南。

當我可以使用 width=100% 樣式輕鬆完成此操作時,為什麼讓元素調整大小以符合螢幕很棘手?

棘手的部分是在頁面上呈現回應式元素,而不會對效能指標或使用者體驗產生不利影響。是的,您可以使用「width=100%」輕鬆讓圖片符合螢幕,但會有效能上的損失。瀏覽器必須先下載圖片以取得圖片的尺寸,然後針對螢幕尺寸適當地調整圖片大小,最後重新排版並重新繪製頁面。在 AMP 中,轉譯路徑已最佳化,以便首先版面配置頁面,根據 amp-img 中提供的尺寸 (使用這些數字建立長寬比) 為圖片預留位置,然後下載資源並繪製頁面。不需要重新排版。

縮放頁面的媒體

回應式設計中最具挑戰性的方面可能是正確地在頁面上顯示媒體,使其回應螢幕的特性。在本節中,我們將瞭解如何在 AMP 頁面上嵌入回應式媒體。

嵌入影片

當您在網頁中加入影片時,您要確保使用者可以看到影片的內容和影片的控制項 (即沒有溢位)。通常,您可以使用 CSS 媒體查詢、容器和其他 CSS 來達成此目的。在 AMP 中,您只需要將影片元素加入您的頁面,並在元素上指定 layout=responsive 即可,無需額外的 CSS。

範例:嵌入 YouTube 影片

在以下範例中,我們想要顯示嵌入的 YouTube 影片,該影片會回應裝置螢幕的尺寸和方向。透過將 "layout=responsive" 加入 amp-youtube 元素,影片會調整大小以符合視窗,並且根據指定的 widthheight 維持其長寬比。

<amp-youtube
  data-videoid="lBTCB7yLs8Y"
  layout="responsive"
  width="560"
  height="315"
>
</amp-youtube>
在 Playground 中開啟此程式碼片段

您可以將許多類型的影片加入您的 AMP 頁面。如需詳細資訊,請參閱可用的媒體元件清單。

顯示回應式圖片

圖片佔網頁的很大一部分 (約佔頁面位元組的 65%)。至少,您的圖片應在各種螢幕尺寸和方向上可見 (即使用者不必捲動、捏合/縮放才能看到整張圖片)。這在 AMP 中透過 "layout=responsive" 屬性輕鬆完成 (請參閱在 AMP 中加入圖片)。除了基本的回應式圖片外,您可能還想要提供多個圖片資源以

為正確的解析度提供清晰的圖片

對於高解析度螢幕 (例如 Retina 顯示器),您應該提供看起來清晰銳利的圖片;但是,您不希望在低解析度裝置上使用相同的圖片,因為這會導致不必要的額外載入時間。在非 AMP 和 AMP 頁面中,您可以使用具有寬度描述符 (w) 的 srcset,為螢幕的像素密度提供正確的圖片。

注意 – 基於 DPR (x) 的 srcset 選取器也適用;但是,為了獲得更大的彈性,我們建議使用 w 選取器。先前 (在舊的 srcset 提案中),w 描述符描述了視口寬度,但現在它描述了圖片來源檔案的寬度,這允許使用者代理程式計算每個圖片的有效像素密度,並選擇要轉譯的適當圖片。

範例:顯示符合螢幕的清晰圖片

在以下範例中,我們有幾個長寬比相同但解析度不同的圖片檔案。透過提供各種圖片解析度,瀏覽器可以選擇最適合裝置解析度的圖片。此外,我們已指定要轉譯圖片的大小

  • 對於視口寬度最多 400 像素,以視口寬度的 100% 轉譯圖片。
  • 對於視口寬度最多 900 像素,以視口寬度的 75% 轉譯圖片。
  • 對於高於 900 像素的所有內容,以 600 像素寬度轉譯圖片。
<amp-img
  alt="apple"
  src="/static/inline-examples/images/apple.jpg"
  height="596"
  width="900"
  srcset="/static/inline-examples/images/apple-900.jpg 900w,
            /static/inline-examples/images/apple-800.jpg 800w,
            /static/inline-examples/images/apple-700.jpg 700w,
            /static/inline-examples/images/apple-600.jpg 600w,
            /static/inline-examples/images/apple-500.jpg 500w,
            /static/inline-examples/images/apple-400.jpg 400w"
  sizes="(max-width: 400px) 100vw,
            (max-width: 900px) 75vw, 600px"
>
</amp-img>
在 Playground 中開啟此程式碼片段

例如,假設我們有一個裝置,其視口寬度為 412 像素,DPR 為 2.6。根據上述程式碼,圖片必須以視口寬度的 75% 顯示,因此瀏覽器會選擇接近 803 像素 (412 _ .75 _ 2.6) 的圖片,恰好是 apple-800.jpg

繼續閱讀 – 若要深入瞭解如何在 AMP 中使用 srcset 和 sizes,請參閱使用 srcset、sizes 和 heights 的美術指導指南。

變更圖片的美術方向

美術方向是指針對特定斷點調整圖片的視覺特性。例如,您可能想要提供圖片的裁切版本,以縮小圖片的焦點,而不是僅僅隨著螢幕變窄而縮放圖片,或者您可能想要在不同的斷點提供完全不同的圖片。在 HTML 中,您可以使用 picture 元素來完成此操作。在 AMP 中,美術方向可以使用 media 屬性來達成。

範例:不同斷點的不同尺寸圖片

在以下範例中,我們有 3 張不同的貓咪裁切圖片,我們想要在不同的斷點顯示。因此,如果視口寬度為

  • 670 像素或更大,顯示 cat-large.jpg (650 x 340 像素)
  • 470 - 669 像素,顯示 cat-medium.jpg (450 x 340 像素)
  • 469 像素或更小,顯示 cat-small.jpg (226 x 340 像素)

注意 – 由於我們希望圖片是固定尺寸 (即不扭曲),因此我們沒有指定版面配置值,預設情況下,由於我們設定了寬度和高度,因此會設定為 layout=fixed。如需更多資訊,請參閱「如果未指定版面配置屬性會發生什麼事?」

<amp-img
  alt="grey cat"
  media="(min-width: 670px)"
  width="650"
  height="340"
  src="/static/inline-examples/images/cat-large.jpg"
></amp-img>
<amp-img
  alt="grey cat"
  media="(min-width: 470px) and (max-width: 669px)"
  width="450"
  height="340"
  src="/static/inline-examples/images/cat-medium.jpg"
></amp-img>
<amp-img
  alt="grey cat"
  media="(max-width: 469px)"
  width="226"
  height="340"
  src="/static/inline-examples/images/cat-small.jpg"
></amp-img>
在 Playground 中開啟此程式碼片段

繼續閱讀 – 若要深入瞭解 AMP 中的美術指導,請參閱使用 srcset、sizes 和 heights 的美術指導指南。

提供最佳化圖片

提供快速載入的頁面需要最佳化的圖片,包括尺寸、品質和格式。始終將檔案大小縮減到最低可接受的品質等級。您可以使用各種工具來「壓縮」圖片 (例如ImageAlphTinyPNG)。在圖片格式方面,某些圖片格式提供比其他格式更好的壓縮能力 (例如 WebP 和 JPEG XR vs JPEG)。您會想要為使用者提供最佳化的圖片,並確保使用者的瀏覽器支援該圖片 (即並非所有瀏覽器都支援所有圖片格式)。

在 HTML 中,您可以使用 picture 標籤來提供不同的圖片格式。在 AMP 中,雖然不支援 picture 標籤,但您可以使用 fallback 屬性來提供不同的圖片。

繼續閱讀 – 若要深入瞭解回退,請參閱佔位符和回退指南。

在 AMP 中,有兩種方式可以實現提供最佳化圖片:伺服器端和用戶端。

設定伺服器以傳送最適合的圖片格式

使用不廣泛支援的圖片格式 (例如 WebP) 的開發人員,可以設定其伺服器來處理瀏覽器 Accept 標頭,並以圖片位元組和適當的 Content-Type 標頭回應。這可以防止瀏覽器下載其不支援的圖片類型。深入瞭解內容協商

Accept: image/webp,image/apng,image/_,_/\*;q=0.8
使用巢狀圖片回退

在以下範例中,如果瀏覽器支援 WebP,則提供 mountains.webp,否則提供 mountains.jpg。

<amp-img
  alt="Mountains"
  width="550"
  height="368"
  layout="responsive"
  src="/static/inline-examples/images/mountains.webp"
>
  <amp-img
    alt="Mountains"
    fallback
    width="550"
    height="368"
    layout="responsive"
    src="/static/inline-examples/images/mountains.jpg"
  ></amp-img>
</amp-img>
在 Playground 中開啟此程式碼片段

一個額外的好處是,某些快取 (例如 Google AMP 快取) 會自動壓縮圖片,並將圖片轉換為 WebP 和正確的解析度 (如果您沒有這樣做)。但是,並非所有平台都使用快取,因此您仍然應該在您的端手動最佳化圖片。

繼續閱讀 – 若要深入瞭解 Google AMP 快取套用的圖片最佳化,請參閱「Google AMP 快取、AMP Lite 和對速度的需求」部落格文章。

激發您靈感的範例

以下是一些範例,我們希望這些範例能激發您建立回應式 AMP 頁面

產品

Made by AMP