HTML 圖片 <img> 標籤 (tag)
<img> tag 用來在 HTML 文件中加入圖片 (images)。
<img> 主要是搭配 src 屬性來指定圖片位址,使用範例:
<img src="https://example.com/media/photo.jpg" with="600" heigh="400" alt="一張圖片">
效果如下:
<img> 標籤有下面這些屬性 (attributes)
src
指定圖片位址 (URL),只有這個屬性是必需要有的。
width
一個整數值,指定圖片寬度像素 (pixels),有指定的好處是可以避面頁面渲染時的跳動,因為瀏覽器不用等圖片下載完才能計算圖片寬度。
heigh
一個整數值,指定圖片高度像素 (pixels),有指定的好處是可以避面頁面渲染時的跳動,因為瀏覽器不用等圖片下載完才能計算圖片高度。
alt
圖片替代文字 (alternate text),當圖片無法顯示時,瀏覽器會顯示此文字。這文字說明對 SEO 也很有助益,所以建議圖片都需要有 alt。
title
可以指定一段文字,在當滑鼠滑過圖片時,會自動顯示這段文字。
響應式圖片 (Responsive images) - srcset
及 sizes
屬性
srcset 和 sizes 屬性 (attribute) 用在使瀏覽器 (browser) 自動判斷當在不同的螢幕寬度 (display width) 或不同的螢幕解析度 (pixel density, display density) 像是高清 retina 螢幕下,自動載入不同大小 (size) 的圖片,這技巧也常用在響應式網頁設計 (Responsive web design, RWD) 或手機行動版網頁設計。
srcset
srcset 屬性用來指定多張不同尺寸大小的圖片,指定大小可以用實際圖片寬度或螢幕解析度 pixel density 當單位。
srcset 語法是「"檔案路徑 URL" 空一格 "大小單位"」,而用逗點 (comma-separated) 來分隔開不同尺寸的圖片。
舉個例子,如果你想用實際圖片寬度當單位,單位的語法是圖片寬度後面接 w
:
<img srcset="image-480w.jpg 480w,
image-800w.jpg 800w,
image-1200w.jpg 1200w"
src="image-fallback.jpg"
>
繼續進一步說明一下上面的例子,我們告訴瀏覽器有三種不同的圖片尺寸,寬度分別是 480, 800 和 1200 pixel,告訴瀏覽器可以自己選擇最適用的圖片,那瀏覽器用什麼資訊去判斷哪張圖片尺寸最適用呢?就是這張圖片的排版寬度,也就是從你 CSS 樣式中設定的 img 寬度,或從 img 標籤的 width 屬性判斷得知!
當你有用 srcset 建議也要同時設定好 width 或下面會提到的 sizes 屬性,目的是幫助瀏覽器有足夠資訊判斷應該要下載哪個尺寸的圖片。
再來,我們也可以用螢幕解析度也就是 pixel density 來當單位,像是現在的智慧型手機的 retina 螢幕解析度有著高於一般螢幕 2x 3x 4x 的解析度,對網頁設計的影響來說,就是如果你直接用桌機網站的圖片放到手機上看就會變得「糊糊的」!
我們可以根據不同的 pixel density 指定使用不同尺寸的圖片,單位的語法是一個 pixel density 數字後面接 x
,舉個例子:
<img srcset="flower-1x.jpg 1x,
flower-2x.jpg 2x,
flower-3x.jpg 3x"
src="flower-fallback.jpg"
>
上面的例子就是告訴瀏覽器,當設備 (device) 的 pixel density 是 1 (也就是正常一般螢幕) 就用 flower-1x.jpg 這張圖,如果 pixel density 是 2 (例如 iPhone 8) 就用 flower-2x.jpg 這張圖片,如果 pixel density 是 3 (例如 iPhone X) 則用 flower-3x.jpg 這張圖片。
x
當單位,相對於用圖片實際寬度 w
當單位,好處是瀏覽器只要知道設備的 pixel density 就知道要去下載哪張圖片,很單純又快速的判斷邏輯。sizes
sizes 屬性是用來輔助 srcset 屬性給瀏覽器提示,告訴瀏覽器在不同的螢幕大小 (media query) 條件下,分別該使用多大尺寸的圖片。
sizes 的值是指原始圖片的實際尺寸,只是用來告訴瀏覽器該下載哪個 size 的圖片,不是用來排版 (layout) 圖片在畫面中的寬高,要排版圖片還是一樣是使用 CSS 喔。
sizes 的語法是「"media query 條件" 空一格 "建議使用的圖片實際寬度"」,而用逗點 (comma-separated) 來分隔開不同的條件。
舉個實際使用例子:
<img srcset="cat-160.jpg 160w,
cat-320.jpg 320w,
cat-640.jpg 640w,
cat-1280.jpg 1280w"
sizes="(max-width: 480px) 100vw,
(max-width: 900px) 33vw,
254px"
src="cat-fallback.jpg"
>
上面的例子中 sizes 告訴瀏覽器,當螢幕寬度小於 480px 時,圖片原始寬度需要有 100vw 螢幕寬;當螢幕寬度小於 900px 時,圖片原始寬度需要有 33vw 螢幕寬;當沒指定 media query 條件時,像是範例中的 254px 則是用來當前述條件都不符合時的預設值,即圖片原始寬度需要有 254px。
而當螢幕的 pixel density 如果不是 1 時,瀏覽器會自動乘上 pixel density 來當作需要的圖片原始寬度。舉個例子當 ritena 螢幕 pixel density 是 2 時,上面的 100vw 瀏覽器會解讀成 200vw;33vw 會解讀成 66vw;254px 則變成是 508px。
延遲載入圖片 (lazy loading images) - loading
屬性
lazy load 技巧是說先不載入使用者視線 (viewport) 以外看不到的圖片,待圖片將要出現在使用者視線之前再來動態載入圖片,lazy load 可以用來提升網頁效能同時節省非必要的頻寬花費。
以前都要用 JavaScript 寫 code 來實作 lazy load,而因為 lazy load 太常見了,現在新的瀏覽器已經直接內建支援,只需要在 <img> 上加上 loading
屬性,並指定其屬性值為 lazy
!
使用範例:
<img src="image.png" loading="lazy">