網頁圖片寬度和高度自適應的方法


在我們設計網頁的時候,經常會遇到圖片自適應問題,實際這些工作完全可以交給瀏覽器來完成就可以了,只可惜,無論是IE還是FIREFOX在圖片自適應這個問題上都處理的不盡人意,網上實現網頁圖片寬度和高度的方法也很多,主要又兩種:

第一種是使用CSS來完成;第二種是使用Javascript來完成,根據實際的應用效果來說,使用Javascript還是比較靠譜一點,因為CSS的expression的確有點煩,筆者是指使用效果上有點惱人,本文專門把這兩種都總結一下,方便站長們參考使用。

一、使用CSS實現圖片的自適應

使用CSS實現圖片自適應很簡單,主要靠兩個參數來完成,分別是max-width和max-height,這兩個參數在FIREFOX和IE7以 上支持都很好,但是在IE6上面,效果非常糟糕,尤其是對於多張圖片的顯示,第一次顯示網頁大都很難達到圖片自適應的效果,一般都是有些能自適應,有些不 能自適應,多次刷新可能又顯示OK,就是這點就足夠煩人,而且一旦顯示多張圖片,IE 6上就卡的要命(expression在IE上比較占用資源,感覺設計是用來玩得,FIREFOX自適應效果還是比較好,速度也非常快),反正筆者至今是 沒有找到更好的CSS方法來讓IE 6完美支持圖片自適應。示例代碼如下:

img{
    max-width: 128px;
    max-height: 128px;
    height:auto;
    zoom:expression( function(e) {
if(e.width>e.height) {if (e.width>128) { e.height = e.height*(128 /e.width); e.width=128; }}
else {if (e.height>128) { e.width = e.width*(128 /e.height); e.height=128; }}
e.style.zoom = '1';     }(this));
         overflow:hidden; 
}

面代碼格式上需要特別注意兩點:

1、zoom屬性里寬高賦值不能帶單位(如px),否則無效;

2、if和else語句也必須帶大括號括起來,單句指令也不行(而在很多編程語言里,單句指令可以無需大括號);

二、使用Javascript實現的圖片自適應

使用Javascript自適應相對來說比較方便,唯一的麻煩是就是在網頁中需要對image預設置onload事件處理resize()函數,如 果對於動態網頁來說還好一點,反正是動態的,程序里加上去就OK了,可是如果對於很多篇文章而言,在里頭增加onload函數有點麻煩,除非一次性的寫個 腳本批量處理,否則后期更改或替換起來還是比較麻煩,比如圖片的可顯示寬度變化等等。

另一方面如果把寬度值寫在Javascript中,那么將帶來程序的通用性降低,下面的示例不是寫死的,已測試效果比起CSS要HAPPY的多,網 上也又很多類似的例子,不是不完成就是中間還存在某些問題,本文的例子應該會更好一點,筆者對不同的尺寸下的圖片的顯示效果做過好幾種測試了。示例如下:

//RESIZE 圖片自適應圖片寬度和高度
//參數說明:
//        obj是圖片對象,this調用方法見下面示例
//        maxW和maxH分別為約定的最大寬度和最大高度

 

function resizeimg(obj,maxW,maxH)
{
         var imgW=obj.width;
         var imgH=obj.height;
         if(imgW>maxW||imgH>maxH)
         {       
                  var ratioA=imgW/maxW;
                  var ratioB=imgH/maxH;               
                  if(ratioA>ratioB)
                  {
                           imgW=maxW;
                           imgH=maxW*(imgH/imgW);
                  }
                  else
                  {
                           imgH=maxH;
                           imgW=maxH*(imgW/imgH);
                  }  
                  obj.width=imgW;
                  obj.height=imgH;
         }
}

上例的使用示例:

<img src="http://www.example.com/logo.gif" onload="resizeimg(this,600,1024);"/>

我們在制定寬度和高度值的時候,一般寬度是肯定需要限定,而高度經常不需要限制,所以可以把高度指定的大一點,如果高度也限制,那么相當於制定一個image box,下面的程序或許對您很有用(不限制圖片高度的忽略下面這個示例)。
當指定圖片BOX的時候,一般都還需要在圖片自適應之后顯示在BOX容器的中間,也就是水平和垂直都需要居中。首先需要指定BOX容器的寬度和高度,然后可以使用CSS來控制顯示效果,也可以使用Javascript控制顯示效果。示例如下:
IMAGE BOX容器:

<div id="imgbox" style="width:800px;height:800px;border:1px solid #CCCCCC">
        <img src="..." onload="resizeimg(this,600,600)"/>
</div>

CSS顯示方法如下:

#imgbox {text-align:center;vertical-align:middle;}
#imgbox img {vertical-align:middle;}

或使用Javascript完成:
在上文resizeimg()函數里最后只需要增加類似這樣的語句,

obj.style.margin-left=(800-imgW)/2;
obj.style.margin-top=(800-imgH)/2;

即可,當然了,您總不能讓resize尺寸本來就超出BOX容器尺寸吧,否則圖片就把容器撐大,style風格肯定就對不上了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM