閱讀482 返回首頁    go 技術社區[雲棲]


使用PIE對IE進行CSS3兼容介紹和經驗總結

國外團隊開發的兼容插件,去年做項目時才發現,非常強大
主角:PIE.js , PIE.htc 兩種方法可以實現
官方網站:https://css3pie.com/

演示地址:https://css3pie.com/demos/gradient-patterns/


重要功能實現:

可以使 IE6、7、8 、9 實現類似 chrome 和 firefox

1. 更自然逼真的陰影效果,不再是以前那種醜陋的濾鏡效果。

2. 實現很自然的圓角效果

3. 實現部分 CSS3 的強悍效果,如 多背景圖,border-image,更強的背景漸變效果。

4. png 圖片透明效果


上個演示截圖先:



非常強大哦,基本上現在就隻用這個插件就可以搞定很多兼容問題了。

下麵簡單說下使用方法:

1. .htc 大概是瀏覽器補丁模式

css 中使用 behavior 來加載即可自動實現效果, 

#test {
    border-radius: 3px;
    behavior: url(/PIE.htc);
}

注意路徑,最好是直接使用 URL 的絕對路徑,


如果無法顯示可能是 服務器端不支持該類型文件格式的解析,可以在服務器配置文件的

mime.types文件的末尾增加一行:text/x-component htc,具體方式請自己 google 下吧

方法一的總結,我自己最早使用的也就是這個方法,發現時靈時不靈的,很鬱悶了好久,而且每個地方都要寫,超級麻煩,最後差點都放棄這個插件了,後來發現了方法二。

2. .js 方式,很靈活,簡單

下載並解壓縮 https://css3pie.com/download-latest

使用 PIE.js 文件

<script type="text/javascript" src="/PIE.js"></script>
<script type="text/javascript">
PIE.attach(document.getElementById("test"));
</script>

最好放在 body 的最下麵,這樣將其包含到 html 頁麵後既可以使用

另外推薦配合 jQuery 使用更方便

<script type="text/javascript" src="https://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/PIE.js"></script>
<script type="text/javascript">
(function($){
    $.pie = function(name, v){
        // 如果沒有加載 PIE 則直接終止
        if (! PIE) return false;
        // 是否 jQuery 對象或者選擇器名稱
        var obj = typeof name == 'object' ? name : $(name);
        // 指定運行插件的 IE 瀏覽器版本
        var version = 9;
        // 未指定則默認使用 ie10 以下全兼容模式
        if (typeof v != 'number' && v < 9) {
            version = v;
        }
        // 可對指定的多個 jQuery 對象進行樣式兼容
        if ($.browser.msie && obj.size() > 0) {
            if ($.browser.version*1 <= version*1) {
                obj.each(function(){
                    PIE.attach(this);
                });
            }
        }
    }
})(jQuery);
                                                                               
$(function(){
    $.pie('.for-ie6', 6);
                                                                               
    var objs = $('.for-ie, .test, .test1, .test2 .test3, #test4');
    $.pie(objs, 9);
});
</script>

差不多先就這樣了吧,具體的請參考官網上的代碼示例

最後說一下,根據我的經驗,

1. 使用圓角,陰影時,最好給其定義下樣式 position:relative; 否則可能遇到莫名其妙的層高問題導致生成的兼容樣式層看不到了;

2. 使用png透明圖片做背景時,如果沒有其它圓角、陰影等樣式,IE6下貌似是不會自動實現透明的,可以試試 -pie-background:url(); 的方式 或者添加一個 border-radius:0.5px; 樣式既可以實現背景透明

3. IE6 下 使用背景圖片透明時,盡量不要是用 css sprtes 方法,將很多圖片放一張圖,否則在兼容渲染的時候效率會非常差,因為圖片太大啦,盡量 IE6 使用單獨的png圖片進行透明渲染

4. 使用陰影時,如果有設置漸變透明可能會導致一片黑,目前解決辦法可以試試 使用半透明的 png 圖片做背景試試,這個我還沒測試過,調整 opacity 透明度 濾鏡貌似也不成功,算是完美中的不足吧。

5. 應該是不支持內陰影效果的,沒弄出來過,好遺憾

------------------------------------------------------------------------------------------------------------------------------------------------------------

08.23 補充:透明的方法,

直接對執行過PIE兼容的當前容器進行透明度是沒有用的,因為JS會新生成一個自定義標簽層疊在下麵,可以用下麵的步驟實現透明

1. CSS 添加

css3-container { filter:alpha(opacity=98); }

2. JS 添加

$('.test').prev('css3-container').css({'filter':'alpha(opacity=98)', 'opacity':0.98});






最後更新:2017-04-03 12:54:57

  上一篇:go Linux之VI搜索相關命令
  下一篇:go 手機瀏覽器無法獲取COOKIE的原因