CSS3無前綴腳本prefixfree.js與Animatable使用介紹

要求

    • 必備知識

      本文要求基本瞭解 JAVASCRIPT 和 和 CSS3 基本知識。javascript

    • 運行環境

      桌面端:IE9 +,Opera 10+,火狐3.5 +,Safari 4+和Chrome瀏覽器;移動端:移動Safari,Android瀏覽器,Chrome瀏覽器和Opera Mobile。css

    • 演示地址

      演示地址已經到文章中給出了,本身找找看喲。html


現代瀏覽器基本支持CSS3,可是一些舊版本的瀏覽器仍是須要添加前綴的。像box-shadow, border-radius這類屬性,目前較新版本的瀏覽器都是不須要前綴的(包括IE9),可是,有些CSS3屬性,例如漸變,前綴少不了,每次都須要像蓋高樓同樣堆疊CSS3代碼,以下圖:java

.bg {
        width:400px;
        height:177px;
        margin:70px auto 0;
        padding-top:73px;
        position:relative;
        background-image:-webkit-linear-gradient(top,rgb(255,255,255),rgb(242,242,242));
        background-image:-moz-linear-gradient(top,rgb(255,255,255),rgb(242,242,242));
        background-image:-ms-linear-gradient(top,rgb(255,255,255),rgb(242,242,242));
        background-image:-o-linear-gradient(top,rgb(255,255,255),rgb(242,242,242));
        background-image:linear-gradient(top,rgb(255,255,255),rgb(242,242,242));
        box-shadow:0 3px 3px rgba(21,62,78,0.8);
}

代碼效果以下,點擊這裏查看演示:css3

2014-03-28_235950

 

那麼如何省去CSS3中前綴「-moz」、「-webkit」、「-o」、「-ms」呢,須要使用prefixfree腳原本實現。git

一,下面說說如何使用prefixfree腳本:

下面是官方網站截圖:github

2014-03-29_000711

 

那麼如何使用該腳本呢?下面是截至官網的兩個DEMO,使用環境爲Chrome,因此建議下載最新版的Chrome瀏覽器對演示地址進行瀏覽,但願能對使用提供幫助:web

有前綴官方DEMO,未使用prefixfree腳本:api

@-webkit-keyframes rotate {
    from { -webkit-transform: rotate(15deg) }
    to { -webkit-transform: rotate(375deg) }    
}

.download {
   position: absolute;
   top: 2em;
   left: 1em;
   width: 6em;
   height: 6em;
   padding: 1em 0;
   background: #80A060;
   background-image: linear-gradient(90deg, transparent, rgba(10,0,0,.3)),linear-gradient(transparent, transparent);
   color: white;
   line-height: 1;
   font-size: 140%;
   text-align: center;
   text-decoration: initial;
   text-shadow: .08em .08em .2em rgba(0,0,0,.6);
   border-radius: 50%;
   box-shadow: .1em .2em .4em -.2em black;
   box-sizing: border-box;
   -webkit-transform: rotate(15deg);
   -webkit-animation: rotate;
   cursor: -webkit-zoom-in;
}

:read-write {}

在Chrome中的效果以下圖, 如你使用的是最新版的Chrome瀏覽器也能夠點擊這裏,查看演示頁面:數組

2014-03-29_001446

 

 

 

 

無前綴官方DEMO,使用prefixfree.js腳本後能達到贊成的效果:

<script src="prefixfree.min.js" type="text/javascript"></script><!--引入prefixfree腳本-->
<style>
@keyframes rotate {
    from { transform: rotate(15deg) }
    to { transform: rotate(375deg) }    
}

.download {
   position: absolute;
   top: 2em;
   left:1em;
   width: 6em;
   height: 6em;
   padding: 1em 0;
   background: #80A060;
   background-image: linear-gradient(90deg, transparent, rgba(10,0,0,.3)),linear-gradient(transparent, transparent);
   color: white;
   line-height: 1;
   font-size: 140%;
   text-align: center;
   text-decoration: initial;
   text-shadow: .08em .08em .2em rgba(0,0,0,.6);
   border-radius: 50%;
   box-shadow: .1em .2em .4em -.2em black;
   box-sizing: border-box;
   transform: rotate(15deg);
   animation: rotate;
   cursor: zoom-in;
}

:read-write {}
</style>

在Chrome中的效果以下圖, 能達到使用前綴一樣的效果,如你使用的是最新版的Chrome瀏覽器也能夠點擊這裏,查看演示頁面:

2014-03-29_001446

 

 

 

二,下面介紹Animatable 動畫效果應用,該應用需與prefixfree腳本一塊兒使用:

話很少說直接上截圖吧:

2014-03-29_002830

 

是否是有種百花齊放的感受呢!

下面是官方演示地址:

http://leaverou.github.io/animatable/

如網頁響應慢的話,能夠查看下面的演示的:

http://www.li-cheng.cn/demo/animatable-master/index.html

 

Animatable項目頁面動畫效果的批量實現原理以下:
1. 遍歷頁面上每一個含有data-property屬性的a元素;
2. 根據dom元素上的data-property值,form值和to值組裝無前綴的CSS3 animate樣式代碼;
3. 以style節點元素的形式將組裝的CSS代碼append到head標籤中,因頁面調用了prefixfree.js腳本,因而各個瀏覽器下的animate CSS被渲染,效果呈現。

 

如下是源碼介紹,:

 

function $(expr, con) { return (con || document).querySelector(expr); }
function $$(expr, con) { return [].slice.call((con || document).querySelectorAll(expr)); }

var css = [];


//遍歷頁面中 a標籤中含有 data-property 屬性的全部元素
$$('a[data-property]').forEach(function(el, i){
    var property = el.getAttribute('data-property'),
        from = el.getAttribute('data-from'),
        to = el.getAttribute('data-to');
    
    var id = property, i = 1;
    
    while(document.getElementById(id)) {
        id = property + '/' + ++i;
    }
    
    el.id = id;
    el.href = '#' + id;
    
    el.title = property + ' from ' + from + ' to ' + to;
    
    var selector = '#' + id.replace(/([^\w-])/g, '\\$1'),
        ident = id.replace(/([^\w-])/g, '-');
    
    //建立css3樣式代碼,push到css數組中
    css.push('@keyframes ' + ident + '{',
            'from{' + property + ':' + from + '}',
            'to{' + property + ':' + to + '}}',
            selector + ' { animation: ' + ident + ' 1s infinite alternate;' + property + ':' + from + '}');
});

var style = document.createElement('style');
style.textContent = css.join('\r\n');
StyleFix.styleElement(style);
document.head.appendChild(style);  //在頁面中添加 style標籤 

setTimeout(onhashchange = function() {
    var target = location.hash? $(location.hash.replace(/([^\w-#])/g, '\\$1')) : null;
    
    if(!target) {
        document.body.className = 'home';
        return;
    }
    
    document.body.className = 'in-page';
    
    var info = $('#info'),
        previous = target.previousElementSibling,
        next = target.nextElementSibling,
        author = target.getAttribute('data-author') || 'leaverou';
    
    $('h1', info).innerHTML = target.getAttribute('data-property');
    $('dd:first-of-type', info).innerHTML = target.getAttribute('data-from');
    $('dd:nth-of-type(2)', info).innerHTML = target.getAttribute('data-to');
    $('dd:nth-of-type(3)', info).innerHTML = '<a href="http://twitter.com/' + author + '" target="_blank"><img src="http://twitter.com//api/users/profile_image?screen_name=' + author + '&size=mini"/>@' + author + '</a>';
    
    $('a[title="Previous"]', info).setAttribute('href', '#' + (previous? previous.id : ''));
    $('a[title="Next"]', info).setAttribute('href', '#' + (next? next.id : ''));
    
    setTimeout(function() {
        if(2*target.offsetLeft + target.offsetWidth < innerWidth) {
            info.style.left = target.offsetLeft + target.offsetWidth + 30 + 'px';
        }
        else {
            info.style.left = target.offsetLeft - info.offsetWidth - 30 + 'px';
        }

        info.style.top = target.offsetTop + 'px';
    }, 10);
}, 50);

onkeyup = function(evt) {
    var key = evt.keyCode;
    
    switch (key) {
        case 27:
            location.hash = '';
            break;
        case 37:
        case 38:
            location.hash = location.hash? $('a[title="Previous"]').hash : $('a[data-property]:last-child').hash;
            break;
        case 39:
        case 40:
            location.hash = location.hash? $('a[title="Next"]').hash : $('a[data-property]:first-child').hash;
    }
};

 

文章參考了以下地址,有興趣的能夠點擊查看:

http://www.zhangxinxu.com/wordpress/2011/11/css3-prefixfree-js-animatable/

prefixfree官方地址:

http://leaverou.github.io/prefixfree/

Animatable官方地址:

http://leaverou.github.io/animatable/

 

如以上文章或連接對你有幫助的話,別忘了在文章結尾處輕輕點擊一下 「還不錯」按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章。

 

做者: Li-Cheng
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。
相關文章
相關標籤/搜索