圖像下方產生間隙
1. 相異瀏覽器
IE6、IE7
2. 問題描述
在img元素的父元素中,試著顯示出背景或border時,會發現img元素之下,會產生一道小小的間隙。這並非瀏覽器的bug,而是依照CSS的規格,vertiical-align的起始值為 「baseline」,因此圖像下方會對齊「baseline」的位置而產生此現象。
1. 圖片無置於表格中測試
範例一
以XHTML1.0撰寫的DOCTYPE 宣告方式撰寫html
範例網址:http://mepopedia.com/~jinjin/cb/img-01-1.html
IE6及IE7顯示→下方有空隙
[IMG]http://i556.photobucket.com/albums/ss1/whc915/img-ie6.jpg[/IMG]
其他瀏覽器顯示→下方無空隙
[IMG]http://i556.photobucket.com/albums/ss1/whc915/img-g.jpg[/IMG]
完整HTML程式碼:
圖像下方產生間隙
CSS程式碼
h1{background-color: #E20B34;}
[hr]
範例二
以HTML4.01撰寫的DOCTYPE 宣告方式撰寫html
範例網址:http://mepopedia.com/~jinjin/cb/img-01-1-h4.html
無論哪一個版本的瀏覽器:IE6、IE7、IE8、googleChrome、FireFox,圖像下方皆會產生間隙
[hr]
範例三
以html5撰寫的DOCTYPE 宣告方式撰寫html
範例網址:http://mepopedia.com/~jinjin/cb/img-01-1-h5.html
[IMG]http://i556.photobucket.com/albums/ss1/whc915/img-ie8-h5.jpg[/IMG]
無論哪一個版本的瀏覽器:IE6、IE7、IE8、googleChrome、FireFox,圖像下方皆會產生間隙
僅html5撰寫的DOCTYPE 宣告語法
[hr]
2. 圖片置於表格中測試
範例四
以XHTML1.0的DOCTYPE 宣告方式撰寫html
範例網址:http://mepopedia.com/~jinjin/cb/img-table-1.html
[IMG]http://i556.photobucket.com/albums/ss1/whc915/img-table-ie6.jpg[/IMG]
圖像顯示與無放置表格中的結果不同
則無論哪一個版本的瀏覽器都沒有下方間隙的問題
完整圖像放置於表格中之XHTML1.0的DOCTYPE 宣告方式撰寫html
圖片置入表格中
[hr]
範例五
以HTML4.01的DOCTYPE 宣告方式撰寫html
範例網址:http://mepopedia.com/~jinjin/cb/img-table-1-h4.html
IE6及IE7圖片下方皆無空隙
而其他版本:IE8、googleChrome、FireFox,圖像下方則接產生空隙
HTML4.01的DOCTYPE 宣告方式
[hr]
範例六
以HTML5的!DOCTYPE 宣告方式撰寫html
範例網址:http://mepopedia.com/~jinjin/cb/img-table-2.html
[IMG]http://i556.photobucket.com/albums/ss1/whc915/img-table-gc.jpg[/IMG]
則與無放置表格的結果也很不一樣
IE6及IE7圖片下方皆無空隙
而其他版本:IE8、googleChrome、FireFox,圖像下方則接產生空隙
HTML5的!DOCTYPE 宣告方式
[hr]
彙整以上六個針對圖片有無放置於表格以及不同DOCTYPE宣告的範例,整理以下表格
[IMG]http://i556.photobucket.com/albums/ss1/whc915/img-table-1.jpg[/IMG]
[hr]
3. 解決方法
這個間隙其實是為了能讓文字在基準線 「baseline」之下的部分也能完整顯示而保留的區域─「descender」。在英文字母中,像「g」和「j」這些字母會超出基準線的下方,而用來顯示這個超出之部分的區域,在此就變成了間隙。
1. 變更vertiical-align的值
只要將vertiical-align屬性的值,從起始值的「baseline」變更為對齊該行整理下方的「bottom」即可。由於vertiical-align是行內元素中可直接設定的屬性,因此只要以img元素為套用對象,設定「vertiical-align:bottom;」,則圖像下方的間隙就會消失。
HTML程式碼:
CSS程式碼
h1{background-color: #E20B34;}
img{vertiical-align:bottom;}
範例網址:http://mepopedia.com/~jinjin/cb/img-01-v.html
修改過後
IE6及IE7顯示→下方無空隙
[IMG]http://i556.photobucket.com/albums/ss1/whc915/img-bottom.jpg[/IMG]
[hr]
2. 改變區塊屬性
由於vertiical-align屬性是設定行內元素(以及th元素及td元素)之垂直位置的屬性,所以不會影響區塊層級元素。因此在img元素中設定「display:block;」的話,圖像下方就不會出現間隙了。
HTML程式碼:
CSS程式碼
h1{background-color: #E20B34;}
img{display: block;}
範例網址:http://mepopedia.com/~jinjin/cb/img-01-b.html
修改過後
IE6及IE7顯示→下方無空隙
[hr]
參考文章:
http://www.dotblogs.com.tw/jasonyang/archive/2011/04/19/23108.aspx
http://www.seohouse.org/web-design-css-the-common-solution-to-the-problem.html
XHTML+CSS虎之卷,旗標出版社,大藤幹著,p.163-164
Edited 17 time(s). Last edit at 03/01/2012 08:49PM by mepoadm.
(
編輯記錄)
MEPOERs said: HP: 「圖片下方空隙」可能不單是個跨瀏覽器問題,也有「瀏覽器相通」的部份。例如這個網頁 footer 圖片下方就有「空隙」:http://mepopedia.com/~web100a/hw04/hw04-1001445068/