響應式網頁設計 - 圖像
使用 width 屬性
如果 width
屬性設置為百分比,且高度設置為 "auto",則圖像將進行響應來放大或縮小:
實例
img { width: 100%; height: auto; }
請注意,在上面的例子中,圖像可以放大到大于其原始大小。在多數情況下,更好的解決方案是改為使用 max-width
屬性。
使用 max-width 屬性
如果將 max-width 屬性設置為 100%,則圖像將按需縮小,但絕不會放大到大于其原始大小:
實例
img { max-width: 100%; height: auto; }
背景圖像
背景圖像也可以響應調整大小和縮放比例。
這是我們展示的三種不同方法:
1. 如果將 background-size
屬性設置為 "contain",則背景圖像將縮放,并嘗試匹配內容區域。不過圖像將保持其長寬比(圖像寬度與高度之間的比例關系):
這是 CSS 代碼:
實例
div { width: 100%; height: 400px; background-image: url('img_flowers.jpg'); background-repeat: no-repeat; background-size: contain; border: 1px solid red; }
2. 如果將 background-size
屬性設置為 "100% 100%",則背景圖像將拉伸以覆蓋整個內容區域:
這是 CSS 代碼:
實例
div { width: 100%; height: 400px; background-image: url('img_flowers.jpg'); background-size: 100% 100%; border: 1px solid red; }
3. 如果 background-size
屬性設置為 "cover",則背景圖像將縮放以覆蓋整個內容區域。請注意,"cover" 值保持長寬比,且可能會裁剪背景圖像的某部分:
這是 CSS 代碼:
實例
div { width: 100%; height: 400px; background-image: url('img_flowers.jpg'); background-size: cover; border: 1px solid red; }
為不同設備準備不同圖像
大幅的圖像在大型計算機屏幕上可以完美顯示,但在小型設備上就沒用了。為什么在不得不縮小圖像時又加載大圖像呢?為了減少負載或出于任何其他原因,您可以使用媒體查詢在不同的設備上顯示不同的圖像。
這是一幅大圖像和一幅小圖像,會在不同的設備上顯示:
實例
/* 針對小于 400 像素的寬度: */ body { background-image: url('img_smallflower.jpg'); } /* 針對 400 像素或更大的寬度: */ @media only screen and (min-width: 400px) { body { background-image: url('img_flowers.jpg'); } }
您可以使用媒體查詢 min-device-width
而不是 min-width
來檢查設備寬度,而不是瀏覽器寬度。然后,當您調整瀏覽器窗口的大小時,圖像將不會變化:
實例
/* 針對小于 400 像素的設備: */ body { background-image: url('img_smallflower.jpg'); } /* 針對 400 像素及更大的設備: */ @media only screen and (min-device-width: 400px) { body { background-image: url('img_flowers.jpg'); } }
HTML5 <picture> 元素
HTML5 引入了 <picture>
元素,該元素使您可以定義多幅圖像。
瀏覽器支持
38.0 | 13 | 38.0 | 9.1 | 25.0 |
<picture>
元素的作用類似于 <video>
和 <audio>
元素。我們設置了不同的來源,而匹配優先權的第一個來源是正在使用的來源:
實例
<picture> <source srcset="img_smallflower.jpg" media="(max-width: 400px)"> <source srcset="img_flowers.jpg"> <img src="img_flowers.jpg" alt="Flowers"> </picture>
srcset
屬性是必需的,它定義圖像的來源。
media
屬性是可選的,它接受可在 CSS @media 規則 中找到的媒體查詢。
提示:您還應該為不支持 <picture>
元素的瀏覽器定義 <img>
元素。