CSS3 skew傾斜、rotate旋轉動畫

来源:http://www.cnblogs.com/tangyifeng/archive/2016/03/06/5248024.html
-Advertisement-
Play Games

css3出現之前,我們實現一個對象的一組連續動畫需要通過JavaScript或Jquery編寫,腳本代碼較為複雜; 若需要實現傾斜、旋轉之類的動畫難度將更高(我還沒試過用JavaScript或Jquery如何實現),而且即使能實現估計花的時間代價及維護難度是很大的,很多時候只能依靠畫圖工具製作此類動


css3出現之前,我們實現一個對象的一組連續動畫需要通過JavaScript或Jquery編寫,腳本代碼較為複雜;

若需要實現傾斜、旋轉之類的動畫難度將更高(我還沒試過用JavaScript或Jquery如何實現),而且即使能實現估計花的時間代價及維護難度是很大的,很多時候只能依靠畫圖工具製作此類動畫文件;

有時候在想如果不用腳本語言,也不用畫圖工作製作動畫文件,就能在網頁上實現傾斜、旋轉之類的動畫效果多好。

 

最近擠出一些業餘時間學習CSS3,其中就包含很多動畫示例,花了點時間學習和整理

今天分享使用html+css3實現skew傾斜、rotate旋轉動畫,我們先看最終效果圖(我這裡為了演示效果,就用QQ屏幕截成多張圖片,然後製作成gif動畫給大家簡單展示下,效果不好請大家多多包涵)

圖1

具體步驟如下:

1、放置兩個div,一個作為容器(圖1中綠色背景部分 id="warp"),另一個作為動畫元素(圖1中黃色背景部分 id="box")

HTML代碼:

<div id="warp">
    <div id="box">WEB</div>
</div>

 

CSS代碼(設置容器及動畫元素預設樣式):

#warp {
    width: 320px;
    height: 320px;
    background: #6FDE82;
    margin: 20px auto;
}
            
#box {
    height: 40px;
    width: 40px;
    background: yellow;
    position: relative;
    top: 280px;
    left: 0;
                
}

註意:#box{position: relative;}是為該元素接下來做動畫做準備,因為動畫過程中需要改變其位置,故這裡使用相對定位

上述代碼為基本的html css,大家應該沒問題吧

此時效果如下:

2、使用CSS3 @keyframes自定義動畫

CSS代碼:

@keyframes move {
    0% {
    top: 280px;
    left: 0;
    transform: skewX(0deg);
    width: 40px;
    height: 40px;
    }
    20% {
    top: 0;
    left: 0;
    transform: skewX(50deg);
    width: 60px;
    height: 20px;
    background: red;
    }
    22% {
    top: 0;
    left: 0;
    transform: skewX(0deg);
    width: 40px;
    height: 40px;
    }
    30% {
    top: 0;
    left: 0;
    transform: skewX(0deg);
    width: 320px;
    height: 40px;
    }
    40% {
    top: 0;
    left: 280px;
    transform: skewX(0deg);
    width: 40px;
    height: 40px;
    background: green;
    }
    50% {
    top: 0;
    left: 280px;
    transform: skewX(0deg);
    width: 20px;
    height: 320px;
    }
    55% {
    top: 280px;
    left: 280px;
    transform: skewX(0deg);
    width: 40px;
    height: 40px;
    background: blue;
    }
    60% {
    transform: rotate(-90deg);
    transform-origin: left bottom;
    }
    65% {
    transform: rotate(-180deg);
    transform-origin: left top;
    }
}

代碼解析:

  1. css3自定義動畫需要使用@keyframes規則,具體請看CSS3 @keyframes 規則

  2. 設置動畫執行進度

    本示例中定義了 0% 20%  22% 30% 40% 50% 55% 60% 65%幾個動畫進度,

    百分比到底代表什麼意思?

    舉例說明:如果整個動畫執行10秒,那麼20%就代表當動畫執行到2秒時的效果。所以整個自定義動畫翻譯過來就是在每個執行進度中定義css樣式(比如 width,height,color等),這樣就形成了連貫的動畫效果。執行進度百分比根據實際情況可自行調整。

    註意:該執行進度並非一定要設置100%,如本示例中僅設置到65%,這就意味著剩下的35%就由css3自行完成動畫回歸到原始狀態(大家可以試試)

  3. 元素傾斜(元素變形)、旋轉(元素不變形)

    本示例中用到傾斜及旋轉動畫,傾斜使用skew(),參數為傾斜度數;旋轉使用rotate(),參數為旋轉度數;

    傾斜原理示意圖如下:

X軸逆時針轉為正;Y軸順時針轉為正;

舉例:

skew(30deg),在本示例中效果將成這樣

skew(-30deg),在本示例中效果將成這樣

Y軸的這裡就不舉例了,根據上述提示大家可自行測試效果

transform-origin,元素傾斜或轉動中心點,具體屬性值可看CSS3 transform-origin 屬性

這裡的中心點,指的是動畫元素的中心點,元素圍繞該點轉動或傾斜,該點坐標是不會改變的;個人覺得這裡需要頭腦中產生一些幾何圖形以便於理解,或者用一張紙(手機之類的物品)放在桌子上,用手固定該物品的某個點演示一下轉動效果,就明白了

3、執行自定義動畫

CSS代碼:

#box {
    height: 40px;
    width: 40px;
    background: yellow;
    position: relative;
    top: 280px;
    left: 0;
    animation: move 5s infinite;
}

 

代碼解析:

animation: move 5s infinite;

 

代表該自定義動畫完成耗時5秒,並且無限迴圈執行

animation屬性的詳細說明請看這裡CSS3 animation(動畫) 屬性

 


 

 

OK,上述步驟及原理大家都清楚了吧。本示例完整代碼如下,各位可以直接複製去執行看看效果

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>HTML5+CSS3 skew傾斜、rotate旋轉動畫</title>
        <style type="text/css">
            
            #warp {
                width: 320px;
                height: 320px;
                background: #6FDE82;
                margin: 20px auto;
            }
            
            #box {
                height: 40px;
                width: 40px;
                background: yellow;
                position: relative;
                top: 280px;
                left: 0;
                animation: move 5s infinite;
                
            }
            
            @keyframes move {
                0% {
                    top: 280px;
                    left: 0;
                    transform: skewX(0deg);
                    width: 40px;
                    height: 40px;
                }
                20% {
                    top: 0;
                    left: 0;
                    transform: skewX(50deg);
                    width: 60px;
                    height: 20px;
                    background: red;
                }
                22% {
                    top: 0;
                    left: 0;
                    transform: skewX(0deg);
                    width: 40px;
                    height: 40px;
                }
                30% {
                    top: 0;
                    left: 0;
                    transform: skewX(0deg);
                    width: 320px;
                    height: 40px;
                }
                40% {
                    top: 0;
                    left: 280px;
                    transform: skewX(0deg);
                    width: 40px;
                    height: 40px;
                    background: green;
                }
                50% {
                    top: 0;
                    left: 280px;
                    transform: skewX(0deg);
                    width: 20px;
                    height: 320px;
                }
                55% {
                    top: 280px;
                    left: 280px;
                    transform: skewX(0deg);
                    width: 40px;
                    height: 40px;
                    background: blue;
                }
                60% {
                    transform: rotate(-90deg);
                    transform-origin: left bottom;
                }
                65% {
                    transform: rotate(-180deg);
                    transform-origin: left top;
                }
            }
        </style>
    </head>

    <body>
        <div id="warp">
            <div id="box">WEB</div>
        </div>
    </body>

</html>

 

好了,今天分享就到這裡,以後還有更多喲,請大家一起來交流下,有興趣的朋友給我的文章評論下嘛

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本人沒有美工功底,學習html5的主要目的也不是為了做網頁設計, 而是學習其腳本語言javascript的編寫, 還有就是CSS. 於是在網上到處找html5開發的資料,html5的開發工具等等。 網上很多朋友都推薦有好幾款開發工具,我也試著下載安裝過有好幾款, 其中網友比較多使用的是dreamwe
  • 選擇器(selector)是CSS中很重要的概念,所有HTML語言中的標記都是通過不同的CSS選擇器進行控制的。用戶只需要通過選擇器對不同的HTML標簽進行控制,並賦予各種樣式聲明,即可實現各種效果。 1. * * { margin: 0; padding: 0; } 星號選擇器用於選取頁面中的所有
  • 近日在群里看到有個題目,拿出來寫寫, 要求: 用html,css,原生js實現如圖的效果,先正向輸出,然後逆向回溯,最後停留在完整的畫面。 首先: HTML部分代碼: <div id="result"></div> 就是這麼簡單一行搞定。 CSS代碼: #result{ width:550px; m
  • [1]定義 [2]方法 [3]相容
  • 1.原型鏈繼承:構造函數、原型和實例的關係:每個構造函數都有一個原型對象,原型對象都包含一個指向構造函數的指針,而實例都包含一個指向原型對象的內部指針。確認原型和實例之間的關係用instanceof。 原型鏈繼承缺點:字面量重寫原型會中斷關係,使用引用類型的原型,並且子類型還無法給超類型傳遞參數 f
  • [1]定義 [2]觸發條件 [3]作用
  • 一、表單標簽form 表單標簽用於申明表單,定義採集數據的範圍,即<form>包含的數據將被提交到資料庫上,包含了處理表單數據所用CGI程式的URL以及數據提交到伺服器的方法。 表單能夠包含 input 元素,比如文本欄位、覆選框、單選框、提交按鈕等等。還可以包含 menus、textarea、fi
  • 一、基本表格: 表格標記<table>,行標記<tr>,單元格標記<td> 基本語法: <table> <tr> <td>單元格內文字</td> <td>單元格內文字</td> ...... </tr> <tr> <td>單元格內文字</td> <td>單元格內文字</td> ...... </tr
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...