ホームページ  >  記事  >  ウェブフロントエンド  >  CSS3 Magic Hall: CSS3 フィルターと Canvas、SVG、IE フィルターの代替品の詳細な説明 [転送]_html/css_WEB-ITnose

CSS3 Magic Hall: CSS3 フィルターと Canvas、SVG、IE フィルターの代替品の詳細な説明 [転送]_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:22:241149ブラウズ

1. はじめに

IE 固有のフィルターは、CSS3 のさまざまな新機能のダウングレード処理の補足としてよく使用され、Adobe が HTML5 に移行した後、Chrome と協力して CSS3 のフィルター機能を開始しました。現在、Webkit カーネルのみが参照されます。ブラウザは CSS3 フィルターをサポートしていますが、FF と IE10+ では代替として SVG フィルター (HTML の SVG 効果) または Canvas を使用する必要があります。一方、IE5.5 ~ 9 では IE フィルター、JS+DIV、または VML を使用します。この記事は最初に穴を埋めるためのもので、後で埋めていきます^_^! ! !

CSS3 フィルターの互換性表

HTML の SVG 効果の互換性表

次のフィルターについては以下で説明します。

Speia フィルター グレースケール フィルター ガウスぼかしフィルター 反転カラー フィルター 彩度フィルター

コントラスト フィルター 明るさフィルター 色相回転フィルター シャドウ フィルター

First P Zhang Yuan 画像参照システム (純粋な MM ああ! ! )

2 . Speia フィルター (Speia)

Speia フィルターは、写真や要素全体を古い写真のようにセピア色に加工するために使用されます。効能は下記をご覧ください!

ほら、時間の痕跡、お母さんの時代のような気がしますか? !

1. CSS3フィルター実装

<style type="text/css">  .sepia{    /**  格式,filer: sepia(效果范围)     *  效果范围,取值范围为0-1或0-100%;0表示无效果,1或100%表示最大效果     */    -webkit-filter: sepia(100%);      -moz-filter:sepia(100%);    -o-filter: sepia(100%);    -ms-filter: sepia(100%);    filter: sepia(100%);    }</style><div class="sepia" style="background:url(./mm.jpg)"></div>

2. IE5.5~9の特殊処理方法(検討中)

IEフィルター filter:progid:XDImageTransform .Microsoft.Maskフィルター(カラー) =color)はgif画像のみ使用可能(他の形式の画像は要素全体が消えてしまいます)、また、IE11ブラウザのドキュメントモードでは、画像とマスクレイヤーが重なった部分が空白になります。フィルタはすべて無効です (要素はフィルタが設定されていないようにレンダリングおよび表示されます)。 結論: IE フィルターはセピア効果を処理できません。

js による穴埋めについては、アイデア 1: 要素の表面に半透明の黄褐色のマスク レイヤーをアタッチしますが、その効果は CSS3 フィルターとは程遠く、失敗します。 。 。 。 。 。 。

3. FFとIE10+の扱い方

Canvasを使って処理することができます。 対象となる要素は2e6ea30cb94d73e51084e22b8300d9b3 

var invert = function(el){  var canvas = document.createElement('canvas');  var w = canvas.width = el.offsetWidth,        h = canvas.height = el.offsetHeight;  var ctx = canvas.getContext('2d');  ctx.drawImage(el, 0, 0);    // 对像素作处理  var imgData = ctx.getImageData(0, 0, w, h), d = imgData.data;  for (int i = 0, len = d.length; i < len; i+=4){    var r = d[i],         g = d[i+1],         b = d[i+2];    d[i] = 255 - r;    d[i+1] = 255 - g;    d[i+2] = 255 - b;  }  ctx.putImageData(imgData, 0, 0);  // 导出  var img = new Image();  img.src = ctx.toDataURL("image/*");  return img;};// 调用var img = invert(document.getElementById('invert'));document.body.appendChild(img);

 

六、饱和度滤镜(Saturate)                      

  暖暖的赶脚~~~!

  

  1. CSS3滤镜的实现

<style type="text/css">  .saturate{    /**  格式,filer: saturate(效果范围)     *  效果范围,取值范围>=0的数字或百分数,1为无效果,0为灰度图     */     -webkit-filter: saturate(2);     -moz-filter: saturate(2);     -o-filter: saturate(2);     -ms-filter: saturate(2);     filter: saturate(2);   }</style><div class="saturate" style="background:url(./mm.jpg)"></div>

 

  2. IE5.5~9的实现(待研究)

 

  3. FF和IE10+的实现 (待研究)

 

七、对比度滤镜(Contrast)                          

  

 

  1. CSS3滤镜的实现

<style type="text/css">  .contrast{    /**  格式,filer: contrast(效果范围)     *  效果范围,取值范围>=0的数字或百分数,1为无效果     */     -webkit-filter: contrast(2);     -moz-filter: contrast(2);     -o-filter: contrast(2);     -ms-filter: contrast(2);     filter: contrast(2);   }</style><div class="contrast" style="background:url(./mm.jpg)"></div>

 

  2. IE5.5~9的实现(待研究)

 

  3. FF和IE10+的实现 (待研究)

 

八、亮度滤镜(Brightness)                      

   曝光过度哦!

  

  1. CSS3滤镜的实现

<style type="text/css">  .brightness{    /**  格式,filer: brightness(效果范围)     *  效果范围,取值范围>=0的数字或百分数,1为无效果     */     -webkit-filter: brightness(2);     -moz-filter: brightness(2);     -o-filter: brightness(2);     -ms-filter: brightness(2);     filter: brightness(2);   }</style><div class="brightness" style="background:url(./mm.jpg)"></div>

 

  2. IE5.5~9的实现(待研究)

 

  3. FF和IE10+的实现 

   可使用Canvas作处理,下面是简单实现的代码,目标元素 c2acdfb22dec3d75308e2300803d7186 

// 原理:让图像变得更亮或更暗,算法将红色通道、绿色通道、蓝色通道,同时加上一个正值或负值。var brightness = function(el, delta){  var canvas = document.createElement('canvas');  var w = canvas.width = el.offsetWidth,        h = canvas.height = el.offsetHeight;  var ctx = canvas.getContext('2d');  ctx.drawImage(el, 0, 0);    // 对像素作处理  var imgData = ctx.getImageData(0, 0, w, h), d = imgData.data;  for (int i = 0, len = d.length; i < len; i+=4){    var r = d[i],         g = d[i+1],         b = d[i+2];    d[i] = r + delta;    d[i+1] = g + delta;    d[i+2] = b + delta;  }  ctx.putImageData(imgData, 0, 0);  // 导出  var img = new Image();  img.src = ctx.toDataURL("image/*");  return img;};// 调用var img = brightness(document.getElementById('brightness', 10));document.body.appendChild(img);

 

九、色相旋转滤镜(Hue Rotate)                        

  诡异的赶脚~~

  

 1. CSS3滤镜的实现

<style type="text/css">  .hue-rotate{    /**  格式,filer: hue-rotate(效果范围)     *  效果范围,取值范0deg~365deg,0(默认值)为无效果     */     -webkit-filter: hue-rotate(200deg);     -moz-filter: hue-rotate(200deg);     -o-filter: hue-rotate(200deg);     -ms-filter: hue-rotate(200deg);     filter: hue-rotate(200deg);   }</style><div class="hue-rotate" style="background:url(./mm.jpg)"></div>

 

  2. IE5.5~9的实现(待研究)

 

  3. FF和IE10+的实现 (待研究)

 

十、阴影滤镜(Drop Shadow)                      

   增加立体感!

  

 1. CSS3滤镜的实现

<style type="text/css">  .drop-shadow{    /**  格式,filer: drop-shadow(x-offset y-offset 阴影模糊半径 阴影颜色)     *  x-offset和y-offset为阴影的相对于元素左上角的位移距离;     * 注意:     *     1. 阴影的外观受border-radius样式的影响;     *     2. :after和:before等伪元素会继承阴影的效果。     */     -webkit-filter: drop-shadow(5px 5px 0px #333);     -moz-filter: drop-shadow(5px 5px 0px #333);     -o-filter: drop-shadow(5px 5px 0px #333);     -ms-filter: drop-shadow(5px 5px 0px #333);     filter: drop-shadow(5px 5px 0px #333);      // 圆角     border: solid 10px #e00;     -webkit-border-radius: 10px;  }</style><div class="drop-shadow" style="background:url(./mm.jpg)"></div>

 

  2. IE5.5~9的实现

      在真实的IE5.5~9下可使用IE滤镜(IE10+中文档模式为5.5~9则下列的IE滤镜无效):

/** * color为阴影颜色,形如"#ff00cc" * direction为角度,取值范围0,45,90,135,180,225,270,315 */filter:Shadow(Color=color,Direction=direction);/** * color为阴影颜色,形如"#ff00cc" * offx为水平偏移量 * offy为垂直偏移量 * positive为1或0 */filter:DropShadow(Color=color,OffX=offX,OffY=offY,Positive=positive);

 

       IE10+中文档模式为5.5~9时,则需要DIV+JS处理了。其中有一个jQuery插件:http://www.hintzmann.dk/testcenter/js/jquery/boxshadow/jquery.boxshadow.js

 

  3. FF和IE10+的实现 

      通过CSS3新特新Box-Shadow处理, box-shadow: 投影方式(inset) X轴偏移量(x-offset) Y轴偏移量(y-offset) 阴影模糊半径(blur-radius) 阴影扩展半径(spread-radius) 阴影颜色(color) 。

       投影方式(inset) ,可选属性(默认为外阴影),设置为inset时表示内阴影。

       X轴偏移量(x-offset) ,正值表示阴影位于对象的右边,负值表示阴影位于对象的左边。

       Y轴偏移量(y-offset) ,正值表示阴影位于对象的底部,负值表示阴影位于对象的顶部。

       阴影模糊半径(blur-radius) ,可选属性(默认为0,没有模糊效果),值范围>=0。

       阴影扩展半径(spread-radius) ,可选属性,正值表示阴影扩展,负值表示阴影缩小。

       颜色(color) ,可选属性(默认值又浏览器决定, Webkit内核的为透明)。

       注意:

    1. 投影的外观受到border-radius样式的影响;

            2. :after和:before等伪元素不继承投影的效果。

 

十一、总结                            

    上述内容仅仅对CSS3滤镜和FF、IE下的替代方案作简单的介绍,如有纰漏请各位指正,谢谢!

 

十二、参考                            

http://blog.csdn.net/hfahe/article/details/7104496

http://www.yyjcw.com/html/News/793.html

http://www.hackbase.com/tech/2014-11-10/69684.html

http://blog.csdn.net/lujunql/article/details/6260643

http://www.cnblogs.com/shiyangxt/archive/2008/11/16/1334633.html

http://www.adobe.com/cn/devnet/html5/articles/css3-basics.html

http://www.educity.cn/jianzhan/630820.html

http://www.526net.com/blog/qianduan/226.html

http://www.zhangxinxu.com/wordpress/2013/11/%E5%B0%8Ftip-%E4%BD%BF%E7%94%A8css%E5%B0%86%E5%9B%BE%E7%89%87%E8%BD%AC%E6%8D%A2%E6%88%90%E6%A8%A1%E7%B3%8A%E6%AF%9B%E7%8E%BB%E7%92%83%E6%95%88%E6%9E%9C/

SVG

(applying-svg-effects-to-html-content)——http://robert.ocallahan.org/2008/06/applying-svg-effects-to-html-content_04.html

Canvas

http://www.webclks.com/archives/829

http://www.w3school.com.cn/tags/canvas_getimagedata.asp

http://www.webhek.com/convert-canvas-image

如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!
  

 

分类:  CSS

 

 

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。