zoukankan      html  css  js  c++  java
  • PNG背景透明问题

    方法一、通过 css 和 IE 专有属性 behavior 解决整站 png 背景透明问题

    <style type="text/css">
    <!--
    img { behavior:url(/iepngfix.htc); }
    -->
    </style>

    htc文件内容

    <public:component>
    <public:attach event="onpropertychange" onevent="doFix()" />
    <script type="text/javascript">
    // IE5.5+ PNG Alpha Fix v1.0RC3
    // (c) 2004-2005 Angus Turnbull http://www.twinhelix.com
    // This is licensed under the CC-GNU LGPL, version 2.1 or later.
    // For details, see: http://creativecommons.org/licenses/LGPL/2.1/
    // This must be a path to a blank image. That's all the configuration you need.
    var blankImg = '/spacer.gif';
    var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
    function filt(s,m)
     {
     if (filters[f])
      {
        filters[f].enabled = s ? true : false;
        if (s) with (filters[f])
       {
       src = s;
       sizingMethod = m;
       }
       }
      else if (s)
      {
      style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
      }
     }
    function doFix()
     {
     // Assume IE7 is OK
     if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) || (event && !/(background|src)/.test(event.propertyName)))
      {
      return;
      }
     var bgImg = currentStyle.backgroundImage || style.backgroundImage;
     if (tagName == 'IMG')
      {
      if ((/\.png$/i).test(src))
       {
       // this tests to see if the image has already been replaced once before
       if (src.indexOf('?repurl=') == -1)
        {
        if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
            {
         style.width = offsetWidth+'px';
         }
        filt(src,'scale');
        src = blankImg+'?repurl='+src;
        }
       }
      else if (src.indexOf(blankImg) < 0)
       {
       filt();
       }
      }
     else if (bgImg && bgImg != 'none')
      {
        if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
         {
         var s = RegExp.$1;
         if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
           {
        style.width = offsetWidth+'px';
        }
         style.backgroundImage = 'none';
         filt(s,'crop');
         // IE link fix
         for (var n=0;n<childNodes.length;n++)
        {
        if (childNodes[n].style) { childNodes[n].style.position = 'relative'};
        }
         }
      else filt();
      }
     }
    doFix();
    </script>
    </public:component>

    方法二、通过 css ie滤镜解决
    <style type="text/css">
    <!--
    .pngpic { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/pngpic.png',sizingMethod='crop'); }
    -->
    </style>

    方法三、通过 javascript 和 css 滤镜解决 IE 整站 png 背景透明问题
    <script type="text/javascript" language="javascript">
    function enablePngImages() {
     var imgArr = document.getElementsByTagName("IMG");
     for(i=0; i<imgArr.length; i++){
      if(imgArr[i].src.toLowerCase().lastIndexOf(".png") != -1){
       imgArr[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + imgArr[i].src + "', sizingMethod='auto')";
       imgArr[i].src = "spacer.gif";
      }
      
      if(imgArr[i].currentStyle.backgroundImage.lastIndexOf(".png") != -1){
       var img = imgArr[i].currentStyle.backgroundImage.substring(5,imgArr[i].currentStyle.backgroundImage.length-2);
       imgArr[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img+"', sizingMethod='crop')";
       imgArr[i].style.backgroundImage = "url(spacer.gif)";
      }
     }
    }

    function enableBgPngImages(bgElements){
     for(i=0; i<bgElements.length; i++){
      if(bgElements[i].currentStyle.backgroundImage.lastIndexOf(".png") != -1){
       //alert(bgElements[i]);
       var img = bgElements[i].currentStyle.backgroundImage.substring(5,bgElements[i].currentStyle.backgroundImage.length-2);
       bgElements[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img+"', sizingMethod='crop')";
       bgElements[i].style.backgroundImage = "url(spacer.gif)";
      }
     }
    }
    </script>

    <img src="pngpic.png" alt="" border="0" />
    <!--[if lt IE 7]>
    <script type='text/javascript'>
    var bgElements;
     enablePngImages();
     if(bgElements){
      enableBgPngImages(bgElements);
     }
    </script>
    <![endif]-->

  • 相关阅读:
    1105 Spiral Matrix (25分)(蛇形填数)
    1104 Sum of Number Segments (20分)(long double)
    1026 Table Tennis (30分)(模拟)
    1091 Acute Stroke (30分)(bfs,连通块个数统计)
    1095 Cars on Campus (30分)(排序)
    1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
    堆以及堆排序详解
    1089 Insert or Merge (25分)
    1088 Rational Arithmetic (20分)(模拟)
    1086 Tree Traversals Again (25分)(树的重构与遍历)
  • 原文地址:https://www.cnblogs.com/tuyile006/p/922461.html
Copyright © 2011-2022 走看看