天天看點

css3 變換transform 過渡transition 動畫 animation

1. 變換transform

通過 CSS3  transform轉換,我們能夠對元素進行移動、縮放、轉動、拉長或拉伸.
           

1.1 translate(tx,ty,tz) :将元素從原來的位置移動到指定位置

tx 表示向x軸移動的向量

ty 表示向y軸移動的向量

tz 表示向z軸移動的向量

1.2 2d縮放 scale(sx,sy,sz) :将元素根據中心原點進行縮放,

transform: scale3d(2,0.5,1);

sx x軸縮放的向量

sy y軸縮放的向量

sz z軸縮放的向量

1.3 rotate3d(x,y,z,a):指定需要進行旋轉的坐标軸

a 表示旋轉角度

子元素将保留其 3D 位置—立體方式。

transform-style: preserve-3d;

1.4 2d斜切skew(sx,sy,) 能夠讓元素傾斜顯示。它可以将一個對象以其中心位置圍繞着X軸和Y軸按照一定的角度傾斜。

1.5 transform-origin: 允許你改變被轉換元素的位置。預設是左上角。

2. 動畫 animation

動畫是CSS3中具有颠覆性的特征之一,可通過設定多個節點來精确控制一個或一組動畫,常用來實作複雜的動畫效果.
           

2.1.必要元素:

a、通過@keyframes指定動畫序列;自動補間動畫,确定兩個點,系統會自動計算中間過程。這兩個點就稱為關鍵幀。我們可以設定多個關鍵幀
 b、通過百分比将動畫序列分割成多個節點;
 c、在各節點中分别定義各屬性
 d、通過animation将動畫應用于相應元素;
           

2.2 animation樣式屬性

a 動畫的序列名稱 animation-name:move
b 動畫的持續  animation-duration : 1s
c 動畫的延時:animation-delay: 1s;
d 播放狀态:animation-play-state: paused|running;
e 播放速度:animation-timing-function: linear;
f 播放次數 反複:animation-iteration-count: 1;
g 動畫播放完結後的狀态:animation-fill-mode: forwards;
h 循環播放時,交叉動畫:animation-direction: alternate;
           

3 過渡transition

通過過渡transition,我們可以在不使用 Flash 動畫或 JavaScript 的情況下,當元素從一種樣式變換為另一種樣式時為元素添加效果. 要實作這一點,必須規定兩項内容:1.規定希望把效果添加到哪個 CSS 屬性上,2.規定效果的時長

3.1文法

transition: property duration timing-function delay;
           

3.1.1文法說明

transition 屬性是一個簡寫屬性,用于設定四個過渡屬性:transition-property |transition-duration |transition-timing-function |transition-delay

css3 變換transform 過渡transition 動畫 animation

3.1.1.2補充說明tansition-timing-function: 屬性規定過渡效果的速度曲線

css3 變換transform 過渡transition 動畫 animation
css3 變換transform 過渡transition 動畫 animation

案例

1.手風琴案例

<!DOCTYPE html>
<html >

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            background-color: rgb(69, 218, 114);
        }

        .menu {
            width: 200px;
            height: auto;
            margin: 100px auto;
        }

        .item>h3 {
            height: 40px;
            line-height: 40px;
            padding-left: 10px;
            background-color: rgb(28, 202, 202);
            color: rgb(64, 94, 15);
            border-bottom: 2px solid #ccc;
        }

        .itemBox {
            width: 100%;
            height: 0;
            overflow: hidden;
            transition-property: height;
            transition-duration: 2s;

        }

        .itemBox>ul {
            background-color: rgb(125, 96, 230);
            list-style: none;
            padding-left: 10px;
        }

        .item:hover>.itemBox {
            height: 83px;
        }
    </style>
</head>

<body>
    <div class="menu">
        <div class="item">
            <h3>市内新聞</h3>
            <div class="itemBox">
                <ul>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                </ul>
            </div>
        </div>
        <div class="item">
            <h3>省内新聞</h3>
            <div class="itemBox">
                <ul>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                </ul>
            </div>
        </div>
        <div class="item">
            <h3>國内新聞</h3>
            <div class="itemBox">
                <ul>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                </ul>
            </div>
        </div>
        <div class="item">
            <h3>國際新聞</h3>
            <div class="itemBox">
                <ul>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                    <li>深圳超市肉菜檔遭搶</li>
                </ul>
            </div>
        </div>
    </div>

</body>

</html>
           

最終效果

css3 變換transform 過渡transition 動畫 animation

2.正方體案例

<!DOCTYPE html>
<html >

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            background-color: rgb(123, 233, 233);
        }

        .box {
            width: 200px;
            height: 200px;
            margin: 200px auto;
            transform-style: preserve-3d;
            transform: rotate3d(1, 1, 1, 60deg);
            transition: transform 2s;
            animation-name: move;
            perspective-origin: 0px 0px;
            animation-duration: 3s;
            animation-iteration-count: infinite;
            animation-timing-function: linear;


        }

        @keyframes move {
            0% {
                transform: rotate3d(1, 1, 1, 0deg);
            }

            100% {
                transform: rotate3d(1, 1, 1, 360deg);
            }
        }

        .box>div {
            width: 200px;
            height: 200px;
            position: absolute;

        }

        div>img {
            width: 200px;
            height: 200px;

        }

        .font {
            transform: translateZ(100px);
            background-color: rgb(200, 0, 0);
        }

        .back {
            background-color: rgb(0, 200, 0);
            transform: translateZ(-100px) rotateY(180deg);
        }

        .left {
            background-color: rgb(0, 0, 200);
            transform: translate(100px) rotateY(-90deg);
        }

        .ringht {
            background-color: rgb(200, 200, 0);
            transform: translate(-100px) rotateY(90deg);
        }

        .top {
            background-color: rgb(0, 200, 200);
            transform: translateY(-100px) rotateX(90deg);
        }

        .button {
            background-color: rgb(200, 0, 200);
            transform: translateY(100px) rotateX(-90deg);
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="font"><img src="border1.png" alt=""></div>
        <div class="back"><img src="border1.png" alt=""></div>
        <div class="left"><img src="border1.png" alt=""></div>
        <div class="ringht"><img src="border1.png" alt=""></div>
        <div class="top"><img src="border1.png" alt=""></div>
        <div class="button"><img src="border1.png" alt=""></div>
    </div>
</body>

</html>
           

最終效果

css3 變換transform 過渡transition 動畫 animation