您的位置:首页 >> 资源中心 >> 软硬件教学 >> 浏览文章

2种方法:js+css实现图片自动等比例缩小且垂直居中

时间:2015-01-13 | 栏目:软硬件教学 | 来源:不详 | 编辑:蝌索窝pc354.com | 点击:2642 【点击复制链接】

  图片自动等比例缩小,其实如果不考虑ie6的话,用css就可以实现,设定img的max-width和max-height,而<img>标签内不设定widht和height即可。
  
  ie7已经支持max-width和max-height,这是为数不多的好消息之一。但是对于ie6及以前的版本,就只能用js来设置了。
  
  在ff2.0/ie6/ie7中测试通过。opera8.5 垂直居中未通过。

以下是引用片段:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>图片自动等比例缩小且垂直居中</title>
<!--[if lte IE 6]>
<script type="text/javascript" language="javascript">
function imgFix() {
  //定义要限制的图片宽高,这个宽高要同style里面定义的相同,小于限定高宽的图片不操作
  var widthRestriction = 200;
  var heightRestriction = 200;
  var allElements = document.getElementsByTagName("*")  
  for (var i = 0; i < allElements.length; i++)
  {
    if (allElements[i].className.indexOf("imgBox") >= 0)
        {
      var imgElements = allElements[i].getElementsByTagName("img");
      for (var j=0; j < imgElements.length; j++)
          {
        if ( imgElements[j].width > widthRestriction || imgElements[j].height > heightRestriction )
                {
          if ( imgElements[j].width > imgElements[j].height)
                  {
            imgElements[j].height = imgElements[j].height*(widthRestriction/imgElements[j].width);
            imgElements[j].width = widthRestriction;
          } else
                  {
            imgElements[j].width = imgElements[j].width*(heightRestriction/imgElements[j].height);
            imgElements[j].height = heightRestriction;
          }
        }
                if ( imgElements[j].height < heightRestriction )
                {
                  imgElements[j].style.paddingTop = ( heightRestriction -imgElements[j].height ) /2 + "px";
                }
      } /*for j*/
    }
  }/*for i*/
}
window.onload = imgFix;
</script>
<![endif]-->
<style type="text/css">
<!--
* {
margin:0;
padding:0;
}
.imgBox li {
list-style:none;
width:200px;  /* 宽度 */
height:200px; /* 高度 */
background:#ccc;
border:1px solid #666;
text-align:center;
margin:5px;
line-height:200px;
}
.imgBox img {
max-width:200px;  /* 宽度 */
max-height:200px; /* 高度 */
vertical-align:middle;
}
-->
</style>
</head>

<body>
<ul class="imgBox">
  <li><img src="......" alt="img" /></li>
  <li><img src="......" alt="img" /></li>
  <li><img src="......" alt="img" /></li>
  <li><img src="......" alt="img" /></li>
</ul>
</body>
</html>

###############################################

另一种方法:兼容IE6 7 8 FF等主流浏览器 div中图片垂直居中,图片自动按边框比例缩放

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>科杰在线pc354.com</title>
<script language=javascript src="autoImg.js"></script>
</head><body>
<style type="text/css">
.box{
width:200px; height:200px; border: 1px solid #eee;
/**//*非IE的主流浏览器识别的垂直居中的方法*/
display: table-cell;vertical-align:middle;/**//*设置水平居中*/
text-align:center;/**//* 针对IE的Hack */
*display: block;
*font-size: 175px;/**//*约为高度的0.873,200*0.873 约为175*/
*font-family:Arial;/**//*防止非utf-8引起的hack失效问题,如gbk编码*/}
.box img{/**//*设置图片垂直居中*/vertical-align:middle;}
</style>
<div class="box">
<img src="pc354.com.jpg" onload="autoimg(this,200,200)" /></div>
</body>
</html>


请将下面绿色文字部分全选存成 autoImg.js文件

// JavaScript Document

function cssX(elem){//直接得到宽度
   if(elem.style.width){return elem.style.width;}   
   if(elem.currentStyle)return elem.currentStyle.width;   
   if(document.defaultView && document.defaultView.getComputedStyle)   
      {return document.defaultView.getComputedStyle(elem,"").getPropertyValue("width");}
}

function cssY(elem){//直接得到高度
   if(elem.style.height){return elem.style.height;}   
   if(elem.currentStyle)return elem.currentStyle.height;   
   if(document.defaultView && document.defaultView.getComputedStyle)   
      {return document.defaultView.getComputedStyle(elem,"").getPropertyValue("height");      }
}

var resetCSS=function(elem,prop){   
    var old ={};
    for (var i in prop){
         old[i] =elem.style[i];   
         elem.style[i] = prop[i];   
     }   
    return old;   
}
    
var restoreCSS=function(elem,prop){   
    for (var i in prop)   
      {elem.style[i]=prop[i];}  
}   

function getWidth(elem){   
   if(elem.style.display!="none"){   
        return elem.offsetWidth || parseInt(cssX(elem));   
     }   
    var old = resetCSS(elem,{   
         display: '',   
         visibility: 'hidden',   
         position: 'absolute'  
     });
    var w = elem.clientWidth || parseInt(cssX(elem));   
     restoreCSS(elem,old);   
    return w;
}  

function getHeight(elem){   
   if(elem.style.display!="none"){   
        return elem.offsetWidth || parseInt(cssY(elem));   
     }   
    var old = resetCSS(elem,{   
         display: '',
         visibility: 'hidden',   
         position: 'absolute'
     });
    var w = elem.clientHeight || parseInt(cssY(elem));   
     restoreCSS(elem,old);
    return w;
}

function autoimg(obj,width,height)
{
   if(obj==undefined)
   { //得到触发事件的元素
   var evt= window.event;
      var obj = evt.target||evt.srcElement;
}
width=width||getWidth(obj.parentElement); //若不指定宽度则得到其父元素的宽度
height=height||getHeight(obj.parentElement);

    myImage = new Image();
myImage.src = obj.src;

if (myImage.width>0 && myImage.height>0)
{
   var rate = 1;
   if (myImage.width>width || myImage.height>height)
   {
    if (width/myImage.width<height/myImage.height)
    {
       rate = width/myImage.width;
    }
    else
    {
       rate = height/myImage.height;
    }
  
   }
    obj.width = myImage.width*rate;
    obj.height = myImage.height*rate;
 
}
}

  • 软硬件教学
  • 资源收集
  • 生活百科