美化載入失敗的圖片

王浩發表於2016-05-13

載入失敗的圖片會很難看。

This image is broken! Ugly, isn’t it?

但事實上並不總是一定要這樣。我們可以用 CSS 在 <img> 標籤上應用樣式,來提供比預設情況更好的體驗。

兩個關於 <img> 元素的真相

為了搞懂怎麼樣才能美化載入失敗的圖片,我們需要先了解關於 <img> 元素的兩種表現方式。

1. 我們可以在 <img> 元素上應用常規排版相關的樣式。如果圖片的備選文字顯示的話,這些樣式會在其上生效,並且不會影響正常載入的圖片。

2. <img> 元素是替換元素。這是一種“外觀和大小都由外部資源來決定的元素”(Sitepoint)。因為這個元素是由外部資源所控制,所以 :before 和 :after 偽元素一般不會跟它一起生效。但是,當圖片損壞或者沒有載入時,這些偽元素就會顯示出來。

基於以上這兩點,我們能夠在 <img> 元素上應用只有當圖片載入失敗候會顯示的樣式,正常載入的圖片並不會受到影響。

上手練習

利用這一資訊,這裡有幾個美化載入失敗圖片的例子。需要用到下面這個損壞的連結。

新增有用的資訊

處理載入失敗圖片的一種方法,就是給使用者提示資訊來說明圖片載入失敗了。我們甚至可以使用 attr() 這一語句來顯示圖片的連結地址。

Using alt text to add helping information

替換預設的備選文字

或者,我們可以使用偽元素來替換顯示出來的預設備選文字,通過在預設文字上方放置一個偽元素的方式,使其在檢視中隱藏。

Using alt text to replace the default alt text

其他的美化樣式

除了顯示自定義資訊(或者說換一種方法),我們還可以使用偽元素給載入失敗的圖片應用更多的樣式。

Using alt text to apply styling to the broken image

如果載入成功,圖片會正常顯示所有的樣式。偽元素也完全不會生成。

Image not broken

瀏覽器相容性

很不幸,不是所有的瀏覽器都可以用相同的方式處理載入失敗的圖片。對於某些瀏覽器,即使圖片沒有呈現,偽元素也根本不會顯示。

這是我通過自己的測試得出的相容性結論:

Browser Alt Text :before :after
Chrome (Desktop and Android)
Firefox (Desktop and Android)
Opera (Desktop)
Opera Mini ✓ **
Safari (Desktop and iOS) ✓ *
iOS Webview (Chrome, Firefox, others) ✓ *

備選文字只有在圖片的寬度足夠容納它的時候才會顯示。如果圖片沒有指定寬度,備選文字根本不會顯示
** 字型樣式不生效

至於那些不支援偽元素的瀏覽器,應用的樣式會被忽略,所以它們不會產生破壞。這就是說我們仍然可以為那些使用支援偽元素瀏覽器的使用者應用美化樣式,提供更加友好的體驗。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

美化載入失敗的圖片 美化載入失敗的圖片

相關文章