HTML 中的影像
最初,Web 只是文字,非常無聊。幸運的是,不久之後,在網頁中嵌入影像(和其他更有趣的內容型別)的功能就增加了。從簡單的 <img> 元素開始是合乎邏輯的,該元素用於在網頁中嵌入簡單的影像,但還有其他型別的多媒體需要考慮。在本文中,我們將深入探討如何使用它,包括基礎知識、使用 <figure> 為影像新增標題以及它與 CSS 背景影像的關係,並將介紹其他可用於 Web 平臺的圖形。
如何將影像放到網頁上?
為了將簡單的影像放到網頁上,我們使用 <img> 元素。這是一個 空元素(意味著它不能有任何子內容,也不能有結束標籤),它需要兩個屬性才能發揮作用:src 和 alt。src 屬性包含指向要嵌入頁面的影像的 URL。與 <a> 元素的 href 屬性一樣,src 屬性可以是相對 URL 或絕對 URL。如果沒有 src 屬性,img 元素就沒有影像可以載入。
注意:在繼續之前,您應該閱讀 有關 URL 和路徑的快速入門,以複習一下相對 URL 和絕對 URL。
例如,如果您的影像名為 dinosaur.jpg,並且它與 HTML 頁面位於同一個目錄中,您可以這樣嵌入影像
<img src="dinosaur.jpg" alt="Dinosaur" />
如果影像位於 images 子目錄中,該子目錄與 HTML 頁面位於同一個目錄中,那麼您應該這樣嵌入影像
<img src="images/dinosaur.jpg" alt="Dinosaur" />
依此類推。
注意:搜尋引擎也會讀取影像檔名並將它們計入 SEO。因此,您應該為影像提供描述性的檔名;dinosaur.jpg 比 img835.png 更好。
您也可以使用影像的絕對 URL 來嵌入影像,例如
<img src="https://www.example.com/images/dinosaur.jpg" alt="Dinosaur" />
但是,不建議透過絕對 URL 連結。您應該在您的網站上託管您想要使用的影像,在簡單的設定中,這意味著將網站的影像與 HTML 儲存在同一個伺服器上。此外,就維護而言,使用相對 URL 比使用絕對 URL 更有效率(當您將網站移動到不同的域時,您無需更新所有 URL 以包含新域)。在更高階的設定中,您可能會使用 CDN(內容交付網路) 來交付影像。
如果您沒有建立這些影像,您應該確保您有權在它們釋出的許可證條款下使用它們(有關更多資訊,請參見下面的 媒體資產和許可)。
警告:切勿將 src 屬性指向未經許可託管在其他人網站上的影像。這被稱為“熱連結”。這被認為是不道德的,因為當有人訪問您的頁面時,其他人將支付傳遞影像的頻寬費用。它還讓您無法控制影像被刪除或替換為令人尷尬的內容。
前面的程式碼片段,無論是使用絕對 URL 還是相對 URL,都會產生以下結果
注意: 諸如 <img> 和 <video> 之類的元素有時被稱為 **替換元素**。 這是因為元素的內容和大小由外部資源(如影像或影片檔案)定義,而不是由元素本身的內容定義。 您可以在 替換元素 中瞭解更多關於它們的資訊。
注意: 您可以在 GitHub 上執行(也請檢視 原始碼)找到本節的完整示例。
替代文字
我們將要研究的下一個屬性是 alt。 它的值應該是影像的文字描述,用於在無法看到/顯示影像或由於網際網路連線緩慢而渲染時間過長的情況下使用。 例如,我們上面的程式碼可以修改如下
<img
src="images/dinosaur.jpg"
alt="The head and torso of a dinosaur skeleton;
it has a large head with long sharp teeth" />
測試 alt 文字的最簡單方法是故意拼錯檔名。 例如,如果我們的影像名稱拼寫為 dinosooooor.jpg,瀏覽器將不會顯示影像,而是顯示 alt 文字
那麼,為什麼您會看到或需要 alt 文字呢? 它在很多情況下都非常有用
- 使用者有視力障礙,並且正在使用 螢幕閱讀器 來朗讀網頁。 事實上,為影像提供替代文字對於大多數使用者來說都是有用的。
- 如上所述,檔案或路徑名稱的拼寫可能錯誤。
- 瀏覽器不支援影像型別。 有些人仍然使用純文字瀏覽器,例如 Lynx,它顯示影像的 alt 文字。
- 您可能希望為搜尋引擎提供文字以供其使用; 例如,搜尋引擎可以將 alt 文字與搜尋查詢匹配。
- 使用者已關閉影像以減少資料傳輸量和干擾。 這在手機上尤其常見,以及在頻寬有限或價格昂貴的國家/地區。
您應該在 alt 屬性中寫什麼? 這取決於影像在那裡存在的 *原因*。 換句話說,如果影像沒有顯示,您會失去什麼
- 裝飾。 您應該使用 CSS 背景影像 用於裝飾性影像,但如果您必須使用 HTML,請新增一個空白的
alt=""。 如果影像不是內容的一部分,螢幕閱讀器不應該浪費時間朗讀它。 - 內容。 如果您的影像提供了重要資訊,請在簡短的
alt文字中提供相同的資訊——或者更好的是,在每個人都可以看到的正文中提供。 不要寫冗餘的alt文字。 如果所有段落都在正文中重複寫一遍,對於有視力的人來說,會多麼令人討厭呢? 如果影像在正文中得到了充分的描述,您可以只使用alt=""。 - 連結。 如果您將影像放在
<a>標籤內,以將影像變成連結,您仍然必須提供 可訪問的連結文字。 在這種情況下,您可以將它寫入同一個<a>元素內,或寫入影像的alt屬性內——哪種方式最適合您的情況。 - 文字。 您不應該將文字放在影像中。 例如,如果您的主要標題需要陰影,請使用 CSS 來實現,而不是將文字放入影像中。 但是,如果您 *真的無法避免這樣做*,您應該在
alt屬性中提供文字。
本質上,關鍵是即使在無法看到影像的情況下也能提供可用的體驗。 這確保所有使用者都不會錯過任何內容。 嘗試在您的瀏覽器中關閉影像,看看效果如何。 您很快就會意識到,如果無法看到影像,alt 文字是多麼有用。
注意: 有關更多資訊,請參閱我們的 文字替代 指南。
寬度和高度
您可以使用 width 和 height 屬性來指定影像的寬度和高度。 它們以整數形式給出,不帶單位,以畫素表示影像的寬度和高度。
您可以透過多種方式找到影像的寬度和高度。 例如,在 Mac 上,您可以使用 Cmd + I 來獲取影像檔案的顯示資訊。 回到我們的示例,我們可以這樣做
<img
src="images/dinosaur.jpg"
alt="The head and torso of a dinosaur skeleton;
it has a large head with long sharp teeth"
width="400"
height="341" />
這樣做有一個很好的理由。 您頁面的 HTML 和影像都是獨立的資源,由瀏覽器透過獨立的 HTTP(S) 請求獲取。 瀏覽器一旦收到 HTML,就會開始將其顯示給使用者。 如果影像尚未收到(這通常會發生,因為影像檔案的大小通常比 HTML 檔案大得多),那麼瀏覽器將只渲染 HTML,並在收到影像後立即更新頁面。
例如,假設影像後面有一些文字
<h1>Images in HTML</h1>
<img
src="dinosaur.jpg"
alt="The head and torso of a dinosaur skeleton; it has a large head with long sharp teeth"
title="A T-Rex on display in the Manchester University Museum" />
<blockquote>
<p>
But down there it would be dark now, and not the lovely lighted aquarium she
imagined it to be during the daylight hours, eddying with schools of tiny,
delicate animals floating and dancing slowly to their own serene currents
and creating the look of a living painting. That was wrong, in any case. The
ocean was different from an aquarium, which was an artificial environment.
The ocean was a world. And a world is not art. Dorothy thought about the
living things that moved in that world: large, ruthless and hungry. Like us
up here.
</p>
<footer>- Rachel Ingalls, <cite>Mrs. Caliban</cite></footer>
</blockquote>
瀏覽器下載 HTML 後,就會開始顯示頁面。
影像載入完畢後,瀏覽器會將影像新增到頁面。 由於影像佔用了空間,瀏覽器必須將文字向下移動到頁面,以適應其上方的影像
這種移動文字的方式會極大地分散使用者的注意力,尤其是在他們已經開始閱讀的時候。
如果您使用 width 和 height 屬性在 HTML 中指定影像的實際大小,那麼瀏覽器在下載影像之前就知道要為其分配多少空間。
這意味著當影像下載完成後,瀏覽器就不必移動周圍的內容。
有關此功能歷史的精彩文章,請參閱 再次強調在影像上設定高度和寬度。
影像標題
與 連結 一樣,您也可以向影像新增 title 屬性,以在需要時提供進一步的支援資訊。 在我們的示例中,我們可以這樣做
<img
src="images/dinosaur.jpg"
alt="The head and torso of a dinosaur skeleton;
it has a large head with long sharp teeth"
width="400"
height="341"
title="A T-Rex on display in the Manchester University Museum" />
這將在滑鼠懸停時顯示工具提示,就像連結標題一樣
但是,不建議這樣做——title 存在一些可訪問性問題,主要是因為螢幕閱讀器支援非常不可預測,而且大多數瀏覽器在您使用滑鼠懸停時才會顯示它(例如,鍵盤使用者無法訪問)。 如果您想了解更多資訊,請閱讀 Scott O'Hara 編寫的 Title 屬性的磨難。
最好將此類支援資訊包含在文章正文中,而不是附加到影像上。
主動學習:嵌入影像
現在輪到您玩了! 本主動學習部分將讓您完成一個簡單的嵌入練習。 我們為您提供了一個基本的 <img> 標籤; 我們希望您嵌入位於以下 URL 的影像
https:/mdn/learning-area/master/html/multimedia-and-embedding/images-in-html/dinosaur_small.jpg
我們之前說過,永遠不要在其他伺服器上熱連結影像,但這僅僅是為了學習目的,所以這次我們允許您這樣做。
我們還希望您
- 新增一些 alt 文字,並透過拼錯影像 URL 來檢查它是否有效。
- 設定影像的正確
width和height(提示:寬度為 200 畫素,高度為 171 畫素),然後嘗試其他值,看看效果如何。 - 在影像上設定一個
title。
如果您犯了錯誤,可以使用“重置”按鈕將其重置。 如果您真的卡住了,請按“顯示解決方案”按鈕以檢視答案
媒體資產和許可
您在網上找到的影像(和其他媒體資產型別)是在各種許可型別下發布的。 在您將影像用於正在構建的網站之前,請確保您擁有它,有權使用它,或者符合所有者的許可條件。
瞭解許可型別
讓我們看一下在網上可能遇到的許可型別的常見類別。
所有權利保留
歌曲、書籍或軟體等原創作品的創作者通常在其作品上釋出封閉的版權保護。 這意味著,預設情況下,他們(或其出版商)擁有獨家使用(例如,顯示或分發)其作品的權利。 如果您想使用帶有 *所有權利保留* 許可的版權影像,您需要執行以下操作之一
- 獲得版權持有人的明確書面許可。
- 支付使用費才能使用它們。 這可能是無限期使用的單次費用(“免版稅”),或者可能是“權利管理”的,在這種情況下,您可能需要按時間段、地理區域、行業或媒體型別等支付特定的使用費。
- 將您的使用限制在您所在司法管轄區內被認為是 合理使用 或 合理使用 的範圍內。
作者不需要在他們的作品中包含版權宣告或許可條款。 版權在原創作品被創作在有形媒介中時自動存在。 因此,如果您在網上找到一張影像,並且沒有版權宣告或許可條款,最安全的做法是假設它受版權保護,並保留所有權利。
寬鬆許可
如果影像是在寬鬆許可下發布的,例如 MIT、BSD 或合適的 Creative Commons (CC) 許可,您無需支付許可費或尋求許可來使用它。 儘管如此,您仍然需要滿足各種許可條件,這些條件因許可而異。
例如,您可能需要
- 提供指向影像原始來源的連結,並註明其建立者。
- 說明是否對它進行了任何更改。
- 在與原始影像相同的許可下共享使用該影像建立的任何衍生作品。
- 根本不共享任何衍生作品。
- 在任何商業作品中不使用該影像。
- 在使用該影像的任何釋出中包含許可證副本。
您應該查閱適用的許可證,瞭解您需要遵循的具體條款。
注意: 您可能會在寬鬆許可的上下文中遇到“複製左”一詞。 複製左許可證(例如 GNU 通用公共許可證 (GPL) 或“署名-相同方式共享”Creative Commons 許可證)規定,衍生作品需要在與原始作品相同的許可下發布。
複製左許可證在軟體世界中很突出。 基本思想是,使用複製左許可的專案的程式碼構建的新專案(這被稱為原始軟體的“分叉”)也需要在相同的複製左許可下授權。 這確保了新專案的原始碼也將可供其他人學習和修改。 請注意,總的來說,為軟體制定的許可證(如 GPL)不被認為是針對非軟體作品的良好許可證,因為它們並非針對非軟體作品而制定。
瀏覽本節前面提供的連結,瞭解不同的許可型別以及它們指定的條件型別。
公有領域/CC0
釋出到公有領域的作品有時被稱為“沒有保留權利”——版權不適用於它,並且可以在沒有許可的情況下使用,也不需要滿足任何許可條件。 作品可以透過各種方式進入公有領域,例如版權到期或特定權利的放棄。
將作品置於公有領域的最有效方法之一是根據 CC0 授權它,CC0 是一種特定的創作共用許可證,它為此目的提供了一種清晰明確的法律工具。
當使用公有領域影像時,請獲取證明該影像屬於公有領域的證據,並將證據儲存到您的記錄中。 例如,擷取顯示許可狀態的原始來源的螢幕截圖,並考慮在您的網站上新增一個頁面,列出獲取的影像及其許可要求。
搜尋寬鬆許可的影像
您可以使用影像搜尋引擎或直接從影像儲存庫中找到專案的寬鬆許可的影像。
使用您要搜尋的影像的描述以及相關的許可條款搜尋影像。 例如,當搜尋“黃色恐龍”時,在搜尋查詢中新增“公有領域影像”、“公有領域影像庫”、“開放許可的影像”或類似的詞語。
一些搜尋引擎提供工具來幫助您找到具有寬鬆許可的影像。 例如,在使用 Google 時,轉到“圖片”選項卡以搜尋圖片,然後單擊“工具”。 在生成的工具欄中有一個“使用許可權”下拉選單,您可以在其中選擇專門搜尋具有創作共用許可證的圖片。
影像儲存庫網站(如 Flickr、ShutterStock 和 Pixabay)具有搜尋選項,允許您僅搜尋寬鬆許可的影像。 一些網站專門分發寬鬆許可的影像和圖示,例如 Picryl 和 The Noun Project。
遵守影像釋出的許可證是查詢許可證詳細資訊、閱讀來源提供的許可證或說明頁面,然後遵循這些說明的問題。 聲譽良好的影像儲存庫會使其許可條件清晰易懂。
使用圖注和圖示題註釋影像
說到標題,您可以透過多種方式新增標題來配合您的影像。 例如,沒有什麼可以阻止您這樣做
<div class="figure">
<img
src="images/dinosaur.jpg"
alt="The head and torso of a dinosaur skeleton;
it has a large head with long sharp teeth"
width="400"
height="341" />
<p>A T-Rex on display in the Manchester University Museum.</p>
</div>
這沒問題。 它包含您需要的內容,並且可以使用 CSS 很好的進行樣式化。 但這裡有一個問題:沒有任何內容在語義上將影像與其標題關聯起來,這會導致螢幕閱讀器出現問題。 例如,當您有 50 張圖片和標題時,哪個標題與哪個圖片匹配呢?
更好的解決方案是使用 HTML 的 <figure> 和 <figcaption> 元素。它們正是為了這個目的而建立的:為圖形提供語義容器,並清楚地將圖形與標題關聯起來。我們上面的例子可以改寫成這樣
<figure>
<img
src="images/dinosaur.jpg"
alt="The head and torso of a dinosaur skeleton;
it has a large head with long sharp teeth"
width="400"
height="341" />
<figcaption>
A T-Rex on display in the Manchester University Museum.
</figcaption>
</figure>
<figcaption> 元素告訴瀏覽器和輔助技術,標題描述了 <figure> 元素中的其他內容。
注意: 從可訪問性的角度來看,標題和 alt 文字具有不同的作用。標題即使對可以看到影像的人也有益,而 alt 文字則提供了與缺失影像相同的功能。因此,標題和 alt 文字不應該僅僅說相同的內容,因為它們都在影像消失時出現。嘗試在瀏覽器中關閉影像並檢視效果。
圖形不必是影像。它是一個獨立的內容單元,
- 以簡潔易懂的方式表達您的含義。
- 可以在頁面線性流中的多個位置出現。
- 提供支援主文字的基本資訊。
圖形可以是多個影像、程式碼片段、音訊、影片、方程式、表格或其他內容。
主動學習:建立圖形
在本節主動學習中,我們希望您從之前的主動學習部分獲取完成的程式碼,並將其轉換為圖形。
- 將其包裝在
<figure>元素中。 - 將文字從
title屬性中複製出來,刪除title屬性,並將文字放在影像下方<figcaption>元素中。
如果您犯了錯誤,可以使用“重置”按鈕將其重置。 如果您真的卡住了,請按“顯示解決方案”按鈕以檢視答案
CSS 背景影像
您還可以使用 CSS 將影像嵌入網頁(以及 JavaScript,但那是另一個故事)。CSS 的 background-image 屬性和其他 background-* 屬性用於控制背景影像的位置。例如,要將背景影像放置在頁面上的每個段落上,您可以這樣做
p {
background-image: url("images/dinosaur.jpg");
}
嵌入的影像定位和控制可能比 HTML 影像更容易。那麼為什麼要費心使用 HTML 影像呢?正如上面所暗示的那樣,CSS 背景影像僅用於裝飾。如果您只是想在頁面中新增一些漂亮的東西來增強視覺效果,那麼這很好。但是,此類影像沒有任何語義意義。它們不能有任何文字等效項,對螢幕閱讀器不可見,等等。這就是 HTML 影像的優勢所在!
總結:如果影像在內容方面具有意義,則應使用 HTML 影像。如果影像純粹是裝飾性的,則應使用 CSS 背景影像。
Web 上的其他圖形
我們已經看到可以使用 <img> 元素或透過使用 background-image 屬性設定 HTML 元素的背景來顯示靜態影像。您還可以動態地構建圖形,或在事後操作影像。瀏覽器提供使用程式碼建立 2D 和 3D 圖形的方法,以及從上傳的檔案或使用者攝像頭即時流式傳輸的影片。以下是提供有關這些更高階圖形主題見解的文章的連結
測試您的技能!
您已經閱讀完這篇文章,但您還記得最重要的資訊嗎?在繼續之前,您可以找到一些進一步的測試來驗證您是否保留了這些資訊 - 請檢視 測試您的技能:HTML 影像。
總結
到此為止。我們已經詳細介紹了影像和標題。在下一篇文章中,我們將更進一步,看看如何使用 HTML 將 影片和音訊內容 嵌入網頁。