在自己的網站上更新文章時一個比較常見的問題是:文章插圖太寬,使整個網頁都變形了。如果每個插圖都先進行縮放再插入的話,太麻煩了。
我前段時間寫的一篇文章就遇到這種事情,後來用CSS的overflow和max-width屬性暫時解決了頁面變形的問題。這種方法好處是簡單,但壞處是會破壞某些細節的效果。
如overflow:hidden,意思是當內部元素寬度大於父框架時隱藏超出寬度的部分。這樣做可能會是一些內容突然截斷,被隱藏了,很對不起觀眾。
透過max-width屬性限製文章插圖最大寬度的話,需要考慮各瀏覽器的兼容性。 IE6是不支援這個屬性的,在我印像中,一些瀏覽器雖然支持這個屬性,但圖片不是等比縮放的(好像是Safari和Opera,記不清了),這樣做的話對這些瀏覽器的用戶很不公平。
因此,我最終選擇的是透過JavaScript動態改變圖片尺寸。這種方法對各種瀏覽器相容性良好(現在應該很少人會停用JavaScript吧?),如果換主題的話,也可以靈活地改變文章插圖的最大尺寸。
方案有兩個,由於我使用的主題是載入了jQuery庫的,因此可以用以下程式碼實作:
以下為引用的內容:
$ ( document ) . ready ( function ( ) { $ ( '.post img' ) . each ( function ( ) { var maxWidth = 100 ; // 圖片最大寬度 var maxHeight = 100 ; // 圖片最大高度 var ratio = 0 ; // 縮放比例 var width = $ ( this ) . width ( ) ; // 圖片實際寬度 var height = $ ( this ) . height ( ) ; // 圖片實際高度
// 檢查圖片是否超寬 if ( width > maxWidth ) { ratio = maxWidth / width ; // 計算縮放比例 $ ( this ) . css ( "width" , maxWidth ) ; // 設定實際顯示寬度 height = height * ratio ; // 計算等比例縮放後的高度 $ ( this ) . css ( "height" , height * ratio ) ; // 設定等比例縮放後的高度 }
// 檢查圖片是否超高 if ( height > maxHeight ) { ratio = maxHeight / height ; // 計算縮放比例 $ ( this ) . css ( "height" , maxHeight ) ; // 設定實際顯示高度 width = width * ratio ; // 計算等比例縮放後的高度 $ ( this ) . css ( "width" , width * ratio ) ; // 設定等比例縮放後的高度 } } ) ; } ) ; |
如果不想載入jQuery函式庫,可以用以下程式碼:
以下為引用的內容:
function ResizeImage ( image ,插圖最大寬度,插圖最大高度) { if ( image. className == "Thumbnail" ) { w = image. width ; h = image. height ;
if ( w == 0 || h == 0 ) { image. width = maxwidth ; image. height = maxheight ; } else if ( w > h ) { if ( w > maxwidth ) image. width = maxwidth ; } else { if ( h > maxheight ) image. height = maxheight ; }
image. className = "ScaledThumbnail" ; } } |
採用純JavaScript的話,麻煩點,需要手動為圖片加上class=”Thumbnail”,但最終效果是一樣的。
原文: 動態調整圖片尺寸
感謝bolo的投稿