css3中的變形(transform)、過渡(transtion)、動畫(animation)

一.Transform(變形)

1. 2D轉換之translate位移

2D轉換:屬性:transform,屬性值:translate(X,Y),屬性值也可以分開書寫:
transform:translate(X,Y)
transform:translateX(n)
transform:translateY(n)

注意:
1.1 2D轉換中的移動translate是沿着X軸和Y軸進行移動的,對行內元素直接設置是不生效的;
1.2 translate改變元素在頁面中的位置,類似定位,但它參考自身,不是父級,不會影響到其他元素的位置,所以我們不用擔心元素脫離文檔流;所以使用最好用translate來移動,避免margin-top對其他盒子位置的影響
1.3 translate的取值可以是實際的像素值:translate(100px,200px),也可以是百分比:translate(50%,50%),如果設置的是百分比那麼移動的位置是盒子自身寬高的相對值,比如50%就是自己的寬高的一半

運用

讓盒子水平垂直居中

  1. 讓盒子水平垂直居中我們必須使用定位實現,
  2. 然後配合left: 50%; top: 50%; 和margin-left: 負自己的寬度的一半;margin-top: 負自己的高度的一半;
  3. 我們也可以將margin-left: -自己的寬度的一半;margin-top: -自己的高度的一半;
    設置爲<fonttransform: translate(-50%,-50%);
    注意:如果使用transform讓盒子水平垂直居中,盒子可以不用設置固定的寬高,當然一般情況下盒子都是有自己的固定寬高的;

2. 2D轉換之rotate – 旋轉

2.1 2D轉換之旋轉rotate
屬性:transform 屬性值: rotate(度數);
語法:transform: rotate (度數) ----- 度數的單位是deg ;
transform:rotate(360deg);就是順時針旋轉360度
注意

  1. rotate後面的都是,如果是正數就是順時針旋轉,如果是負數就是逆時針旋轉;
    2. rotate旋轉默認的中心點是元素的中心點

2.2 設置轉換中心點
transform-origin:X Y;

  1. 兩個參數X和Y之間是用空格隔開的;
  2. X和Y默認的轉換中心點取值爲(50% 50%);
  3. X和Y也可以設置實際的像素值或者方位名詞(top、bottom、left、right、center)

3. 2D轉換之scale

transform:scale(X,Y);

  1. 兩個參數X和Y之間是用逗號隔開的;
  2. X和Y的取值如果等於1表示原始大小,小於1表示縮小倍數,大於1表示放大倍數;
  3. X和Y如果只寫一個值表示兩個參數都是一樣;
  4. Scale縮放最大的優勢:可以設置轉換中心點縮放,默認是中心縮放,還不會影響其他盒子的顯示位置;

2D轉換的總結

 
1. 常見的2D 轉換效果:
        旋轉:rotate     
        位移:translate      
        縮放: scale
2. 旋轉默認進行順時針旋轉的;
3.如果三個屬性要同時存在,我們需要用空格將各個屬性隔開,位移屬性必須寫在第一位;不然旋轉會改變座標軸的位置,導致平移位置出錯
3. 行內元素不能設置transform屬性,想要設置必須先轉換顯示模式爲塊元素或者行內塊元素;

二、 Transtion(過渡)

  1. 過渡屬性:transition: 屬性 動畫時間 動畫形式 延時;
  2. 屬性: 可以用all表示所有的屬性,也可以單個屬性設置; 動畫時間:單位 s,動畫執行的時間;
  3. 速度:默認 ease先慢後快,最後慢速結束,勻速 linear,還有ease-in以慢速開始 , ease-out以慢速結束 , ease-in-out以慢速開始和結束;
  4. 延時: 單位s,即使是0也不能省略單位,延遲動畫開始執行的時間;

誰用寫在誰身上,配合僞類使用:hover

<!DOCTYPE html>
<html lang="en">
<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>
        a{
            text-decoration: none;
            color:#333;
        }
        .produce li{
            list-style: none;
            float: left;
            width: 234px;
            height: 280px;
            padding: 34px 0 20px;
            position: relative;
            transition: all .2s linear;
        }
        .produce li:hover .review{
            opacity: 1;
            height: 76px;
        }
        .produce li:hover {
            box-shadow: 0 15px 30px rgba(0,0,0,0.1);
            transform: translate(0, -2px);
        }
        h3{
            margin: 0 10px;
            font-size: 14px;
            font-weight: 400;
            text-align: center;
        }
        .desc {
        margin: 0 10px 10px;
        height: 18px;
        font-size: 12px;
        text-align: center;
        text-overflow: ellipsis;
        white-space: nowrap;
        overflow: hidden;
        color: #b0b0b0;
     }
     .price{
        font-size: 14px;
        margin: 0 10px 10px;
        text-align: center;
        color: #ff6700;
     }
     .price del {
    color: #b0b0b0;
    }
    
    .review{
    position: absolute;
    bottom: 0;
    left: 0;
    width: 234px;
    height: 0;
    overflow: hidden;
    font-size: 12px;
    background: #ff6700;
    opacity: 0;
    transition: all .2s linear;
    }
    .review a span {
    display: block;
    margin-bottom: 5px;
    color: #fff;
}
    </style>
</head>
<body>
    <div class="produce">
        <ul>
            <li>
              
                    <div class="produce_img">
                            <a href="#">
                        <img src="images/mi_produce.jpg" alt="">
                            </a>
                    </div>
                    <h3><a href="#">小米電視4A 43英寸青春版</a></h3>
                    <p class="desc">
                            全高清屏 / 人工智能語音
                    </p>
                    <p class="price">
                        <span>1499</span>元
                        <del>1699</del>
                    </p>
                    <div class="review">
                        <a href="#">
                        <span>一如既往的好,小米情懷</span>
                        <span> 來自於 驚喜 的評價 </span>
                    </a>
                    </div>
           
            </li>
        </ul>
    </div>
</body>
</html>

三、Animation(動畫)

CSS3動畫基本使用

  1. 第一步需要先定義動畫
    @keyframes 動畫名稱{
    0%{
    開始動畫
    }
    100%{
    結束動畫
    }
    }

  2. 第二定義了的動畫需要調用才能使用生效
    animation-name:動畫名稱;
    animation-duration:持續時間(單位是s);
    動畫定義的是也可以用from和to來定義,的等同於0%到100%;

  3. 動畫常用的屬性總結

屬性 描述
@keyframes 規定動畫。
animation 所有動畫屬性的簡寫屬性,除了 animation-play-state 屬性。
animation-name 規定 @keyframes 動畫的名稱。(必須有我們需要調用)。
animation-duration 規定動畫完成一個週期所花費的秒或毫秒。默認是 0。(必須有)。
animation-timing-function 規定動畫的速度曲線。默認是 “ease”。
animation-delay 規定動畫何時開始。默認是 0。必須寫單位s。
animation-iteration-count 規定動畫被播放的次數。默認是 1。循環是infinite;
animation-direction 規定動畫是否在下一週期逆向地播放。默認是 “normal”。 alternate逆向
animation-play-state 規定動畫是否正在運行或暫停。默認是 "running“,暫停是paused。必須配合鼠標經過使用
animation-fill-mode 規定對象動畫時間之外的狀態。保持現狀forwards,回到起始backwards。
  1. 動畫簡寫屬性
    animation: 動畫名稱 持續時間 運動曲線 何時開始(延時) 播放次數 是否反向播放 動畫結束後的狀態
    例如: animation: move 5s linear 2s infinite alternate;
    動畫簡寫屬性的時候,** 動畫名稱和動畫持續時間必須要書寫**,其他屬性需要就書寫不需要就省略,如果書寫動畫延時必須書寫單位s,哪怕是0s也要書寫;

  2. 速度曲線之steps步長
    步長:steps(具體的數字)
    animation: 動畫名稱 steps(10) 2s forwards;
    步長是設置了時間函數之間的間隔步數,規定元素在多少步完成動畫;

<!DOCTYPE html>
<html lang="en">
<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>animation之steps</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        .content{
            width: 0px;
            overflow: hidden;
            white-space: nowrap;
            font-size: 20px;
            animation: step 2s steps(6) forwards;
        }
        @keyframes step{
            0%{}
            100%{
                width: 120px;
                background-color: pink;
            }
        }
    </style>
</head>
<body>
      <div class="content">
          我在這裏等你
      </div>
</body>
</html>
一個字大小爲20,分6步出現,width變爲120px
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章